Skip to content

Commit

Permalink
resolving enum constant declarations
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Nov 22, 2017
1 parent ad244de commit e5abd78
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 19 deletions.
Expand Up @@ -13,9 +13,7 @@
import com.github.javaparser.symbolsolver.javaparser.Navigator;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserConstructorDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserFieldDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.*;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;

import java.util.Optional;
Expand Down Expand Up @@ -64,8 +62,10 @@ public <T> T resolveDeclaration(Node node, Class<T> resultClass) {
}
if (node instanceof EnumConstantDeclaration) {
ResolvedEnumDeclaration enumDeclaration = Navigator.findAncestor(node, EnumDeclaration.class).get().resolve().asEnum();
// TODO look among the members
throw new UnsupportedOperationException();
ResolvedEnumConstantDeclaration resolved = enumDeclaration.getEnumConstants().stream().filter(c -> ((JavaParserEnumConstantDeclaration)c).getWrappedNode() == node).findFirst().get();
if (resultClass.isInstance(resolved)) {
return resultClass.cast(resolved);
}
}
if (node instanceof ConstructorDeclaration) {
ConstructorDeclaration constructorDeclaration = (ConstructorDeclaration)node;
Expand All @@ -84,10 +84,9 @@ public <T> T resolveDeclaration(Node node, Class<T> resultClass) {
}
if (node instanceof AnnotationMemberDeclaration) {
ResolvedAnnotationDeclaration annotationDeclaration = Navigator.findAncestor(node, AnnotationDeclaration.class).get().resolve();
AnnotationMemberDeclaration memberDeclaration = (AnnotationMemberDeclaration)node;
Optional<ResolvedAnnotationMemberDeclaration> resolved = annotationDeclaration.getAnnotationMembers().stream().filter(m -> m.getName().equals(memberDeclaration.getNameAsString())).findFirst();
if (resolved.isPresent() && resultClass.isInstance(resolved.get())) {
return resultClass.cast(resolved.get());
ResolvedAnnotationMemberDeclaration resolved = annotationDeclaration.getAnnotationMembers().stream().filter(c -> ((JavaParserAnnotationMemberDeclaration)c).getWrappedNode() == node).findFirst().get();
if (resultClass.isInstance(resolved)) {
return resultClass.cast(resolved);
}
}
if (node instanceof FieldDeclaration) {
Expand Down
Expand Up @@ -14,6 +14,10 @@ public class JavaParserAnnotationMemberDeclaration implements ResolvedAnnotation
private com.github.javaparser.ast.body.AnnotationMemberDeclaration wrappedNode;
private TypeSolver typeSolver;

public AnnotationMemberDeclaration getWrappedNode() {
return wrappedNode;
}

public JavaParserAnnotationMemberDeclaration(AnnotationMemberDeclaration wrappedNode, TypeSolver typeSolver) {
this.wrappedNode = wrappedNode;
this.typeSolver = typeSolver;
Expand Down
Expand Up @@ -107,16 +107,16 @@ public void enumDeclarationResolve() throws IOException {
ResolvedEnumDeclaration resolvedDeclaration = declaration.resolve();
}

// @Test
// public void enumConstantDeclarationResolve() throws IOException {
// File f = adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-core/com/github/javaparser/ast/AccessSpecifier.java"));
// CompilationUnit cu = parseWithSymbolResolution(f);
// EnumDeclaration enumDeclaration = (EnumDeclaration) cu.getType(0);
// assertEquals("AccessSpecifier", enumDeclaration.getNameAsString());
// EnumConstantDeclaration declaration = enumDeclaration.getEntry(0);
// assertEquals("PUBLIC", declaration.getNameAsString());
// ResolvedEnumConstantDeclaration resolvedDeclaration = declaration.resolve();
// }
@Test
public void enumConstantDeclarationResolve() throws IOException {
File f = adaptPath(new File("src/test/resources/javaparser_new_src/javaparser-core/com/github/javaparser/ast/AccessSpecifier.java"));
CompilationUnit cu = parseWithSymbolResolution(f);
EnumDeclaration enumDeclaration = (EnumDeclaration) cu.getType(0);
assertEquals("AccessSpecifier", enumDeclaration.getNameAsString());
EnumConstantDeclaration declaration = enumDeclaration.getEntry(0);
assertEquals("PUBLIC", declaration.getNameAsString());
ResolvedEnumConstantDeclaration resolvedDeclaration = declaration.resolve();
}

@Test
public void fieldDeclarationResolve() throws IOException {
Expand Down

0 comments on commit e5abd78

Please sign in to comment.