0
JavaParser로 놀고 있는데, 모든 System.out.println()을 필터링하는 방법을 찾고 있습니다. 나는 인수와 일치하는 새로운 된 methodStatement 매번를 만들 필요가 있기 때문에JavaParser comparison
나는 내가 그 솔루션을 좋아하지 않아 다음 방법
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 만들고 입력 된 매개 변수를 상수와 비교하고 싶습니다.
private static final ExpressionStmt systemOutExpr = (ExpressionStmt)JavaParser.parseStatement("System.out.println();");
private boolean isSystemOut(ExpressionStmt n){
return n.match(systemOutExpr).withArgs(Matchers.any());
}
등호 방법 이외의 JParser에 문을 비교하는 방법이 있나요
같은 뭔가?