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()) {
|
for (JetTypeConstraint constraint : declaration.getTypeConstraints()) {
|
||||||
|
if (constraint.isClassObjectContraint()) {
|
||||||
|
trace.report(UNSUPPORTED.on(constraint, "Class objects constraints are not supported yet"));
|
||||||
|
}
|
||||||
|
|
||||||
JetSimpleNameExpression subjectTypeParameterName = constraint.getSubjectTypeParameterName();
|
JetSimpleNameExpression subjectTypeParameterName = constraint.getSubjectTypeParameterName();
|
||||||
if (subjectTypeParameterName == null) {
|
if (subjectTypeParameterName == null) {
|
||||||
continue;
|
continue;
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ class Test1<T : A>()
|
|||||||
where
|
where
|
||||||
T : B,
|
T : B,
|
||||||
<!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T, // error
|
<!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T, // error
|
||||||
class object T : A,
|
<!UNSUPPORTED!>class object T : A<!>,
|
||||||
class object T : B,
|
<!UNSUPPORTED!>class object T : B<!>,
|
||||||
class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T
|
<!UNSUPPORTED!>class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T<!>
|
||||||
{
|
{
|
||||||
|
|
||||||
fun test(t : T) {
|
fun test(t : T) {
|
||||||
@@ -50,9 +50,9 @@ fun <T : A> test2(t : T)
|
|||||||
where
|
where
|
||||||
T : B,
|
T : B,
|
||||||
<!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T,
|
<!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T,
|
||||||
class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T,
|
<!UNSUPPORTED!>class object <!NAME_IN_CONSTRAINT_IS_NOT_A_TYPE_PARAMETER!>B<!> : T<!>,
|
||||||
class object T : B,
|
<!UNSUPPORTED!>class object T : B<!>,
|
||||||
class object T : A
|
<!UNSUPPORTED!>class object T : A<!>
|
||||||
{
|
{
|
||||||
T.foo()
|
T.foo()
|
||||||
T.bar()
|
T.bar()
|
||||||
@@ -66,7 +66,7 @@ val t3 = test2<C>(C())
|
|||||||
|
|
||||||
class Test<<!CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS!>T<!>>
|
class Test<<!CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS!>T<!>>
|
||||||
where
|
where
|
||||||
class object T : <!FINAL_CLASS_OBJECT_UPPER_BOUND!>Foo<!>,
|
<!UNSUPPORTED!>class object T : <!FINAL_CLASS_OBJECT_UPPER_BOUND!>Foo<!><!>,
|
||||||
class object T : A {}
|
<!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);
|
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")
|
@TestMetadata("kt1575-Class.kt")
|
||||||
public void testKt1575_Class() throws Exception {
|
public void testKt1575_Class() throws Exception {
|
||||||
doTest("compiler/testData/diagnostics/tests/generics/kt1575-Class.kt");
|
doTest("compiler/testData/diagnostics/tests/generics/kt1575-Class.kt");
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ import java.util.*
|
|||||||
val attributes = HashMap<String, String>()
|
val attributes = HashMap<String, String>()
|
||||||
|
|
||||||
protected fun initTag<T : Element>(init : T.() -> Unit) : T
|
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()
|
val tag = T.create()
|
||||||
tag.init()
|
tag.init()
|
||||||
children.add(tag)
|
children.add(tag)
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ class Test1<T : A>()
|
|||||||
where
|
where
|
||||||
T : B,
|
T : B,
|
||||||
<error>B</error> : T, // error
|
<error>B</error> : T, // error
|
||||||
class object T : A,
|
<error>class object T : A</error>,
|
||||||
class object T : B,
|
<error>class object T : B</error>,
|
||||||
class object <error>B</error> : T
|
<error>class object <error>B</error> : T</error>
|
||||||
{
|
{
|
||||||
|
|
||||||
fun test(t : T) {
|
fun test(t : T) {
|
||||||
@@ -50,9 +50,9 @@ fun <T : A> test2(t : T)
|
|||||||
where
|
where
|
||||||
T : B,
|
T : B,
|
||||||
<error>B</error> : T,
|
<error>B</error> : T,
|
||||||
class object <error>B</error> : T,
|
<error>class object <error>B</error> : T</error>,
|
||||||
class object T : B,
|
<error>class object T : B</error>,
|
||||||
class object T : A
|
<error>class object T : A</error>
|
||||||
{
|
{
|
||||||
T.foo()
|
T.foo()
|
||||||
T.bar()
|
T.bar()
|
||||||
@@ -66,7 +66,7 @@ val t3 = test2<C>(C())
|
|||||||
|
|
||||||
class Test<<error>T</error>>
|
class Test<<error>T</error>>
|
||||||
where
|
where
|
||||||
class object T : <error>Foo</error>,
|
<error>class object T : <error>Foo</error></error>,
|
||||||
class object T : A {}
|
<error>class object T : A</error> {}
|
||||||
|
|
||||||
val <T, B : T> x : Int = 0
|
val <T, B : T> x : Int = 0
|
||||||
|
|||||||
Reference in New Issue
Block a user