From 62f967246102e2501eee28da5a60cb52a457b23a Mon Sep 17 00:00:00 2001 From: Alexey Sedunov Date: Mon, 15 Jun 2015 13:43:53 +0300 Subject: [PATCH] Rename: Fix field identifier replacement #KT-8018 Fixed --- .../org/jetbrains/kotlin/psi/JetPsiFactory.kt | 4 ++-- .../rename/renameFieldIdentifier/after/test.kt | 6 ++++++ .../renameFieldIdentifier/before/test.kt | 6 ++++++ .../renameFieldIdentifier/fieldIdentifier.test | 6 ++++++ .../refactoring/rename/AbstractRenameTest.kt | 18 ++++++++++++++++++ .../rename/RenameTestGenerated.java | 6 ++++++ 6 files changed, 44 insertions(+), 2 deletions(-) create mode 100644 idea/testData/refactoring/rename/renameFieldIdentifier/after/test.kt create mode 100644 idea/testData/refactoring/rename/renameFieldIdentifier/before/test.kt create mode 100644 idea/testData/refactoring/rename/renameFieldIdentifier/fieldIdentifier.test diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiFactory.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiFactory.kt index ebc15160f7d..2dc927c6ccf 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiFactory.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetPsiFactory.kt @@ -331,8 +331,8 @@ public class JetPsiFactory(private val project: Project) { public fun createLabeledExpression(labelName: String): JetLabeledExpression = createExpression("$labelName@ 1") as JetLabeledExpression - public fun createFieldIdentifier(fieldName: String): JetExpression { - return createExpression("$" + fieldName) + public fun createFieldIdentifier(fieldName: String): PsiElement { + return (createExpression("$" + fieldName) as JetNameReferenceExpression).getReferencedNameElement() } public fun createTypeCodeFragment(text: String, context: PsiElement?): JetTypeCodeFragment { diff --git a/idea/testData/refactoring/rename/renameFieldIdentifier/after/test.kt b/idea/testData/refactoring/rename/renameFieldIdentifier/after/test.kt new file mode 100644 index 00000000000..b021cbbc0cb --- /dev/null +++ b/idea/testData/refactoring/rename/renameFieldIdentifier/after/test.kt @@ -0,0 +1,6 @@ +class Exp(p1: String) { + val /*rename*/prop11: String = p1 + get(): String { + return $prop11 + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameFieldIdentifier/before/test.kt b/idea/testData/refactoring/rename/renameFieldIdentifier/before/test.kt new file mode 100644 index 00000000000..0e23e7939ad --- /dev/null +++ b/idea/testData/refactoring/rename/renameFieldIdentifier/before/test.kt @@ -0,0 +1,6 @@ +class Exp(p1: String) { + val /*rename*/prop1: String = p1 + get(): String { + return $prop1 + } +} \ No newline at end of file diff --git a/idea/testData/refactoring/rename/renameFieldIdentifier/fieldIdentifier.test b/idea/testData/refactoring/rename/renameFieldIdentifier/fieldIdentifier.test new file mode 100644 index 00000000000..92d1274466f --- /dev/null +++ b/idea/testData/refactoring/rename/renameFieldIdentifier/fieldIdentifier.test @@ -0,0 +1,6 @@ +{ + "type": "MARKED_ELEMENT", + "newName": "prop11", + "mainFile": "test.kt", + "checkErrorsAfter": "true" +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt index 6a53891063a..fe0ac8b66be 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/AbstractRenameTest.kt @@ -22,10 +22,13 @@ import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.fileEditor.FileDocumentManager import com.intellij.openapi.module.Module import com.intellij.openapi.project.Project +import com.intellij.openapi.roots.ModuleRootManager import com.intellij.openapi.util.io.FileUtil import com.intellij.openapi.util.text.StringUtil import com.intellij.openapi.vfs.VfsUtil +import com.intellij.openapi.vfs.VfsUtilCore import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.vfs.VirtualFileVisitor import com.intellij.psi.* import com.intellij.psi.search.GlobalSearchScope import com.intellij.refactoring.BaseRefactoringProcessor.ConflictsInTestsException @@ -39,6 +42,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyzeFullyAndGetResult import org.jetbrains.kotlin.idea.jsonUtils.getNullableString import org.jetbrains.kotlin.idea.jsonUtils.getString import org.jetbrains.kotlin.idea.search.allScope +import org.jetbrains.kotlin.idea.test.DirectiveBasedActionUtils import org.jetbrains.kotlin.idea.test.KotlinMultiFileTestCase import org.jetbrains.kotlin.idea.test.PluginTestCaseBase import org.jetbrains.kotlin.name.* @@ -94,6 +98,20 @@ public abstract class AbstractRenameTest : KotlinMultiFileTestCase() { if (hintDirective != null) { Assert.fail("""Hint "$hintDirective" was expected""") } + + if (renameObject["checkErrorsAfter"]?.getAsBoolean() ?: false) { + val psiManager = PsiManager.getInstance(myProject) + val visitor = object : VirtualFileVisitor() { + override fun visitFile(file: VirtualFile): Boolean { + (psiManager.findFile(file) as? JetFile)?.let { DirectiveBasedActionUtils.checkForUnexpectedErrors(it) } + return true + } + } + + for (sourceRoot in ModuleRootManager.getInstance(myModule).getSourceRoots()) { + VfsUtilCore.visitChildrenRecursively(sourceRoot, visitor) + } + } } catch (e : Exception) { if (e !is RefactoringErrorHintException && e !is ConflictsInTestsException) throw e diff --git a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java index 8bc80e2f69b..bb3cadc9157 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/refactoring/rename/RenameTestGenerated.java @@ -137,6 +137,12 @@ public class RenameTestGenerated extends AbstractRenameTest { doTest(fileName); } + @TestMetadata("renameFieldIdentifier/fieldIdentifier.test") + public void testRenameFieldIdentifier_FieldIdentifier() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameFieldIdentifier/fieldIdentifier.test"); + doTest(fileName); + } + @TestMetadata("renameGet/get.test") public void testRenameGet_Get() throws Exception { String fileName = JetTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameGet/get.test");