diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java index 801b579885e..4eecef9f415 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java @@ -26,7 +26,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; -import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.java.CollectionClassMapping; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper; @@ -38,6 +37,9 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import java.util.*; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFQName; +import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getVarargParameterType; + public class SignaturesPropagationData { private final List modifiedTypeParameters; private final JavaDescriptorResolver.ValueParameterDescriptors modifiedValueParameters; @@ -210,8 +212,8 @@ public class SignaturesPropagationData { Collections.sort(superFunctions, new Comparator() { @Override public int compare(FunctionDescriptor fun1, FunctionDescriptor fun2) { - FqNameUnsafe fqName1 = DescriptorUtils.getFQName(fun1.getContainingDeclaration()); - FqNameUnsafe fqName2 = DescriptorUtils.getFQName(fun2.getContainingDeclaration()); + FqNameUnsafe fqName1 = getFQName(fun1.getContainingDeclaration()); + FqNameUnsafe fqName2 = getFQName(fun2.getContainingDeclaration()); return fqName1.getFqName().compareTo(fqName2.getFqName()); } }); @@ -244,13 +246,14 @@ public class SignaturesPropagationData { // convert to vararg; replace Array? with Array JetType varargElementType = KotlinBuiltIns.getInstance().getArrayElementType(originalType); - return new VarargCheckResult(getArrayType(varargElementType, Variance.INVARIANT), true); + return new VarargCheckResult(getVarargParameterType(varargElementType), true); } else if (someSupersNotVararg && originalVarargElementType != null) { assert isArrayType(originalType); // convert to non-vararg; replace Array with Array? - return new VarargCheckResult(TypeUtils.makeNullable(getArrayType(originalVarargElementType, Variance.OUT_VARIANCE)), false); + return new VarargCheckResult(TypeUtils.makeNullable(getVarargParameterType(originalVarargElementType, Variance.OUT_VARIANCE)), + false); } return new VarargCheckResult(originalType, originalVarargElementType != null); @@ -524,18 +527,6 @@ public class SignaturesPropagationData { return builtIns.isArray(type) || builtIns.isPrimitiveArray(type); } - @NotNull - private static JetType getArrayType(@NotNull JetType elementType, @NotNull Variance projectionKind) { - KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); - JetType primitiveArrayType = builtIns.getPrimitiveArrayJetTypeByPrimitiveJetType(elementType); - if (primitiveArrayType != null) { - return primitiveArrayType; - } - else { - return builtIns.getArrayType(projectionKind, elementType); - } - } - private static class VarargCheckResult { public final JetType parameterType; public final boolean isVararg; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 419df0f51d8..417ea5a8135 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -474,7 +474,7 @@ public class DescriptorResolver { JetType variableType = type; if (valueParameter.hasModifier(JetTokens.VARARG_KEYWORD)) { varargElementType = type; - variableType = getVarargParameterType(type); + variableType = DescriptorUtils.getVarargParameterType(type); } MutableValueParameterDescriptor valueParameterDescriptor = new ValueParameterDescriptorImpl( declarationDescriptor, @@ -491,16 +491,6 @@ public class DescriptorResolver { return valueParameterDescriptor; } - private JetType getVarargParameterType(JetType type) { - JetType arrayType = KotlinBuiltIns.getInstance().getPrimitiveArrayJetTypeByPrimitiveJetType(type); - if (arrayType != null) { - return arrayType; - } - else { - return KotlinBuiltIns.getInstance().getArrayType(type); - } - } - public List resolveTypeParametersForCallableDescriptor( DeclarationDescriptor containingDescriptor, WritableScope extensibleScope, @@ -705,7 +695,7 @@ public class DescriptorResolver { type = ErrorUtils.createErrorType("Annotation is absent"); } if (parameter.hasModifier(JetTokens.VARARG_KEYWORD)) { - return getVarargParameterType(type); + return DescriptorUtils.getVarargParameterType(type); } return type; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java index 17ed36689b2..c5ac9d493f8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorUtils.java @@ -31,6 +31,7 @@ import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue; import org.jetbrains.jet.lang.types.DescriptorSubstitutor; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; +import org.jetbrains.jet.lang.types.Variance; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -391,4 +392,21 @@ public class DescriptorUtils { return propertyDescriptor.getVisibility() != Visibilities.PRIVATE || isClassObject(propertyDescriptor.getContainingDeclaration()) || propertyDescriptor.getContainingDeclaration() instanceof NamespaceDescriptor; } + + @NotNull + public static JetType getVarargParameterType(@NotNull JetType elementType) { + return getVarargParameterType(elementType, Variance.INVARIANT); + } + + @NotNull + public static JetType getVarargParameterType(@NotNull JetType elementType, @NotNull Variance projectionKind) { + KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); + JetType primitiveArrayType = builtIns.getPrimitiveArrayJetTypeByPrimitiveJetType(elementType); + if (primitiveArrayType != null) { + return primitiveArrayType; + } + else { + return builtIns.getArrayType(projectionKind, elementType); + } + } }