aboutsummaryrefslogtreecommitdiff
path: root/javaparser-symbol-solver-logic/src/main
diff options
context:
space:
mode:
authorEugene Susla <eugenesusla@google.com>2019-07-31 15:12:54 -0700
committerEugene Susla <eugenesusla@google.com>2019-07-31 15:12:54 -0700
commit1410e008c8ea196afec98d7766e6dca5c9d555b4 (patch)
tree68586f4fd910c3b08a9608d7be5e186c9df572c6 /javaparser-symbol-solver-logic/src/main
parent1b2211eaf2fa78358abe0b16f82ccf0b689aa56a (diff)
downloadjavaparser-1410e008c8ea196afec98d7766e6dca5c9d555b4.tar.gz
Pull commits from upstream for java 11 compatibility!
Change-Id: I27826ba60af5c54848e2eae40930d8fb8a302919
Diffstat (limited to 'javaparser-symbol-solver-logic/src/main')
-rw-r--r--javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractClassDeclaration.java3
-rw-r--r--javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/AbstractTypeDeclaration.java1
-rw-r--r--javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/FunctionalInterfaceLogic.java3
-rw-r--r--javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/InferenceContext.java33
-rw-r--r--javaparser-symbol-solver-logic/src/main/java/com/github/javaparser/symbolsolver/logic/MethodResolutionCapability.java12
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);
+}