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 b171272a12f..b70b15820f6 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 @@ -161,7 +161,14 @@ public class JavaTypeTransformer { if (classType.isRaw()) { List parameters = classData.getTypeConstructor().getParameters(); for (TypeParameterDescriptor parameter : parameters) { - arguments.add(SubstitutionUtils.makeStarProjection(parameter)); + TypeProjection starProjection = SubstitutionUtils.makeStarProjection(parameter); + if (howThisTypeIsUsed == SUPERTYPE) { + // projections are not allowed in immediate arguments of supertypes + arguments.add(new TypeProjection(starProjection.getType())); + } + else { + arguments.add(starProjection); + } } } else { diff --git a/compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.java b/compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.java new file mode 100644 index 00000000000..22a1c68f1ae --- /dev/null +++ b/compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.java @@ -0,0 +1,20 @@ +package test; + +import java.lang.Object; +import java.lang.Override; +import java.lang.UnsupportedOperationException; + +public class RawSuperType { + + public interface Super { + void foo(T t); + } + + public class Derived implements Super { + @Override + public void foo(Object o) { + throw new UnsupportedOperationException(); + } + } + +} \ No newline at end of file diff --git a/compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.txt b/compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.txt new file mode 100644 index 00000000000..9d828172edc --- /dev/null +++ b/compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.txt @@ -0,0 +1,12 @@ +namespace test + +public open class test.RawSuperType : java.lang.Object { + public final /*constructor*/ fun (): test.RawSuperType + public open class test.RawSuperType.Derived : test.RawSuperType.Super { + public final /*constructor*/ fun (): test.RawSuperType.Derived + public open override /*1*/ fun foo(/*0*/ p0: jet.Any?): jet.Tuple0 + } + public abstract trait test.RawSuperType.Super : java.lang.Object { + public abstract fun foo(/*0*/ p0: T?): jet.Tuple0 + } +} diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaCustomTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaCustomTest.java index a14c71dc7e7..7a31a7d9540 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaCustomTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/LoadJavaCustomTest.java @@ -111,4 +111,10 @@ public final class LoadJavaCustomTest extends KotlinTestWithEnvironment { doTest(dir + "/expected.txt", javaDir + "/MyEnum.java"); } + + public void testRawSuperType() throws Exception { + String dir = PATH + "/rawSuperType/"; + doTest(dir + "RawSuperType.txt", + dir + "RawSuperType.java"); + } }