From 542f8d9fd29645d85253987bf6716633b7134f1c Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Tue, 21 Jun 2016 20:57:11 +0300 Subject: [PATCH] Move: Support quoted package names #KT-12411 Fixed (cherry picked from commit 95239e5) --- ChangeLog.md | 1 + .../idea/references/KtSimpleNameReference.kt | 10 +++++----- .../org/jetbrains/kotlin/idea/core/Utils.kt | 7 +++++++ .../evaluate/KotlinEvaluationBuilder.kt | 2 +- .../idea/refactoring/kotlinRefactoringUtil.kt | 6 ++---- .../changePackage/ChangePackageIntention.kt | 3 ++- .../ChangePackageToMatchDirectoryIntention.kt | 4 ++-- .../KotlinChangePackageRefactoring.kt | 3 ++- .../KotlinMoveDirectoryWithClassesHelper.kt | 3 ++- .../MoveKotlinFileHandler.kt | 3 ++- .../addQuotation/addQuotation.test | 5 +++++ .../addQuotation/after/in/foo/fun/test.kt | 7 +++++++ .../after/in/foo/fun/usagesWithFqNames.java | 8 ++++++++ .../after/in/foo/fun/usagesWithFqNames.kt | 6 ++++++ .../after/in/foo/fun/usagesWithImports.java | 10 ++++++++++ .../after/in/foo/fun/usagesWithImports.kt | 9 +++++++++ .../after/usages/usagesWithFqNames.java | 11 +++++++++++ .../after/usages/usagesWithFqNames.kt | 9 +++++++++ .../after/usages/usagesWithImports.java | 11 +++++++++++ .../after/usages/usagesWithImports.kt | 9 +++++++++ .../addQuotation/before/in/foo/fun/test.kt | 7 +++++++ .../before/in/foo/fun/usagesWithFqNames.java | 8 ++++++++ .../before/in/foo/fun/usagesWithFqNames.kt | 6 ++++++ .../before/in/foo/fun/usagesWithImports.java | 11 +++++++++++ .../before/in/foo/fun/usagesWithImports.kt | 9 +++++++++ .../before/usages/usagesWithFqNames.java | 8 ++++++++ .../before/usages/usagesWithFqNames.kt | 6 ++++++ .../before/usages/usagesWithImports.java | 11 +++++++++++ .../before/usages/usagesWithImports.kt | 9 +++++++++ .../after/in/p1/M.kt | 9 +++++++++ .../after/in/p2/JJ.java | 9 +++++++++ .../after/in/p2/L.kt | 9 +++++++++ .../after/in/p2/p/J.java | 5 +++++ .../after/in/p2/p/K.kt | 5 +++++ .../before/in/p1/M.kt | 9 +++++++++ .../before/in/p1/p/J.java | 5 +++++ .../before/in/p1/p/K.kt | 5 +++++ .../before/in/p2/JJ.java | 9 +++++++++ .../before/in/p2/L.kt | 9 +++++++++ .../moveDirectoryWithQuotation.test | 6 ++++++ .../invalidTargetPackage/before/p/main.kt | 5 ----- .../packageWithQuotation/after/p/123/main.kt | 5 +++++ .../after}/q/usage.kt | 2 +- .../before/p}/main.kt | 0 .../before}/q/usage.kt | 0 .../moveFileToPackageWithQuotation.test} | 0 .../MultiFileIntentionTestGenerated.java | 6 ++++++ .../refactoring/move/MoveTestGenerated.java | 18 ++++++++++++------ 48 files changed, 290 insertions(+), 28 deletions(-) create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/addQuotation.test create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/test.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/test.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.kt create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.java create mode 100644 idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p1/M.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/JJ.java create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/L.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/J.java create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/K.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/M.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/J.java create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/K.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/JJ.java create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/L.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/moveDirectoryWithQuotation.test delete mode 100644 idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/before/p/main.kt create mode 100644 idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/after/p/123/main.kt rename idea/testData/refactoring/move/kotlin/moveFile/{invalidTargetPackage/before => packageWithQuotation/after}/q/usage.kt (64%) rename idea/testData/refactoring/move/kotlin/moveFile/{invalidTargetPackage/after/p/123 => packageWithQuotation/before/p}/main.kt (100%) rename idea/testData/refactoring/move/kotlin/moveFile/{invalidTargetPackage/after => packageWithQuotation/before}/q/usage.kt (100%) rename idea/testData/refactoring/move/kotlin/moveFile/{invalidTargetPackage/moveFileToInvalidPackage.test => packageWithQuotation/moveFileToPackageWithQuotation.test} (100%) diff --git a/ChangeLog.md b/ChangeLog.md index b12d58e50a5..4f7eecd77dc 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -251,6 +251,7 @@ - [`KT-10033`](https://youtrack.jetbrains.com/issue/KT-10033) Qualify references to members of enum companions in case of conflict with enum entries - [`KT-10713`](https://youtrack.jetbrains.com/issue/KT-10713) Skip read-only declarations when renaming parameters - [`KT-10687`](https://youtrack.jetbrains.com/issue/KT-10687) Qualify property references to avoid shadowing by parameters +- [`KT-12411`](https://youtrack.jetbrains.com/issue/KT-12411) Fix package name quotation in Move refactoring - [`KT-12543`](https://youtrack.jetbrains.com/issue/KT-12543) Qualify property references with 'this' to avoid renaming conflicts - [`KT-12732`](https://youtrack.jetbrains.com/issue/KT-12732) Copy default parameter values to overriding function which is renamed by Java reference while its base function is unchanged - [`KT-12747`](https://youtrack.jetbrains.com/issue/KT-12747) Fix exception on file copy 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 2b07be21b3e..a6a34c16ad9 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 @@ -24,10 +24,10 @@ import com.intellij.util.IncorrectOperationException import com.intellij.util.SmartList import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.codeInsight.shorten.addToShorteningWaitSet -import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention -import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.idea.core.ShortenReferences import org.jetbrains.kotlin.idea.core.quoteIfNeeded +import org.jetbrains.kotlin.idea.intentions.OperatorToFunctionIntention +import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.lexer.KtToken import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor @@ -154,7 +154,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) + val newExpression = expression.changeQualifiedName(fqName.quoteIfNeeded()) val newQualifiedElement = newExpression.getQualifiedElement() if (shorteningMode == ShorteningMode.NO_SHORTENING) return newExpression @@ -181,14 +181,14 @@ class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleRefere private fun KtNameReferenceExpression.changeQualifiedName(fqName: FqName): KtNameReferenceExpression { assert(!fqName.isRoot) { "Can't set empty FqName for element $this" } - val shortName = fqName.shortName().render() + 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 text = if (!fqName.isOneSegmentFQN()) "${fqName.parent().render()}.$fqNameBase" else fqNameBase + val text = if (!fqName.isOneSegmentFQN()) "${fqName.parent().asString()}.$fqNameBase" else fqNameBase val elementToReplace = getQualifiedElement() diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt index acabdfde600..3b0c23714fb 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt @@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.resolve.frontendService import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression import org.jetbrains.kotlin.idea.util.getResolutionScope +import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElementSelector @@ -163,6 +164,12 @@ fun KtCallableDeclaration.canOmitDeclaredType(initializerOrBodyExpression: KtExp fun String.quoteIfNeeded(): String = if (KotlinNameSuggester.isIdentifier(this)) this else "`$this`" +fun FqName.quoteSegmentsIfNeeded(): String { + return pathSegments().map { it.asString().quoteIfNeeded() }.joinToString(".") +} + +fun FqName.quoteIfNeeded() = FqName(quoteSegmentsIfNeeded()) + fun isEnumCompanionPropertyWithEntryConflict(element: PsiElement, expectedName: String): Boolean { if (element !is KtProperty) return false diff --git a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt index d9a3e5276a4..517cc8e9b0d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt +++ b/idea/src/org/jetbrains/kotlin/idea/debugger/evaluate/KotlinEvaluationBuilder.kt @@ -60,7 +60,7 @@ import org.jetbrains.kotlin.idea.debugger.evaluate.KotlinDebuggerCaches.Paramete import org.jetbrains.kotlin.idea.debugger.evaluate.compilingEvaluator.loadClasses import org.jetbrains.kotlin.idea.refactoring.introduce.extractionEngine.ExtractionResult import org.jetbrains.kotlin.idea.core.quoteIfNeeded -import org.jetbrains.kotlin.idea.refactoring.quoteSegmentsIfNeeded +import org.jetbrains.kotlin.idea.core.quoteSegmentsIfNeeded import org.jetbrains.kotlin.idea.util.DebuggerUtils import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.attachment.attachmentByPsiFile diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt index bfb3c90d64f..6ecb2388d84 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/kotlinRefactoringUtil.kt @@ -687,11 +687,9 @@ fun invokeOnceOnCommandFinish(action: () -> Unit) { commandProcessor.addCommandListener(listener) } -fun FqName.quoteSegmentsIfNeeded(): String { - return pathSegments().map { it.asString().quoteIfNeeded() }.joinToString(".") -} +fun FqNameUnsafe.hasIdentifiersOnly(): Boolean = pathSegments().all { KotlinNameSuggester.isIdentifier(it.asString().quoteIfNeeded()) } -fun FqNameUnsafe.hasIdentifiersOnly(): Boolean = pathSegments().all { KotlinNameSuggester.isIdentifier(it.asString()) } +fun FqName.hasIdentifiersOnly(): Boolean = pathSegments().all { KotlinNameSuggester.isIdentifier(it.asString().quoteIfNeeded()) } fun PsiNamedElement.isInterfaceClass(): Boolean = this is KtClass && isInterface() || this is PsiClass && isInterface diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/ChangePackageIntention.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/ChangePackageIntention.kt index 61e37a6f709..aeb12c2907f 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/ChangePackageIntention.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/changePackage/ChangePackageIntention.kt @@ -26,6 +26,7 @@ import com.intellij.psi.PsiDocumentManager import org.jetbrains.kotlin.idea.codeInsight.CodeInsightUtils import org.jetbrains.kotlin.idea.intentions.SelfTargetingOffsetIndependentIntention import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly +import org.jetbrains.kotlin.idea.core.quoteSegmentsIfNeeded import org.jetbrains.kotlin.idea.util.application.executeWriteCommand import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqNameUnsafe @@ -84,7 +85,7 @@ class ChangePackageIntention: SelfTargetingOffsetIndependentIntention file.packageDirective?.fqName = FqName(newPackage.qualifiedName) } + moveDestination.getPackage()?.let { newPackage -> file.packageDirective?.fqName = FqName(newPackage.qualifiedName).quoteIfNeeded() } return true } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt index 19bce33ee89..d66020b1167 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/move/moveFilesOrDirectories/MoveKotlinFileHandler.kt @@ -29,6 +29,7 @@ import org.jetbrains.kotlin.idea.core.packageMatchesDirectory import org.jetbrains.kotlin.idea.refactoring.hasIdentifiersOnly import org.jetbrains.kotlin.idea.refactoring.move.* import org.jetbrains.kotlin.idea.refactoring.move.moveDeclarations.* +import org.jetbrains.kotlin.idea.core.quoteIfNeeded import org.jetbrains.kotlin.name.FqNameUnsafe import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -128,7 +129,7 @@ class MoveKotlinFileHandler : MoveFileHandler() { if (file !is KtFile) return val newDirectory = file.parent ?: return val packageNameInfo = file.getPackageNameInfo(newDirectory, true) ?: return - file.packageDirective?.fqName = packageNameInfo.newContainer.fqName!! + file.packageDirective?.fqName = packageNameInfo.newContainer.fqName!!.quoteIfNeeded() } override fun retargetUsages(usageInfos: List?, oldToNewMap: Map) { diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/addQuotation.test b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/addQuotation.test new file mode 100644 index 00000000000..7147d551e4d --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/addQuotation.test @@ -0,0 +1,5 @@ +{ + "mainFile": "in/foo/fun/test.kt", + "intentionClass": "org.jetbrains.kotlin.idea.refactoring.move.changePackage.ChangePackageToMatchDirectoryIntention", + "intentionText": "Change file's package to 'in.foo.fun'" +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/test.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/test.kt new file mode 100644 index 00000000000..0709f873301 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/test.kt @@ -0,0 +1,7 @@ +package `in`.foo.`fun` + +class Foo + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.java new file mode 100644 index 00000000000..5c9f563885f --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.java @@ -0,0 +1,8 @@ +package in.foo.fun; + +class Test { + static void test() { + new Foo(); + TestKt.foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.kt new file mode 100644 index 00000000000..f2aaf62bf10 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithFqNames.kt @@ -0,0 +1,6 @@ +package `in`.foo.`fun` + +fun test() { + Foo() + foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.java new file mode 100644 index 00000000000..ab56412a9af --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.java @@ -0,0 +1,10 @@ +package in.foo.fun; + +import static in.foo.fun.TestKt.foo; + +class Test { + static void test() { + new Foo(); + foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.kt new file mode 100644 index 00000000000..5857a5540f1 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/in/foo/fun/usagesWithImports.kt @@ -0,0 +1,9 @@ +package `in`.foo.`fun` + +import `in`.foo.`fun`.Foo +import `in`.foo.`fun`.foo + +fun test() { + Foo() + foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.java new file mode 100644 index 00000000000..f14610deb69 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.java @@ -0,0 +1,11 @@ +package usages; + +import in.foo.fun.Foo; +import in.foo.fun.TestKt; + +class Test { + static void test() { + new Foo(); + TestKt.foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.kt new file mode 100644 index 00000000000..0068b97f730 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithFqNames.kt @@ -0,0 +1,9 @@ +package usages + +import `in`.foo.`fun`.Foo +import `in`.foo.`fun`.foo + +fun test() { + Foo() + foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.java new file mode 100644 index 00000000000..64516c20d12 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.java @@ -0,0 +1,11 @@ +package usages; + +import in.foo.fun.Foo; +import static in.foo.fun.TestKt.foo; + +class Test { + static void test() { + new Foo(); + foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.kt new file mode 100644 index 00000000000..0068b97f730 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/after/usages/usagesWithImports.kt @@ -0,0 +1,9 @@ +package usages + +import `in`.foo.`fun`.Foo +import `in`.foo.`fun`.foo + +fun test() { + Foo() + foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/test.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/test.kt new file mode 100644 index 00000000000..ee1a115563a --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/test.kt @@ -0,0 +1,7 @@ +package bar + +class Foo + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.java new file mode 100644 index 00000000000..b21291085d0 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.java @@ -0,0 +1,8 @@ +package in.foo.fun; + +class Test { + static void test() { + new bar.Foo(); + bar.TestKt.foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.kt new file mode 100644 index 00000000000..3fb9e0a590b --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithFqNames.kt @@ -0,0 +1,6 @@ +package `in`.foo.`fun` + +fun test() { + bar.Foo() + bar.foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.java new file mode 100644 index 00000000000..f8e4b3d64a9 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.java @@ -0,0 +1,11 @@ +package in.foo.fun; + +import bar.Foo; +import static bar.TestKt.foo; + +class Test { + static void test() { + new Foo(); + foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.kt new file mode 100644 index 00000000000..35b847fafe3 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/in/foo/fun/usagesWithImports.kt @@ -0,0 +1,9 @@ +package `in`.foo.`fun` + +import bar.Foo +import bar.foo + +fun test() { + Foo() + foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.java new file mode 100644 index 00000000000..2d46bae329c --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.java @@ -0,0 +1,8 @@ +package usages; + +class Test { + static void test() { + new bar.Foo(); + bar.TestKt.foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.kt new file mode 100644 index 00000000000..4edaaea347d --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithFqNames.kt @@ -0,0 +1,6 @@ +package usages + +fun test() { + bar.Foo() + bar.foo() +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.java b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.java new file mode 100644 index 00000000000..69df67c61ef --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.java @@ -0,0 +1,11 @@ +package usages; + +import bar.Foo; +import static bar.TestKt.foo; + +class Test { + static void test() { + new Foo(); + foo(); + } +} \ No newline at end of file diff --git a/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.kt b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.kt new file mode 100644 index 00000000000..354b72f28c8 --- /dev/null +++ b/idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/before/usages/usagesWithImports.kt @@ -0,0 +1,9 @@ +package usages + +import bar.Foo +import bar.foo + +fun test() { + Foo() + foo() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p1/M.kt b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p1/M.kt new file mode 100644 index 00000000000..ca40b102729 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p1/M.kt @@ -0,0 +1,9 @@ +package `in`.p1 + +import `in`.p2.p.J +import `in`.p2.p.K + +public class M { + val j = J() + val k = K() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/JJ.java b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/JJ.java new file mode 100644 index 00000000000..7e5a0cc2ce3 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/JJ.java @@ -0,0 +1,9 @@ +package in.p2; + +import in.p2.p.K; +import in.p1.M; + +public class JJ { + K k = new K(); + M m = new M(); +} diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/L.kt b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/L.kt new file mode 100644 index 00000000000..07fce14bb8b --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/L.kt @@ -0,0 +1,9 @@ +package `in`.p2 + +import `in`.p1.M +import `in`.p2.p.K + +public class L { + private val k = K() + private val m = M() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/J.java b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/J.java new file mode 100644 index 00000000000..a101441a074 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/J.java @@ -0,0 +1,5 @@ +package in.p2.p; + +public class J { + K k = new K(); +} diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/K.kt b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/K.kt new file mode 100644 index 00000000000..b420b6c36d6 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/after/in/p2/p/K.kt @@ -0,0 +1,5 @@ +package `in`.p2.p + +public class K { + val j = J() +} diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/M.kt b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/M.kt new file mode 100644 index 00000000000..836f4a6f39c --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/M.kt @@ -0,0 +1,9 @@ +package `in`.p1 + +import `in`.p1.p.J +import `in`.p1.p.K + +public class M { + val j = J() + val k = K() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/J.java b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/J.java new file mode 100644 index 00000000000..525580b2ada --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/J.java @@ -0,0 +1,5 @@ +package in.p1.p; + +public class J { + K k = new K(); +} diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/K.kt b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/K.kt new file mode 100644 index 00000000000..925a44d5405 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p1/p/K.kt @@ -0,0 +1,5 @@ +package `in`.p1.p + +public class K { + val j = J() +} diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/JJ.java b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/JJ.java new file mode 100644 index 00000000000..0e34ac70da4 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/JJ.java @@ -0,0 +1,9 @@ +package in.p2; + +import in.p1.p.K; +import in.p1.M; + +public class JJ { + K k = new K(); + M m = new M(); +} diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/L.kt b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/L.kt new file mode 100644 index 00000000000..d56c39eca86 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/before/in/p2/L.kt @@ -0,0 +1,9 @@ +package `in`.p2 + +import `in`.p1.M +import `in`.p1.p.K + +public class L { + private val k = K() + private val m = M() +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/moveDirectoryWithQuotation.test b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/moveDirectoryWithQuotation.test new file mode 100644 index 00000000000..0b03dc539d7 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/moveDirectoryWithQuotation.test @@ -0,0 +1,6 @@ +{ + "mainFile": "in/p1/M.kt", + "type": "MOVE_DIRECTORY_WITH_CLASSES", + "sourceDir": "in/p1/p", + "targetDir": "in/p2" +} diff --git a/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/before/p/main.kt b/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/before/p/main.kt deleted file mode 100644 index 08a269a0755..00000000000 --- a/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/before/p/main.kt +++ /dev/null @@ -1,5 +0,0 @@ -package p - -fun foo() { - -} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/after/p/123/main.kt b/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/after/p/123/main.kt new file mode 100644 index 00000000000..da8d0138584 --- /dev/null +++ b/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/after/p/123/main.kt @@ -0,0 +1,5 @@ +package p.`123` + +fun foo() { + +} \ No newline at end of file diff --git a/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/before/q/usage.kt b/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/after/q/usage.kt similarity index 64% rename from idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/before/q/usage.kt rename to idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/after/q/usage.kt index 0396b8271b8..490e7d17c86 100644 --- a/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/before/q/usage.kt +++ b/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/after/q/usage.kt @@ -1,6 +1,6 @@ package q -import p.foo +import p.`123`.foo fun bar() { foo() diff --git a/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/after/p/123/main.kt b/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/before/p/main.kt similarity index 100% rename from idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/after/p/123/main.kt rename to idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/before/p/main.kt diff --git a/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/after/q/usage.kt b/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/before/q/usage.kt similarity index 100% rename from idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/after/q/usage.kt rename to idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/before/q/usage.kt diff --git a/idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/moveFileToInvalidPackage.test b/idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/moveFileToPackageWithQuotation.test similarity index 100% rename from idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/moveFileToInvalidPackage.test rename to idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/moveFileToPackageWithQuotation.test diff --git a/idea/tests/org/jetbrains/kotlin/idea/intentions/MultiFileIntentionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/intentions/MultiFileIntentionTestGenerated.java index e47f4d54b55..31196ed020b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/intentions/MultiFileIntentionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/intentions/MultiFileIntentionTestGenerated.java @@ -143,6 +143,12 @@ public class MultiFileIntentionTestGenerated extends AbstractMultiFileIntentionT doTest(fileName); } + @TestMetadata("reconcilePackageWithDirectory/addQuotation/addQuotation.test") + public void testReconcilePackageWithDirectory_addQuotation_AddQuotation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileIntentions/reconcilePackageWithDirectory/addQuotation/addQuotation.test"); + doTest(fileName); + } + @TestMetadata("reconcilePackageWithDirectory/changeToDefaultPackage/changeToDefaultPackage.test") public void testReconcilePackageWithDirectory_changeToDefaultPackage_ChangeToDefaultPackage() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/multiFileIntentions/reconcilePackageWithDirectory/changeToDefaultPackage/changeToDefaultPackage.test"); 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 3871a7471af..74c64221dfd 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/move/MoveTestGenerated.java @@ -233,6 +233,12 @@ public class MoveTestGenerated extends AbstractMoveTest { doTest(fileName); } + @TestMetadata("kotlin/moveDirectoryWithQuotation/moveDirectoryWithQuotation.test") + public void testKotlin_moveDirectoryWithQuotation_MoveDirectoryWithQuotation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveDirectoryWithQuotation/moveDirectoryWithQuotation.test"); + doTest(fileName); + } + @TestMetadata("kotlin/moveFile/addExtensionImport/addExtensionImport.test") public void testKotlin_moveFile_addExtensionImport_AddExtensionImport() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/addExtensionImport/addExtensionImport.test"); @@ -245,12 +251,6 @@ public class MoveTestGenerated extends AbstractMoveTest { doTest(fileName); } - @TestMetadata("kotlin/moveFile/invalidTargetPackage/moveFileToInvalidPackage.test") - public void testKotlin_moveFile_invalidTargetPackage_MoveFileToInvalidPackage() throws Exception { - String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/invalidTargetPackage/moveFileToInvalidPackage.test"); - doTest(fileName); - } - @TestMetadata("kotlin/moveFile/moveFileToFile/moveFileToFile.test") public void testKotlin_moveFile_moveFileToFile_MoveFileToFile() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/moveFileToFile/moveFileToFile.test"); @@ -275,6 +275,12 @@ public class MoveTestGenerated extends AbstractMoveTest { doTest(fileName); } + @TestMetadata("kotlin/moveFile/packageWithQuotation/moveFileToPackageWithQuotation.test") + public void testKotlin_moveFile_packageWithQuotation_MoveFileToPackageWithQuotation() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveFile/packageWithQuotation/moveFileToPackageWithQuotation.test"); + doTest(fileName); + } + @TestMetadata("kotlin/moveNestedClass/deepInnerToTopLevelWithOuterOuterThis/deepInnerToTopLevelWithOuterOuterThis.test") public void testKotlin_moveNestedClass_deepInnerToTopLevelWithOuterOuterThis_DeepInnerToTopLevelWithOuterOuterThis() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/move/kotlin/moveNestedClass/deepInnerToTopLevelWithOuterOuterThis/deepInnerToTopLevelWithOuterOuterThis.test");