@Override public TypeConformanceResult doVisitGenericArrayTypeReference(JvmGenericArrayTypeReference reference, TypeConformanceComputationArgument.Internal<JvmTypeReference> param) { return genericArrayTypeDispatcher.visit(param.reference, copyArgument(reference, param)); }
@Override public TypeConformanceResult doVisitParameterizedTypeReference(JvmParameterizedTypeReference reference, TypeConformanceComputationArgument.Internal<JvmTypeReference> param) { return parameterizedTypeDispatcher.visit(param.reference, copyArgument(reference, param)); }
@Override public TypeConformanceResult doVisitWildcardTypeReference(JvmWildcardTypeReference reference, TypeConformanceComputationArgument.Internal<JvmTypeReference> param) { return wildcardTypeDispatcher.visit(param.reference, copyArgument(reference, param)); }
@Override public TypeConformanceResult doVisitSynonymTypeReference(JvmSynonymTypeReference reference, TypeConformanceComputationArgument.Internal<JvmTypeReference> param) { return synonymTypeDispatcher.visit(param.reference, copyArgument(reference, param)); }
public TypeConformanceResult doVisitSpecializedTypeReference(T left, JvmSpecializedTypeReference right, TypeConformanceComputationArgument.Internal<T> parameter) { TypeConformanceResult result = visit(right.getEquivalent(), parameter); return result; }
@Override public TypeConformanceResult doVisitAnyTypeReference(JvmAnyTypeReference reference, TypeConformanceComputationArgument.Internal<JvmTypeReference> param) { return anyTypeDispatcher.visit(param.reference, copyArgument(reference, param)); }
@Override public TypeConformanceResult doVisitMultiTypeReference(JvmMultiTypeReference reference, TypeConformanceComputationArgument.Internal<JvmTypeReference> param) { return multiTypeDispatcher.visit(param.reference, copyArgument(reference, param)); }
@Override public TypeConformanceResult doVisitUnknownTypeReference(JvmUnknownTypeReference reference, TypeConformanceComputationArgument.Internal<JvmTypeReference> param) { return unknownTypeDispatcher.visit(param.reference, copyArgument(reference, param)); }
public TypeConformanceResult doVisitDelegateTypeReference(T left, JvmDelegateTypeReference right, TypeConformanceComputationArgument.Internal<T> parameter) { TypeConformanceResult result = visit(right.getDelegate(), parameter); return result; }
public TypeConformanceResult doVisitMultiTypeReference(T left, JvmMultiTypeReference right, TypeConformanceComputationArgument.Internal<T> param) { for(JvmTypeReference reference: right.getReferences()) { TypeConformanceResult result = visit(reference, param); if (result.isConformant()) return result; } if (right.getReferences().isEmpty()) return TypeConformanceResult.SUCCESS; return TypeConformanceResult.FAILED; }
public TypeConformanceResult doVisitSynonymTypeReference(T left, JvmSynonymTypeReference right, TypeConformanceComputationArgument.Internal<T> param) { List<JvmTypeReference> rightComponents = right.getReferences(); if (rightComponents.isEmpty()) return TypeConformanceResult.FAILED; for(int i = 0; i < rightComponents.size(); i++) { TypeConformanceResult candidate = visit(rightComponents.get(i), param); if (candidate.isConformant()) { if (i == 0) return candidate; TypeConformanceResult result = TypeConformanceResult.merge(candidate, new TypeConformanceResult(TypeConformanceResult.Kind.SYNONYM)); result.setSynonymIndex(i); result.setConversion(rightComponents.get(0), rightComponents.get(i)); return result; } } return TypeConformanceResult.FAILED; }