public static InferenceVariable unnamed(ResolvedTypeParameterDeclaration typeParameterDeclaration) { return new InferenceVariable("__unnamed__" + (unnamedInstantiated++), typeParameterDeclaration); }
public boolean isThrowsBoundOn(InferenceVariable inferenceVariable) { return inferenceVariable.equals(this.inferenceVariable); } }
@Override public int hashCode() { return inferenceVariable.hashCode(); }
public ResolvedType apply(ResolvedType type) { for (Instantiation instantiation : instantiations) { type = type.replaceTypeVariables(instantiation.getInferenceVariable().getTypeParameterDeclaration(), instantiation.getProperType()); } return type; } }
public static List<InferenceVariable> instantiate(List<ResolvedTypeParameterDeclaration> typeParameterDeclarations) { List<InferenceVariable> inferenceVariables = new LinkedList<>(); for (ResolvedTypeParameterDeclaration tp : typeParameterDeclarations) { inferenceVariables.add(InferenceVariable.unnamed(tp)); } return inferenceVariables; }
List<InferenceVariable> alphas = InferenceVariable.instantiate(interfaceDeclaration.getTypeParameters());
public ResolvedType apply(ResolvedType type) { for (Instantiation instantiation : instantiations) { type = type.replaceTypeVariables(instantiation.getInferenceVariable().getTypeParameterDeclaration(), instantiation.getProperType()); } return type; } }
public static List<InferenceVariable> instantiate(List<ResolvedTypeParameterDeclaration> typeParameterDeclarations) { List<InferenceVariable> inferenceVariables = new LinkedList<>(); for (ResolvedTypeParameterDeclaration tp : typeParameterDeclarations) { inferenceVariables.add(InferenceVariable.unnamed(tp)); } return inferenceVariables; }
List<InferenceVariable> alphas = InferenceVariable.instantiate(interfaceDeclaration.getTypeParameters());
public boolean isThrowsBoundOn(InferenceVariable inferenceVariable) { return inferenceVariable.equals(this.inferenceVariable); } }
public static InferenceVariable unnamed(ResolvedTypeParameterDeclaration typeParameterDeclaration) { return new InferenceVariable("__unnamed__" + (unnamedInstantiated++), typeParameterDeclaration); }
@Override public int hashCode() { return inferenceVariable.hashCode(); }
public ResolvedType apply(ResolvedType type) { for (Instantiation instantiation : instantiations) { type = type.replaceTypeVariables(instantiation.getInferenceVariable().getTypeParameterDeclaration(), instantiation.getProperType()); } return type; } }
public static List<InferenceVariable> instantiate(List<ResolvedTypeParameterDeclaration> typeParameterDeclarations) { List<InferenceVariable> inferenceVariables = new LinkedList<>(); for (ResolvedTypeParameterDeclaration tp : typeParameterDeclarations) { inferenceVariables.add(InferenceVariable.unnamed(tp)); } return inferenceVariables; }
List<InferenceVariable> alphas = InferenceVariable.instantiate(interfaceDeclaration.getTypeParameters());
public boolean isThrowsBoundOn(InferenceVariable inferenceVariable) { return inferenceVariable.equals(this.inferenceVariable); } }
public static InferenceVariable unnamed(ResolvedTypeParameterDeclaration typeParameterDeclaration) { return new InferenceVariable("__unnamed__" + (unnamedInstantiated++), typeParameterDeclaration); }
@Override public int hashCode() { return inferenceVariable.hashCode(); }
ResolvedType S = b.getS(); ResolvedType T = b.getT(); Substitution sub = Substitution.empty().withPair(alpha.getTypeParameterDeclaration(), U); currentConstraintSet = currentConstraintSet.withConstraint(new TypeSameAsType(sub.apply(S), sub.apply(T))); ResolvedType S = b.getS(); ResolvedType T = b.getT(); Substitution sub = Substitution.empty().withPair(alpha.getTypeParameterDeclaration(), U); currentConstraintSet = currentConstraintSet.withConstraint(new TypeSameAsType(sub.apply(S), sub.apply(T))); ResolvedType S = a.getS(); ResolvedType T = a.getT(); Substitution sub = Substitution.empty().withPair(alpha.getTypeParameterDeclaration(), U); currentConstraintSet = currentConstraintSet.withConstraint(new TypeSameAsType(sub.apply(S), sub.apply(T))); ResolvedType S = a.getS(); ResolvedType T = a.getT(); Substitution sub = Substitution.empty().withPair(alpha.getTypeParameterDeclaration(), U); currentConstraintSet = currentConstraintSet.withConstraint(new TypeSameAsType(sub.apply(S), sub.apply(T))); ResolvedType S = b.getS(); ResolvedType T = b.getT(); Substitution sub = Substitution.empty().withPair(alpha.getTypeParameterDeclaration(), U); currentConstraintSet = currentConstraintSet.withConstraint(new TypeSubtypeOfType(typeSolver, sub.apply(S), sub.apply(T))); ResolvedType S = b.getS(); ResolvedType T = b.getT(); Substitution sub = Substitution.empty().withPair(alpha.getTypeParameterDeclaration(), U); currentConstraintSet = currentConstraintSet.withConstraint(new TypeSubtypeOfType(typeSolver, sub.apply(S), sub.apply(T)));
private ResolvedType replaceTypeVariablesWithInferenceVariables(ResolvedType originalType, Map<ResolvedTypeVariable, InferenceVariable> correspondences) { if (originalType.isTypeVariable()) { if (!correspondences.containsKey(originalType.asTypeVariable())) { correspondences.put(originalType.asTypeVariable(), InferenceVariable.unnamed(originalType.asTypeVariable().asTypeParameter())); } return correspondences.get(originalType.asTypeVariable()); } if (originalType.isPrimitive()) { return originalType; } throw new UnsupportedOperationException(originalType.toString()); } }