diff options
author | Eugene Susla <eugenesusla@google.com> | 2019-07-31 15:12:54 -0700 |
---|---|---|
committer | Eugene Susla <eugenesusla@google.com> | 2019-07-31 15:12:54 -0700 |
commit | 1410e008c8ea196afec98d7766e6dca5c9d555b4 (patch) | |
tree | 68586f4fd910c3b08a9608d7be5e186c9df572c6 /javaparser-symbol-solver-logic/src/main | |
parent | 1b2211eaf2fa78358abe0b16f82ccf0b689aa56a (diff) | |
download | javaparser-1410e008c8ea196afec98d7766e6dca5c9d555b4.tar.gz |
Pull commits from upstream for java 11 compatibility!
Change-Id: I27826ba60af5c54848e2eae40930d8fb8a302919
Diffstat (limited to 'javaparser-symbol-solver-logic/src/main')
5 files changed, 37 insertions, 15 deletions
diff --git a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractClassDeclaration.java b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractClassDeclaration.java index 1f770e785..0db1ab685 100644 --- a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractClassDeclaration.java +++ b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractClassDeclaration.java @@ -27,7 +27,8 @@ import java.util.List; * * @author Federico Tomassetti */ -public abstract class AbstractClassDeclaration extends AbstractTypeDeclaration implements ResolvedClassDeclaration { +public abstract class AbstractClassDeclaration extends AbstractTypeDeclaration + implements ResolvedClassDeclaration, MethodResolutionCapability { /// /// Public diff --git a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractTypeDeclaration.java b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractTypeDeclaration.java index b08ff1e67..e69c06ea7 100644 --- a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractTypeDeclaration.java +++ b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractTypeDeclaration.java @@ -22,7 +22,6 @@ import com.github.javaparser.resolution.declarations.ResolvedReferenceTypeDeclar import com.github.javaparser.resolution.types.ResolvedReferenceType; import java.util.HashSet; -import java.util.List; import java.util.Set; /** diff --git a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/FunctionalInterfaceLogic.java b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/FunctionalInterfaceLogic.java index 94ce18b77..c5df1d48e 100644 --- a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/FunctionalInterfaceLogic.java +++ b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/FunctionalInterfaceLogic.java @@ -68,6 +68,9 @@ public final class FunctionalInterfaceLogic { } public static boolean isFunctionalInterfaceType(ResolvedType type) { + if (type.isReferenceType() && type.asReferenceType().getTypeDeclaration().hasAnnotation(FunctionalInterface.class.getCanonicalName())) { + return true; + } return getFunctionalMethod(type).isPresent(); } diff --git a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/InferenceContext.java b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/InferenceContext.java index 4d3df0fcf..a4dd5f1f6 100644 --- a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/InferenceContext.java +++ b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/InferenceContext.java @@ -18,7 +18,6 @@ package com.github.javaparser.symbolsolver.logic; import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration; import com.github.javaparser.resolution.types.*; -import com.github.javaparser.symbolsolver.model.typesystem.*; import java.util.ArrayList; import java.util.HashMap; @@ -34,13 +33,12 @@ public class InferenceContext { private int nextInferenceVariableId = 0; private ObjectProvider objectProvider; private List<InferenceVariableType> inferenceVariableTypes = new ArrayList<>(); + private Map<String, InferenceVariableType> inferenceVariableTypeMap = new HashMap<>(); public InferenceContext(ObjectProvider objectProvider) { this.objectProvider = objectProvider; } - private Map<String, InferenceVariableType> inferenceVariableTypeMap = new HashMap<>(); - private InferenceVariableType inferenceVariableTypeForTp(ResolvedTypeParameterDeclaration tp) { if (!inferenceVariableTypeMap.containsKey(tp.getName())) { InferenceVariableType inferenceVariableType = new InferenceVariableType(nextInferenceVariableId++, objectProvider); @@ -52,7 +50,6 @@ public class InferenceContext { } /** - * * @return the actual with the inference variable inserted */ public ResolvedType addPair(ResolvedType target, ResolvedType actual) { @@ -79,7 +76,7 @@ public class InferenceContext { ancestors = formalTypeAsReference.getAllAncestors(); final String actualParamTypeQname = actualTypeAsReference.getQualifiedName(); List<ResolvedType> correspondingActualType = ancestors.stream().filter(a -> a.getQualifiedName().equals(actualParamTypeQname)).collect(Collectors.toList()); - if (correspondingActualType.isEmpty()){ + if (correspondingActualType.isEmpty()) { throw new ConfilictingGenericTypesException(formalType, actualType); } correspondingFormalType = correspondingActualType; @@ -132,20 +129,20 @@ public class InferenceContext { } } - if (actualType.isReferenceType()){ - if (formalType.asWildcard().isBounded()){ + if (actualType.isReferenceType()) { + if (formalType.asWildcard().isBounded()) { registerCorrespondance(formalType.asWildcard().getBoundedType(), actualType); } } - } else if (actualType instanceof InferenceVariableType){ - if (formalType instanceof ResolvedReferenceType){ + } else if (actualType instanceof InferenceVariableType) { + if (formalType instanceof ResolvedReferenceType) { ((InferenceVariableType) actualType).registerEquivalentType(formalType); - } else if (formalType instanceof InferenceVariableType){ + } else if (formalType instanceof InferenceVariableType) { ((InferenceVariableType) actualType).registerEquivalentType(formalType); } - } else if (actualType.isConstraint()){ + } else if (actualType.isConstraint()) { ResolvedLambdaConstraintType constraintType = actualType.asConstraintType(); - if (constraintType.getBound() instanceof InferenceVariableType){ + if (constraintType.getBound() instanceof InferenceVariableType) { ((InferenceVariableType) constraintType.getBound()).registerEquivalentType(formalType); } } else if (actualType.isPrimitive()) { @@ -154,6 +151,16 @@ public class InferenceContext { } else { registerCorrespondance(formalType, objectProvider.byName(actualType.asPrimitive().getBoxTypeQName())); } + } else if (actualType.isReferenceType()) { + if (formalType.isPrimitive()) { + if (formalType.asPrimitive().getBoxTypeQName().equals(actualType.describe())) { + registerCorrespondance(objectProvider.byName(formalType.asPrimitive().getBoxTypeQName()), actualType); + } else { + // nothing to do + } + } else { + // nothing to do + } } else { throw new UnsupportedOperationException(formalType.describe() + " " + actualType.describe()); } @@ -176,7 +183,7 @@ public class InferenceContext { return new ResolvedArrayType(placeInferenceVariables(type.asArrayType().getComponentType())); } else if (type.isNull() || type.isPrimitive() || type.isVoid()) { return type; - } else if (type.isConstraint()){ + } else if (type.isConstraint()) { return ResolvedLambdaConstraintType.bound(placeInferenceVariables(type.asConstraintType().getBound())); } else if (type instanceof InferenceVariableType) { return type; diff --git a/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/MethodResolutionCapability.java b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/MethodResolutionCapability.java new file mode 100644 index 000000000..819057238 --- /dev/null +++ b/javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/MethodResolutionCapability.java @@ -0,0 +1,12 @@ +package com.github.javaparser.symbolsolver.logic; + +import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration; +import com.github.javaparser.resolution.types.ResolvedType; +import com.github.javaparser.symbolsolver.model.resolution.SymbolReference; + +import java.util.List; + +public interface MethodResolutionCapability { + SymbolReference<ResolvedMethodDeclaration> solveMethod(String name, List<ResolvedType> argumentsTypes, + boolean staticOnly); +} |