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
This commit is contained in:
Andrey Breslav
2013-10-15 14:41:45 +04:00
parent 6154464050
commit f05f3f5686
7 changed files with 30 additions and 19 deletions
@@ -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;
@@ -18,9 +18,9 @@ class Test1<T : A>()
where
T : B,
<!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T, // error
class object T : A,
class object T : B,
class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T
<!UNSUPPORTED!>class object T : A<!>,
<!UNSUPPORTED!>class object T : B<!>,
<!UNSUPPORTED!>class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T<!>
{
fun test(t : T) {
@@ -50,9 +50,9 @@ fun <T : A> test2(t : T)
where
T : B,
<!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T,
class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T,
class object T : B,
class object T : A
<!UNSUPPORTED!>class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T<!>,
<!UNSUPPORTED!>class object T : B<!>,
<!UNSUPPORTED!>class object T : A<!>
{
T.foo()
T.bar()
@@ -66,7 +66,7 @@ val t3 = test2<C>(C())
class Test<<!CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS!>T<!>>
where
class object T : <!FINAL_CLASS_OBJECT_UPPER_BOUND!>Foo<!>,
class object T : A {}
<!UNSUPPORTED!>class object T : <!FINAL_CLASS_OBJECT_UPPER_BOUND!>Foo<!><!>,
<!UNSUPPORTED!>class object T : A<!> {}
val <T, B : T> x : Int = 0
val <T, B : T> x : Int = 0
@@ -0,0 +1,2 @@
class C<T> where <!UNSUPPORTED!>class object T: Any<!>
fun f<T>() where <!UNSUPPORTED!>class object T: Any<!> {}
@@ -1 +1 @@
class CO<T> where class object T : CO<T>
class CO<T> where <!UNSUPPORTED!>class object T : CO<T><!>
@@ -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");
+1 -1
View File
@@ -15,7 +15,7 @@ import java.util.*
val attributes = HashMap<String, String>()
protected fun initTag<T : Element>(init : T.() -> Unit) : T
where class object T : Factory<T>{
where <error>class object T : Factory<T></error>{
val tag = T.create()
tag.init()
children.add(tag)
+8 -8
View File
@@ -18,9 +18,9 @@ class Test1<T : A>()
where
T : B,
<error>B</error> : T, // error
class object T : A,
class object T : B,
class object <error>B</error> : T
<error>class object T : A</error>,
<error>class object T : B</error>,
<error>class object <error>B</error> : T</error>
{
fun test(t : T) {
@@ -50,9 +50,9 @@ fun <T : A> test2(t : T)
where
T : B,
<error>B</error> : T,
class object <error>B</error> : T,
class object T : B,
class object T : A
<error>class object <error>B</error> : T</error>,
<error>class object T : B</error>,
<error>class object T : A</error>
{
T.foo()
T.bar()
@@ -66,7 +66,7 @@ val t3 = test2<C>(C())
class Test<<error>T</error>>
where
class object T : <error>Foo</error>,
class object T : A {}
<error>class object T : <error>Foo</error></error>,
<error>class object T : A</error> {}
val <T, B : T> x : Int = 0