From f05f3f5686c4aec5da7d2308ff45473f8c89ce12 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 15 Oct 2013 14:41:45 +0400 Subject: [PATCH] Let the user know that class object bounds are not supported KT-4080 Code analisys show all good, but got compile error #KT-4080 Fixed --- .../jet/lang/resolve/DescriptorResolver.java | 4 ++++ .../diagnostics/tests/MultipleBounds.kt | 18 +++++++++--------- .../ClassObjectBoundsAreNotSupported.kt | 2 ++ .../tests/generics/kt1575-ClassObject.kt | 2 +- .../checkers/JetDiagnosticsTestGenerated.java | 5 +++++ idea/testData/checker/Builders.kt | 2 +- idea/testData/checker/MultipleBounds.kt | 16 ++++++++-------- 7 files changed, 30 insertions(+), 19 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/generics/ClassObjectBoundsAreNotSupported.kt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java index 0f56d6cf8e8..0e1283e0fa7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DescriptorResolver.java @@ -633,6 +633,10 @@ public class DescriptorResolver { } } for (JetTypeConstraint constraint : declaration.getTypeConstraints()) { + if (constraint.isClassObjectContraint()) { + trace.report(UNSUPPORTED.on(constraint, "Class objects constraints are not supported yet")); + } + JetSimpleNameExpression subjectTypeParameterName = constraint.getSubjectTypeParameterName(); if (subjectTypeParameterName == null) { continue; diff --git a/compiler/testData/diagnostics/tests/MultipleBounds.kt b/compiler/testData/diagnostics/tests/MultipleBounds.kt index 49c333a7b87..1fa77ddd589 100644 --- a/compiler/testData/diagnostics/tests/MultipleBounds.kt +++ b/compiler/testData/diagnostics/tests/MultipleBounds.kt @@ -18,9 +18,9 @@ class Test1() where T : B, B : T, // error - class object T : A, - class object T : B, - class object B : T + class object T : A, + class object T : B, + class object B : T { fun test(t : T) { @@ -50,9 +50,9 @@ fun test2(t : T) where T : B, B : T, - class object B : T, - class object T : B, - class object T : A + class object B : T, + class object T : B, + class object T : A { T.foo() T.bar() @@ -66,7 +66,7 @@ val t3 = test2(C()) class Test<T> where - class object T : Foo, - class object T : A {} + class object T : Foo, + class object T : A {} -val x : Int = 0 +val x : Int = 0 \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/ClassObjectBoundsAreNotSupported.kt b/compiler/testData/diagnostics/tests/generics/ClassObjectBoundsAreNotSupported.kt new file mode 100644 index 00000000000..63c79d717a1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/ClassObjectBoundsAreNotSupported.kt @@ -0,0 +1,2 @@ +class C where class object T: Any +fun f() where class object T: Any {} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/kt1575-ClassObject.kt b/compiler/testData/diagnostics/tests/generics/kt1575-ClassObject.kt index b88575831b0..70add8bb3ac 100644 --- a/compiler/testData/diagnostics/tests/generics/kt1575-ClassObject.kt +++ b/compiler/testData/diagnostics/tests/generics/kt1575-ClassObject.kt @@ -1 +1 @@ -class CO where class object T : CO +class CO where class object T : CO \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 2bcd14eda45..c32e9754120 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2808,6 +2808,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.GenerateTests", new File("compiler/testData/diagnostics/tests/generics"), Pattern.compile("^(.+)\\.kt$"), true); } + @TestMetadata("ClassObjectBoundsAreNotSupported.kt") + public void testClassObjectBoundsAreNotSupported() throws Exception { + doTest("compiler/testData/diagnostics/tests/generics/ClassObjectBoundsAreNotSupported.kt"); + } + @TestMetadata("kt1575-Class.kt") public void testKt1575_Class() throws Exception { doTest("compiler/testData/diagnostics/tests/generics/kt1575-Class.kt"); diff --git a/idea/testData/checker/Builders.kt b/idea/testData/checker/Builders.kt index 3cabe31f8ec..5b725b7f9e4 100644 --- a/idea/testData/checker/Builders.kt +++ b/idea/testData/checker/Builders.kt @@ -15,7 +15,7 @@ import java.util.* val attributes = HashMap() protected fun initTag(init : T.() -> Unit) : T - where class object T : Factory{ + where class object T : Factory{ val tag = T.create() tag.init() children.add(tag) diff --git a/idea/testData/checker/MultipleBounds.kt b/idea/testData/checker/MultipleBounds.kt index 60b5c69561e..450c177ad40 100644 --- a/idea/testData/checker/MultipleBounds.kt +++ b/idea/testData/checker/MultipleBounds.kt @@ -18,9 +18,9 @@ class Test1() where T : B, B : T, // error - class object T : A, - class object T : B, - class object B : T + class object T : A, + class object T : B, + class object B : T { fun test(t : T) { @@ -50,9 +50,9 @@ fun test2(t : T) where T : B, B : T, - class object B : T, - class object T : B, - class object T : A + class object B : T, + class object T : B, + class object T : A { T.foo() T.bar() @@ -66,7 +66,7 @@ val t3 = test2(C()) class Test<T> where - class object T : Foo, - class object T : A {} + class object T : Foo, + class object T : A {} val x : Int = 0