Supported propagation of vararg mark.

#KT-2776 in progress
This commit is contained in:
Evgeny Gerashchenko
2012-11-22 17:18:10 +04:00
parent 4df311366d
commit dd671313c5
18 changed files with 287 additions and 2 deletions
@@ -0,0 +1,12 @@
package test;
public interface InheritNotVararg {
public interface Super {
void foo(String[] p);
}
public interface Sub extends Super {
void foo(String... p);
}
}
@@ -0,0 +1,12 @@
package test
public trait InheritNotVararg: Object {
public trait Super: Object {
public fun foo(p0: Array<out String?>?)
}
public trait Sub: Super {
override fun foo(p0: Array<out String?>?)
}
}
@@ -0,0 +1,10 @@
namespace test
public abstract trait test.InheritNotVararg : java.lang.Object {
public abstract trait test.InheritNotVararg.Sub : test.InheritNotVararg.Super {
public abstract override /*1*/ fun foo(/*0*/ p0: jet.Array<out jet.String?>?): jet.Tuple0
}
public abstract trait test.InheritNotVararg.Super : java.lang.Object {
public abstract fun foo(/*0*/ p0: jet.Array<out jet.String?>?): jet.Tuple0
}
}
@@ -0,0 +1,15 @@
package test;
import jet.runtime.typeinfo.KotlinSignature;
public interface InheritNotVarargNotNull {
public interface Super {
@KotlinSignature("fun foo(p: Array<out String>)")
void foo(String[] p);
}
public interface Sub extends Super {
void foo(String... p);
}
}
@@ -0,0 +1,12 @@
package test
public trait InheritNotVarargNotNull: Object {
public trait Super: Object {
public fun foo(p0: Array<out String>)
}
public trait Sub: Super {
override fun foo(p0: Array<out String>)
}
}
@@ -0,0 +1,10 @@
namespace test
public abstract trait test.InheritNotVarargNotNull : java.lang.Object {
public abstract trait test.InheritNotVarargNotNull.Sub : test.InheritNotVarargNotNull.Super {
public abstract override /*1*/ fun foo(/*0*/ p0: jet.Array<out jet.String>): jet.Tuple0
}
public abstract trait test.InheritNotVarargNotNull.Super : java.lang.Object {
public abstract fun foo(/*0*/ p0: jet.Array<out jet.String>): jet.Tuple0
}
}
@@ -0,0 +1,12 @@
package test;
public interface InheritVararg {
public interface Super {
void foo(String... p);
}
public interface Sub extends Super {
void foo(String[] p);
}
}
@@ -0,0 +1,12 @@
package test
public trait InheritVararg: Object {
public trait Super: Object {
public fun foo(vararg p0: String?)
}
public trait Sub: Super {
override fun foo(vararg p0: String?)
}
}
@@ -0,0 +1,10 @@
namespace test
public abstract trait test.InheritVararg : java.lang.Object {
public abstract trait test.InheritVararg.Sub : test.InheritVararg.Super {
public abstract override /*1*/ fun foo(/*0*/ vararg p0: jet.String? /*jet.Array<jet.String?>*/): jet.Tuple0
}
public abstract trait test.InheritVararg.Super : java.lang.Object {
public abstract fun foo(/*0*/ vararg p0: jet.String? /*jet.Array<jet.String?>*/): jet.Tuple0
}
}
@@ -0,0 +1,15 @@
package test;
import jet.runtime.typeinfo.KotlinSignature;
public interface InheritVarargNotNull {
public interface Super {
@KotlinSignature("fun foo(vararg p: String)")
void foo(String... p);
}
public interface Sub extends Super {
void foo(String[] p);
}
}
@@ -0,0 +1,12 @@
package test
public trait InheritVarargNotNull: Object {
public trait Super: Object {
public fun foo(vararg p0: String)
}
public trait Sub: Super {
override fun foo(vararg p0: String)
}
}
@@ -0,0 +1,10 @@
namespace test
public abstract trait test.InheritVarargNotNull : java.lang.Object {
public abstract trait test.InheritVarargNotNull.Sub : test.InheritVarargNotNull.Super {
public abstract override /*1*/ fun foo(/*0*/ vararg p0: jet.String /*jet.Array<jet.String>*/): jet.Tuple0
}
public abstract trait test.InheritVarargNotNull.Super : java.lang.Object {
public abstract fun foo(/*0*/ vararg p0: jet.String /*jet.Array<jet.String>*/): jet.Tuple0
}
}
@@ -0,0 +1,26 @@
package test;
import org.jetbrains.annotations.NotNull;
import java.lang.String;
import java.util.List;
import jet.runtime.typeinfo.KotlinSignature;
import org.jetbrains.jet.jvm.compiler.annotation.ExpectLoadError;
public interface TwoSuperclassesVarargAndNot {
public interface Super1 {
void foo(String... s);
}
public interface Super2 {
void foo(String[] s);
}
public interface Sub extends Super1, Super2 {
@ExpectLoadError("Incompatible projection kinds in type arguments of super methods' return types: [String?, out String?]|" +
"Incompatible super methods: some have vararg parameter, some have not|" +
"Incompatible types in superclasses: [Array<String?>, Array<out String?>?]")
void foo(String[] s);
}
}
@@ -0,0 +1,14 @@
namespace test
public abstract trait test.TwoSuperclassesVarargAndNot : java.lang.Object {
public abstract trait test.TwoSuperclassesVarargAndNot.Sub : test.TwoSuperclassesVarargAndNot.Super1, test.TwoSuperclassesVarargAndNot.Super2 {
public abstract override /*1*/ fun foo(/*0*/ p0: jet.Array<out jet.String?>?): jet.Tuple0
public abstract override /*1*/ /*fake_override*/ fun foo(/*0*/ vararg p0: jet.String? /*jet.Array<jet.String?>*/): jet.Tuple0
}
public abstract trait test.TwoSuperclassesVarargAndNot.Super1 : java.lang.Object {
public abstract fun foo(/*0*/ vararg p0: jet.String? /*jet.Array<jet.String?>*/): jet.Tuple0
}
public abstract trait test.TwoSuperclassesVarargAndNot.Super2 : java.lang.Object {
public abstract fun foo(/*0*/ p0: jet.Array<out jet.String?>?): jet.Tuple0
}
}