aboutsummaryrefslogtreecommitdiff
path: root/javaparser-core/src/main
diff options
context:
space:
mode:
authorFederico Tomassetti <federico@tomassetti.me>2017-09-27 10:29:46 +0200
committerFederico Tomassetti <federico@tomassetti.me>2017-09-27 10:29:46 +0200
commit3babd1ba8bed600894b598cc999ca8c5c0c91a5c (patch)
treedb03f62953ab7d805a6f2fcdf693804b8c0fcecc /javaparser-core/src/main
parentc7ee7cc8176ef8e23fce3a601dac7e5c47813363 (diff)
downloadjavaparser-3babd1ba8bed600894b598cc999ca8c5c0c91a5c.tar.gz
issue1154: implementing solving of ArrayType to ResolvedArrayType
Diffstat (limited to 'javaparser-core/src/main')
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java8
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java19
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/resolution/SymbolResolver.java7
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedWildcard.java8
4 files changed, 37 insertions, 5 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java
index d96602001..12a9bbf8d 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/ArrayType.java
@@ -32,6 +32,7 @@ import com.github.javaparser.ast.visitor.GenericVisitor;
import com.github.javaparser.ast.visitor.VoidVisitor;
import com.github.javaparser.metamodel.ArrayTypeMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel;
+import com.github.javaparser.resolution.types.ResolvedArrayType;
import com.github.javaparser.utils.Pair;
import javax.annotation.Generated;
import java.util.ArrayList;
@@ -45,7 +46,12 @@ import java.util.function.Consumer;
* To indicate that a type is an array, it gets wrapped in an ArrayType for every array level it has.
* So, int[][] becomes ArrayType(ArrayType(int)).
*/
-public final class ArrayType extends ReferenceType<> implements NodeWithAnnotations<ArrayType> {
+public final class ArrayType extends ReferenceType<ResolvedArrayType> implements NodeWithAnnotations<ArrayType> {
+
+ @Override
+ public ResolvedArrayType resolve() {
+ return getSymbolResolver().resolve(this, ResolvedArrayType.class);
+ }
/**
* The origin of a pair of array brackets [].
diff --git a/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java b/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java
index 2cfc4a752..0e63303c8 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/ast/type/Type.java
@@ -21,6 +21,7 @@
package com.github.javaparser.ast.type;
import com.github.javaparser.ast.AllFieldsConstructor;
+import com.github.javaparser.ast.DataKey;
import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr;
@@ -32,6 +33,7 @@ import static com.github.javaparser.utils.Utils.assertNotNull;
import javax.annotation.Generated;
import com.github.javaparser.TokenRange;
import com.github.javaparser.resolution.Resolvable;
+import com.github.javaparser.resolution.SymbolResolver;
import java.util.function.Consumer;
import static com.github.javaparser.utils.CodeGenerationUtils.f;
@@ -41,7 +43,7 @@ import static com.github.javaparser.utils.CodeGenerationUtils.f;
*
* @author Julio Vilmar Gesser
*/
-public abstract class Type<RT> extends Node, Resolvable<RT> {
+public abstract class Type<RT> extends Node implements Resolvable<RT> {
private NodeList<AnnotationExpr> annotations;
@@ -290,4 +292,19 @@ public abstract class Type<RT> extends Node, Resolvable<RT> {
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifWildcardType(Consumer<WildcardType> action) {
}
+
+ protected SymbolResolver getSymbolResolver() {
+ SymbolResolver symbolResolver = this.getData(SYMBOL_RESOLVER_KEY);
+ if (symbolResolver == null) {
+ throw new IllegalStateException("Symbol resolution not configured");
+ }
+ return symbolResolver;
+ }
+
+ private static final DataKey<SymbolResolver> SYMBOL_RESOLVER_KEY = new DataKey<SymbolResolver>() {
+ @Override
+ public int hashCode() {
+ return super.hashCode();
+ }
+ };
}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/resolution/SymbolResolver.java b/javaparser-core/src/main/java/com/github/javaparser/resolution/SymbolResolver.java
new file mode 100644
index 000000000..06348c1a1
--- /dev/null
+++ b/javaparser-core/src/main/java/com/github/javaparser/resolution/SymbolResolver.java
@@ -0,0 +1,7 @@
+package com.github.javaparser.resolution;
+
+import com.github.javaparser.ast.Node;
+
+public interface SymbolResolver {
+ <T> T resolve(Node node, Class<T> resultClass);
+}
diff --git a/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedWildcard.java b/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedWildcard.java
index 8c1218d41..cd52d6246 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedWildcard.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/resolution/types/ResolvedWildcard.java
@@ -16,6 +16,8 @@
package com.github.javaparser.resolution.types;
+import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;
+
import java.util.List;
import java.util.Map;
@@ -35,7 +37,7 @@ public class ResolvedWildcard implements ResolvedType {
private BoundType type;
private ResolvedType boundedType;
- private ResolvedWildcard(BoundType type, Type boundedType) {
+ private ResolvedWildcard(BoundType type, ResolvedType boundedType) {
if (type == null && boundedType != null) {
throw new IllegalArgumentException();
}
@@ -137,7 +139,7 @@ public class ResolvedWildcard implements ResolvedType {
}
@Override
- public ResolvedType replaceTypeVariables(TypeParameterDeclaration tpToReplace, ResolvedType replaced, Map<TypeParameterDeclaration, ResolvedType> inferredTypes) {
+ public ResolvedType replaceTypeVariables(ResolvedTypeParameterDeclaration tpToReplace, ResolvedType replaced, Map<ResolvedTypeParameterDeclaration, ResolvedType> inferredTypes) {
if (replaced == null) {
throw new IllegalArgumentException();
}
@@ -156,7 +158,7 @@ public class ResolvedWildcard implements ResolvedType {
}
@Override
- public boolean mention(List<TypeParameterDeclaration> typeParameters) {
+ public boolean mention(List<ResolvedTypeParameterDeclaration> typeParameters) {
return boundedType != null && boundedType.mention(typeParameters);
}