@Override protected TypeConformanceResult handleNullReference(TypeConformanceComputationArgument.Internal<T> parameter) { return new TypeConformanceResult( TypeConformanceResult.Kind.EXCEPTION, new NullPointerException("Reference was null. Arguments were: " + parameter)); }
public static TypeConformanceResult merge(TypeConformanceResult first, TypeConformanceResult second) { TypeConformanceResult result = new TypeConformanceResult(first.getKinds(), null); result.getKinds().addAll(second.getKinds()); result.from = first.from; result.to = first.to; result.synonymIndex = first.synonymIndex; return result; }
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; }
if (rightType instanceof JvmPrimitiveType) { if (isWideningConversion((JvmPrimitiveType)leftType, (JvmPrimitiveType) rightType)) { return new TypeConformanceResult(TypeConformanceResult.Kind.PRIMITIVE_WIDENING); if (potentialPrimitive != rightReference) { if (leftType == potentialPrimitive.getType() || isWideningConversion((JvmPrimitiveType)leftType, (JvmPrimitiveType) potentialPrimitive.getType())) { return new TypeConformanceResult(TypeConformanceResult.Kind.UNBOXING); TypeConformanceResult result = conformanceComputer.isConformant(leftReference, potentialWrapper, param); if (result.isConformant()) { return new TypeConformanceResult(TypeConformanceResult.Kind.BOXING);