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.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingTrace;
|
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.CollectionClassMapping;
|
||||||
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper;
|
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 java.util.*;
|
||||||
|
|
||||||
|
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getFQName;
|
||||||
|
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getVarargParameterType;
|
||||||
|
|
||||||
public class SignaturesPropagationData {
|
public class SignaturesPropagationData {
|
||||||
private final List<TypeParameterDescriptor> modifiedTypeParameters;
|
private final List<TypeParameterDescriptor> modifiedTypeParameters;
|
||||||
private final JavaDescriptorResolver.ValueParameterDescriptors modifiedValueParameters;
|
private final JavaDescriptorResolver.ValueParameterDescriptors modifiedValueParameters;
|
||||||
@@ -210,8 +212,8 @@ public class SignaturesPropagationData {
|
|||||||
Collections.sort(superFunctions, new Comparator<FunctionDescriptor>() {
|
Collections.sort(superFunctions, new Comparator<FunctionDescriptor>() {
|
||||||
@Override
|
@Override
|
||||||
public int compare(FunctionDescriptor fun1, FunctionDescriptor fun2) {
|
public int compare(FunctionDescriptor fun1, FunctionDescriptor fun2) {
|
||||||
FqNameUnsafe fqName1 = DescriptorUtils.getFQName(fun1.getContainingDeclaration());
|
FqNameUnsafe fqName1 = getFQName(fun1.getContainingDeclaration());
|
||||||
FqNameUnsafe fqName2 = DescriptorUtils.getFQName(fun2.getContainingDeclaration());
|
FqNameUnsafe fqName2 = getFQName(fun2.getContainingDeclaration());
|
||||||
return fqName1.getFqName().compareTo(fqName2.getFqName());
|
return fqName1.getFqName().compareTo(fqName2.getFqName());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -244,13 +246,14 @@ public class SignaturesPropagationData {
|
|||||||
|
|
||||||
// convert to vararg; replace Array<out Foo>? with Array<Foo>
|
// convert to vararg; replace Array<out Foo>? with Array<Foo>
|
||||||
JetType varargElementType = KotlinBuiltIns.getInstance().getArrayElementType(originalType);
|
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) {
|
else if (someSupersNotVararg && originalVarargElementType != null) {
|
||||||
assert isArrayType(originalType);
|
assert isArrayType(originalType);
|
||||||
|
|
||||||
// convert to non-vararg; replace Array<Foo> with Array<out Foo>?
|
// 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);
|
return new VarargCheckResult(originalType, originalVarargElementType != null);
|
||||||
@@ -524,18 +527,6 @@ public class SignaturesPropagationData {
|
|||||||
return builtIns.isArray(type) || builtIns.isPrimitiveArray(type);
|
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 {
|
private static class VarargCheckResult {
|
||||||
public final JetType parameterType;
|
public final JetType parameterType;
|
||||||
public final boolean isVararg;
|
public final boolean isVararg;
|
||||||
|
|||||||
@@ -474,7 +474,7 @@ public class DescriptorResolver {
|
|||||||
JetType variableType = type;
|
JetType variableType = type;
|
||||||
if (valueParameter.hasModifier(JetTokens.VARARG_KEYWORD)) {
|
if (valueParameter.hasModifier(JetTokens.VARARG_KEYWORD)) {
|
||||||
varargElementType = type;
|
varargElementType = type;
|
||||||
variableType = getVarargParameterType(type);
|
variableType = DescriptorUtils.getVarargParameterType(type);
|
||||||
}
|
}
|
||||||
MutableValueParameterDescriptor valueParameterDescriptor = new ValueParameterDescriptorImpl(
|
MutableValueParameterDescriptor valueParameterDescriptor = new ValueParameterDescriptorImpl(
|
||||||
declarationDescriptor,
|
declarationDescriptor,
|
||||||
@@ -491,16 +491,6 @@ public class DescriptorResolver {
|
|||||||
return valueParameterDescriptor;
|
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(
|
public List<TypeParameterDescriptorImpl> resolveTypeParametersForCallableDescriptor(
|
||||||
DeclarationDescriptor containingDescriptor,
|
DeclarationDescriptor containingDescriptor,
|
||||||
WritableScope extensibleScope,
|
WritableScope extensibleScope,
|
||||||
@@ -705,7 +695,7 @@ public class DescriptorResolver {
|
|||||||
type = ErrorUtils.createErrorType("Annotation is absent");
|
type = ErrorUtils.createErrorType("Annotation is absent");
|
||||||
}
|
}
|
||||||
if (parameter.hasModifier(JetTokens.VARARG_KEYWORD)) {
|
if (parameter.hasModifier(JetTokens.VARARG_KEYWORD)) {
|
||||||
return getVarargParameterType(type);
|
return DescriptorUtils.getVarargParameterType(type);
|
||||||
}
|
}
|
||||||
return 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.DescriptorSubstitutor;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.TypeUtils;
|
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.checker.JetTypeChecker;
|
||||||
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns;
|
||||||
|
|
||||||
@@ -391,4 +392,21 @@ public class DescriptorUtils {
|
|||||||
return propertyDescriptor.getVisibility() != Visibilities.PRIVATE || isClassObject(propertyDescriptor.getContainingDeclaration())
|
return propertyDescriptor.getVisibility() != Visibilities.PRIVATE || isClassObject(propertyDescriptor.getContainingDeclaration())
|
||||||
|| propertyDescriptor.getContainingDeclaration() instanceof NamespaceDescriptor;
|
|| 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