Changed root node from (AST)UserClass to (AST)Compilation

This commit is contained in:
David Renz
2016-03-29 16:18:01 +02:00
parent 98899afca1
commit 0b81c72f40
4 changed files with 37 additions and 14 deletions

View File

@ -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);
}

View File

@ -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;
}
}
}

View File

@ -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);

View File

@ -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) {