Minor, extracted TypeUtils.isTypeParameter
This commit is contained in:
committed by
Andrey Breslav
parent
b09684024b
commit
8e3f87abaf
@@ -47,7 +47,7 @@ public class CastDiagnosticsUtil {
|
|||||||
if (isRelated(lhsType, rhsType, platformToKotlinClassMap)) return true;
|
if (isRelated(lhsType, rhsType, platformToKotlinClassMap)) return true;
|
||||||
// This is an oversimplification (which does not render the method incomplete):
|
// This is an oversimplification (which does not render the method incomplete):
|
||||||
// we consider any type parameter capable of taking any value, which may be made more precise if we considered bounds
|
// we consider any type parameter capable of taking any value, which may be made more precise if we considered bounds
|
||||||
if (isTypeParameter(lhsType) || isTypeParameter(rhsType)) return true;
|
if (TypeUtils.isTypeParameter(lhsType) || TypeUtils.isTypeParameter(rhsType)) return true;
|
||||||
if (isFinal(lhsType) || isFinal(rhsType)) return false;
|
if (isFinal(lhsType) || isFinal(rhsType)) return false;
|
||||||
if (isTrait(lhsType) || isTrait(rhsType)) return true;
|
if (isTrait(lhsType) || isTrait(rhsType)) return true;
|
||||||
return false;
|
return false;
|
||||||
@@ -97,10 +97,6 @@ public class CastDiagnosticsUtil {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isTypeParameter(@NotNull JetType type) {
|
|
||||||
return type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isFinal(@NotNull JetType type) {
|
private static boolean isFinal(@NotNull JetType type) {
|
||||||
return !TypeUtils.canHaveSubtypes(JetTypeChecker.DEFAULT, type);
|
return !TypeUtils.canHaveSubtypes(JetTypeChecker.DEFAULT, type);
|
||||||
}
|
}
|
||||||
@@ -124,7 +120,7 @@ public class CastDiagnosticsUtil {
|
|||||||
if (typeChecker.isSubtypeOf(supertype, subtype)) return false;
|
if (typeChecker.isSubtypeOf(supertype, subtype)) return false;
|
||||||
|
|
||||||
// downcasting to a type parameter is always erased
|
// downcasting to a type parameter is always erased
|
||||||
if (isTypeParameter(subtype)) return true;
|
if (TypeUtils.isTypeParameter(subtype)) return true;
|
||||||
|
|
||||||
// Check that we are actually casting to a generic type
|
// Check that we are actually casting to a generic type
|
||||||
// NOTE: this does not account for 'as Array<List<T>>'
|
// NOTE: this does not account for 'as Array<List<T>>'
|
||||||
|
|||||||
@@ -434,7 +434,7 @@ public class TypeUtils {
|
|||||||
if (TypesPackage.isFlexible(type) && isNullableType(TypesPackage.flexibility(type).getUpperBound())) {
|
if (TypesPackage.isFlexible(type) && isNullableType(TypesPackage.flexibility(type).getUpperBound())) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor) {
|
if (isTypeParameter(type)) {
|
||||||
return hasNullableSuperType(type);
|
return hasNullableSuperType(type);
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@@ -720,6 +720,18 @@ public class TypeUtils {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isTypeParameter(@NotNull JetType type) {
|
||||||
|
return getTypeParameterDescriptorOrNull(type) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public static TypeParameterDescriptor getTypeParameterDescriptorOrNull(@NotNull JetType type) {
|
||||||
|
if (type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor) {
|
||||||
|
return (TypeParameterDescriptor) type.getConstructor().getDeclarationDescriptor();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private static abstract class AbstractTypeWithKnownNullability extends AbstractJetType {
|
private static abstract class AbstractTypeWithKnownNullability extends AbstractJetType {
|
||||||
private final JetType delegate;
|
private final JetType delegate;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user