From 932d29e2ef8317361f82ffa774124bb3be5e9952 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 4 Dec 2012 17:10:26 +0400 Subject: [PATCH] A case for extending a raw Comparator --- .../resolve/java/JavaTypeTransformer.java | 9 ++++++++- .../rawSuperType/RawSuperType.java | 20 +++++++++++++++++++ .../rawSuperType/RawSuperType.txt | 12 +++++++++++ .../jet/jvm/compiler/LoadJavaCustomTest.java | 6 ++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.java create mode 100644 compiler/testData/loadJavaCustom/rawSuperType/RawSuperType.txt 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"); + } }