diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java index 1bfaef40a7e..27ddb5b3fd0 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaTypeTransformer.java @@ -148,7 +148,7 @@ public class JavaTypeTransformer { } else { // 'L extends List' in Java is a List in Kotlin, not a List - boolean nullable = !EnumSet.of(SUPERTYPE_ARGUMENT, SUPERTYPE).contains(howThisTypeIsUsed); + boolean nullable = !EnumSet.of(TYPE_ARGUMENT, SUPERTYPE_ARGUMENT, SUPERTYPE).contains(howThisTypeIsUsed); ClassDescriptor classData = JavaToKotlinClassMap.getInstance().mapKotlinClass(new FqName(psiClass.getQualifiedName()), howThisTypeIsUsed); @@ -228,16 +228,24 @@ public class JavaTypeTransformer { return TypeUtils.makeNullable(jetType); } + boolean vararg = arrayType instanceof PsiEllipsisType; + + Variance projectionKind = arrayElementTypeProjectionKind(vararg); + TypeUsage howArgumentTypeIsUsed = vararg ? MEMBER_SIGNATURE_CONTRAVARIANT : TYPE_ARGUMENT; + + JetType type = transformToType(componentType, howArgumentTypeIsUsed, typeVariableResolver); + return TypeUtils.makeNullable(KotlinBuiltIns.getInstance().getArrayType(projectionKind, type)); + } + + private Variance arrayElementTypeProjectionKind(boolean vararg) { Variance variance; - if (howThisTypeIsUsed == MEMBER_SIGNATURE_CONTRAVARIANT && !(arrayType instanceof PsiEllipsisType)) { + if (howThisTypeIsUsed == MEMBER_SIGNATURE_CONTRAVARIANT && !vararg) { variance = Variance.OUT_VARIANCE; } else { variance = Variance.INVARIANT; } - - JetType type = transformToType(componentType, typeVariableResolver); - return TypeUtils.makeNullable(KotlinBuiltIns.getInstance().getArrayType(variance, type)); + return variance; } @Override diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java index e74d6f6aa84..d9463e67ea7 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/AlternativeMethodSignatureData.java @@ -29,7 +29,10 @@ import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.wrapper.PsiMethodWrapper; import org.jetbrains.jet.lang.resolve.name.Name; -import org.jetbrains.jet.lang.types.*; +import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.lang.types.TypeSubstitutor; +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; @@ -37,6 +40,9 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; +import static org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer.TypeUsage.MEMBER_SIGNATURE_CONTRAVARIANT; +import static org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer.TypeUsage.UPPER_BOUND; + /** * @author Evgeny Gerashchenko * @since 6/5/12 @@ -181,7 +187,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD throw new AlternativeSignatureMismatchException("Parameter in method signature is not vararg, but in alternative signature it is vararg"); } - alternativeType = TypeTransformingVisitor.computeType(alternativeTypeElement, originalParameterDescriptor.getType(), originalToAltTypeParameters); + alternativeType = TypeTransformingVisitor.computeType(alternativeTypeElement, originalParameterDescriptor.getType(), originalToAltTypeParameters, MEMBER_SIGNATURE_CONTRAVARIANT); alternativeVarargElementType = null; } else { @@ -190,7 +196,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD } alternativeVarargElementType = TypeTransformingVisitor.computeType(alternativeTypeElement, originalParamVarargElementType, - originalToAltTypeParameters); + originalToAltTypeParameters, MEMBER_SIGNATURE_CONTRAVARIANT); alternativeType = KotlinBuiltIns.getInstance().getArrayType(alternativeVarargElementType); } @@ -255,7 +261,7 @@ public class AlternativeMethodSignatureData extends ElementAlternativeSignatureD assert (altTypeElement != null); altParamDescriptor.addUpperBound(TypeTransformingVisitor.computeType(altTypeElement, upperBound, - originalToAltTypeParameters)); + originalToAltTypeParameters, UPPER_BOUND)); upperBoundIndex++; } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/ElementAlternativeSignatureData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/ElementAlternativeSignatureData.java index 6002da94dfa..8367749fea7 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/ElementAlternativeSignatureData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/ElementAlternativeSignatureData.java @@ -32,6 +32,8 @@ import org.jetbrains.jet.resolve.DescriptorRenderer; import java.util.List; import java.util.Map; +import static org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer.TypeUsage.MEMBER_SIGNATURE_COVARIANT; + public abstract class ElementAlternativeSignatureData { private String error; private boolean isAnnotated; @@ -102,6 +104,6 @@ public abstract class ElementAlternativeSignatureData { JetTypeElement typeElement = altReturnTypeReference.getTypeElement(); assert (typeElement != null); - return TypeTransformingVisitor.computeType(typeElement, originalType, originalToAltTypeParameters); + return TypeTransformingVisitor.computeType(typeElement, originalType, originalToAltTypeParameters, MEMBER_SIGNATURE_COVARIANT); } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/TypeTransformingVisitor.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/TypeTransformingVisitor.java index 38ebcb60e14..da59349d597 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/TypeTransformingVisitor.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/TypeTransformingVisitor.java @@ -26,6 +26,7 @@ import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.java.JavaToKotlinClassMap; +import org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer; import org.jetbrains.jet.lang.resolve.java.JvmClassName; import org.jetbrains.jet.lang.resolve.java.KotlinToJavaTypesMap; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -35,15 +36,21 @@ import org.jetbrains.jet.resolve.DescriptorRenderer; import java.util.*; +import static org.jetbrains.jet.lang.resolve.java.JavaTypeTransformer.TypeUsage.*; + class TypeTransformingVisitor extends JetVisitor { private final JetType originalType; private final Map originalToAltTypeParameters; + private final JavaTypeTransformer.TypeUsage typeUsage; + private TypeTransformingVisitor( JetType originalType, - Map originalToAltTypeParameters + Map originalToAltTypeParameters, + JavaTypeTransformer.TypeUsage typeUsage ) { this.originalType = originalType; + this.typeUsage = typeUsage; this.originalToAltTypeParameters = Collections.unmodifiableMap(originalToAltTypeParameters); } @@ -51,20 +58,21 @@ class TypeTransformingVisitor extends JetVisitor { public static JetType computeType( @NotNull JetTypeElement alternativeTypeElement, @NotNull JetType originalType, - @NotNull Map originalToAltTypeParameters + @NotNull Map originalToAltTypeParameters, + @NotNull JavaTypeTransformer.TypeUsage typeUsage ) { - JetType computedType = alternativeTypeElement.accept(new TypeTransformingVisitor(originalType, originalToAltTypeParameters), null); + JetType computedType = alternativeTypeElement.accept(new TypeTransformingVisitor(originalType, originalToAltTypeParameters, typeUsage), null); assert (computedType != null); return computedType; } @Override public JetType visitNullableType(JetNullableType nullableType, Void aVoid) { - if (!originalType.isNullable()) { + if (!originalType.isNullable() && typeUsage != TYPE_ARGUMENT) { throw new AlternativeSignatureMismatchException("Auto type '%s' is not-null, while type in alternative signature is nullable: '%s'", DescriptorRenderer.TEXT.renderType(originalType), nullableType.getText()); } - return TypeUtils.makeNullable(computeType(nullableType.getInnerType(), originalType, originalToAltTypeParameters)); + return TypeUtils.makeNullable(computeType(nullableType.getInnerType(), originalType, originalToAltTypeParameters, typeUsage)); } @Override @@ -134,7 +142,7 @@ class TypeTransformingVisitor extends JetVisitor { assert argumentAlternativeTypeElement != null; TypeProjection argument = arguments.get(i); - JetType alternativeArgumentType = computeType(argumentAlternativeTypeElement, argument.getType(), originalToAltTypeParameters); + JetType alternativeArgumentType = computeType(argumentAlternativeTypeElement, argument.getType(), originalToAltTypeParameters, TYPE_ARGUMENT); Variance projectionKind = argument.getProjectionKind(); Variance altProjectionKind; if (type instanceof JetUserType) { diff --git a/compiler/testData/loadJava/ArrayTypeVariance.kt b/compiler/testData/loadJava/ArrayTypeVariance.kt index 7883a32e19b..54089f097d4 100644 --- a/compiler/testData/loadJava/ArrayTypeVariance.kt +++ b/compiler/testData/loadJava/ArrayTypeVariance.kt @@ -1,7 +1,7 @@ package test public class ArrayTypeVariance : java.lang.Object() { - public fun toArray(p0: Array?): Array? { + public fun toArray(p0: Array?): Array? { throw UnsupportedOperationException() } } diff --git a/compiler/testData/loadJava/ArrayTypeVariance.txt b/compiler/testData/loadJava/ArrayTypeVariance.txt index 5ff82f8222c..71f3a033fa4 100644 --- a/compiler/testData/loadJava/ArrayTypeVariance.txt +++ b/compiler/testData/loadJava/ArrayTypeVariance.txt @@ -2,5 +2,5 @@ namespace test public final class test.ArrayTypeVariance : java.lang.Object { public final /*constructor*/ fun (): test.ArrayTypeVariance - public final fun toArray(/*0*/ p0: jet.Array?): jet.Array? + public final fun toArray(/*0*/ p0: jet.Array?): jet.Array? } diff --git a/compiler/testData/loadJava/FieldOfArrayType.kt b/compiler/testData/loadJava/FieldOfArrayType.kt index 128ae0d364c..8b4d9da67bf 100644 --- a/compiler/testData/loadJava/FieldOfArrayType.kt +++ b/compiler/testData/loadJava/FieldOfArrayType.kt @@ -1,5 +1,5 @@ package test public open class FieldOfArrayType() : java.lang.Object() { - public var files: Array? = null + public var files: Array? = null } diff --git a/compiler/testData/loadJava/FieldOfArrayType.txt b/compiler/testData/loadJava/FieldOfArrayType.txt index f654bb68067..e354aa5d6da 100644 --- a/compiler/testData/loadJava/FieldOfArrayType.txt +++ b/compiler/testData/loadJava/FieldOfArrayType.txt @@ -2,5 +2,5 @@ namespace test public open class test.FieldOfArrayType : java.lang.Object { public final /*constructor*/ fun (): test.FieldOfArrayType - public final var files: jet.Array? + public final var files: jet.Array? } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.kt b/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.kt index 3ad5358f390..d3f47dca06b 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.kt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.kt @@ -3,5 +3,5 @@ package test import java.util.* public open class WrongReturnTypeStructure : Object() { - public open fun foo(p0 : String?, p1 : List?>?) : String? = "" + public open fun foo(p0 : String?, p1 : List>?) : String? = "" } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.txt b/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.txt index 633cb59ba14..4007600c3b9 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.txt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongReturnTypeStructure.txt @@ -2,5 +2,5 @@ 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: jet.List?>?): jet.String? + public open fun foo(/*0*/ p0: jet.String?, /*1*/ p1: jet.List>?): jet.String? } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.kt b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.kt index 7ccbfb88025..71092227dbb 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.kt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.kt @@ -3,6 +3,6 @@ package test import java.util.* public open class WrongTypeParameterBoundStructure1 : Object() { - public open fun foo(p0 : A?, p1 : List?) where B : List? { + public open fun foo(p0 : A?, p1 : List?) where B : List? { } } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.txt b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.txt index 18bb06ded17..ed56414d418 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.txt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure1.txt @@ -2,5 +2,5 @@ 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: jet.List?): jet.Tuple0 + public open fun ?>foo(/*0*/ p0: A?, /*1*/ p1: jet.List?): jet.Tuple0 } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.java b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.java index 6c2eaa4d461..54ff2850c6d 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.java +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.java @@ -6,7 +6,7 @@ import jet.runtime.typeinfo.KotlinSignature; import org.jetbrains.jet.jvm.compiler.annotation.ExpectLoadError; public class WrongTypeParameterBoundStructure2 { - @ExpectLoadError("'jet.List?' type in method signature has 1 type arguments, while 'List' in alternative signature has 0 of them") + @ExpectLoadError("'jet.List?' type in method signature has 1 type arguments, while 'List' in alternative signature has 0 of them") @KotlinSignature("fun foo(a : A, b : List) where B : List") public > void foo(A a, List b) { } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.kt b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.kt index 4f8fff9623a..6d553796873 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.kt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.kt @@ -3,6 +3,6 @@ package test import java.util.* public open class WrongTypeParameterBoundStructure2 : Object() { - public open fun foo(p0 : A?, p1 : List?) where B : List? { + public open fun foo(p0 : A?, p1 : List?) where B : List? { } } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.txt b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.txt index 05d74d3f8f0..ffb26374e5d 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.txt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeParameterBoundStructure2.txt @@ -2,5 +2,5 @@ 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: jet.List?): jet.Tuple0 + public open fun ?>foo(/*0*/ p0: A?, /*1*/ p1: jet.List?): jet.Tuple0 } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.kt b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.kt index dddca08bb88..adaf2fad6b2 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.kt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.kt @@ -3,7 +3,7 @@ package test import java.util.* public open class WrongTypeVariance : Object() { - public open fun copy(p0 : Array?, p1 : Array?) : MutableList? { + public open fun copy(p0 : Array?, p1 : Array?) : MutableList? { throw UnsupportedOperationException() } } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.txt b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.txt index b61cc9880f9..17c582864f3 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.txt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongTypeVariance.txt @@ -2,5 +2,5 @@ namespace test public open class test.WrongTypeVariance : java.lang.Object { public final /*constructor*/ fun (): test.WrongTypeVariance - public open fun copy(/*0*/ p0: jet.Array?, /*1*/ p1: jet.Array?): jet.MutableList? + public open fun copy(/*0*/ p0: jet.Array?, /*1*/ p1: jet.Array?): jet.MutableList? } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.kt b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.kt index 72153127f18..70469869cf8 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.kt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.kt @@ -3,5 +3,5 @@ package test import java.util.* public open class WrongValueParameterStructure1 : Object() { - public open fun foo(p0 : String?, p1 : List?>?) : String? = "" + public open fun foo(p0 : String?, p1 : List>?) : String? = "" } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.txt b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.txt index 34118471c98..8a21da86b00 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.txt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure1.txt @@ -2,5 +2,5 @@ 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: jet.List?>?): jet.String? + public open fun foo(/*0*/ p0: jet.String?, /*1*/ p1: jet.List>?): jet.String? } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.java b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.java index 40b9f5a4fcb..ea74515befe 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.java +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.java @@ -5,7 +5,7 @@ import jet.runtime.typeinfo.KotlinSignature; import org.jetbrains.jet.jvm.compiler.annotation.ExpectLoadError; public class WrongValueParameterStructure2 { - @ExpectLoadError("'jet.Map.Entry?' type in method signature has 2 type arguments, while 'Map.Entry' in alternative signature has 1 of them") + @ExpectLoadError("'jet.Map.Entry' type in method signature has 2 type arguments, while 'Map.Entry' in alternative signature has 1 of them") @KotlinSignature("fun foo(a : String, b : List?>) : String") public String foo(String a, List> b) { throw new UnsupportedOperationException(); diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.kt b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.kt index 9a0e3b9c62c..5cf766dc255 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.kt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.kt @@ -3,5 +3,5 @@ package test import java.util.* public open class WrongValueParameterStructure2 : Object() { - public open fun foo(p0 : String?, p1 : List?>?) : String? = "" + public open fun foo(p0 : String?, p1 : List>?) : String? = "" } diff --git a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.txt b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.txt index e45fe846a05..69d852d499f 100644 --- a/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.txt +++ b/compiler/testData/loadJava/kotlinSignature/error/WrongValueParameterStructure2.txt @@ -2,5 +2,5 @@ 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: jet.List?>?): jet.String? + public open fun foo(/*0*/ p0: jet.String?, /*1*/ p1: jet.List>?): jet.String? } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.kt b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.kt index 3947c5029c4..f3fde68291a 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.kt +++ b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.kt @@ -3,10 +3,10 @@ package test public trait InheritNotVararg: Object { public trait Super: Object { - public fun foo(p0: Array?) + public fun foo(p0: Array?) } public trait Sub: Super { - override fun foo(p0: Array?) + override fun foo(p0: Array?) } } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.txt b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.txt index 61e72c2a67d..60ae207c163 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.txt +++ b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVararg.txt @@ -2,9 +2,9 @@ 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?): jet.Tuple0 + public abstract override /*1*/ fun foo(/*0*/ p0: jet.Array?): jet.Tuple0 } public abstract trait test.InheritNotVararg.Super : java.lang.Object { - public abstract fun foo(/*0*/ p0: jet.Array?): jet.Tuple0 + public abstract fun foo(/*0*/ p0: jet.Array?): jet.Tuple0 } } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.kt b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.kt index 44622b7f3d6..ae529346031 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.kt +++ b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.kt @@ -3,10 +3,10 @@ package test public trait InheritNotVarargInteger: Object { public trait Super: Object { - public fun foo(p0: Array?) + public fun foo(p0: Array?) } public trait Sub: Super { - override fun foo(p0: Array?) + override fun foo(p0: Array?) } } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.txt b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.txt index ea9d28c72fa..111a40931a9 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.txt +++ b/compiler/testData/loadJava/kotlinSignature/propagation/parameter/InheritNotVarargInteger.txt @@ -2,9 +2,9 @@ namespace test public abstract trait test.InheritNotVarargInteger : java.lang.Object { public abstract trait test.InheritNotVarargInteger.Sub : test.InheritNotVarargInteger.Super { - public abstract override /*1*/ fun foo(/*0*/ p0: jet.Array?): jet.Tuple0 + public abstract override /*1*/ fun foo(/*0*/ p0: jet.Array?): jet.Tuple0 } public abstract trait test.InheritNotVarargInteger.Super : java.lang.Object { - public abstract fun foo(/*0*/ p0: jet.Array?): jet.Tuple0 + public abstract fun foo(/*0*/ p0: jet.Array?): jet.Tuple0 } } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/return/AddNullabilitySameGenericType1.java b/compiler/testData/loadJava/kotlinSignature/propagation/return/AddNullabilitySameGenericType1.java index 0ea9be382a8..6cd4db019bf 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/return/AddNullabilitySameGenericType1.java +++ b/compiler/testData/loadJava/kotlinSignature/propagation/return/AddNullabilitySameGenericType1.java @@ -13,7 +13,7 @@ public interface AddNullabilitySameGenericType1 { } public interface Sub extends Super { - @ExpectLoadError("Auto type 'jet.String' is not-null, while type in alternative signature is nullable: 'String?'") + @ExpectLoadError("Return type is changed to not subtype for method which overrides another: MutableList, was: MutableList") @KotlinSignature("fun foo(): MutableList") List foo(); } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.java b/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.java index 4fd69a9c1af..0970c4e8810 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.java +++ b/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.java @@ -9,7 +9,7 @@ public interface HalfSubstitutedTypeParameters { public interface TrickyList extends List {} public interface Super { - @KotlinSignature("fun foo(): MutableList") + @KotlinSignature("fun foo(): MutableList") List foo(); } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.kt b/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.kt index 21853229e97..dc3bce94818 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.kt +++ b/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.kt @@ -5,10 +5,10 @@ public trait HalfSubstitutedTypeParameters: Object { public trait TrickyList: MutableList {} public trait Super: Object { - public fun foo(): MutableList + public fun foo(): MutableList } public trait Sub: Super { - override fun foo(): TrickyList + override fun foo(): TrickyList } } diff --git a/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt b/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt index 1b129935af4..873560d9138 100644 --- a/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt +++ b/compiler/testData/loadJava/kotlinSignature/propagation/return/HalfSubstitutedTypeParameters.txt @@ -2,10 +2,10 @@ namespace test public abstract trait test.HalfSubstitutedTypeParameters : java.lang.Object { public abstract trait test.HalfSubstitutedTypeParameters.Sub : test.HalfSubstitutedTypeParameters.Super { - public abstract override /*1*/ fun foo(): test.HalfSubstitutedTypeParameters.TrickyList + public abstract override /*1*/ fun foo(): test.HalfSubstitutedTypeParameters.TrickyList } public abstract trait test.HalfSubstitutedTypeParameters.Super : java.lang.Object { - public abstract fun foo(): jet.MutableList + public abstract fun foo(): jet.MutableList } public abstract trait test.HalfSubstitutedTypeParameters.TrickyList : jet.MutableList { public abstract override /*1*/ /*fake_override*/ fun add(/*0*/ e: E): jet.Boolean diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java index 8738662d208..34035f63789 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java @@ -17,6 +17,7 @@ package org.jetbrains.jet.jvm.compiler; import com.intellij.openapi.util.Pair; +import junit.framework.ComparisonFailure; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.ConfigurationKind; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; @@ -51,8 +52,25 @@ public abstract class AbstractLoadJavaTest extends TestCaseWithTmpdir { tmpdir, myTestRootDisposable, ConfigurationKind.JDK_AND_ANNOTATIONS); NamespaceDescriptor nsb = nsbAndBindingContext.first; + boolean fail = false; + try { + ExpectedLoadErrorsUtil.checkForLoadErrors(nsb, nsbAndBindingContext.second); + } + catch (ComparisonFailure e) { + // to let the next check run even if this one failed + System.err.println("Expected: " + e.getExpected()); + System.err.println("Actual : " + e.getActual()); + e.printStackTrace(); + fail = true; + } + catch (AssertionError e) { + e.printStackTrace(); + fail = true; + } compareNamespaces(nsa, nsb, DONT_INCLUDE_METHODS_OF_OBJECT, txtFile); - ExpectedLoadErrorsUtil.checkForLoadErrors(nsb, nsbAndBindingContext.second); + if (fail) { + fail("See error above"); + } } } diff --git a/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt b/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt index 7a9a85319ab..7c3032251d2 100644 --- a/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt +++ b/libraries/stdlib/src/kotlin/modules/ModuleBuilder.kt @@ -29,9 +29,9 @@ class AnnotationsPathBuilder(val parent: ModuleBuilder) { open class ModuleBuilder(val name: String): Module { // http://youtrack.jetbrains.net/issue/KT-904 - private val sourceFiles0: ArrayList = ArrayList() - private val classpathRoots0: ArrayList = ArrayList() - private val annotationsRoots0: ArrayList = ArrayList() + private val sourceFiles0 = ArrayList() + private val classpathRoots0 = ArrayList() + private val annotationsRoots0 = ArrayList() val sources: SourcesBuilder get() = SourcesBuilder(this) @@ -54,9 +54,9 @@ open class ModuleBuilder(val name: String): Module { annotationsRoots0.add(name) } - public override fun getSourceFiles(): MutableList? = sourceFiles0 - public override fun getClasspathRoots(): MutableList? = classpathRoots0 - public override fun getAnnotationsRoots(): MutableList? = annotationsRoots0 - public override fun getModuleName(): String? = name + public override fun getSourceFiles(): List = sourceFiles0 + public override fun getClasspathRoots(): List = classpathRoots0 + public override fun getAnnotationsRoots(): List = annotationsRoots0 + public override fun getModuleName(): String = name } diff --git a/runtime/src/jet/modules/Module.java b/runtime/src/jet/modules/Module.java index df3739fd684..07675fcc922 100644 --- a/runtime/src/jet/modules/Module.java +++ b/runtime/src/jet/modules/Module.java @@ -16,14 +16,23 @@ package jet.modules; +import jet.runtime.typeinfo.KotlinSignature; + import java.util.List; /** * @author yole */ public interface Module { + @KotlinSignature("fun getModuleName(): String") String getModuleName(); + + @KotlinSignature("fun getSourceFiles(): List") List getSourceFiles(); + + @KotlinSignature("fun getClasspathRoots(): List") List getClasspathRoots(); + + @KotlinSignature("fun getAnnotationsRoots(): List") List getAnnotationsRoots(); }