diff options
author | Federico Tomassetti <federico@tomassetti.me> | 2017-09-27 10:29:46 +0200 |
---|---|---|
committer | Federico Tomassetti <federico@tomassetti.me> | 2017-09-27 10:29:46 +0200 |
commit | 3babd1ba8bed600894b598cc999ca8c5c0c91a5c (patch) | |
tree | db03f62953ab7d805a6f2fcdf693804b8c0fcecc /javaparser-core/src/main | |
parent | c7ee7cc8176ef8e23fce3a601dac7e5c47813363 (diff) | |
download | javaparser-3babd1ba8bed600894b598cc999ca8c5c0c91a5c.tar.gz |
issue1154: implementing solving of ArrayType to ResolvedArrayType
Diffstat (limited to 'javaparser-core/src/main')
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); } |