Я играю с JavaParser, и я ищу способ фильтровать все System.out.println();Сравнение JavaParser
Я могу сделать это с помощью следующих методов
public class SystemOutFilter extends ModifierVisitorAdapter{
@Override
public Node visit(ExpressionStmt n, Object arg) {
if(isSystemOut(n)){
return null;
}
return super.visit(n, arg);
}
private boolean isSystemOut(ExpressionStmt n){
if(n.getExpression() instanceof MethodCallExpr){
MethodCallExpr methodExpr = (MethodCallExpr) n.getExpression();
if(methodExpr.getScope() instanceof FieldAccessExpr){
FieldAccessExpr fieldExpr = (FieldAccessExpr) methodExpr.getScope();
NameExpr nameExpr = (NameExpr) fieldExpr.getScope();
if(nameExpr.getName().equals("System") && fieldExpr.getField().equals("out")){
return true;
};
}
}
return false;
}
private boolean isSystemOut_1(ExpressionStmt n){
NameExpr clazz = new NameExpr("System");
FieldAccessExpr field = new FieldAccessExpr(clazz, "out");
MethodCallExpr method = new MethodCallExpr(field, "println");
if(n.getExpression() instanceof MethodCallExpr){
MethodCallExpr inputExpr = (MethodCallExpr) n.getExpression();
if(inputExpr.getName().equals(method.getName()) && inputExpr.getScope().equals(method.getScope()))
return true;
}
return false;
}
private boolean isSystemOut_2(ExpressionStmt n) {
NameExpr clazz = new NameExpr("System");
FieldAccessExpr field = new FieldAccessExpr(clazz, "out");
MethodCallExpr method = new MethodCallExpr(field, "println");
if(n.getExpression() instanceof MethodCallExpr){
MethodCallExpr inputExpr = (MethodCallExpr) n.getExpression();
method.setArgs(inputExpr.getArgs());
return inputExpr.equals(method);
}
return false;
}
private boolean isSystemOut_3(ExpressionStmt n){
try{
Statement expr = JavaParser.parseStatement("System.out.println();");
if(expr instanceof ExpressionStmt) {
ExpressionStmt methodStmt = (ExpressionStmt) expr;
if (n.getExpression() instanceof MethodCallExpr) {
MethodCallExpr inputExpr = (MethodCallExpr) n.getExpression();
MethodCallExpr methodExpr = (MethodCallExpr) methodStmt.getExpression();
methodExpr.setArgs(inputExpr.getArgs());
return inputExpr.equals(methodExpr);
}
}
}catch(ParseException pe){
pe.printStackTrace();
}
return false;
}
}
Мне не нравится это решение, так как мне нужно, чтобы создать новый MethodExpression каждый раз, чтобы соответствовать аргументы. Я хотел бы создать одно статическое окончательное выражение MethodExpression и сравнить входные параметры с константой.
Что-то вроде
private static final ExpressionStmt systemOutExpr = (ExpressionStmt)JavaParser.parseStatement("System.out.println();");
private boolean isSystemOut(ExpressionStmt n){
return n.match(systemOutExpr).withArgs(Matchers.any());
}
Есть ли способ, чтобы сравнить заявления в JParser вне методов Equals?