Skip to content

Commit

Permalink
issue1154: implementing solving of ArrayType to ResolvedArrayType
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Sep 27, 2017
1 parent c7ee7cc commit 3babd1b
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 5 deletions.
Expand Up @@ -32,6 +32,7 @@
import com.github.javaparser.ast.visitor.VoidVisitor; import com.github.javaparser.ast.visitor.VoidVisitor;
import com.github.javaparser.metamodel.ArrayTypeMetaModel; import com.github.javaparser.metamodel.ArrayTypeMetaModel;
import com.github.javaparser.metamodel.JavaParserMetaModel; import com.github.javaparser.metamodel.JavaParserMetaModel;
import com.github.javaparser.resolution.types.ResolvedArrayType;
import com.github.javaparser.utils.Pair; import com.github.javaparser.utils.Pair;
import javax.annotation.Generated; import javax.annotation.Generated;
import java.util.ArrayList; import java.util.ArrayList;
Expand All @@ -45,7 +46,12 @@
* To indicate that a type is an array, it gets wrapped in an ArrayType for every array level it has. * 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)). * 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 []. * The origin of a pair of array brackets [].
Expand Down
Expand Up @@ -21,6 +21,7 @@
package com.github.javaparser.ast.type; package com.github.javaparser.ast.type;


import com.github.javaparser.ast.AllFieldsConstructor; import com.github.javaparser.ast.AllFieldsConstructor;
import com.github.javaparser.ast.DataKey;
import com.github.javaparser.ast.Node; import com.github.javaparser.ast.Node;
import com.github.javaparser.ast.NodeList; import com.github.javaparser.ast.NodeList;
import com.github.javaparser.ast.expr.AnnotationExpr; import com.github.javaparser.ast.expr.AnnotationExpr;
Expand All @@ -32,6 +33,7 @@
import javax.annotation.Generated; import javax.annotation.Generated;
import com.github.javaparser.TokenRange; import com.github.javaparser.TokenRange;
import com.github.javaparser.resolution.Resolvable; import com.github.javaparser.resolution.Resolvable;
import com.github.javaparser.resolution.SymbolResolver;


import java.util.function.Consumer; import java.util.function.Consumer;
import static com.github.javaparser.utils.CodeGenerationUtils.f; import static com.github.javaparser.utils.CodeGenerationUtils.f;
Expand All @@ -41,7 +43,7 @@
* *
* @author Julio Vilmar Gesser * @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; private NodeList<AnnotationExpr> annotations;


Expand Down Expand Up @@ -290,4 +292,19 @@ public void ifVoidType(Consumer<VoidType> action) {
@Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator") @Generated("com.github.javaparser.generator.core.node.TypeCastingGenerator")
public void ifWildcardType(Consumer<WildcardType> action) { 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();
}
};
} }
@@ -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);
}
Expand Up @@ -16,6 +16,8 @@


package com.github.javaparser.resolution.types; package com.github.javaparser.resolution.types;


import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration;

import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;


Expand All @@ -35,7 +37,7 @@ public class ResolvedWildcard implements ResolvedType {
private BoundType type; private BoundType type;
private ResolvedType boundedType; private ResolvedType boundedType;


private ResolvedWildcard(BoundType type, Type boundedType) { private ResolvedWildcard(BoundType type, ResolvedType boundedType) {
if (type == null && boundedType != null) { if (type == null && boundedType != null) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
Expand Down Expand Up @@ -137,7 +139,7 @@ public boolean isAssignableBy(ResolvedType other) {
} }


@Override @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) { if (replaced == null) {
throw new IllegalArgumentException(); throw new IllegalArgumentException();
} }
Expand All @@ -156,7 +158,7 @@ public ResolvedType replaceTypeVariables(TypeParameterDeclaration tpToReplace, R
} }


@Override @Override
public boolean mention(List<TypeParameterDeclaration> typeParameters) { public boolean mention(List<ResolvedTypeParameterDeclaration> typeParameters) {
return boundedType != null && boundedType.mention(typeParameters); return boundedType != null && boundedType.mention(typeParameters);
} }


Expand Down

0 comments on commit 3babd1b

Please sign in to comment.