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:
@@ -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");
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user