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 5a4c68e58e3..d759d2e691e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/psiUtil/ktPsiUtil.kt @@ -66,6 +66,13 @@ fun KtSimpleNameExpression.getQualifiedElement(): KtElement { } } +fun KtSimpleNameExpression.getQualifiedElementOrCallableRef(): KtElement { + val parent = parent + if (parent is KtCallableReferenceExpression && parent.callableReference == this) return parent + + return getQualifiedElement() +} + fun KtSimpleNameExpression.getTopmostParentQualifiedExpressionForSelector(): KtQualifiedExpression? { return generateSequence(this) { val parentQualified = it.parent as? KtQualifiedExpression 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 35a1b98bc53..9ef6bc7fce8 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 @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet import org.jetbrains.kotlin.idea.codeInsight.shorten.isToBeShortened import org.jetbrains.kotlin.idea.core.ShortenReferences +import org.jetbrains.kotlin.idea.core.copied import org.jetbrains.kotlin.idea.core.quoteIfNeeded import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName @@ -37,10 +38,7 @@ import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.isOneSegmentFQN import org.jetbrains.kotlin.plugin.references.SimpleNameReferenceExtension import org.jetbrains.kotlin.psi.* -import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector -import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.DataClassDescriptorResolver import org.jetbrains.kotlin.types.expressions.OperatorConventions @@ -152,7 +150,7 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere 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 newQualifiedElement = newExpression.getQualifiedElement() + val newQualifiedElement = newExpression.getQualifiedElementOrCallableRef() if (shorteningMode == ShorteningMode.NO_SHORTENING) return newExpression @@ -179,14 +177,24 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere val shortName = fqName.shortName().asString() val psiFactory = KtPsiFactory(this) - val fqNameBase = (parent as? KtCallExpression)?.let { parent -> - val callCopy = parent.copy() as KtCallExpression - callCopy.calleeExpression!!.replace(psiFactory.createSimpleName(shortName)).parent!!.text - } ?: shortName + val parent = parent + var parentDelimiter = "." + val fqNameBase = when { + parent is KtCallElement -> { + val callCopy = parent.copied() + callCopy.calleeExpression!!.replace(psiFactory.createSimpleName(shortName)).parent!!.text + } + parent is KtCallableReferenceExpression && parent.callableReference == this -> { + parentDelimiter = "" + val callableRefCopy = parent.copied() + callableRefCopy.callableReference.replace(psiFactory.createSimpleName(shortName)).parent!!.text + } + else -> shortName + } - val text = if (!fqName.isOneSegmentFQN()) "${fqName.parent().asString()}.$fqNameBase" else fqNameBase + val text = if (!fqName.isOneSegmentFQN()) "${fqName.parent().asString()}$parentDelimiter$fqNameBase" else fqNameBase - val elementToReplace = getQualifiedElement() + val elementToReplace = getQualifiedElementOrCallableRef() val newElement = when (elementToReplace) { is KtUserType -> { @@ -196,7 +204,9 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere else -> elementToReplace.replace(psiFactory.createExpression(text)) } as KtElement - val selector = newElement.getQualifiedElementSelector() ?: error("No selector for $newElement") + val selector = (newElement as? KtCallableReferenceExpression)?.callableReference + ?: newElement.getQualifiedElementSelector() + ?: error("No selector for $newElement") return selector as KtNameReferenceExpression } 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 6c025a35a54..8443bf4d1ef 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveUtils.kt @@ -38,7 +38,6 @@ import com.intellij.util.IncorrectOperationException import com.intellij.util.SmartList import com.intellij.util.containers.MultiMap import org.jetbrains.kotlin.asJava.namedUnwrappedElement -import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully @@ -50,11 +49,9 @@ import org.jetbrains.kotlin.idea.imports.importableFqName import org.jetbrains.kotlin.idea.refactoring.fqName.isImported import org.jetbrains.kotlin.idea.refactoring.isInJavaSourceRoot import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.ui.KotlinAwareMoveFilesOrDirectoriesDialog -import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.references.KtSimpleNameReference.ShorteningMode import org.jetbrains.kotlin.idea.references.mainReference -import org.jetbrains.kotlin.idea.util.ImportInsertHelper import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.idea.util.application.executeCommand import org.jetbrains.kotlin.idea.util.application.runWriteAction @@ -139,30 +136,31 @@ fun KtElement.lazilyProcessInternalReferencesToUpdateOnPackageNameChange( val isExtension = isCallable && declaration.isExtensionDeclaration() val isCallableReference = isCallableReference(refExpr.mainReference) - if (isCallable && !isCallableReference) { - if (isExtension && containingDescriptor is ClassDescriptor) { - val implicitClass = (refExpr.getResolvedCall(bindingContext)?.dispatchReceiver as? ImplicitClassReceiver)?.classDescriptor - if (DescriptorUtils.isCompanionObject(implicitClass)) { - return ::ImplicitCompanionAsDispatchReceiverUsageInfo + if (isCallable) { + if (!isCallableReference) { + if (isExtension && containingDescriptor is ClassDescriptor) { + val dispatchReceiver = refExpr.getResolvedCall(bindingContext)?.dispatchReceiver + val implicitClass = (dispatchReceiver as? ImplicitClassReceiver)?.classDescriptor + if (DescriptorUtils.isCompanionObject(implicitClass)) { + return ::ImplicitCompanionAsDispatchReceiverUsageInfo + } + if (dispatchReceiver != null || containingDescriptor.kind != ClassKind.OBJECT) return null } - return null } if (!isExtension) { - if (refExpr.getReceiverExpression() != null) { - return fun(refExpr: KtSimpleNameExpression): UsageInfo? { - val receiver = refExpr.getReceiverExpression() ?: return null - val receiverRef = receiver.getQualifiedElementSelector() as? KtSimpleNameExpression ?: return null - if (bindingContext[BindingContext.QUALIFIER, receiverRef] == null) return null - return processReference(receiverRef, bindingContext)?.invoke(receiverRef) - } - } if (!(containingDescriptor is PackageFragmentDescriptor || containingDescriptor is ClassDescriptor && containingDescriptor.kind == ClassKind.OBJECT)) return null } } - val fqName = DescriptorUtils.getFqName(descriptor) + val fqName = DescriptorUtils.getFqName(descriptor).let { + if (DescriptorUtils.isCompanionObject(descriptor) + && bindingContext[BindingContext.SHORT_REFERENCE_TO_COMPANION_OBJECT, refExpr] != null) { + it.parent() + } + else it + } if (!fqName.isSafe) return null val (oldContainer, newContainer) = containerChangeInfo @@ -182,8 +180,7 @@ fun KtElement.lazilyProcessInternalReferencesToUpdateOnPackageNameChange( // Check container instead of declaration itself as the latter may be not real (e.g. fake override) if (isAncestor(containingDeclarationForNonRealMember ?: declaration, false)) { if (descriptor.importableFqName == null) return null - if (isUnqualifiedExtensionReference(refExpr.mainReference, declaration)) return null - if (isCallableReference(refExpr.mainReference)) return null + if (getReferenceKind(refExpr.mainReference, declaration) != ReferenceKind.QUALIFIABLE) return null if (containerFqName == null || newContainer is ContainerInfo.UnknownPackage) return null return fqName.asString().let { val prefix = containerFqName.asString() @@ -202,7 +199,7 @@ fun KtElement.lazilyProcessInternalReferencesToUpdateOnPackageNameChange( return createMoveUsageInfoIfPossible(refExpr.mainReference, declaration, false, fqName.toSafe()) } - if (isExtension || isCallableReference || containerFqName != null || isImported(descriptor)) return ::doCreateUsageInfo + if (isExtension || containerFqName != null || isImported(descriptor)) return ::doCreateUsageInfo return null } @@ -210,7 +207,6 @@ fun KtElement.lazilyProcessInternalReferencesToUpdateOnPackageNameChange( for ((refExpr, bindingContext) in referenceToContext) { if (refExpr !is KtSimpleNameExpression || refExpr.parent is KtThisExpression) continue - if (bindingContext[BindingContext.QUALIFIER, refExpr] != null) continue processReference(refExpr, bindingContext)?.let { body(refExpr, it) } } @@ -255,18 +251,35 @@ fun createMoveUsageInfoIfPossible( val startOffset = range.startOffset val endOffset = range.endOffset - if (isUnqualifiedExtensionReference(reference, referencedElement) || isCallableReference(reference)) { - return UnqualifiableMoveRenameUsageInfo( + return when (getReferenceKind(reference, referencedElement)) { + ReferenceKind.QUALIFIABLE -> QualifiableMoveRenameUsageInfo( + element, reference, startOffset, endOffset, referencedElement, newFqName + ) + ReferenceKind.UNQUALIFIABLE -> UnqualifiableMoveRenameUsageInfo( element, reference, startOffset, endOffset, referencedElement, element.containingFile!!, addImportToOriginalFile ) + else -> null } - return QualifiableMoveRenameUsageInfo(element, reference, startOffset, endOffset, referencedElement, newFqName) } -private fun isUnqualifiedExtensionReference(reference: PsiReference, referencedElement: PsiElement): Boolean { - return reference is KtReference - && (referencedElement.namedUnwrappedElement as? KtDeclaration)?.isExtensionDeclaration() ?: false - && reference.element.getNonStrictParentOfType() == null +private enum class ReferenceKind { + QUALIFIABLE, + UNQUALIFIABLE, + IRRELEVANT +} + +private fun getReferenceKind(reference: PsiReference, referencedElement: PsiElement): ReferenceKind { + val element = reference.element as? KtSimpleNameExpression ?: return ReferenceKind.QUALIFIABLE + + if ((referencedElement.namedUnwrappedElement as? KtDeclaration)?.isExtensionDeclaration() ?: false + && reference.element.getNonStrictParentOfType() == null) return ReferenceKind.UNQUALIFIABLE + + element.getParentOfTypeAndBranch { callableReference }?.let { + if (it.receiverExpression != null) return ReferenceKind.IRRELEVANT + if (referencedElement is KtDeclaration && referencedElement.parent is KtFile) return ReferenceKind.UNQUALIFIABLE + } + + return ReferenceKind.QUALIFIABLE } private fun isCallableReference(reference: PsiReference): Boolean { @@ -358,7 +371,7 @@ fun postProcessMoveUsages(usages: Collection, is UnqualifiableMoveRenameUsageInfo -> { val file = with(usage) { if (addImportToOriginalFile) originalFile else counterpart(originalFile) } as KtFile - val declaration = counterpart(usage.referencedElement!!).unwrapped as KtDeclaration + val declaration = counterpart(usage.referencedElement!!) addDelayedImportRequest(declaration, file) } diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/bar/usages.kt new file mode 100644 index 00000000000..4106dc786a6 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/bar/usages.kt @@ -0,0 +1,4 @@ +package bar + +class X + diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/baz/test.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/baz/test.kt new file mode 100644 index 00000000000..ddbae9c8c85 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/baz/test.kt @@ -0,0 +1,55 @@ +package baz + +import foo.O.objectExtensionMember2 +import foo.classExtension +import foo.companionExtension +import foo.objectExtension + +fun test() { + foo.A().classMember() + foo.A().classExtension() + foo.O.objectMember1() + foo.O.objectMember2() + foo.O.objectExtension() + foo.A.companionMember() + foo.A.companionExtension() + foo.J().javaClassMember() + foo.J.javaClassStaticMember() + foo.topLevel() + with(foo.O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(foo.A) { 1.companionExtensionMember() } + + foo.A()::classMember + foo.A::classMember + foo.A()::classExtension + foo.A::classExtension + foo.O::objectMember1 + foo.O::objectMember2 + foo.O::objectExtension + foo.A.Companion::companionMember + (foo.A)::companionMember + foo.A.Companion::companionExtension + (foo.A)::companionExtension + foo.J()::javaClassMember + foo.J::javaClassMember + foo.J::javaClassStaticMember + //::topLevel // not usable without import + + with(foo.A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(foo.J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/after/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/bar/usages.kt new file mode 100644 index 00000000000..5c86d33aa4b --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/bar/usages.kt @@ -0,0 +1,57 @@ +package bar + +import foo.O.objectExtensionMember2 +import foo.classExtension +import foo.companionExtension +import foo.objectExtension + +class X + +fun test() { + foo.A().classMember() + foo.A().classExtension() + foo.O.objectMember1() + foo.O.objectMember2() + foo.O.objectExtension() + foo.A.companionMember() + foo.A.companionExtension() + foo.J().javaClassMember() + foo.J.javaClassStaticMember() + foo.topLevel() + with(foo.O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(foo.A) { 1.companionExtensionMember() } + + foo.A()::classMember + foo.A::classMember + foo.A()::classExtension + foo.A::classExtension + foo.O::objectMember1 + foo.O::objectMember2 + foo.O::objectExtension + foo.A.Companion::companionMember + (foo.A)::companionMember + foo.A.Companion::companionExtension + (foo.A)::companionExtension + foo.J()::javaClassMember + foo.J::javaClassMember + foo.J::javaClassStaticMember + //::topLevel // not usable without import + + with(foo.A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(foo.J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/before/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/differentSourceAndTargetWithFqNames.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/differentSourceAndTargetWithFqNames.test new file mode 100644 index 00000000000..a1358eb5950 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/differentSourceAndTargetWithFqNames.test @@ -0,0 +1,5 @@ +{ + "mainFile": "bar/usages.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "baz" +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/bar/usages.kt new file mode 100644 index 00000000000..4106dc786a6 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/bar/usages.kt @@ -0,0 +1,4 @@ +package bar + +class X + diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/baz/test.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/baz/test.kt new file mode 100644 index 00000000000..6303b306de4 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/baz/test.kt @@ -0,0 +1,59 @@ +package baz + +import foo.A +import foo.J +import foo.O +import foo.O.objectExtensionMember2 +import foo.classExtension +import foo.companionExtension +import foo.objectExtension +import foo.topLevel + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + O.objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + O::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + ::topLevel + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/after/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/bar/usages.kt new file mode 100644 index 00000000000..113ca1e432c --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/bar/usages.kt @@ -0,0 +1,56 @@ +package bar + +import foo.* +import foo.O.objectMember2 +import foo.O.objectExtensionMember2 + +class X + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + ::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + ::topLevel + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/before/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/differentSourceAndTargetWithImports.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/differentSourceAndTargetWithImports.test new file mode 100644 index 00000000000..a1358eb5950 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/differentSourceAndTargetWithImports.test @@ -0,0 +1,5 @@ +{ + "mainFile": "bar/usages.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "baz" +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/bar/usages.kt new file mode 100644 index 00000000000..4106dc786a6 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/bar/usages.kt @@ -0,0 +1,4 @@ +package bar + +class X + diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/test.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/test.kt new file mode 100644 index 00000000000..f47f0ed4e3e --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/test.kt @@ -0,0 +1,52 @@ +package foo + +import foo.O.objectExtensionMember2 + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + O.objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + O::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + //::topLevel // not usable without import + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/after/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/bar/usages.kt new file mode 100644 index 00000000000..5c86d33aa4b --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/bar/usages.kt @@ -0,0 +1,57 @@ +package bar + +import foo.O.objectExtensionMember2 +import foo.classExtension +import foo.companionExtension +import foo.objectExtension + +class X + +fun test() { + foo.A().classMember() + foo.A().classExtension() + foo.O.objectMember1() + foo.O.objectMember2() + foo.O.objectExtension() + foo.A.companionMember() + foo.A.companionExtension() + foo.J().javaClassMember() + foo.J.javaClassStaticMember() + foo.topLevel() + with(foo.O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(foo.A) { 1.companionExtensionMember() } + + foo.A()::classMember + foo.A::classMember + foo.A()::classExtension + foo.A::classExtension + foo.O::objectMember1 + foo.O::objectMember2 + foo.O::objectExtension + foo.A.Companion::companionMember + (foo.A)::companionMember + foo.A.Companion::companionExtension + (foo.A)::companionExtension + foo.J()::javaClassMember + foo.J::javaClassMember + foo.J::javaClassStaticMember + //::topLevel // not usable without import + + with(foo.A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(foo.J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/before/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/differentSourceWithFqNames.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/differentSourceWithFqNames.test new file mode 100644 index 00000000000..7166ce55038 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/differentSourceWithFqNames.test @@ -0,0 +1,5 @@ +{ + "mainFile": "bar/usages.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "foo" +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/bar/usages.kt new file mode 100644 index 00000000000..4106dc786a6 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/bar/usages.kt @@ -0,0 +1,4 @@ +package bar + +class X + diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/test.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/test.kt new file mode 100644 index 00000000000..462dc4c55e3 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/test.kt @@ -0,0 +1,52 @@ +package foo + +import foo.O.objectExtensionMember2 + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + O.objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + O::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + ::topLevel + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/after/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/bar/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/bar/usages.kt new file mode 100644 index 00000000000..113ca1e432c --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/bar/usages.kt @@ -0,0 +1,56 @@ +package bar + +import foo.* +import foo.O.objectMember2 +import foo.O.objectExtensionMember2 + +class X + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + ::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + ::topLevel + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/before/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/differentSourceWithImports.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/differentSourceWithImports.test new file mode 100644 index 00000000000..7166ce55038 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/differentSourceWithImports.test @@ -0,0 +1,5 @@ +{ + "mainFile": "bar/usages.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "foo" +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/bar/test.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/bar/test.kt new file mode 100644 index 00000000000..68a404e5c47 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/bar/test.kt @@ -0,0 +1,59 @@ +package bar + +import foo.A +import foo.J +import foo.O +import foo.O.objectExtensionMember2 +import foo.classExtension +import foo.companionExtension +import foo.objectExtension +import foo.topLevel + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + O.objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + O::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + ::topLevel + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/usages.kt new file mode 100644 index 00000000000..43eba6becb1 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/usages.kt @@ -0,0 +1,4 @@ +package foo + +class X + diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/after/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/usages.kt new file mode 100644 index 00000000000..9de2ae9e396 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/usages.kt @@ -0,0 +1,55 @@ +package foo + +import foo.O.objectMember2 +import foo.O.objectExtensionMember2 + +class X + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + ::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + ::topLevel + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/before/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/differentTarget.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/differentTarget.test new file mode 100644 index 00000000000..3f5d42b7a88 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/differentTarget.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/usages.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "bar" +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/bar/test.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/bar/test.kt new file mode 100644 index 00000000000..68a404e5c47 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/bar/test.kt @@ -0,0 +1,59 @@ +package bar + +import foo.A +import foo.J +import foo.O +import foo.O.objectExtensionMember2 +import foo.classExtension +import foo.companionExtension +import foo.objectExtension +import foo.topLevel + +fun test() { + A().classMember() + A().classExtension() + O.objectMember1() + O.objectMember2() + O.objectExtension() + A.companionMember() + A.companionExtension() + J().javaClassMember() + J.javaClassStaticMember() + topLevel() + with(O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(A) { 1.companionExtensionMember() } + + A()::classMember + A::classMember + A()::classExtension + A::classExtension + O::objectMember1 + O::objectMember2 + O::objectExtension + A.Companion::companionMember + (A)::companionMember + A.Companion::companionExtension + (A)::companionExtension + J()::javaClassMember + J::javaClassMember + J::javaClassStaticMember + ::topLevel + + with(A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/usages.kt new file mode 100644 index 00000000000..43eba6becb1 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/usages.kt @@ -0,0 +1,4 @@ +package foo + +class X + diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/after/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/J.java b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/J.java new file mode 100644 index 00000000000..55c00a58a84 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/J.java @@ -0,0 +1,11 @@ +package foo; + +public class J { + public void javaClassMember() { + + } + + public static void javaClassStaticMember() { + + } +} diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/usages.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/usages.kt new file mode 100644 index 00000000000..89e3e0dbb16 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/usages.kt @@ -0,0 +1,54 @@ +package foo + +import foo.O.objectExtensionMember2 + +class X + +fun test() { + foo.A().classMember() + foo.A().classExtension() + foo.O.objectMember1() + foo.O.objectMember2() + foo.O.objectExtension() + foo.A.companionMember() + foo.A.companionExtension() + foo.J().javaClassMember() + foo.J.javaClassStaticMember() + foo.topLevel() + with(foo.O) { 1.objectExtensionMember1() } + 1.objectExtensionMember2() + with(foo.A) { 1.companionExtensionMember() } + + foo.A()::classMember + foo.A::classMember + foo.A()::classExtension + foo.A::classExtension + foo.O::objectMember1 + foo.O::objectMember2 + foo.O::objectExtension + foo.A.Companion::companionMember + (foo.A)::companionMember + foo.A.Companion::companionExtension + (foo.A)::companionExtension + foo.J()::javaClassMember + foo.J::javaClassMember + foo.J::javaClassStaticMember + ::topLevel + + with(foo.A()) { + classMember() + this.classMember() + classExtension() + this.classExtension() + + this::classMember + this::classExtension + } + + with(foo.J()) { + javaClassMember() + this.javaClassMember() + + this::javaClassMember + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/utils.kt b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/utils.kt new file mode 100644 index 00000000000..365f47ba6ba --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/before/foo/utils.kt @@ -0,0 +1,51 @@ +package foo + +class A { + fun classMember() { + + } + + companion object { + fun companionMember() { + + } + + fun Int.companionExtensionMember() { + + } + } +} + +fun A.classExtension() { + +} + +object O { + fun objectMember1() { + + } + + fun objectMember2() { + + } + + fun Int.objectExtensionMember1() { + + } + + fun Int.objectExtensionMember2() { + + } +} + +fun O.objectExtension() { + +} + +fun A.Companion.companionExtension() { + +} + +fun topLevel() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/differentTargetWithFqNames.test b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/differentTargetWithFqNames.test new file mode 100644 index 00000000000..3f5d42b7a88 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/differentTargetWithFqNames.test @@ -0,0 +1,5 @@ +{ + "mainFile": "foo/usages.kt", + "type": "MOVE_KOTLIN_TOP_LEVEL_DECLARATIONS", + "targetPackage": "bar" +} 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 49a573d7482..2501ddcfca7 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java @@ -420,6 +420,42 @@ public class MoveTestGenerated extends AbstractMoveTest { doTest(fileName); } + @TestMetadata("kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/differentSourceAndTargetWithFqNames.test") + public void testKotlin_moveTopLevelDeclarations_callsAndCallableRefs_internalUsages_differentSourceAndTargetWithFqNames_DifferentSourceAndTargetWithFqNames() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithFqNames/differentSourceAndTargetWithFqNames.test"); + doTest(fileName); + } + + @TestMetadata("kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/differentSourceAndTargetWithImports.test") + public void testKotlin_moveTopLevelDeclarations_callsAndCallableRefs_internalUsages_differentSourceAndTargetWithImports_DifferentSourceAndTargetWithImports() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceAndTargetWithImports/differentSourceAndTargetWithImports.test"); + doTest(fileName); + } + + @TestMetadata("kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/differentSourceWithFqNames.test") + public void testKotlin_moveTopLevelDeclarations_callsAndCallableRefs_internalUsages_differentSourceWithFqNames_DifferentSourceWithFqNames() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithFqNames/differentSourceWithFqNames.test"); + doTest(fileName); + } + + @TestMetadata("kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/differentSourceWithImports.test") + public void testKotlin_moveTopLevelDeclarations_callsAndCallableRefs_internalUsages_differentSourceWithImports_DifferentSourceWithImports() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentSourceWithImports/differentSourceWithImports.test"); + doTest(fileName); + } + + @TestMetadata("kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/differentTarget.test") + public void testKotlin_moveTopLevelDeclarations_callsAndCallableRefs_internalUsages_differentTarget_DifferentTarget() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTarget/differentTarget.test"); + doTest(fileName); + } + + @TestMetadata("kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/differentTargetWithFqNames.test") + public void testKotlin_moveTopLevelDeclarations_callsAndCallableRefs_internalUsages_differentTargetWithFqNames_DifferentTargetWithFqNames() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/callsAndCallableRefs/internalUsages/differentTargetWithFqNames/differentTargetWithFqNames.test"); + doTest(fileName); + } + @TestMetadata("kotlin/moveTopLevelDeclarations/misc/companionExtensionMemberRef/companionExtensionMemberRef.test") public void testKotlin_moveTopLevelDeclarations_misc_companionExtensionMemberRef_CompanionExtensionMemberRef() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveTopLevelDeclarations/misc/companionExtensionMemberRef/companionExtensionMemberRef.test");