diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java index 6591ed4a30..c9431f6b6c 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationDeclaration.java @@ -1,5 +1,7 @@ package com.github.javaparser.symbolsolver.javaparsermodel.declarations; +import com.github.javaparser.ast.body.AnnotationDeclaration; +import com.github.javaparser.ast.body.AnnotationMemberDeclaration; import com.github.javaparser.resolution.declarations.*; import com.github.javaparser.resolution.types.ResolvedReferenceType; import com.github.javaparser.resolution.types.ResolvedType; @@ -9,6 +11,7 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import java.util.stream.Collectors; import static com.github.javaparser.symbolsolver.javaparser.Navigator.getParentNode; @@ -20,7 +23,7 @@ public class JavaParserAnnotationDeclaration extends AbstractTypeDeclaration imp private com.github.javaparser.ast.body.AnnotationDeclaration wrappedNode; private TypeSolver typeSolver; - public JavaParserAnnotationDeclaration(com.github.javaparser.ast.body.AnnotationDeclaration wrappedNode, TypeSolver typeSolver) { + public JavaParserAnnotationDeclaration(AnnotationDeclaration wrappedNode, TypeSolver typeSolver) { this.wrappedNode = wrappedNode; this.typeSolver = typeSolver; } @@ -89,4 +92,12 @@ public List getTypeParameters() { public Optional containerType() { throw new UnsupportedOperationException("containerType is not supported for " + this.getClass().getCanonicalName()); } + + @Override + public List getAnnotationMembers() { + return wrappedNode.getMembers().stream() + .filter(m -> m instanceof AnnotationMemberDeclaration) + .map(m -> new JavaParserAnnotationMemberDeclaration((AnnotationMemberDeclaration)m, typeSolver)) + .collect(Collectors.toList()); + } } diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationMemberDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationMemberDeclaration.java new file mode 100644 index 0000000000..9579c15207 --- /dev/null +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserAnnotationMemberDeclaration.java @@ -0,0 +1,36 @@ +package com.github.javaparser.symbolsolver.javaparsermodel.declarations; + +import com.github.javaparser.ast.body.AnnotationMemberDeclaration; +import com.github.javaparser.ast.expr.Expression; +import com.github.javaparser.resolution.declarations.ResolvedAnnotationMemberDeclaration; +import com.github.javaparser.resolution.types.ResolvedType; +import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; + +/** + * @author Federico Tomassetti + */ +public class JavaParserAnnotationMemberDeclaration implements ResolvedAnnotationMemberDeclaration { + + private com.github.javaparser.ast.body.AnnotationMemberDeclaration wrappedNode; + private TypeSolver typeSolver; + + public JavaParserAnnotationMemberDeclaration(AnnotationMemberDeclaration wrappedNode, TypeSolver typeSolver) { + this.wrappedNode = wrappedNode; + this.typeSolver = typeSolver; + } + + @Override + public Expression getDefaultValue() { + throw new UnsupportedOperationException(); + } + + @Override + public ResolvedType getType() { + throw new UnsupportedOperationException(); + } + + @Override + public String getName() { + return wrappedNode.getNameAsString(); + } +} diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumConstantDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumConstantDeclaration.java index 75c20c851f..3ceda1a4ea 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumConstantDeclaration.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumConstantDeclaration.java @@ -17,7 +17,7 @@ package com.github.javaparser.symbolsolver.javaparsermodel.declarations; import com.github.javaparser.ast.body.EnumDeclaration; -import com.github.javaparser.resolution.declarations.ResolvedValueDeclaration; +import com.github.javaparser.resolution.declarations.ResolvedEnumConstantDeclaration; import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl; @@ -27,7 +27,7 @@ /** * @author Federico Tomassetti */ -public class JavaParserEnumConstantDeclaration implements ResolvedValueDeclaration { +public class JavaParserEnumConstantDeclaration implements ResolvedEnumConstantDeclaration { private TypeSolver typeSolver; private com.github.javaparser.ast.body.EnumConstantDeclaration wrappedNode; diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java index ae82577fe8..464aa7b83c 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java @@ -40,6 +40,7 @@ import java.io.Serializable; import java.util.*; +import java.util.stream.Collectors; /** * @author Federico Tomassetti @@ -238,6 +239,13 @@ public com.github.javaparser.ast.body.EnumDeclaration getWrappedNode() { return wrappedNode; } + @Override + public List getEnumConstants() { + return wrappedNode.getEntries().stream() + .map(entry -> new JavaParserEnumConstantDeclaration(entry, typeSolver)) + .collect(Collectors.toList()); + } + // Needed by ContextHelper public static class ValuesMethod implements ResolvedMethodDeclaration { diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java index 5ff58e5936..6c516b5f54 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistClassDeclaration.java @@ -50,6 +50,8 @@ */ public class JavassistClassDeclaration extends AbstractClassDeclaration { + + private CtClass ctClass; private TypeSolver typeSolver; private JavassistTypeDeclarationAdapter javassistTypeDeclarationAdapter; diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumConstantDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumConstantDeclaration.java new file mode 100644 index 0000000000..178c74b79d --- /dev/null +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumConstantDeclaration.java @@ -0,0 +1,54 @@ +/* + * Copyright 2016 Federico Tomassetti + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.github.javaparser.symbolsolver.javassistmodel; + +import com.github.javaparser.resolution.declarations.ResolvedEnumConstantDeclaration; +import com.github.javaparser.resolution.types.ResolvedType; +import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; +import javassist.CtField; +import javassist.bytecode.AccessFlag; + +/** + * @author Federico Tomassetti + */ +public class JavassistEnumConstantDeclaration implements ResolvedEnumConstantDeclaration { + + private CtField ctField; + private TypeSolver typeSolver; + + public JavassistEnumConstantDeclaration(CtField ctField, TypeSolver typeSolver) { + if (ctField == null) { + throw new IllegalArgumentException(); + } + if ((ctField.getFieldInfo2().getAccessFlags() & AccessFlag.ENUM) != 0) { + throw new IllegalArgumentException("Trying to instantiate a JavassistEnumConstantDeclaration with something which is not an enum field: " + ctField.toString()); + } + this.ctField = ctField; + this.typeSolver = typeSolver; + } + + + @Override + public String getName() { + return ctField.getName(); + } + + @Override + public ResolvedType getType() { + throw new UnsupportedOperationException(); + } +} diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java index 8f6d5dcf78..9a54a09e08 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistEnumDeclaration.java @@ -264,4 +264,12 @@ private SymbolReference solveSymbolForFQN(St private String[] getInterfaceFQNs() { return ctClass.getClassFile().getInterfaces(); } + + @Override + public List getEnumConstants() { + return Arrays.stream(ctClass.getFields()) + .filter(f -> (f.getFieldInfo2().getAccessFlags() & AccessFlag.ENUM) != 0) + .map(f -> new JavassistEnumConstantDeclaration(f, typeSolver)) + .collect(Collectors.toList()); + } } diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumConstantDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumConstantDeclaration.java new file mode 100644 index 0000000000..07799e8291 --- /dev/null +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumConstantDeclaration.java @@ -0,0 +1,31 @@ +package com.github.javaparser.symbolsolver.reflectionmodel; + +import com.github.javaparser.resolution.declarations.ResolvedEnumConstantDeclaration; +import com.github.javaparser.resolution.types.ResolvedType; +import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; + +import java.lang.reflect.Field; + +public class ReflectionEnumConstantDeclaration implements ResolvedEnumConstantDeclaration { + + private Field enumConstant; + private TypeSolver typeSolver; + + public ReflectionEnumConstantDeclaration(Field enumConstant, TypeSolver typeSolver) { + if (!enumConstant.isEnumConstant()) { + throw new IllegalArgumentException("The given field does not represent an enum constant"); + } + this.enumConstant = enumConstant; + this.typeSolver = typeSolver; + } + + @Override + public String getName() { + return enumConstant.getName(); + } + + @Override + public ResolvedType getType() { + throw new UnsupportedOperationException(); + } +} diff --git a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java index 23a4072fcc..a0b4bc3bae 100644 --- a/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java +++ b/java-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionEnumDeclaration.java @@ -28,6 +28,7 @@ import com.github.javaparser.symbolsolver.model.typesystem.ReferenceTypeImpl; import java.util.*; +import java.util.stream.Collectors; /** * @author Federico Tomassetti @@ -190,4 +191,11 @@ public Optional solveMethodAsUsage(String name, List } } + @Override + public List getEnumConstants() { + return Arrays.stream(clazz.getFields()) + .filter(f -> f.isEnumConstant()) + .map(c -> new ReflectionEnumConstantDeclaration(c, typeSolver)) + .collect(Collectors.toList()); + } }