diff --git a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetClsMethodImpl.java b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetClsMethodImpl.java
index 50934d478d2..606e1d7d133 100644
--- a/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetClsMethodImpl.java
+++ b/compiler/jet.as.java.psi/src/org/jetbrains/jet/asJava/JetClsMethodImpl.java
@@ -53,4 +53,10 @@ public class JetClsMethodImpl extends ClsMethodImpl implements JetClsMethod {
public void delete() throws IncorrectOperationException {
origin.delete();
}
+
+ @Override
+ public boolean isEquivalentTo(PsiElement another) {
+ if (another instanceof JetClsMethod && getOrigin().equals(((JetClsMethod) another).getOrigin())) return true;
+ return super.isEquivalentTo(another);
+ }
}
diff --git a/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.2.java b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.2.java
new file mode 100644
index 00000000000..2e17ff9669c
--- /dev/null
+++ b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.2.java
@@ -0,0 +1,11 @@
+package client;
+
+import server.ServerPackage;
+
+class JClient {
+ String s = ServerPackage.processRequest();
+
+ String sendRequest() {
+ return ServerPackage.processRequest();
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.results.txt b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.results.txt
index 6af85d2954b..c7646b4ca83 100644
--- a/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.results.txt
+++ b/idea/testData/findUsages/findMethodUsages/kotlinTopLevelMethodUsages.results.txt
@@ -1,3 +1,5 @@
Callable reference (6: 23) val methodRef = ::processRequest()
Function call (10: 9) processRequest()
-Import directive (3: 15) import server.processRequest
\ No newline at end of file
+Import directive (3: 15) import server.processRequest
+Unclassified usage (6: 30) String s = ServerPackage.processRequest();
+Unclassified usage (9: 30) return ServerPackage.processRequest();
diff --git a/idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.results.txt b/idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.results.txt
deleted file mode 100644
index 7968c8e56cd..00000000000
--- a/idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.results.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-Import directive (3: 15) import server.foo
-Receiver (8: 35) println("length: ${server.foo.length()}")
-Selector (7: 33) println("foo = ${server.foo}")
\ No newline at end of file
diff --git a/idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.0.kt b/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.0.kt
similarity index 100%
rename from idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.0.kt
rename to idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.0.kt
diff --git a/idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.1.kt b/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.1.kt
similarity index 100%
rename from idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.1.kt
rename to idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.1.kt
diff --git a/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.2.java b/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.2.java
new file mode 100644
index 00000000000..868c35bd6de
--- /dev/null
+++ b/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.2.java
@@ -0,0 +1,11 @@
+package client;
+
+import server.ServerPackage;
+
+class JClient {
+ void fooBar() {
+ System.out.println("foo = " + ServerPackage.getFoo());
+ System.out.println("length: " + ServerPackage.getFoo().length());
+ ServerPackage.setFoo("");
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.results.txt b/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.results.txt
new file mode 100644
index 00000000000..576e93a0b63
--- /dev/null
+++ b/idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.results.txt
@@ -0,0 +1,6 @@
+Import directive (3: 15) import server.foo
+Receiver (8: 35) println("length: ${server.foo.length()}")
+Selector (7: 33) println("foo = ${server.foo}")
+Unclassified usage (7: 53) System.out.println("foo = " + ServerPackage.getFoo());
+Unclassified usage (8: 55) System.out.println("length: " + ServerPackage.getFoo().length());
+Unclassified usage (9: 23) ServerPackage.setFoo("");
diff --git a/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/KotlinPackageFunction_verification.xml b/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/KotlinPackageFunction_verification.xml
new file mode 100644
index 00000000000..3631ceaf162
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/KotlinPackageFunction_verification.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/main0.kt b/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/main0.kt
new file mode 100644
index 00000000000..80d55c96f3e
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/main0.kt
@@ -0,0 +1,21 @@
+class KA {
+ val name = "A"
+ fun foo(s: String): String = "A: $s"
+}
+
+val packageVal = ""
+
+fun packageFun() {
+ fun localFun(s: String): String = s
+ val localVal = localFun("")
+
+ KA().foo(KA().name)
+ JA().foo(JA().name)
+ localFun(packageVal)
+
+ run {
+ KA().foo(KA().name)
+ JA().foo(JA().name)
+ KA().foo(localVal)
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/main1.java b/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/main1.java
new file mode 100644
index 00000000000..c57b6f49533
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callees/kotlinPackageFunction/main1.java
@@ -0,0 +1,12 @@
+class JA {
+ public JA() {
+
+ }
+
+ public String name = "A";
+
+ public String foo(String s) {
+ System.out.println(s);
+ return "A " + s;
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/KotlinPackageProperty_verification.xml b/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/KotlinPackageProperty_verification.xml
new file mode 100644
index 00000000000..71af16d78fb
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/KotlinPackageProperty_verification.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/main0.kt b/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/main0.kt
new file mode 100644
index 00000000000..95c9d6f66f4
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/main0.kt
@@ -0,0 +1,24 @@
+class KA {
+ val name = "A"
+ fun foo(s: String): String = "A: $s"
+}
+
+fun packageFun(s: String): String = s
+
+val packageVal: String
+ get() {
+ fun localFun(s: String): String = packageFun(s)
+ val localVal = localFun("")
+
+ KA().foo(KA().name)
+ JA().foo(JA().name)
+ localFun("")
+
+ run {
+ KA().foo(KA().name)
+ JA().foo(JA().name)
+ packageFun(localVal)
+ }
+
+ return ""
+ }
\ No newline at end of file
diff --git a/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/main1.java b/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/main1.java
new file mode 100644
index 00000000000..c57b6f49533
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callees/kotlinPackageProperty/main1.java
@@ -0,0 +1,12 @@
+class JA {
+ public JA() {
+
+ }
+
+ public String name = "A";
+
+ public String foo(String s) {
+ System.out.println(s);
+ return "A " + s;
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/KotlinPackageFunction_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/KotlinPackageFunction_verification.xml
new file mode 100644
index 00000000000..750da2bacb7
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/KotlinPackageFunction_verification.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/main0.kt b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/main0.kt
new file mode 100644
index 00000000000..eb199f52f35
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/main0.kt
@@ -0,0 +1,26 @@
+fun packageFun(s: String): String = s
+
+val packageVal = packageFun("")
+
+class KClient {
+ {
+ packageFun("")
+ }
+
+ class object {
+ val a = packageFun("")
+ }
+
+ val bar: String
+ get() = packageFun("")
+
+ fun bar() {
+ fun localFun() = packageFun("")
+
+ packageFun("")
+ }
+}
+
+object KClientObj {
+ val a = packageFun("")
+}
\ No newline at end of file
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/main1.java b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/main1.java
new file mode 100644
index 00000000000..e041504a926
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageFunction/main1.java
@@ -0,0 +1,7 @@
+class JA {
+ public String name = _DefaultPackage.packageFun("");
+
+ public String foo() {
+ return _DefaultPackage.packageFun("");
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/KotlinPackageProperty_verification.xml b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/KotlinPackageProperty_verification.xml
new file mode 100644
index 00000000000..629adb569a3
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/KotlinPackageProperty_verification.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/main0.kt b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/main0.kt
new file mode 100644
index 00000000000..6653c0ab4da
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/main0.kt
@@ -0,0 +1,30 @@
+var packageVal = ""
+
+fun packageFun(s: String): String = packageVal + s
+
+class KClient {
+ {
+ packageVal = ""
+ }
+
+ class object {
+ val a = packageVal
+ }
+
+ val bar: String
+ get() = packageVal
+ set(value: String) {packageVal = value}
+
+ fun bar() {
+ fun localFun() = packageVal
+
+ val s = packageVal
+ }
+}
+
+object KClientObj {
+ val a = packageVal
+ {
+ packageVal = ""
+ }
+}
\ No newline at end of file
diff --git a/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/main1.java b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/main1.java
new file mode 100644
index 00000000000..92285813931
--- /dev/null
+++ b/idea/testData/hierarchy/calls/callers/kotlinPackageProperty/main1.java
@@ -0,0 +1,8 @@
+class JA {
+ public String name = _DefaultPackage.getPackageVal();
+
+ public String getName() {
+ _DefaultPackage.setPackageVal("");
+ return _DefaultPackage.getPackageVal();
+ }
+}
\ No newline at end of file
diff --git a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java
index 05e15579ffa..9193b674834 100644
--- a/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java
+++ b/idea/tests/org/jetbrains/jet/findUsages/JetFindUsagesTest.java
@@ -227,9 +227,9 @@ public class JetFindUsagesTest extends AbstractJetFindUsagesTest {
doTest("idea/testData/findUsages/findPropertyUsages/javaPropertyUsages.0.kt");
}
- @TestMetadata("kotlinPropertyUsages.0.kt")
- public void testKotlinPropertyUsages() throws Exception {
- doTest("idea/testData/findUsages/findPropertyUsages/kotlinPropertyUsages.0.kt");
+ @TestMetadata("kotlinTopLevelPropertyUsages.0.kt")
+ public void testKotlinTopLevelPropertyUsages() throws Exception {
+ doTest("idea/testData/findUsages/findPropertyUsages/kotlinTopLevelPropertyUsages.0.kt");
}
}
diff --git a/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java b/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java
index b2366afea66..8769c10f9f9 100644
--- a/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java
+++ b/idea/tests/org/jetbrains/jet/plugin/hierarchy/HierarchyTestGenerated.java
@@ -237,6 +237,16 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doCallerHierarchyTest("idea/testData/hierarchy/calls/callers/kotlinNestedInnerClass");
}
+ @TestMetadata("kotlinPackageFunction")
+ public void testKotlinPackageFunction() throws Exception {
+ doCallerHierarchyTest("idea/testData/hierarchy/calls/callers/kotlinPackageFunction");
+ }
+
+ @TestMetadata("kotlinPackageProperty")
+ public void testKotlinPackageProperty() throws Exception {
+ doCallerHierarchyTest("idea/testData/hierarchy/calls/callers/kotlinPackageProperty");
+ }
+
@TestMetadata("kotlinProperty")
public void testKotlinProperty() throws Exception {
doCallerHierarchyTest("idea/testData/hierarchy/calls/callers/kotlinProperty");
@@ -305,6 +315,16 @@ public class HierarchyTestGenerated extends AbstractHierarchyTest {
doCalleeHierarchyTest("idea/testData/hierarchy/calls/callees/kotlinObject");
}
+ @TestMetadata("kotlinPackageFunction")
+ public void testKotlinPackageFunction() throws Exception {
+ doCalleeHierarchyTest("idea/testData/hierarchy/calls/callees/kotlinPackageFunction");
+ }
+
+ @TestMetadata("kotlinPackageProperty")
+ public void testKotlinPackageProperty() throws Exception {
+ doCalleeHierarchyTest("idea/testData/hierarchy/calls/callees/kotlinPackageProperty");
+ }
+
@TestMetadata("kotlinProperty")
public void testKotlinProperty() throws Exception {
doCalleeHierarchyTest("idea/testData/hierarchy/calls/callees/kotlinProperty");