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;
|
||||
// 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
|
||||
if (isTypeParameter(lhsType) || isTypeParameter(rhsType)) return true;
|
||||
if (TypeUtils.isTypeParameter(lhsType) || TypeUtils.isTypeParameter(rhsType)) return true;
|
||||
if (isFinal(lhsType) || isFinal(rhsType)) return false;
|
||||
if (isTrait(lhsType) || isTrait(rhsType)) return true;
|
||||
return false;
|
||||
@@ -97,10 +97,6 @@ public class CastDiagnosticsUtil {
|
||||
return result;
|
||||
}
|
||||
|
||||
private static boolean isTypeParameter(@NotNull JetType type) {
|
||||
return type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor;
|
||||
}
|
||||
|
||||
private static boolean isFinal(@NotNull JetType type) {
|
||||
return !TypeUtils.canHaveSubtypes(JetTypeChecker.DEFAULT, type);
|
||||
}
|
||||
@@ -124,7 +120,7 @@ public class CastDiagnosticsUtil {
|
||||
if (typeChecker.isSubtypeOf(supertype, subtype)) return false;
|
||||
|
||||
// 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
|
||||
// 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())) {
|
||||
return true;
|
||||
}
|
||||
if (type.getConstructor().getDeclarationDescriptor() instanceof TypeParameterDescriptor) {
|
||||
if (isTypeParameter(type)) {
|
||||
return hasNullableSuperType(type);
|
||||
}
|
||||
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 final JetType delegate;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user