Merged similar methods into getVarargParameterType.
This commit is contained in:
+8
-17
@@ -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<TypeParameterDescriptor> modifiedTypeParameters;
|
||||
private final JavaDescriptorResolver.ValueParameterDescriptors modifiedValueParameters;
|
||||
@@ -210,8 +212,8 @@ public class SignaturesPropagationData {
|
||||
Collections.sort(superFunctions, new Comparator<FunctionDescriptor>() {
|
||||
@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<out Foo>? with Array<Foo>
|
||||
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<Foo> with Array<out Foo>?
|
||||
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;
|
||||
|
||||
@@ -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<TypeParameterDescriptorImpl> 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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user