Changed root node from (AST)UserClass to (AST)Compilation
This commit is contained in:
@ -10,10 +10,16 @@ import apex.jorje.semantic.ast.compilation.Compilation;
|
||||
import net.sourceforge.pmd.lang.ast.RootNode;
|
||||
|
||||
public class ASTCompilation extends AbstractApexNode<Compilation> implements RootNode {
|
||||
public ASTCompilation(Compilation classOrInterface) {
|
||||
|
||||
public ASTCompilation(Compilation classOrInterface) {
|
||||
super(classOrInterface);
|
||||
}
|
||||
|
||||
/**
|
||||
* Accept the visitor. Note: This needs to be in each concrete node class,
|
||||
* as otherwise the visitor won't work - as java resolves the type "this" at
|
||||
* compile time.
|
||||
*/
|
||||
public Object jjtAccept(ApexParserVisitor visitor, Object data) {
|
||||
return visitor.visit(this, data);
|
||||
}
|
||||
|
@ -13,7 +13,10 @@ import net.sourceforge.pmd.lang.ast.ParseException;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import apex.jorje.semantic.ast.compilation.Compilation;
|
||||
import apex.jorje.semantic.ast.compilation.UserClass;
|
||||
import apex.jorje.semantic.ast.compilation.UserEnum;
|
||||
import apex.jorje.semantic.ast.compilation.UserInterface;
|
||||
import apex.jorje.semantic.ast.visitor.AdditionalPassScope;
|
||||
import apex.jorje.semantic.ast.visitor.AstVisitor;
|
||||
|
||||
@ -31,19 +34,19 @@ public class ApexParser {
|
||||
}
|
||||
}
|
||||
|
||||
public UserClass parseApex(final String sourceCode) throws ParseException {
|
||||
public Compilation parseApex(final String sourceCode) throws ParseException {
|
||||
|
||||
TopLevelVisitor visitor = new TopLevelVisitor();
|
||||
CompilerService.INSTANCE.visitAstFromString(sourceCode, visitor);
|
||||
|
||||
UserClass astRoot = visitor.getTopLevel();
|
||||
Compilation astRoot = visitor.getTopLevel();
|
||||
return astRoot;
|
||||
}
|
||||
|
||||
public ApexNode<UserClass> parse(final Reader reader) {
|
||||
public ApexNode<Compilation> parse(final Reader reader) {
|
||||
try {
|
||||
final String sourceCode = IOUtils.toString(reader);
|
||||
final UserClass astRoot = parseApex(sourceCode);
|
||||
final Compilation astRoot = parseApex(sourceCode);
|
||||
final ApexTreeBuilder treeBuilder = new ApexTreeBuilder();
|
||||
suppressMap = new HashMap<>();
|
||||
|
||||
@ -51,7 +54,7 @@ public class ApexParser {
|
||||
throw new ParseException("Couldn't parse the source - there is not root node - Syntax Error??");
|
||||
}
|
||||
|
||||
ApexNode<UserClass> tree = treeBuilder.build(astRoot);
|
||||
ApexNode<Compilation> tree = treeBuilder.build(astRoot);
|
||||
return tree;
|
||||
} catch (IOException e) {
|
||||
throw new ParseException(e);
|
||||
@ -63,9 +66,9 @@ public class ApexParser {
|
||||
}
|
||||
|
||||
private class TopLevelVisitor extends AstVisitor<AdditionalPassScope> {
|
||||
UserClass topLevel;
|
||||
Compilation topLevel;
|
||||
|
||||
public UserClass getTopLevel() {
|
||||
public Compilation getTopLevel() {
|
||||
return topLevel;
|
||||
}
|
||||
|
||||
@ -73,5 +76,15 @@ public class ApexParser {
|
||||
public void visitEnd(UserClass node, AdditionalPassScope scope) {
|
||||
topLevel = node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd(UserEnum node, AdditionalPassScope scope) {
|
||||
topLevel = node;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitEnd(UserInterface node, AdditionalPassScope scope) {
|
||||
topLevel = node;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import java.util.Stack;
|
||||
|
||||
import apex.jorje.semantic.ast.AstNode;
|
||||
import apex.jorje.semantic.ast.compilation.AnonymousClass;
|
||||
import apex.jorje.semantic.ast.compilation.Compilation;
|
||||
import apex.jorje.semantic.ast.compilation.UserClass;
|
||||
import apex.jorje.semantic.ast.compilation.UserClassMethods;
|
||||
import apex.jorje.semantic.ast.compilation.UserEnum;
|
||||
@ -112,6 +113,7 @@ public final class ApexTreeBuilder extends AstVisitor<AdditionalPassScope> {
|
||||
register(BridgeMethodCreator.class, ASTBridgeMethodCreator.class);
|
||||
register(CatchBlockStatement.class, ASTCatchBlockStatement.class);
|
||||
register(ClassRefExpression.class, ASTClassRefExpression.class);
|
||||
register(Compilation.class, ASTCompilation.class);
|
||||
register(ContinueStatement.class, ASTContinueStatement.class);
|
||||
register(DmlDeleteStatement.class, ASTDmlDeleteStatement.class);
|
||||
register(DmlInsertStatement.class, ASTDmlInsertStatement.class);
|
||||
|
@ -17,6 +17,7 @@ import org.apache.commons.io.FileUtils;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import apex.jorje.semantic.ast.compilation.Compilation;
|
||||
import net.sourceforge.pmd.lang.apex.ApexParserOptions;
|
||||
import net.sourceforge.pmd.lang.ast.Node;
|
||||
|
||||
@ -31,8 +32,8 @@ public class ApexParserTest {
|
||||
+ " \n" + " }\n" + "}";
|
||||
|
||||
// Exercise
|
||||
ASTUserClass rootNode = parse(code);
|
||||
// dumpNode(rootNode);
|
||||
ApexNode<Compilation> rootNode = parse(code);
|
||||
dumpNode(rootNode);
|
||||
|
||||
// Verify
|
||||
List<ASTMethod> methods = rootNode.findDescendantsOfType(ASTMethod.class);
|
||||
@ -46,9 +47,10 @@ public class ApexParserTest {
|
||||
File[] fList = directory.listFiles();
|
||||
|
||||
for (File file : fList) {
|
||||
if (file.isFile()) {
|
||||
if (file.isFile() && file.getName().endsWith(".cls")) {
|
||||
String sourceCode = FileUtils.readFileToString(file);
|
||||
ASTUserClass rootNode = parse(sourceCode);
|
||||
ApexNode<Compilation> rootNode = parse(sourceCode);
|
||||
dumpNode(rootNode);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
@ -59,10 +61,10 @@ public class ApexParserTest {
|
||||
|
||||
// TEST HELPER
|
||||
|
||||
private ASTUserClass parse(String code) {
|
||||
private ApexNode<Compilation> parse(String code) {
|
||||
ApexParser parser = new ApexParser(new ApexParserOptions());
|
||||
Reader reader = new StringReader(code);
|
||||
return (ASTUserClass) parser.parse(reader);
|
||||
return parser.parse(reader);
|
||||
}
|
||||
|
||||
private void dumpNode(Node node) {
|
||||
|
Reference in New Issue
Block a user