diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java index d4057a0ed2e..c69afd88962 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -10,6 +10,7 @@ import org.jetbrains.jet.lang.types.*; public interface BindingContext { NamespaceDescriptor getNamespaceDescriptor(JetNamespace declaration); ClassDescriptor getClassDescriptor(JetClass declaration); + TypeParameterDescriptor getTypeParameterDescriptor(JetTypeParameter declaration); FunctionDescriptor getFunctionDescriptor(JetFunction declaration); PropertyDescriptor getPropertyDescriptor(JetProperty declaration); diff --git a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java index b8767b2978c..f4a870fabaa 100644 --- a/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java +++ b/idea/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java @@ -57,6 +57,11 @@ public class BindingTraceContext extends BindingTrace implements BindingContext return (ClassDescriptor) declarationsToDescriptors.get(declaration); } + @Override + public TypeParameterDescriptor getTypeParameterDescriptor(JetTypeParameter declaration) { + return (TypeParameterDescriptor) declarationsToDescriptors.get(declaration); + } + @Override public FunctionDescriptor getFunctionDescriptor(JetFunction declaration) { return (FunctionDescriptor) declarationsToDescriptors.get(declaration); diff --git a/idea/testData/resolve/ResolveOfInfixExpressions.jet b/idea/testData/resolve/ResolveOfInfixExpressions.jet new file mode 100644 index 00000000000..ec0884052ac --- /dev/null +++ b/idea/testData/resolve/ResolveOfInfixExpressions.jet @@ -0,0 +1,14 @@ +~X~class X<~T~T> { + fun foo(a : `T`T) : `X`X<`T`T>{} + ~plus~fun plus(t : `T`T) : Int {} +} + +~t~fun <~t.T~T> t(~t.t~t : `t.T`T) : `t.T`T { + `t`t(1)`:std::Int` + `t`t<`t.T`T>(`t.t`t)`:t.T` + new `X`X<`t.T`T>() + 1 `std::Int.plus(Int)`+ 1 + new X() `plus`+ "1" + new X() `plus`plus "sadfas" + new X().`plus`plus("") +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java b/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java index b1465511ba3..b0e338bc129 100644 --- a/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java +++ b/idea/tests/org/jetbrains/jet/resolve/ExpectedResolveData.java @@ -166,8 +166,18 @@ public class ExpectedResolveData { assertNotNull(declarationPosition); JetDeclaration declaration = getAncestorOfType(JetDeclaration.class, declElement); assertNotNull(declaration); - ClassDescriptor classDescriptor = bindingContext.getClassDescriptor((JetClass) declaration); - expectedTypeConstructor = classDescriptor.getTypeConstructor(); + if (declaration instanceof JetClass) { + ClassDescriptor classDescriptor = bindingContext.getClassDescriptor((JetClass) declaration); + expectedTypeConstructor = classDescriptor.getTypeConstructor(); + } + else if (declaration instanceof JetTypeParameter) { + TypeParameterDescriptor typeParameterDescriptor = bindingContext.getTypeParameterDescriptor((JetTypeParameter) declaration); + expectedTypeConstructor = typeParameterDescriptor.getTypeConstructor(); + } + else { + fail("Unsupported declaration: " + declaration); + return; + } } assertSame("At " + position + ": ", expectedTypeConstructor, expressionType.getConstructor()); diff --git a/idea/tests/org/jetbrains/jet/resolve/JetResolveTest.java b/idea/tests/org/jetbrains/jet/resolve/JetResolveTest.java index a3b1ddcd10d..13e47b16170 100644 --- a/idea/tests/org/jetbrains/jet/resolve/JetResolveTest.java +++ b/idea/tests/org/jetbrains/jet/resolve/JetResolveTest.java @@ -126,4 +126,8 @@ public class JetResolveTest extends ExtensibleResolveTestCase { doTest("/resolve/ResolveToJava.jet", true, true); } + public void testResolveOfInfixExpressions() throws Exception { + doTest("/resolve/ResolveOfInfixExpressions.jet", true, true); + } + } \ No newline at end of file