Eager resolve does not record class object bounds (which are unsupported anyways)

This commit is contained in:
Andrey Breslav
2014-03-06 15:29:21 +04:00
parent 9964ecc883
commit f7c5dc179c
6 changed files with 17 additions and 32 deletions
@@ -670,7 +670,8 @@ public class DescriptorResolver {
trace.record(BindingContext.REFERENCE_TARGET, subjectTypeParameterName, typeParameterDescriptor);
if (bound != null) {
if (constraint.isClassObjectConstraint()) {
typeParameterDescriptor.addClassObjectBound(bound);
// Class object bounds are not supported
//typeParameterDescriptor.addClassObjectBound(bound);
}
else {
typeParameterDescriptor.addUpperBound(bound);
@@ -24,8 +24,8 @@ class Test1<T : A>()
{
fun test(t : T) {
T.foo()
T.bar()
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>bar<!>()
t.foo()
t.bar()
}
@@ -54,8 +54,8 @@ fun <T : A> test2(t : T)
<!UNSUPPORTED!>class object T : B<!>,
<!UNSUPPORTED!>class object T : A<!>
{
T.foo()
T.bar()
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>foo<!>()
<!TYPE_PARAMETER_ON_LHS_OF_DOT!>T<!>.<!UNRESOLVED_REFERENCE!>bar<!>()
t.foo()
t.bar()
}
@@ -64,7 +64,7 @@ val t1 = test2<<!UPPER_BOUND_VIOLATED!>A<!>>(A())
val t2 = test2<<!UPPER_BOUND_VIOLATED!>B<!>>(C())
val t3 = test2<C>(C())
class Test<<!CONFLICTING_CLASS_OBJECT_UPPER_BOUNDS!>T<!>>
class Test<T>
where
<!UNSUPPORTED!>class object T : <!FINAL_CLASS_OBJECT_UPPER_BOUND!>Foo<!><!>,
<!UNSUPPORTED!>class object T : A<!> {}
+5 -5
View File
@@ -14,12 +14,12 @@ import java.util.*
val children = ArrayList<Element>()
val attributes = HashMap<String, String>()
protected fun initTag<T : Element>(init : T.() -> Unit) : T
protected fun initTag<T : Element>(<warning>init</warning> : T.() -> Unit) : T
where <error>class object T : Factory<T></error>{
val tag = T.create()
tag.init()
children.add(tag)
return tag
val tag = <error>T</error>.<error>create</error>()
<error>tag</error>.<error>init</error>()
children.add(<error>tag</error>)
return <error>tag</error>
}
}
+5 -5
View File
@@ -24,8 +24,8 @@ class Test1<T : A>()
{
fun test(t : T) {
T.foo()
T.bar()
<error>T</error>.<error>foo</error>()
<error>T</error>.<error>bar</error>()
t.foo()
t.bar()
}
@@ -54,8 +54,8 @@ fun <T : A> test2(t : T)
<error>class object T : B</error>,
<error>class object T : A</error>
{
T.foo()
T.bar()
<error>T</error>.<error>foo</error>()
<error>T</error>.<error>bar</error>()
t.foo()
t.bar()
}
@@ -64,7 +64,7 @@ val t1 = test2<<error>A</error>>(A())
val t2 = test2<<error>B</error>>(C())
val t3 = test2<C>(C())
class Test<<error>T</error>>
class Test<T>
where
<error>class object T : <error>Foo</error></error>,
<error>class object T : A</error> {}
-3
View File
@@ -1,3 +0,0 @@
fun <T> foo() where class object T : Any {
T.<caret>toString()
}
@@ -163,19 +163,6 @@ public class JetJavaFacadeTest extends JetLightCodeInsightFixtureTestCase {
doTestWrapParameter(false, false);
}
public void testEa38770() {
myFixture.configureByFile(fileName());
PsiReference reference = myFixture.getFile().findReferenceAt(myFixture.getCaretOffset());
assertNotNull(reference);
PsiElement element = reference.resolve();
assertNotNull(element);
assertInstanceOf(element, JetNamedFunction.class);
JetNamedFunction toString = (JetNamedFunction) element;
assertNull("There should be no wrapper for built-in function", LightClassUtil.getLightClassMethod(toString));
}
public void testInnerClass() throws Exception {
myFixture.configureByFile(fileName());