Skip to content

Commit

Permalink
Merge pull request #2876 from jlerbsc/master
Browse files Browse the repository at this point in the history
Fixx issue 2284 Can't get qualified signature of a resolved method inside a Constant Enum declaration
  • Loading branch information
jlerbsc committed Nov 4, 2020
2 parents af429b7 + 0b6650d commit e1564f1
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,71 @@

package com.github.javaparser.symbolsolver.javaparsermodel;

import static com.github.javaparser.symbolsolver.javaparser.Navigator.demandParentNode;

import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.body.*;
import com.github.javaparser.ast.expr.*;
import com.github.javaparser.ast.stmt.*;
import com.github.javaparser.ast.body.AnnotationDeclaration;
import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration;
import com.github.javaparser.ast.body.ConstructorDeclaration;
import com.github.javaparser.ast.body.EnumConstantDeclaration;
import com.github.javaparser.ast.body.EnumDeclaration;
import com.github.javaparser.ast.body.FieldDeclaration;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.ast.body.Parameter;
import com.github.javaparser.ast.body.VariableDeclarator;
import com.github.javaparser.ast.expr.FieldAccessExpr;
import com.github.javaparser.ast.expr.LambdaExpr;
import com.github.javaparser.ast.expr.MethodCallExpr;
import com.github.javaparser.ast.expr.MethodReferenceExpr;
import com.github.javaparser.ast.expr.NameExpr;
import com.github.javaparser.ast.expr.ObjectCreationExpr;
import com.github.javaparser.ast.expr.VariableDeclarationExpr;
import com.github.javaparser.ast.stmt.BlockStmt;
import com.github.javaparser.ast.stmt.CatchClause;
import com.github.javaparser.ast.stmt.ExpressionStmt;
import com.github.javaparser.ast.stmt.ForEachStmt;
import com.github.javaparser.ast.stmt.ForStmt;
import com.github.javaparser.ast.stmt.IfStmt;
import com.github.javaparser.ast.stmt.Statement;
import com.github.javaparser.ast.stmt.SwitchEntry;
import com.github.javaparser.ast.stmt.TryStmt;
import com.github.javaparser.ast.type.TypeParameter;
import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclaration;
import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.*;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.*;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.AnnotationDeclarationContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.AnonymousClassDeclarationContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.BlockStmtContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.CatchClauseContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.ClassOrInterfaceDeclarationContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.CompilationUnitContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.ConstructorContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.EnumDeclarationContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.FieldAccessContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.ForEachStatementContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.ForStatementContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.LambdaExprContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodCallExprContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.MethodReferenceExprContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.ObjectCreationContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.StatementContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.SwitchEntryContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.TryWithResourceContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.VariableDeclarationExprContext;
import com.github.javaparser.symbolsolver.javaparsermodel.contexts.VariableDeclaratorContext;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserAnnotationDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserClassDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserInterfaceDeclaration;
import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserTypeParameter;
import com.github.javaparser.symbolsolver.javaparsermodel.declarators.FieldSymbolDeclarator;
import com.github.javaparser.symbolsolver.javaparsermodel.declarators.NoSymbolDeclarator;
import com.github.javaparser.symbolsolver.javaparsermodel.declarators.ParameterSymbolDeclarator;
import com.github.javaparser.symbolsolver.javaparsermodel.declarators.VariableSymbolDeclarator;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.resolution.SymbolDeclarator;

import static com.github.javaparser.symbolsolver.javaparser.Navigator.demandParentNode;

/**
* @author Federico Tomassetti
*/
Expand Down Expand Up @@ -157,6 +203,8 @@ public static ResolvedReferenceTypeDeclaration toTypeDeclaration(Node node, Type
return new JavaParserEnumDeclaration((EnumDeclaration) node, typeSolver);
} else if (node instanceof AnnotationDeclaration) {
return new JavaParserAnnotationDeclaration((AnnotationDeclaration) node, typeSolver);
} else if (node instanceof EnumConstantDeclaration) {
return new JavaParserEnumDeclaration((EnumDeclaration) demandParentNode((EnumConstantDeclaration) node), typeSolver);
} else {
throw new IllegalArgumentException(node.getClass().getCanonicalName());
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.github.javaparser.symbolsolver;

import static org.junit.jupiter.api.Assertions.assertEquals;

import java.util.List;

import org.junit.jupiter.api.Test;

import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.ast.CompilationUnit;
import com.github.javaparser.ast.body.MethodDeclaration;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;

public class Issue2284Test extends AbstractSymbolResolutionTest {

@Test
public void test() {

TypeSolver typeSolver = new ReflectionTypeSolver(false);
ParserConfiguration config = new ParserConfiguration();
config.setSymbolResolver(new JavaSymbolSolver(typeSolver));
StaticJavaParser.setConfiguration(config);

String s =
"public enum Enum {\n" +
" CONSTANT_ENUM() {\n" +
" @Override\n" +
" String getEnumName() {\n" +
" return \"CONSTANT_ENUM\";\n" +
" }\n" +
" };\n" +
" \n" +
" String getEnumName() {\n" +
" return \"default\";\n" +
" }\n" +
"}";

CompilationUnit cu = StaticJavaParser.parse(s);
List<MethodDeclaration> mds = cu.findAll(MethodDeclaration.class);
mds.forEach(md-> {
assertEquals("Enum.getEnumName()", md.resolve().getQualifiedSignature());
});

}

}

0 comments on commit e1564f1

Please sign in to comment.