Skip to content

Commit

Permalink
remove TypeParametersLogic
Browse files Browse the repository at this point in the history
  • Loading branch information
ftomassetti committed Oct 26, 2016
1 parent f640162 commit 6421fd5
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 90 deletions.
Expand Up @@ -22,10 +22,10 @@
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFacade;
import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory; import com.github.javaparser.symbolsolver.javaparsermodel.JavaParserFactory;
import com.github.javaparser.symbolsolver.logic.TypeParametersLogic; import com.github.javaparser.symbolsolver.logic.GenericTypeInferenceLogic;
import com.github.javaparser.symbolsolver.model.declarations.*; import com.github.javaparser.symbolsolver.model.declarations.*;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.methods.MethodUsage; import com.github.javaparser.symbolsolver.model.methods.MethodUsage;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.Type; import com.github.javaparser.symbolsolver.model.typesystem.Type;


import java.util.*; import java.util.*;
Expand Down Expand Up @@ -103,7 +103,7 @@ public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTyp
for (int i = 0; i < getNumberOfParams(); i++) { for (int i = 0; i < getNumberOfParams(); i++) {
Type formalParamType = getParam(i).getType(); Type formalParamType = getParam(i).getType();
Type actualParamType = parameterTypes.get(i); Type actualParamType = parameterTypes.get(i);
TypeParametersLogic.determineTypeParameters(determinedTypeParameters, formalParamType, actualParamType, typeSolver); GenericTypeInferenceLogic.determineTypeParameters(determinedTypeParameters, formalParamType, actualParamType, typeSolver);
} }


Map<TypeParameterDeclaration, Type> inferredTypes = new HashMap<>(); Map<TypeParameterDeclaration, Type> inferredTypes = new HashMap<>();
Expand Down
Expand Up @@ -18,10 +18,10 @@


import com.github.javaparser.ast.Node; import com.github.javaparser.ast.Node;
import com.github.javaparser.symbolsolver.core.resolution.Context; import com.github.javaparser.symbolsolver.core.resolution.Context;
import com.github.javaparser.symbolsolver.logic.TypeParametersLogic; import com.github.javaparser.symbolsolver.logic.GenericTypeInferenceLogic;
import com.github.javaparser.symbolsolver.model.declarations.*; import com.github.javaparser.symbolsolver.model.declarations.*;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.methods.MethodUsage; import com.github.javaparser.symbolsolver.model.methods.MethodUsage;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.Type; import com.github.javaparser.symbolsolver.model.typesystem.Type;


import java.lang.reflect.Method; import java.lang.reflect.Method;
Expand Down Expand Up @@ -125,7 +125,7 @@ public MethodUsage resolveTypeVariables(Context context, List<Type> parameterTyp
for (int i = 0; i < getNumberOfParams(); i++) { for (int i = 0; i < getNumberOfParams(); i++) {
Type formalParamType = getParam(i).getType(); Type formalParamType = getParam(i).getType();
Type actualParamType = parameterTypes.get(i); Type actualParamType = parameterTypes.get(i);
TypeParametersLogic.determineTypeParameters(determinedTypeParameters, formalParamType, actualParamType, typeSolver); GenericTypeInferenceLogic.determineTypeParameters(determinedTypeParameters, formalParamType, actualParamType, typeSolver);
} }


for (TypeParameterDeclaration determinedParam : determinedTypeParameters.keySet()) { for (TypeParameterDeclaration determinedParam : determinedTypeParameters.keySet()) {
Expand Down
Expand Up @@ -17,13 +17,16 @@
package com.github.javaparser.symbolsolver.logic; package com.github.javaparser.symbolsolver.logic;


import com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration; import com.github.javaparser.symbolsolver.model.declarations.TypeParameterDeclaration;
import com.github.javaparser.symbolsolver.model.resolution.TypeSolver;
import com.github.javaparser.symbolsolver.model.typesystem.ReferenceType; import com.github.javaparser.symbolsolver.model.typesystem.ReferenceType;
import com.github.javaparser.symbolsolver.model.typesystem.Type; import com.github.javaparser.symbolsolver.model.typesystem.Type;
import com.github.javaparser.symbolsolver.model.typesystem.Wildcard;
import javaslang.Tuple2; import javaslang.Tuple2;


import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;


/** /**
* @author Federico Tomassetti * @author Federico Tomassetti
Expand Down Expand Up @@ -109,4 +112,52 @@ private static void consider(Map<TypeParameterDeclaration, Type> map, Type forma
} }
} }


public static void determineTypeParameters(Map<TypeParameterDeclaration, Type> determinedTypeParameters,
Type formalParamType, Type actualParamType,
TypeSolver typeSolver) {
if (actualParamType.isNull()) {
return;
}
if (actualParamType.isTypeVariable()) {
return;
}
if (formalParamType.isTypeVariable()) {
determinedTypeParameters.put(formalParamType.asTypeParameter(), actualParamType);
return;
}
if (formalParamType instanceof Wildcard) {
return;
}
if (formalParamType.isArray() && actualParamType.isArray()) {
determineTypeParameters(
determinedTypeParameters,
formalParamType.asArrayType().getComponentType(),
actualParamType.asArrayType().getComponentType(),
typeSolver);
return;
}
if (formalParamType.isReferenceType() && actualParamType.isReferenceType()
&& !formalParamType.asReferenceType().getQualifiedName().equals(actualParamType.asReferenceType().getQualifiedName())) {
List<ReferenceType> ancestors = actualParamType.asReferenceType().getAllAncestors();
final String formalParamTypeQName = formalParamType.asReferenceType().getQualifiedName();
List<Type> correspondingFormalType = ancestors.stream().filter((a) -> a.getQualifiedName().equals(formalParamTypeQName)).collect(Collectors.toList());
if (correspondingFormalType.isEmpty()) {
throw new IllegalArgumentException();
}
actualParamType = correspondingFormalType.get(0);
}
if (formalParamType.isReferenceType() && actualParamType.isReferenceType()) {
if (formalParamType.asReferenceType().isRawType() || actualParamType.asReferenceType().isRawType()) {
return;
}
List<Type> formalTypeParams = formalParamType.asReferenceType().typeParametersValues();
List<Type> actualTypeParams = actualParamType.asReferenceType().typeParametersValues();
if (formalTypeParams.size() != actualTypeParams.size()) {
throw new UnsupportedOperationException();
}
for (int i = 0; i < formalTypeParams.size(); i++) {
determineTypeParameters(determinedTypeParameters, formalTypeParams.get(i), actualTypeParams.get(i), typeSolver);
}
}
}
} }

This file was deleted.

0 comments on commit 6421fd5

Please sign in to comment.