Skip to content

Instantly share code, notes, and snippets.

@lihongjie0209
Created December 4, 2019 00:33
Show Gist options
  • Save lihongjie0209/30d9f35968212bb97411d33ae11cbfdd to your computer and use it in GitHub Desktop.
Save lihongjie0209/30d9f35968212bb97411d33ae11cbfdd to your computer and use it in GitHub Desktop.
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