Skip to content

Commit

Permalink
minor refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
mlangkabel committed Aug 29, 2017
1 parent c733131 commit 04395d5
Showing 1 changed file with 21 additions and 26 deletions.
Expand Up @@ -194,34 +194,11 @@ private static boolean isAssignableMatchTypeParametersMatchingQName(ReferenceTyp
if (expectedParam.isTypeVariable()) { if (expectedParam.isTypeVariable()) {
String expectedParamName = expectedParam.asTypeParameter().getName(); String expectedParamName = expectedParam.asTypeParameter().getName();
if (!actualParam.isTypeVariable() || !actualParam.asTypeParameter().getName().equals(expectedParamName)) { if (!actualParam.isTypeVariable() || !actualParam.asTypeParameter().getName().equals(expectedParamName)) {
if (matchedParameters.containsKey(expectedParamName)) { return matchTypeVariable(expectedParam.asTypeVariable(), actualParam, matchedParameters);
Type matchedParameter = matchedParameters.get(expectedParamName);
if (matchedParameter.isAssignableBy(actualParam)) {
return true;
} else if (actualParam.isAssignableBy(matchedParameter)) {
matchedParameters.put(expectedParamName, actualParam);
return true;
}
return false;
} else {
matchedParameters.put(expectedParamName, actualParam);
}
} }
} else if (expectedParam.isReferenceType()) { } else if (expectedParam.isReferenceType()) {
if (actualParam.isTypeVariable()) { if (actualParam.isTypeVariable()) {
String actualParamName = actualParam.asTypeParameter().getName(); return matchTypeVariable(actualParam.asTypeVariable(), expectedParam, matchedParameters);
if (matchedParameters.containsKey(actualParamName)) {
Type matchedParameter = matchedParameters.get(actualParamName);
if (matchedParameter.isAssignableBy(expectedParam)) {
return true;
} else if (expectedParam.isAssignableBy(matchedParameter)) {
matchedParameters.put(actualParamName, expectedParam);
return true;
}
return false;
} else {
matchedParameters.put(actualParamName, expectedParam);
}
} else if (!expectedParam.equals(actualParam)) { } else if (!expectedParam.equals(actualParam)) {
return false; return false;
} }
Expand All @@ -238,6 +215,24 @@ private static boolean isAssignableMatchTypeParametersMatchingQName(ReferenceTyp
return true; return true;
} }


private static boolean matchTypeVariable(TypeVariable typeVariable, Type type, Map<String, Type> matchedParameters) {
String typeParameterName = typeVariable.asTypeParameter().getName();
if (matchedParameters.containsKey(typeParameterName)) {
Type matchedParameter = matchedParameters.get(typeParameterName);
if (matchedParameter.isAssignableBy(type)) {
return true;
} else if (type.isAssignableBy(matchedParameter)) {
// update matchedParameters to contain the more general type
matchedParameters.put(typeParameterName, type);
return true;
}
return false;
} else {
matchedParameters.put(typeParameterName, type);
}
return true;
}

public static Type replaceTypeParam(Type type, TypeParameterDeclaration tp, TypeSolver typeSolver) { public static Type replaceTypeParam(Type type, TypeParameterDeclaration tp, TypeSolver typeSolver) {
if (type.isTypeVariable()) { if (type.isTypeVariable()) {
if (type.describe().equals(tp.getName())) { if (type.describe().equals(tp.getName())) {
Expand Down

0 comments on commit 04395d5

Please sign in to comment.