!include once #1025810 // JavaParser !include once #1025812 // javaParseCompilationUnit import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.body.MethodDeclaration; import com.github.javaparser.ast.body.EnumDeclaration; import com.github.javaparser.ast.stmt.LocalClassDeclarationStmt; import com.github.javaparser.printer.*; static S javaParser_makeAllPublic(S src, O... _) { CompilationUnit cu = javaParseCompilationUnit(src); new PrettyPrinterConfiguration ppconf; ppconf.setIndentSize(2); ppconf.setIndentType(PrettyPrinterConfiguration.IndentType.SPACES); ppconf.setPrintComments(false); new javaParser_makeAllPublic_Visitor visitor; visitor.notTopLevelClassDecl = boolOptPar notTopLevelClassDecl(_); visitor.visit(cu, null); ret cu.toString(ppconf); } sclass javaParser_makeAllPublic_Visitor extends VoidVisitorAdapter { bool notTopLevelClassDecl; // don't make top-level class declaration public delegate Modifier to com.github.javaparser.ast. void makePublic(NodeList modifiers) { // XXX: does this work? modifiers.remove(Modifier.privateModifier()); modifiers.remove(Modifier.protectedModifier()); if (!modifiers.contains(Modifier.publicModifier())) modifiers.add(Modifier.publicModifier()); } public void visit(ClassOrInterfaceDeclaration n, O arg) { Node parent = n.getParentNode().get(); if (!(parent instanceof LocalClassDeclarationStmt || parent instanceof CompilationUnit && neq(n.getName().asString(), "main"))) if (notTopLevelClassDecl) notTopLevelClassDecl = false; else makePublic(n.getModifiers()); super.visit(n, arg); } @Override public void visit(EnumDeclaration n, O arg) { makePublic(n.getModifiers()); super.visit(n, arg); } public void visit(FieldDeclaration n, O arg) { makePublic(n.getModifiers()); super.visit(n, arg); } public void visit(ConstructorDeclaration n, O arg) { Node parent = n.getParentNode().get(); if (!parent instanceof EnumDeclaration) makePublic(n.getModifiers()); super.visit(n, arg); } public void visit(MethodDeclaration n, O arg) { NodeList m = n.getModifiers(); //print("Method found: " + n.getName() + " with modifiers: " + m + ", position: " + n.getRange()->begin); if (!m.contains(Modifier.privateModifier())) { makePublic(m); } /*else if (!m.contains(Modifier.staticModifier()) && !m.contains(Modifier.finalModifier())) m.add(Modifier.finalModifier());*/ super.visit(n, arg); } }