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);