diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt index a3401732802..97af29f7fcf 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContextUtils.kt @@ -49,6 +49,8 @@ import org.jetbrains.kotlin.util.sure import org.jetbrains.jet.lang.psi.JetCallElement import org.jetbrains.jet.lang.psi.psiUtil.getTextWithLocation import org.jetbrains.jet.lang.psi.JetInstanceExpressionWithLabel +import org.jetbrains.jet.lang.psi.JetConstructorCalleeExpression +import org.jetbrains.jet.lang.psi.JetUserType /** * For expressions like a(), a[i], a.b.c(), +a, a + b, (a()), a(): Int, @label a() @@ -64,6 +66,7 @@ public fun JetElement.getCall(context: BindingContext): Call? { val parent = element.getParent() val reference = when { parent is JetInstanceExpressionWithLabel -> parent : JetInstanceExpressionWithLabel + parent is JetUserType -> parent.getParent()?.getParent() as? JetConstructorCalleeExpression else -> element.getCalleeExpressionIfAny() } if (reference != null) { diff --git a/compiler/testData/resolvedCalls/differentCallElements/annotationCall.kt b/compiler/testData/resolvedCalls/differentCallElements/annotationCall.kt new file mode 100644 index 00000000000..8797a965f46 --- /dev/null +++ b/compiler/testData/resolvedCalls/differentCallElements/annotationCall.kt @@ -0,0 +1,3 @@ +annotation class MyA(val i: Int) + +MyA(1) fun foo() {} \ No newline at end of file diff --git a/compiler/testData/resolvedCalls/differentCallElements/annotationCall.txt b/compiler/testData/resolvedCalls/differentCallElements/annotationCall.txt new file mode 100644 index 00000000000..6abb5c1726b --- /dev/null +++ b/compiler/testData/resolvedCalls/differentCallElements/annotationCall.txt @@ -0,0 +1,16 @@ +annotation class MyA(val i: Int) + +MyA(1) fun foo() {} + + +Resolved call: + +Resulting descriptor: constructor MyA(i: Int) + +Explicit receiver kind = NO_EXPLICIT_RECEIVER +This object = NO_RECEIVER +Receiver argument = NO_RECEIVER + +Value arguments mapping: + +SUCCESS i : Int = 1 \ No newline at end of file diff --git a/compiler/testData/resolvedCalls/differentCallElements/delegatorToSuperCall.kt b/compiler/testData/resolvedCalls/differentCallElements/delegatorToSuperCall.kt new file mode 100644 index 00000000000..2470427fb79 --- /dev/null +++ b/compiler/testData/resolvedCalls/differentCallElements/delegatorToSuperCall.kt @@ -0,0 +1,3 @@ +open class A {} + +class B: A() {} \ No newline at end of file diff --git a/compiler/testData/resolvedCalls/differentCallElements/delegatorToSuperCall.txt b/compiler/testData/resolvedCalls/differentCallElements/delegatorToSuperCall.txt new file mode 100644 index 00000000000..39b2338ba1f --- /dev/null +++ b/compiler/testData/resolvedCalls/differentCallElements/delegatorToSuperCall.txt @@ -0,0 +1,12 @@ +open class A {} + +class B: A() {} + + +Resolved call: + +Resulting descriptor: constructor A() + +Explicit receiver kind = NO_EXPLICIT_RECEIVER +This object = NO_RECEIVER +Receiver argument = NO_RECEIVER diff --git a/compiler/testData/resolvedCalls/differentCallElements/simpleArrayAccess.kt b/compiler/testData/resolvedCalls/differentCallElements/simpleArrayAccess.kt new file mode 100644 index 00000000000..da1f597d691 --- /dev/null +++ b/compiler/testData/resolvedCalls/differentCallElements/simpleArrayAccess.kt @@ -0,0 +1,3 @@ +fun foo(array: Array) { + array[1] +} \ No newline at end of file diff --git a/compiler/testData/resolvedCalls/differentCallElements/simpleArrayAccess.txt b/compiler/testData/resolvedCalls/differentCallElements/simpleArrayAccess.txt new file mode 100644 index 00000000000..ff35bc170e7 --- /dev/null +++ b/compiler/testData/resolvedCalls/differentCallElements/simpleArrayAccess.txt @@ -0,0 +1,16 @@ +fun foo(array: Array) { + array[1] +} + + +Resolved call: + +Resulting descriptor: fun get(index: Int): Int + +Explicit receiver kind = THIS_OBJECT +This object = array {Array} +Receiver argument = NO_RECEIVER + +Value arguments mapping: + +SUCCESS index : Int = 1 diff --git a/compiler/tests/org/jetbrains/jet/resolve/calls/ResolvedCallsTestGenerated.java b/compiler/tests/org/jetbrains/jet/resolve/calls/ResolvedCallsTestGenerated.java index c1821f02cb4..a00b2d2b7cf 100644 --- a/compiler/tests/org/jetbrains/jet/resolve/calls/ResolvedCallsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/resolve/calls/ResolvedCallsTestGenerated.java @@ -31,7 +31,7 @@ import org.jetbrains.jet.resolve.calls.AbstractResolvedCallsTest; /** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ @SuppressWarnings("all") @TestMetadata("compiler/testData/resolvedCalls") -@InnerTestClasses({ResolvedCallsTestGenerated.Arguments.class, ResolvedCallsTestGenerated.FunctionTypes.class, ResolvedCallsTestGenerated.Invoke.class, ResolvedCallsTestGenerated.RealExamples.class, ResolvedCallsTestGenerated.ThisOrSuper.class}) +@InnerTestClasses({ResolvedCallsTestGenerated.Arguments.class, ResolvedCallsTestGenerated.DifferentCallElements.class, ResolvedCallsTestGenerated.FunctionTypes.class, ResolvedCallsTestGenerated.Invoke.class, ResolvedCallsTestGenerated.RealExamples.class, ResolvedCallsTestGenerated.ThisOrSuper.class}) public class ResolvedCallsTestGenerated extends AbstractResolvedCallsTest { public void testAllFilesPresentInResolvedCalls() throws Exception { JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/resolvedCalls"), Pattern.compile("^(.+)\\.kt$"), true); @@ -240,6 +240,29 @@ public class ResolvedCallsTestGenerated extends AbstractResolvedCallsTest { } } + @TestMetadata("compiler/testData/resolvedCalls/differentCallElements") + public static class DifferentCallElements extends AbstractResolvedCallsTest { + public void testAllFilesPresentInDifferentCallElements() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("compiler/testData/resolvedCalls/differentCallElements"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("annotationCall.kt") + public void testAnnotationCall() throws Exception { + doTest("compiler/testData/resolvedCalls/differentCallElements/annotationCall.kt"); + } + + @TestMetadata("delegatorToSuperCall.kt") + public void testDelegatorToSuperCall() throws Exception { + doTest("compiler/testData/resolvedCalls/differentCallElements/delegatorToSuperCall.kt"); + } + + @TestMetadata("simpleArrayAccess.kt") + public void testSimpleArrayAccess() throws Exception { + doTest("compiler/testData/resolvedCalls/differentCallElements/simpleArrayAccess.kt"); + } + + } + @TestMetadata("compiler/testData/resolvedCalls/functionTypes") public static class FunctionTypes extends AbstractResolvedCallsTest { public void testAllFilesPresentInFunctionTypes() throws Exception { @@ -356,6 +379,7 @@ public class ResolvedCallsTestGenerated extends AbstractResolvedCallsTest { TestSuite suite = new TestSuite("ResolvedCallsTestGenerated"); suite.addTestSuite(ResolvedCallsTestGenerated.class); suite.addTest(Arguments.innerSuite()); + suite.addTestSuite(DifferentCallElements.class); suite.addTestSuite(FunctionTypes.class); suite.addTestSuite(Invoke.class); suite.addTestSuite(RealExamples.class);