Simplified signatures propagation for vararg types
(do not change flexible types)
This commit is contained in:
+2
-19
@@ -368,34 +368,17 @@ public class SignaturesPropagationData {
|
||||
return new VarargCheckResult(originalType, originalVarargElementType != null);
|
||||
}
|
||||
|
||||
KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance();
|
||||
// todo simplify (with respect to platform types)
|
||||
if (someSupersVararg && originalVarargElementType == null) {
|
||||
// convert to vararg
|
||||
|
||||
assert isArrayType(originalType);
|
||||
|
||||
if (KotlinBuiltIns.isPrimitiveArray(originalType)) {
|
||||
// replace IntArray? with IntArray
|
||||
return new VarargCheckResult(TypeUtils.makeNotNullable(originalType), true);
|
||||
}
|
||||
|
||||
// replace Array<out Foo>? with Array<Foo>
|
||||
JetType varargElementType = builtIns.getArrayElementType(originalType);
|
||||
return new VarargCheckResult(builtIns.getArrayType(INVARIANT, varargElementType), true);
|
||||
return new VarargCheckResult(TypeUtils.makeNotNullable(originalType), true);
|
||||
}
|
||||
else if (someSupersNotVararg && originalVarargElementType != null) {
|
||||
// convert to non-vararg
|
||||
|
||||
assert isArrayType(originalType);
|
||||
|
||||
if (KotlinBuiltIns.isPrimitiveArray(originalType)) {
|
||||
// replace IntArray with IntArray?
|
||||
return new VarargCheckResult(TypeUtils.makeNullable(originalType), false);
|
||||
}
|
||||
|
||||
// replace Array<Foo> with Array<out Foo>?
|
||||
return new VarargCheckResult(TypeUtils.makeNullable(builtIns.getArrayType(OUT_VARIANCE, originalVarargElementType)), false);
|
||||
return new VarargCheckResult(TypeUtils.makeNullable(originalType), false);
|
||||
}
|
||||
return new VarargCheckResult(originalType, originalVarargElementType != null);
|
||||
}
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ public trait InheritNotVararg {
|
||||
|
||||
public trait Sub : test.InheritNotVararg.Super {
|
||||
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.Array<out kotlin.String!>?): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ p0: (kotlin.Array<kotlin.String!>?..kotlin.Array<out kotlin.String!>?)): kotlin.Unit
|
||||
}
|
||||
|
||||
public trait Super {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ public trait InheritNotVarargInteger {
|
||||
|
||||
public trait Sub : test.InheritNotVarargInteger.Super {
|
||||
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ p0: kotlin.Array<out kotlin.Int!>?): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ p0: (kotlin.Array<kotlin.Int!>?..kotlin.Array<out kotlin.Int!>?)): kotlin.Unit
|
||||
}
|
||||
|
||||
public trait Super {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ public trait InheritNotVarargNotNull {
|
||||
|
||||
public trait Sub : test.InheritNotVarargNotNull.Super {
|
||||
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ p: kotlin.Array<out kotlin.String!>?): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ p: (kotlin.Array<kotlin.String!>?..kotlin.Array<out kotlin.String!>?)): kotlin.Unit
|
||||
}
|
||||
|
||||
public trait Super {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ public trait InheritVararg {
|
||||
|
||||
public trait Sub : test.InheritVararg.Super {
|
||||
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ vararg p0: kotlin.String! /*kotlin.Array<kotlin.String!>*/): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ vararg p0: kotlin.String! /*kotlin.Array<(out) kotlin.String!>!*/): kotlin.Unit
|
||||
}
|
||||
|
||||
public trait Super {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ public trait InheritVarargInteger {
|
||||
|
||||
public trait Sub : test.InheritVarargInteger.Super {
|
||||
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ vararg p0: kotlin.Int! /*kotlin.Array<kotlin.Int!>*/): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ vararg p0: kotlin.Int! /*kotlin.Array<(out) kotlin.Int!>!*/): kotlin.Unit
|
||||
}
|
||||
|
||||
public trait Super {
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ public trait InheritVarargNotNull {
|
||||
|
||||
public trait Sub : test.InheritVarargNotNull.Super {
|
||||
public abstract override /*1*/ /*fake_override*/ fun dummy(): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ vararg p: kotlin.String! /*kotlin.Array<kotlin.String!>*/): kotlin.Unit
|
||||
public abstract override /*1*/ fun foo(/*0*/ vararg p: kotlin.String! /*kotlin.Array<(out) kotlin.String!>!*/): kotlin.Unit
|
||||
}
|
||||
|
||||
public trait Super {
|
||||
|
||||
Reference in New Issue
Block a user