Use new method instead of some usages of KotlinBuiltIns.getInstance()

This commit is contained in:
Pavel V. Talanov
2015-09-16 15:10:34 +03:00
parent 22c250778e
commit 0fc23fc426
7 changed files with 31 additions and 22 deletions
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.Variance.IN_VARIANCE import org.jetbrains.kotlin.types.Variance.IN_VARIANCE
import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE import org.jetbrains.kotlin.types.Variance.OUT_VARIANCE
import org.jetbrains.kotlin.types.typeUtil.builtIns
public class CapturedTypeConstructor( public class CapturedTypeConstructor(
public val typeProjection: TypeProjection public val typeProjection: TypeProjection
@@ -38,7 +39,7 @@ public class CapturedTypeConstructor(
val superType = if (typeProjection.getProjectionKind() == Variance.OUT_VARIANCE) val superType = if (typeProjection.getProjectionKind() == Variance.OUT_VARIANCE)
typeProjection.getType() typeProjection.getType()
else else
KotlinBuiltIns.getInstance().getNullableAnyType() builtIns.nullableAnyType
return listOf(superType) return listOf(superType)
} }
@@ -74,10 +75,10 @@ public class CapturedType(
} }
override val subTypeRepresentative: JetType override val subTypeRepresentative: JetType
get() = representative(OUT_VARIANCE, KotlinBuiltIns.getInstance().getNullableAnyType()) get() = representative(OUT_VARIANCE, builtIns.nullableAnyType)
override val superTypeRepresentative: JetType override val superTypeRepresentative: JetType
get() = representative(IN_VARIANCE, KotlinBuiltIns.getInstance().getNothingType()) get() = representative(IN_VARIANCE, builtIns.nothingType)
private fun representative(variance: Variance, default: JetType) = private fun representative(variance: Variance, default: JetType) =
if (typeProjection.getProjectionKind() == variance) typeProjection.getType() else default if (typeProjection.getProjectionKind() == variance) typeProjection.getType() else default
@@ -36,6 +36,7 @@ import org.jetbrains.kotlin.types.TypeUtils.DONT_CARE
import org.jetbrains.kotlin.types.checker.JetTypeChecker import org.jetbrains.kotlin.types.checker.JetTypeChecker
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure import org.jetbrains.kotlin.types.checker.TypeCheckingProcedure
import org.jetbrains.kotlin.types.checker.TypeCheckingProcedureCallbacks import org.jetbrains.kotlin.types.checker.TypeCheckingProcedureCallbacks
import org.jetbrains.kotlin.types.typeUtil.builtIns
import org.jetbrains.kotlin.types.typeUtil.getNestedArguments import org.jetbrains.kotlin.types.typeUtil.getNestedArguments
import org.jetbrains.kotlin.types.typeUtil.isDefaultBound import org.jetbrains.kotlin.types.typeUtil.isDefaultBound
import java.util.* import java.util.*
@@ -520,7 +521,7 @@ fun createTypeForFunctionPlaceholder(
functionPlaceholderTypeConstructor.getArgumentTypes() functionPlaceholderTypeConstructor.getArgumentTypes()
} }
val receiverType = if (isExtension) DONT_CARE else null val receiverType = if (isExtension) DONT_CARE else null
return KotlinBuiltIns.getInstance().getFunctionType(Annotations.EMPTY, receiverType, newArgumentTypes, DONT_CARE) return functionPlaceholder.builtIns.getFunctionType(Annotations.EMPTY, receiverType, newArgumentTypes, DONT_CARE)
} }
private fun TypeSubstitutor.setApproximateCapturedTypes(): TypeSubstitutor { private fun TypeSubstitutor.setApproximateCapturedTypes(): TypeSubstitutor {
@@ -23,7 +23,8 @@ import org.jetbrains.kotlin.resolve.calls.inference.isCaptured
import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns import org.jetbrains.kotlin.resolve.descriptorUtil.builtIns
import org.jetbrains.kotlin.types.* import org.jetbrains.kotlin.types.*
import org.jetbrains.kotlin.types.checker.JetTypeChecker import org.jetbrains.kotlin.types.checker.JetTypeChecker
import java.util.ArrayList import org.jetbrains.kotlin.types.typeUtil.builtIns
import java.util.*
public data class ApproximationBounds<T>( public data class ApproximationBounds<T>(
public val lower: T, public val lower: T,
@@ -39,10 +40,6 @@ private class TypeArgument(
get() = JetTypeChecker.DEFAULT.isSubtypeOf(inProjection, outProjection) get() = JetTypeChecker.DEFAULT.isSubtypeOf(inProjection, outProjection)
} }
private val NULLABLE_ANY = KotlinBuiltIns.getInstance().getNullableAnyType()
private val NOTHING = KotlinBuiltIns.getInstance().getNothingType()
private fun TypeArgument.toTypeProjection(): TypeProjection { private fun TypeArgument.toTypeProjection(): TypeProjection {
assert(isConsistent) { "Only consistent enhanced type propection can be converted to type projection" } assert(isConsistent) { "Only consistent enhanced type propection can be converted to type projection" }
fun removeProjectionIfRedundant(variance: Variance) = if (variance == typeParameter.getVariance()) Variance.INVARIANT else variance fun removeProjectionIfRedundant(variance: Variance) = if (variance == typeParameter.getVariance()) Variance.INVARIANT else variance
@@ -58,8 +55,8 @@ private fun TypeArgument.toTypeProjection(): TypeProjection {
private fun TypeProjection.toTypeArgument(typeParameter: TypeParameterDescriptor) = private fun TypeProjection.toTypeArgument(typeParameter: TypeParameterDescriptor) =
when (TypeSubstitutor.combine(typeParameter.getVariance(), getProjectionKind()) : Variance) { when (TypeSubstitutor.combine(typeParameter.getVariance(), getProjectionKind()) : Variance) {
Variance.INVARIANT -> TypeArgument(typeParameter, getType(), getType()) Variance.INVARIANT -> TypeArgument(typeParameter, getType(), getType())
Variance.IN_VARIANCE -> TypeArgument(typeParameter, getType(), typeParameter.builtIns.getNullableAnyType()) Variance.IN_VARIANCE -> TypeArgument(typeParameter, getType(), typeParameter.builtIns.nullableAnyType)
Variance.OUT_VARIANCE -> TypeArgument(typeParameter, typeParameter.builtIns.getNothingType(), getType()) Variance.OUT_VARIANCE -> TypeArgument(typeParameter, typeParameter.builtIns.nothingType, type)
} }
public fun approximateCapturedTypesIfNecessary(typeProjection: TypeProjection?): TypeProjection? { public fun approximateCapturedTypesIfNecessary(typeProjection: TypeProjection?): TypeProjection? {
@@ -97,8 +94,8 @@ public fun approximateCapturedTypes(type: JetType): ApproximationBounds<JetType>
val bound = typeProjection.getType().makeNullableIfNeeded() val bound = typeProjection.getType().makeNullableIfNeeded()
return when (typeProjection.getProjectionKind()) { return when (typeProjection.getProjectionKind()) {
Variance.IN_VARIANCE -> ApproximationBounds(bound, NULLABLE_ANY) Variance.IN_VARIANCE -> ApproximationBounds(bound, type.builtIns.nullableAnyType)
Variance.OUT_VARIANCE -> ApproximationBounds(NOTHING.makeNullableIfNeeded(), bound) Variance.OUT_VARIANCE -> ApproximationBounds(type.builtIns.nothingType.makeNullableIfNeeded(), bound)
else -> throw AssertionError("Only nontrivial projections should have been captured, not: $typeProjection") else -> throw AssertionError("Only nontrivial projections should have been captured, not: $typeProjection")
} }
} }
@@ -114,7 +111,7 @@ public fun approximateCapturedTypes(type: JetType): ApproximationBounds<JetType>
} }
val lowerBoundIsTrivial = lowerBoundArguments.any { !it.isConsistent } val lowerBoundIsTrivial = lowerBoundArguments.any { !it.isConsistent }
return ApproximationBounds( return ApproximationBounds(
if (lowerBoundIsTrivial) NOTHING else type.replaceTypeArguments(lowerBoundArguments), if (lowerBoundIsTrivial) type.builtIns.nothingType else type.replaceTypeArguments(lowerBoundArguments),
type.replaceTypeArguments(upperBoundArguments)) type.replaceTypeArguments(upperBoundArguments))
} }
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor; import org.jetbrains.kotlin.descriptors.ClassifierDescriptor;
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor; import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor;
import org.jetbrains.kotlin.descriptors.annotations.Annotations; import org.jetbrains.kotlin.descriptors.annotations.Annotations;
import org.jetbrains.kotlin.resolve.descriptorUtil.DescriptorUtilsKt;
import org.jetbrains.kotlin.resolve.scopes.JetScope; import org.jetbrains.kotlin.resolve.scopes.JetScope;
import org.jetbrains.kotlin.types.checker.JetTypeChecker; import org.jetbrains.kotlin.types.checker.JetTypeChecker;
import org.jetbrains.kotlin.types.typeUtil.TypeUtilPackage; import org.jetbrains.kotlin.types.typeUtil.TypeUtilPackage;
@@ -67,13 +68,13 @@ public class CommonSupertypes {
return max; return max;
} }
private static int depth(@NotNull JetType type) { private static int depth(@NotNull final JetType type) {
return 1 + maxDepth(KotlinPackage.map(type.getArguments(), new Function1<TypeProjection, JetType>() { return 1 + maxDepth(KotlinPackage.map(type.getArguments(), new Function1<TypeProjection, JetType>() {
@Override @Override
public JetType invoke(TypeProjection projection) { public JetType invoke(TypeProjection projection) {
if (projection.isStarProjection()) { if (projection.isStarProjection()) {
// any type is good enough for depth here // any type is good enough for depth here
return KotlinBuiltIns.getInstance().getAnyType(); return type.getConstructor().getBuiltIns().getAnyType();
} }
return projection.getType(); return projection.getType();
} }
@@ -136,7 +137,8 @@ public class CommonSupertypes {
// Everything deleted => it's Nothing or Nothing? // Everything deleted => it's Nothing or Nothing?
if (typeSet.isEmpty()) { if (typeSet.isEmpty()) {
// TODO : attributes // TODO : attributes
return nullable ? KotlinBuiltIns.getInstance().getNullableNothingType() : KotlinBuiltIns.getInstance().getNothingType(); KotlinBuiltIns builtIns = types.iterator().next().getConstructor().getBuiltIns();
return nullable ? builtIns.getNullableNothingType() : builtIns.getNothingType();
} }
if (typeSet.size() == 1) { if (typeSet.size() == 1) {
@@ -256,7 +258,7 @@ public class CommonSupertypes {
if (recursionDepth >= maxDepth) { if (recursionDepth >= maxDepth) {
// If recursion is too deep, we cut it by taking <out Any?> as an ultimate supertype argument // If recursion is too deep, we cut it by taking <out Any?> as an ultimate supertype argument
// Example: class A : Base<A>; class B : Base<B>, commonSuperType(A, B) = Base<out Any?> // Example: class A : Base<A>; class B : Base<B>, commonSuperType(A, B) = Base<out Any?>
return new TypeProjectionImpl(OUT_VARIANCE, KotlinBuiltIns.getInstance().getNullableAnyType()); return new TypeProjectionImpl(OUT_VARIANCE, DescriptorUtilsKt.getBuiltIns(parameterDescriptor).getNullableAnyType());
} }
Set<JetType> ins = new HashSet<JetType>(); Set<JetType> ins = new HashSet<JetType>();
@@ -161,7 +161,7 @@ public class TypeSubstitutor {
throw new SubstitutionException("Out-projection in in-position"); throw new SubstitutionException("Out-projection in in-position");
case IN_IN_OUT_POSITION: case IN_IN_OUT_POSITION:
// todo use the right type parameter variance and upper bound // todo use the right type parameter variance and upper bound
return new TypeProjectionImpl(Variance.OUT_VARIANCE, KotlinBuiltIns.getInstance().getNullableAnyType()); return new TypeProjectionImpl(Variance.OUT_VARIANCE, type.getConstructor().getBuiltIns().getNullableAnyType());
} }
} }
JetType substitutedType; JetType substitutedType;
@@ -482,15 +482,20 @@ public class TypeUtils {
@Nullable @Nullable
private static JetType getDefaultPrimitiveNumberType(@NotNull Collection<JetType> supertypes) { private static JetType getDefaultPrimitiveNumberType(@NotNull Collection<JetType> supertypes) {
JetType doubleType = KotlinBuiltIns.getInstance().getDoubleType(); if (supertypes.isEmpty()) {
return null;
}
KotlinBuiltIns builtIns = supertypes.iterator().next().getConstructor().getBuiltIns();
JetType doubleType = builtIns.getDoubleType();
if (supertypes.contains(doubleType)) { if (supertypes.contains(doubleType)) {
return doubleType; return doubleType;
} }
JetType intType = KotlinBuiltIns.getInstance().getIntType(); JetType intType = builtIns.getIntType();
if (supertypes.contains(intType)) { if (supertypes.contains(intType)) {
return intType; return intType;
} }
JetType longType = KotlinBuiltIns.getInstance().getLongType(); JetType longType = builtIns.getLongType();
if (supertypes.contains(longType)) { if (supertypes.contains(longType)) {
return longType; return longType;
} }
@@ -43,6 +43,9 @@ public fun JetType.nullability(): TypeNullability {
} }
} }
val JetType.builtIns: KotlinBuiltIns
get() = constructor.builtIns
fun JetType.makeNullable() = TypeUtils.makeNullable(this) fun JetType.makeNullable() = TypeUtils.makeNullable(this)
fun JetType.makeNotNullable() = TypeUtils.makeNotNullable(this) fun JetType.makeNotNullable() = TypeUtils.makeNotNullable(this)