diff --git a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java index 20719d6b811..7956051f9e8 100644 --- a/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java +++ b/compiler/light-classes/src/org/jetbrains/kotlin/asJava/KotlinLightField.java @@ -174,4 +174,12 @@ public abstract class KotlinLightField) fieldOfParent).getOrigin() == defaultObject && + fieldOfParent.getName().equals(defaultObject.getName())) { // TODO this check is relevant while light class has deprecated OBJECT$ field + return fieldOfParent; + } + } + } + return null; + } + @NotNull public static PropertyAccessorsPsiMethods getLightClassPropertyMethods(@NotNull JetProperty property) { JetPropertyAccessor getter = property.getGetter(); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.java b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.java index ae8f103abad..0cdd8c0e435 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.java +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinReferencesSearcher.java @@ -25,9 +25,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.Processor; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.kotlin.asJava.AsJavaPackage; -import org.jetbrains.kotlin.asJava.KotlinLightMethod; -import org.jetbrains.kotlin.asJava.LightClassUtil; +import org.jetbrains.kotlin.asJava.*; import org.jetbrains.kotlin.idea.search.usagesSearch.*; import org.jetbrains.kotlin.idea.util.ProjectRootsUtil; import org.jetbrains.kotlin.psi.*; @@ -46,6 +44,18 @@ public class KotlinReferencesSearcher extends QueryExecutorBase() { + @Override + public PsiField compute() { + return LightClassUtil.getLightFieldForDefaultObject(element); + } + }); + if (fieldForDefaultObject != null) { + searchNamedElement(queryParameters, fieldForDefaultObject); + } + } } } } diff --git a/idea/testData/refactoring/rename/defaultObject/after/JavaUsage.java b/idea/testData/refactoring/rename/defaultObject/after/JavaUsage.java new file mode 100644 index 00000000000..f99099cce52 --- /dev/null +++ b/idea/testData/refactoring/rename/defaultObject/after/JavaUsage.java @@ -0,0 +1,8 @@ +class JavaUsage { + public static void main(String[] args) { + System.out.println(Foo.CONST); + Foo.s(); + Foo.Baz.f(); + Foo foo = new Foo(); // not usage of default object + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/defaultObject/after/toBeRenamed.kt b/idea/testData/refactoring/rename/defaultObject/after/toBeRenamed.kt new file mode 100644 index 00000000000..d6d3742bc81 --- /dev/null +++ b/idea/testData/refactoring/rename/defaultObject/after/toBeRenamed.kt @@ -0,0 +1,11 @@ +class Foo { + default object Baz { + fun f() { + } + + platformStatic fun s() { + } + + val CONST = 42 + } +} diff --git a/idea/testData/refactoring/rename/defaultObject/after/usage.kt b/idea/testData/refactoring/rename/defaultObject/after/usage.kt new file mode 100644 index 00000000000..b3b0f6e67be --- /dev/null +++ b/idea/testData/refactoring/rename/defaultObject/after/usage.kt @@ -0,0 +1,8 @@ +fun main(args: Array) { + // class object usages + Foo.f() + val x = Foo + + Foo.Baz.f() + val xx = Foo.Baz +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/defaultObject/before/javaUsage.java b/idea/testData/refactoring/rename/defaultObject/before/javaUsage.java new file mode 100644 index 00000000000..9dbd584aac2 --- /dev/null +++ b/idea/testData/refactoring/rename/defaultObject/before/javaUsage.java @@ -0,0 +1,8 @@ +class JavaUsage { + public static void main(String[] args) { + System.out.println(Foo.CONST); + Foo.s(); + Foo.Bar.f(); + Foo foo = new Foo(); // not usage of default object + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/defaultObject/before/toBeRenamed.kt b/idea/testData/refactoring/rename/defaultObject/before/toBeRenamed.kt new file mode 100644 index 00000000000..21fb2b89146 --- /dev/null +++ b/idea/testData/refactoring/rename/defaultObject/before/toBeRenamed.kt @@ -0,0 +1,11 @@ +class Foo { + default object Bar { + fun f() { + } + + platformStatic fun s() { + } + + val CONST = 42 + } +} diff --git a/idea/testData/refactoring/rename/defaultObject/before/usage.kt b/idea/testData/refactoring/rename/defaultObject/before/usage.kt new file mode 100644 index 00000000000..7dd3eea95cc --- /dev/null +++ b/idea/testData/refactoring/rename/defaultObject/before/usage.kt @@ -0,0 +1,8 @@ +fun main(args: Array) { + // class object usages + Foo.f() + val x = Foo + + Foo.Bar.f() + val xx = Foo.Bar +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/defaultObject/defaultObject.test b/idea/testData/refactoring/rename/defaultObject/defaultObject.test new file mode 100644 index 00000000000..9414a6aaa82 --- /dev/null +++ b/idea/testData/refactoring/rename/defaultObject/defaultObject.test @@ -0,0 +1,7 @@ +{ + "type": "KOTLIN_CLASS", + "classId": "/Foo.Bar", + "oldName": "Bar", + "newName": "Baz", + "mainFile": "toBeRenamed.kt" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index f24de6b0337..5499175e465 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -36,6 +36,12 @@ public class RenameTestGenerated extends AbstractRenameTest { JetTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/refactoring/rename"), Pattern.compile("^(.+)\\.test$")); } + @TestMetadata("defaultObject/defaultObject.test") + public void testDefaultObject_DefaultObject() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/defaultObject/defaultObject.test"); + doTest(fileName); + } + @TestMetadata("renameCompareTo/compareTo.test") public void testRenameCompareTo_CompareTo() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameCompareTo/compareTo.test");