From 1410e008c8ea196afec98d7766e6dca5c9d555b4 Mon Sep 17 00:00:00 2001 From: Eugene Susla Date: Wed, 31 Jul 2019 15:12:54 -0700 Subject: Pull commits from upstream for java 11 compatibility! Change-Id: I27826ba60af5c54848e2eae40930d8fb8a302919 --- .../logic/AbstractClassDeclaration.java | 3 +- .../logic/AbstractTypeDeclaration.java | 1 - .../logic/FunctionalInterfaceLogic.java | 3 ++ .../symbolsolver/logic/InferenceContext.java | 33 +++++++++++++--------- .../logic/MethodResolutionCapability.java | 12 ++++++++ 5 files changed, 37 insertions(+), 15 deletions(-) create mode 100644 javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/MethodResolutionCapability.java (limited to 'javaparser-symbol-solver-logic/src/main') 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 inferenceVariableTypes = new ArrayList<>(); + private Map inferenceVariableTypeMap = new HashMap<>(); public InferenceContext(ObjectProvider objectProvider) { this.objectProvider = objectProvider; } - private Map 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 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 solveMethod(String name, List argumentsTypes, + boolean staticOnly); +} -- cgit v1.2.3