Created
December 4, 2019 00:33
-
-
Save lihongjie0209/30d9f35968212bb97411d33ae11cbfdd to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import com.github.javaparser.StaticJavaParser; | |
import com.github.javaparser.ast.CompilationUnit; | |
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; | |
import com.github.javaparser.ast.body.ConstructorDeclaration; | |
import com.github.javaparser.ast.body.MethodDeclaration; | |
import com.github.javaparser.ast.expr.MarkerAnnotationExpr; | |
import com.github.javaparser.ast.expr.NormalAnnotationExpr; | |
import com.github.javaparser.ast.visitor.ModifierVisitor; | |
import com.github.javaparser.ast.visitor.Visitable; | |
import com.github.javaparser.printer.PrettyPrinterConfiguration; | |
public class CleanPoJo { | |
public String clean(String code) { | |
CompilationUnit unit = StaticJavaParser.parse(code); | |
cleanMethodDeclaration(unit); | |
cleanConstructorDeclaration(unit); | |
cleanAnnotation(unit); | |
addLombokOnClassOrInterfaceDeclaration(unit); | |
PrettyPrinterConfiguration configuration = new PrettyPrinterConfiguration(); | |
configuration.setEndOfLineCharacter("\n"); | |
configuration.setOrderImports(true); | |
return unit.toString(configuration); | |
} | |
private void cleanAnnotation(CompilationUnit unit) { | |
unit.accept(new ModifierVisitor<Object>() { | |
@Override | |
public Visitable visit(NormalAnnotationExpr n, Object arg) { | |
return null; | |
} | |
@Override | |
public Visitable visit(MarkerAnnotationExpr n, Object arg) { | |
return null; | |
} | |
}, null); | |
} | |
private void addLombokOnClassOrInterfaceDeclaration(CompilationUnit unit) { | |
unit.accept(new ModifierVisitor<Object>() { | |
@Override | |
public Visitable visit(ClassOrInterfaceDeclaration n, Object arg) { | |
if (!n.getAnnotationByClass(lombok.Data.class) | |
.isPresent()) { | |
n.addAndGetAnnotation(lombok.Data.class); | |
} | |
if (!n.getAnnotationByClass(lombok.AllArgsConstructor.class) | |
.isPresent()) { | |
n.addAndGetAnnotation(lombok.AllArgsConstructor.class); | |
} | |
if (!n.getAnnotationByClass(lombok.NoArgsConstructor.class) | |
.isPresent()) { | |
n.addAndGetAnnotation(lombok.NoArgsConstructor.class); | |
} | |
if (!n.getAnnotationByClass(lombok.experimental.FieldNameConstants.class) | |
.isPresent()) { | |
n.addAndGetAnnotation(lombok.experimental.FieldNameConstants.class); | |
} | |
return super.visit(n, arg); | |
} | |
}, null); | |
} | |
private void cleanConstructorDeclaration(CompilationUnit unit) { | |
unit.accept(new ModifierVisitor<Object>() { | |
@Override | |
public Visitable visit(final ConstructorDeclaration n, final Object arg) { | |
return null; | |
} | |
}, null); | |
} | |
private void cleanMethodDeclaration(CompilationUnit unit) { | |
unit.accept(new ModifierVisitor<Object>() { | |
@Override | |
public Visitable visit(MethodDeclaration n, Object arg) { | |
return null; | |
} | |
}, null); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment