diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java index 7c9459ef530..0a88c19e989 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/AlternativeSignatureParsing.java @@ -33,6 +33,7 @@ import org.jetbrains.jet.lang.types.JetTypeImpl; import org.jetbrains.jet.lang.types.TypeProjection; import org.jetbrains.jet.lang.types.TypeUtils; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; +import org.jetbrains.jet.resolve.DescriptorRenderer; import java.util.ArrayList; import java.util.List; @@ -75,6 +76,14 @@ class AlternativeSignatureParsing { private JetType visitCommonType(JetTypeElement type) { try { List arguments = autoType.getArguments(); + + if (arguments.size() != type.getTypeArgumentsAsTypes().size()) { + throw new AlternativeSignatureMismatchException(String.format( + "'%s' type in method signature has %d type arguments, while '%s' in alternative signature has %d of them", + DescriptorRenderer.TEXT.renderType(autoType), arguments.size(), + type.getText(), type.getTypeArgumentsAsTypes().size())); + } + List altArguments = new ArrayList(); for (int i = 0, size = arguments.size(); i < size; i++) { JetTypeElement argumentAlternativeTypeElement = type.getTypeArgumentsAsTypes().get(i).getTypeElement(); diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.java b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.java new file mode 100644 index 00000000000..484ce0e42a0 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.java @@ -0,0 +1,12 @@ +package test; + +import java.lang.UnsupportedOperationException; +import java.util.*; +import jet.runtime.typeinfo.KotlinSignature; + +public class WrongReturnTypeStructure { + @KotlinSignature("fun foo(a : String, b : List?>) : String?") + public String foo(String a, List> b) { + throw new UnsupportedOperationException(); + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.kt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.kt new file mode 100644 index 00000000000..3ad5358f390 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.kt @@ -0,0 +1,7 @@ +package test + +import java.util.* + +public open class WrongReturnTypeStructure : Object() { + public open fun foo(p0 : String?, p1 : List?>?) : String? = "" +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.txt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.txt new file mode 100644 index 00000000000..b0374efd9a6 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongReturnTypeStructure.txt @@ -0,0 +1,6 @@ +namespace test + +public open class test.WrongReturnTypeStructure : java.lang.Object { + public final /*constructor*/ fun (): test.WrongReturnTypeStructure + public open fun foo(/*0*/ p0: jet.String?, /*1*/ p1: java.util.List?>?): jet.String? +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.java b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.java new file mode 100644 index 00000000000..873d96e9154 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.java @@ -0,0 +1,14 @@ +package test; + +import java.lang.UnsupportedOperationException; +import java.util.*; +import java.util.BitSet; +import java.util.List; + +import jet.runtime.typeinfo.KotlinSignature; + +public class WrongTypeParameterBoundStructure1 { + @KotlinSignature("fun > foo(a : A, b : List, c: List) where B : List") + public > void foo(A a, List b, List list) { + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.kt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.kt new file mode 100644 index 00000000000..8dd4d5e9288 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.kt @@ -0,0 +1,8 @@ +package test + +import java.util.* + +public open class WrongTypeParameterBoundStructure1 : Object() { + public open fun foo(p0 : A?, p1 : List?, p2: List?) where B : List? { + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.txt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.txt new file mode 100644 index 00000000000..248bf8f3801 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure1.txt @@ -0,0 +1,6 @@ +namespace test + +public open class test.WrongTypeParameterBoundStructure1 : java.lang.Object { + public final /*constructor*/ fun (): test.WrongTypeParameterBoundStructure1 + public open fun ?>foo(/*0*/ p0: A?, /*1*/ p1: java.util.List?, /*2*/ p2: java.util.List?): jet.Tuple0 +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.java b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.java new file mode 100644 index 00000000000..7f0b443bcf5 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.java @@ -0,0 +1,14 @@ +package test; + +import java.lang.UnsupportedOperationException; +import java.util.*; +import java.util.BitSet; +import java.util.List; + +import jet.runtime.typeinfo.KotlinSignature; + +public class WrongTypeParameterBoundStructure2 { + @KotlinSignature("fun foo(a : A, b : List, c: List) where B : List") + public > void foo(A a, List b, List list) { + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.kt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.kt new file mode 100644 index 00000000000..237e6cf856a --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.kt @@ -0,0 +1,8 @@ +package test + +import java.util.* + +public open class WrongTypeParameterBoundStructure2 : Object() { + public open fun foo(p0 : A?, p1 : List?, p2: List?) where B : List? { + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.txt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.txt new file mode 100644 index 00000000000..7afa15e6cc7 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongTypeParameterBoundStructure2.txt @@ -0,0 +1,6 @@ +namespace test + +public open class test.WrongTypeParameterBoundStructure2 : java.lang.Object { + public final /*constructor*/ fun (): test.WrongTypeParameterBoundStructure2 + public open fun ?>foo(/*0*/ p0: A?, /*1*/ p1: java.util.List?, /*2*/ p2: java.util.List?): jet.Tuple0 +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.java b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.java new file mode 100644 index 00000000000..89bc4c33557 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.java @@ -0,0 +1,12 @@ +package test; + +import java.lang.UnsupportedOperationException; +import java.util.*; +import jet.runtime.typeinfo.KotlinSignature; + +public class WrongValueParameterStructure1 { + @KotlinSignature("fun foo(a : String, b : List?>) : String") + public String foo(String a, List> b) { + throw new UnsupportedOperationException(); + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.kt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.kt new file mode 100644 index 00000000000..72153127f18 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.kt @@ -0,0 +1,7 @@ +package test + +import java.util.* + +public open class WrongValueParameterStructure1 : Object() { + public open fun foo(p0 : String?, p1 : List?>?) : String? = "" +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.txt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.txt new file mode 100644 index 00000000000..1b384389793 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure1.txt @@ -0,0 +1,6 @@ +namespace test + +public open class test.WrongValueParameterStructure1 : java.lang.Object { + public final /*constructor*/ fun (): test.WrongValueParameterStructure1 + public open fun foo(/*0*/ p0: jet.String?, /*1*/ p1: java.util.List?>?): jet.String? +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.java b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.java new file mode 100644 index 00000000000..fd15f964345 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.java @@ -0,0 +1,12 @@ +package test; + +import java.lang.UnsupportedOperationException; +import java.util.*; +import jet.runtime.typeinfo.KotlinSignature; + +public class WrongValueParameterStructure2 { + @KotlinSignature("fun foo(a : String, b : List?>) : String") + public String foo(String a, List> b) { + throw new UnsupportedOperationException(); + } +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.kt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.kt new file mode 100644 index 00000000000..9a0e3b9c62c --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.kt @@ -0,0 +1,7 @@ +package test + +import java.util.* + +public open class WrongValueParameterStructure2 : Object() { + public open fun foo(p0 : String?, p1 : List?>?) : String? = "" +} diff --git a/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.txt b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.txt new file mode 100644 index 00000000000..c2f053e8203 --- /dev/null +++ b/compiler/testData/readJavaBinaryClass/kotlinSignature/error/WrongValueParameterStructure2.txt @@ -0,0 +1,6 @@ +namespace test + +public open class test.WrongValueParameterStructure2 : java.lang.Object { + public final /*constructor*/ fun (): test.WrongValueParameterStructure2 + public open fun foo(/*0*/ p0: jet.String?, /*1*/ p1: java.util.List?>?): jet.String? +}