From 17e64ebae00a7685919424d1bf9c3386a387e671 Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 13 Feb 2018 18:58:11 +0300 Subject: [PATCH] Move: Fix processing of callable references to nested Java classes and static methods #KT-17827 Fixed --- .../jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt | 15 +++++--- .../idea/references/KtSimpleNameReference.kt | 21 +++++++---- .../kotlin/idea/refactoring/move/moveUtils.kt | 2 +- .../after/foo/KotlinReferences.kt | 3 ++ .../after/foo/MemberEndJava.java | 4 +++ .../after/foo/MemberNewEndJava.java | 5 +++ .../before/foo/KotlinReferences.kt | 3 ++ .../before/foo/MemberEndJava.java | 5 +++ .../before/foo/MemberNewEndJava.java | 4 +++ .../nestedToAnotherClass.test | 5 +++ .../after/bar/MemberNewEndJava.java | 5 +++ .../after/foo/KotlinReferences.kt | 5 +++ .../after/foo/MemberEndJava.java | 4 +++ .../before/bar/MemberNewEndJava.java | 4 +++ .../before/foo/KotlinReferences.kt | 3 ++ .../before/foo/MemberEndJava.java | 5 +++ ...nestedToAnotherClassAndAnotherPackage.test | 5 +++ .../after/foo/KotlinReferences.kt | 3 ++ .../after/foo/MemberEndJava.java | 4 +++ .../after/foo/NestedJava.java | 3 ++ .../before/foo/KotlinReferences.kt | 3 ++ .../before/foo/MemberEndJava.java | 5 +++ .../nestedToTopLevel/nestedToTopLevel.test | 5 +++ .../after/bar/NestedJava.java | 3 ++ .../after/bar/dummy.txt | 0 .../after/foo/KotlinReferences.kt | 5 +++ .../after/foo/MemberEndJava.java | 4 +++ .../before/bar/dummy.txt | 0 .../before/foo/KotlinReferences.kt | 3 ++ .../before/foo/MemberEndJava.java | 5 +++ .../nestedToTopLevelAndAnotherPackage.test | 5 +++ .../after/foo/KotlinReferences.kt | 3 ++ .../after/foo/MemberEndJava.java | 4 +++ .../after/foo/MemberNewEndJava.java | 5 +++ .../before/foo/KotlinReferences.kt | 3 ++ .../before/foo/MemberEndJava.java | 5 +++ .../before/foo/MemberNewEndJava.java | 4 +++ .../staticMethodToTopLevelClass.test | 5 +++ .../after/bar/MemberNewEndJava.java | 5 +++ .../after/foo/KotlinReferences.kt | 5 +++ .../after/foo/MemberEndJava.java | 4 +++ .../before/bar/MemberNewEndJava.java | 4 +++ .../before/foo/KotlinReferences.kt | 3 ++ .../before/foo/MemberEndJava.java | 5 +++ ...MethodToTopLevelClassInAnotherPackage.test | 5 +++ .../refactoring/move/MoveTestGenerated.java | 36 +++++++++++++++++++ 46 files changed, 230 insertions(+), 12 deletions(-) create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/nestedToAnotherClass.test create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/bar/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/bar/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/nestedToAnotherClassAndAnotherPackage.test create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/NestedJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/nestedToTopLevel.test create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/bar/NestedJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/bar/dummy.txt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/bar/dummy.txt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/nestedToTopLevelAndAnotherPackage.test create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/staticMethodToTopLevelClass.test create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/bar/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/bar/MemberNewEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/KotlinReferences.kt create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/MemberEndJava.java create mode 100644 idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/staticMethodToTopLevelClassInAnotherPackage.test diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt index fe7e31bbc44..4e8be9d66d1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt @@ -19,10 +19,7 @@ package org.jetbrains.kotlin.psi.psiUtil import com.intellij.extapi.psi.StubBasedPsiElementBase import com.intellij.openapi.util.Key import com.intellij.openapi.util.TextRange -import com.intellij.psi.PsiElement -import com.intellij.psi.PsiParameter -import com.intellij.psi.PsiParameterList -import com.intellij.psi.PsiWhiteSpace +import com.intellij.psi.* import com.intellij.psi.stubs.StubElement import com.intellij.psi.tree.TokenSet import org.jetbrains.kotlin.KtNodeTypes @@ -596,4 +593,12 @@ fun String?.isIdentifier(): Boolean { return lexer.tokenType == null } -fun String.quoteIfNeeded(): String = if (this.isIdentifier()) this else "`$this`" \ No newline at end of file +fun String.quoteIfNeeded(): String = if (this.isIdentifier()) this else "`$this`" + +fun PsiElement.isTopLevelKtOrJavaMember(): Boolean { + return when (this) { + is KtDeclaration -> parent is KtFile + is PsiClass -> containingClass == null && this.qualifiedName != null + else -> false + } +} \ No newline at end of file diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt index 3204cbc2d5d..739b31cbd16 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt @@ -25,6 +25,7 @@ import com.intellij.util.SmartList import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.resolveImportReference +import org.jetbrains.kotlin.idea.codeInsight.shorten.addDelayedImportRequest import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.copied @@ -152,9 +153,9 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere bindToElement(element, ShorteningMode.DELAYED_SHORTENING) fun bindToElement(element: PsiElement, shorteningMode: ShorteningMode): PsiElement = - element.getKotlinFqName()?.let { fqName -> bindToFqName(fqName, shorteningMode) } ?: expression + element.getKotlinFqName()?.let { fqName -> bindToFqName(fqName, shorteningMode, element) } ?: expression - fun bindToFqName(fqName: FqName, shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING): PsiElement { + fun bindToFqName(fqName: FqName, shorteningMode: ShorteningMode = ShorteningMode.DELAYED_SHORTENING, targetElement: PsiElement? = null): PsiElement { val expression = expression if (fqName.isRoot) return expression @@ -162,7 +163,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere if (expression !is KtNameReferenceExpression) return expression if (expression.parent is KtThisExpression || expression.parent is KtSuperExpression) return expression // TODO: it's a bad design of PSI tree, we should change it - val newExpression = expression.changeQualifiedName(fqName.quoteIfNeeded()) + val newExpression = expression.changeQualifiedName(fqName.quoteIfNeeded(), targetElement) val newQualifiedElement = newExpression.getQualifiedElementOrCallableRef() if (shorteningMode == ShorteningMode.NO_SHORTENING) return newExpression @@ -184,7 +185,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere * Result is either the same as original element, or [[KtQualifiedExpression]], or [[KtUserType]] * Note that FqName may not be empty */ - private fun KtNameReferenceExpression.changeQualifiedName(fqName: FqName): KtNameReferenceExpression { + private fun KtNameReferenceExpression.changeQualifiedName(fqName: FqName, targetElement: PsiElement? = null): KtNameReferenceExpression { assert(!fqName.isRoot) { "Can't set empty FqName for element $this" } val shortName = fqName.shortName().asString() @@ -195,7 +196,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere val qualifier = parent.qualifier val qualifierReference = qualifier?.referenceExpression as? KtNameReferenceExpression if (qualifierReference != null && qualifier.typeArguments.isNotEmpty()) { - qualifierReference.changeQualifiedName(fqName.parent()) + qualifierReference.changeQualifiedName(fqName.parent(), targetElement) return this } } @@ -210,7 +211,15 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere parentDelimiter = "" val callableRefCopy = parent.copied() callableRefCopy.receiverExpression?.delete() - callableRefCopy.callableReference.replace(psiFactory.createSimpleName(shortName)).parent!!.text + val newCallableRef = callableRefCopy + .callableReference + .replace(psiFactory.createSimpleName(shortName)) + .parent as KtCallableReferenceExpression + if (targetElement != null && targetElement.isTopLevelKtOrJavaMember()) { + addDelayedImportRequest(targetElement, parent.containingKtFile) + return parent.replaced(newCallableRef).callableReference as KtNameReferenceExpression + } + newCallableRef.text } else -> shortName } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt index f79455c846a..3dce77513f0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -281,7 +281,7 @@ class CallableReferenceMoveRenameUsageInfo( val element = element ?: return null val reference = reference ?: return null val referencedElement = referencedElement ?: return null - if (target is KtDeclaration && target.parent is KtFile) { + if (target != null && target.isTopLevelKtOrJavaMember()) { element.getStrictParentOfType()?.receiverExpression?.delete() return UnqualifiableMoveRenameUsageInfo(element, reference, referencedElement, element.containingFile!!, addImportToOriginalFile, isInternal) } diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/KotlinReferences.kt new file mode 100644 index 00000000000..70f042c830d --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v = MemberNewEndJava::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberEndJava.java new file mode 100644 index 00000000000..17a070fcfb7 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberNewEndJava.java new file mode 100644 index 00000000000..e74cafd92f4 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/after/foo/MemberNewEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberNewEndJava { + public static class NestedJava {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/KotlinReferences.kt new file mode 100644 index 00000000000..1a75e397672 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v = MemberEndJava::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberEndJava.java new file mode 100644 index 00000000000..58bc64c41d5 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberEndJava { + public static class NestedJava {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberNewEndJava.java new file mode 100644 index 00000000000..ad2db5f551c --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/before/foo/MemberNewEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberNewEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/nestedToAnotherClass.test b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/nestedToAnotherClass.test new file mode 100644 index 00000000000..7aac1646804 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/nestedToAnotherClass.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/MemberEndJava.java", + "type": "MOVE_MEMBERS", + "targetClass": "foo.MemberNewEndJava" +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/bar/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/bar/MemberNewEndJava.java new file mode 100644 index 00000000000..dead629deeb --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/bar/MemberNewEndJava.java @@ -0,0 +1,5 @@ +package bar; + +public class MemberNewEndJava { + public static class NestedJava {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/KotlinReferences.kt new file mode 100644 index 00000000000..16ca1f4cdcd --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/KotlinReferences.kt @@ -0,0 +1,5 @@ +package foo + +import bar.MemberNewEndJava + +val v = MemberNewEndJava::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/MemberEndJava.java new file mode 100644 index 00000000000..17a070fcfb7 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/after/foo/MemberEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/bar/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/bar/MemberNewEndJava.java new file mode 100644 index 00000000000..9f82a06d8cc --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/bar/MemberNewEndJava.java @@ -0,0 +1,4 @@ +package bar; + +public class MemberNewEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/KotlinReferences.kt new file mode 100644 index 00000000000..1a75e397672 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v = MemberEndJava::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/MemberEndJava.java new file mode 100644 index 00000000000..58bc64c41d5 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/before/foo/MemberEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberEndJava { + public static class NestedJava {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/nestedToAnotherClassAndAnotherPackage.test b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/nestedToAnotherClassAndAnotherPackage.test new file mode 100644 index 00000000000..35ce52d81fa --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/nestedToAnotherClassAndAnotherPackage.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/MemberEndJava.java", + "type": "MOVE_MEMBERS", + "targetClass": "bar.MemberNewEndJava" +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/KotlinReferences.kt new file mode 100644 index 00000000000..2ddce4937e9 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v = ::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/MemberEndJava.java new file mode 100644 index 00000000000..17a070fcfb7 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/MemberEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/NestedJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/NestedJava.java new file mode 100644 index 00000000000..7838151aaca --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/after/foo/NestedJava.java @@ -0,0 +1,3 @@ +package foo; + +public class NestedJava {} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/KotlinReferences.kt new file mode 100644 index 00000000000..1a75e397672 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v = MemberEndJava::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/MemberEndJava.java new file mode 100644 index 00000000000..58bc64c41d5 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/before/foo/MemberEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberEndJava { + public static class NestedJava {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/nestedToTopLevel.test b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/nestedToTopLevel.test new file mode 100644 index 00000000000..7adffb62406 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/nestedToTopLevel.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/MemberEndJava.java", + "type": "MOVE_INNER_CLASS", + "targetPackage": "foo" +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/bar/NestedJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/bar/NestedJava.java new file mode 100644 index 00000000000..38714288dad --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/bar/NestedJava.java @@ -0,0 +1,3 @@ +package bar; + +public class NestedJava {} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/bar/dummy.txt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/bar/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/KotlinReferences.kt new file mode 100644 index 00000000000..67a96ee805b --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/KotlinReferences.kt @@ -0,0 +1,5 @@ +package foo + +import bar.NestedJava + +val v = ::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/MemberEndJava.java new file mode 100644 index 00000000000..17a070fcfb7 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/after/foo/MemberEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/bar/dummy.txt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/bar/dummy.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/KotlinReferences.kt new file mode 100644 index 00000000000..1a75e397672 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v = MemberEndJava::NestedJava \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/MemberEndJava.java new file mode 100644 index 00000000000..58bc64c41d5 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/before/foo/MemberEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberEndJava { + public static class NestedJava {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/nestedToTopLevelAndAnotherPackage.test b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/nestedToTopLevelAndAnotherPackage.test new file mode 100644 index 00000000000..37b73626e00 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/nestedToTopLevelAndAnotherPackage.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/MemberEndJava.java", + "type": "MOVE_INNER_CLASS", + "targetPackage": "bar" +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/KotlinReferences.kt new file mode 100644 index 00000000000..e861828c768 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v2 = MemberNewEndJava::staticMethod \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberEndJava.java new file mode 100644 index 00000000000..17a070fcfb7 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberNewEndJava.java new file mode 100644 index 00000000000..a7d73adcf0d --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/after/foo/MemberNewEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberNewEndJava { + public static void staticMethod() {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/KotlinReferences.kt new file mode 100644 index 00000000000..a67b5c730cc --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v2 = MemberEndJava::staticMethod \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberEndJava.java new file mode 100644 index 00000000000..1f41321dc4f --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberEndJava { + public static void staticMethod() {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberNewEndJava.java new file mode 100644 index 00000000000..ad2db5f551c --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/before/foo/MemberNewEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberNewEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/staticMethodToTopLevelClass.test b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/staticMethodToTopLevelClass.test new file mode 100644 index 00000000000..7aac1646804 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/staticMethodToTopLevelClass.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/MemberEndJava.java", + "type": "MOVE_MEMBERS", + "targetClass": "foo.MemberNewEndJava" +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/bar/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/bar/MemberNewEndJava.java new file mode 100644 index 00000000000..f6ccea5d5ee --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/bar/MemberNewEndJava.java @@ -0,0 +1,5 @@ +package bar; + +public class MemberNewEndJava { + public static void staticMethod() {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/KotlinReferences.kt new file mode 100644 index 00000000000..bebe1ca80cb --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/KotlinReferences.kt @@ -0,0 +1,5 @@ +package foo + +import bar.MemberNewEndJava + +val v2 = MemberNewEndJava::staticMethod \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/MemberEndJava.java new file mode 100644 index 00000000000..17a070fcfb7 --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/after/foo/MemberEndJava.java @@ -0,0 +1,4 @@ +package foo; + +public class MemberEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/bar/MemberNewEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/bar/MemberNewEndJava.java new file mode 100644 index 00000000000..9f82a06d8cc --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/bar/MemberNewEndJava.java @@ -0,0 +1,4 @@ +package bar; + +public class MemberNewEndJava { +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/KotlinReferences.kt b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/KotlinReferences.kt new file mode 100644 index 00000000000..a67b5c730cc --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/KotlinReferences.kt @@ -0,0 +1,3 @@ +package foo + +val v2 = MemberEndJava::staticMethod \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/MemberEndJava.java b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/MemberEndJava.java new file mode 100644 index 00000000000..1f41321dc4f --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/before/foo/MemberEndJava.java @@ -0,0 +1,5 @@ +package foo; + +public class MemberEndJava { + public static void staticMethod() {} +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/staticMethodToTopLevelClassInAnotherPackage.test b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/staticMethodToTopLevelClassInAnotherPackage.test new file mode 100644 index 00000000000..35ce52d81fa --- /dev/null +++ b/idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/staticMethodToTopLevelClassInAnotherPackage.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/MemberEndJava.java", + "type": "MOVE_MEMBERS", + "targetClass": "bar.MemberNewEndJava" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java index 55b451462c4..fa5aa6c42f2 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java @@ -25,6 +25,30 @@ public class MoveTestGenerated extends AbstractMoveTest { KotlinTestUtils.assertAllTestsPresentInSingleGeneratedClass(this.getClass(), new File("idea/testData/refactoring/move"), Pattern.compile("^(.+)\\.test$"), TargetBackend.ANY); } + @TestMetadata("java/moveClass/callableReferences/nestedToAnotherClass/nestedToAnotherClass.test") + public void testJava_moveClass_callableReferences_nestedToAnotherClass_NestedToAnotherClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClass/nestedToAnotherClass.test"); + doTest(fileName); + } + + @TestMetadata("java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/nestedToAnotherClassAndAnotherPackage.test") + public void testJava_moveClass_callableReferences_nestedToAnotherClassAndAnotherPackage_NestedToAnotherClassAndAnotherPackage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToAnotherClassAndAnotherPackage/nestedToAnotherClassAndAnotherPackage.test"); + doTest(fileName); + } + + @TestMetadata("java/moveClass/callableReferences/nestedToTopLevel/nestedToTopLevel.test") + public void testJava_moveClass_callableReferences_nestedToTopLevel_NestedToTopLevel() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevel/nestedToTopLevel.test"); + doTest(fileName); + } + + @TestMetadata("java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/nestedToTopLevelAndAnotherPackage.test") + public void testJava_moveClass_callableReferences_nestedToTopLevelAndAnotherPackage_NestedToTopLevelAndAnotherPackage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveClass/callableReferences/nestedToTopLevelAndAnotherPackage/nestedToTopLevelAndAnotherPackage.test"); + doTest(fileName); + } + @TestMetadata("java/moveClass/moveAsMember/moveClassToExternalNestedClass/moveClassToExternalNestedClass.test") public void testJava_moveClass_moveAsMember_moveClassToExternalNestedClass_MoveClassToExternalNestedClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveClass/moveAsMember/moveClassToExternalNestedClass/moveClassToExternalNestedClass.test"); @@ -157,6 +181,18 @@ public class MoveTestGenerated extends AbstractMoveTest { doTest(fileName); } + @TestMetadata("java/moveMethod/callableReferences/staticMethodToTopLevelClass/staticMethodToTopLevelClass.test") + public void testJava_moveMethod_callableReferences_staticMethodToTopLevelClass_StaticMethodToTopLevelClass() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClass/staticMethodToTopLevelClass.test"); + doTest(fileName); + } + + @TestMetadata("java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/staticMethodToTopLevelClassInAnotherPackage.test") + public void testJava_moveMethod_callableReferences_staticMethodToTopLevelClassInAnotherPackage_StaticMethodToTopLevelClassInAnotherPackage() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveMethod/callableReferences/staticMethodToTopLevelClassInAnotherPackage/staticMethodToTopLevelClassInAnotherPackage.test"); + doTest(fileName); + } + @TestMetadata("java/moveMethod/moveMethodToExternalNestedClass/moveMethodToExternalNestedClass.test") public void testJava_moveMethod_moveMethodToExternalNestedClass_MoveMethodToExternalNestedClass() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/java/moveMethod/moveMethodToExternalNestedClass/moveMethodToExternalNestedClass.test");