From 5000b8ce6d741aa391ad54b5f886a8c622dcdca8 Mon Sep 17 00:00:00 2001 From: Johann Beleites Date: Fri, 7 Dec 2018 08:36:56 +0100 Subject: [PATCH] Generified Type Variable resolution. --- .../symbolsolver/core/resolution/Context.java | 10 +++- .../core/resolution/ContextHelper.java | 51 ------------------- .../TypeVariableResolutionCapability.java | 10 ++++ .../JavaParserEnumDeclaration.java | 3 +- .../JavaParserMethodDeclaration.java | 3 +- .../JavassistMethodDeclaration.java | 4 +- .../ReflectionMethodDeclaration.java | 3 +- 7 files changed, 27 insertions(+), 57 deletions(-) delete mode 100644 javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/ContextHelper.java create mode 100644 javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/TypeVariableResolutionCapability.java diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/Context.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/Context.java index 61a83bdb02..4ecf910c69 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/Context.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/Context.java @@ -186,7 +186,15 @@ default Optional solveMethodAsUsage(String name, List SymbolReference methodSolved = solveMethod(name, argumentsTypes, false); if (methodSolved.isSolved()) { ResolvedMethodDeclaration methodDeclaration = methodSolved.getCorrespondingDeclaration(); - MethodUsage methodUsage = ContextHelper.resolveTypeVariables(this, methodDeclaration, argumentsTypes);//methodDeclaration.resolveTypeVariables(this, argumentsTypes); + + MethodUsage methodUsage; + if (methodDeclaration instanceof TypeVariableResolutionCapability) { + methodUsage = ((TypeVariableResolutionCapability) methodDeclaration) + .resolveTypeVariables(this, argumentsTypes); + } else { + throw new UnsupportedOperationException(); + } + return Optional.of(methodUsage); } else { return Optional.empty(); diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/ContextHelper.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/ContextHelper.java deleted file mode 100644 index f3140521d2..0000000000 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/ContextHelper.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2016 Federico Tomassetti - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.github.javaparser.symbolsolver.core.resolution; - -import com.github.javaparser.resolution.MethodUsage; -import com.github.javaparser.resolution.declarations.ResolvedMethodDeclaration; -import com.github.javaparser.resolution.types.ResolvedType; -import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserEnumDeclaration; -import com.github.javaparser.symbolsolver.javaparsermodel.declarations.JavaParserMethodDeclaration; -import com.github.javaparser.symbolsolver.javassistmodel.JavassistMethodDeclaration; -import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionMethodDeclaration; - -import java.util.List; - -/** - * @author Federico Tomassetti - */ -class ContextHelper { - - private ContextHelper() { - // prevent instantiation - } - - static MethodUsage resolveTypeVariables(Context context, ResolvedMethodDeclaration methodDeclaration, List parameterTypes) { - if (methodDeclaration instanceof JavaParserMethodDeclaration) { - return ((JavaParserMethodDeclaration) methodDeclaration).resolveTypeVariables(context, parameterTypes); - } else if (methodDeclaration instanceof JavassistMethodDeclaration) { - return ((JavassistMethodDeclaration) methodDeclaration).resolveTypeVariables(context, parameterTypes); - } else if (methodDeclaration instanceof JavaParserEnumDeclaration.ValuesMethod) { - return ((JavaParserEnumDeclaration.ValuesMethod) methodDeclaration).resolveTypeVariables(context, parameterTypes); - } else if (methodDeclaration instanceof ReflectionMethodDeclaration) { - return ((ReflectionMethodDeclaration) methodDeclaration).resolveTypeVariables(context, parameterTypes); - } else { - throw new UnsupportedOperationException(); - } - } -} diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/TypeVariableResolutionCapability.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/TypeVariableResolutionCapability.java new file mode 100644 index 0000000000..5e9afa246f --- /dev/null +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/core/resolution/TypeVariableResolutionCapability.java @@ -0,0 +1,10 @@ +package com.github.javaparser.symbolsolver.core.resolution; + +import com.github.javaparser.resolution.MethodUsage; +import com.github.javaparser.resolution.types.ResolvedType; + +import java.util.List; + +public interface TypeVariableResolutionCapability { + MethodUsage resolveTypeVariables(Context context, List parameterTypes); +} diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java index 701b166cef..f323479091 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserEnumDeclaration.java @@ -31,6 +31,7 @@ import com.github.javaparser.resolution.types.parametrization.ResolvedTypeParametersMap; import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.MethodUsageResolutionCapability; +import com.github.javaparser.symbolsolver.core.resolution.TypeVariableResolutionCapability; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; import com.github.javaparser.symbolsolver.logic.AbstractTypeDeclaration; @@ -258,7 +259,7 @@ public List getEnumConstants() { } // Needed by ContextHelper - public static class ValuesMethod implements ResolvedMethodDeclaration { + public static class ValuesMethod implements ResolvedMethodDeclaration, TypeVariableResolutionCapability { private JavaParserEnumDeclaration enumDeclaration; private TypeSolver typeSolver; diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserMethodDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserMethodDeclaration.java index b009d6d5bd..013e7e1ca5 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserMethodDeclaration.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javaparsermodel/declarations/JavaParserMethodDeclaration.java @@ -27,6 +27,7 @@ import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration; import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.symbolsolver.core.resolution.Context; +import com.github.javaparser.symbolsolver.core.resolution.TypeVariableResolutionCapability; import com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; @@ -41,7 +42,7 @@ /** * @author Federico Tomassetti */ -public class JavaParserMethodDeclaration implements ResolvedMethodDeclaration { +public class JavaParserMethodDeclaration implements ResolvedMethodDeclaration, TypeVariableResolutionCapability { private com.github.javaparser.ast.body.MethodDeclaration wrappedNode; private TypeSolver typeSolver; diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistMethodDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistMethodDeclaration.java index 6d82946623..df37481b37 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistMethodDeclaration.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/javassistmodel/JavassistMethodDeclaration.java @@ -26,9 +26,9 @@ import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration; import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.symbolsolver.core.resolution.Context; +import com.github.javaparser.symbolsolver.core.resolution.TypeVariableResolutionCapability; import com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; -import com.github.javaparser.symbolsolver.reflectionmodel.ReflectionFactory; import javassist.CtMethod; import javassist.NotFoundException; import javassist.bytecode.BadBytecode; @@ -44,7 +44,7 @@ /** * @author Federico Tomassetti */ -public class JavassistMethodDeclaration implements ResolvedMethodDeclaration { +public class JavassistMethodDeclaration implements ResolvedMethodDeclaration, TypeVariableResolutionCapability { private CtMethod ctMethod; private TypeSolver typeSolver; diff --git a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclaration.java b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclaration.java index 7246b40c0d..9708f0452a 100644 --- a/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclaration.java +++ b/javaparser-symbol-solver-core/src/main/java/com/github/javaparser/symbolsolver/reflectionmodel/ReflectionMethodDeclaration.java @@ -25,6 +25,7 @@ import com.github.javaparser.resolution.declarations.ResolvedTypeParameterDeclaration; import com.github.javaparser.resolution.types.ResolvedType; import com.github.javaparser.symbolsolver.core.resolution.Context; +import com.github.javaparser.symbolsolver.core.resolution.TypeVariableResolutionCapability; import com.github.javaparser.symbolsolver.declarations.common.MethodDeclarationCommonLogic; import com.github.javaparser.symbolsolver.model.resolution.TypeSolver; @@ -38,7 +39,7 @@ /** * @author Federico Tomassetti */ -public class ReflectionMethodDeclaration implements ResolvedMethodDeclaration { +public class ReflectionMethodDeclaration implements ResolvedMethodDeclaration, TypeVariableResolutionCapability { private Method method; private TypeSolver typeSolver;