Rename: Fix field identifier replacement #KT-8018 Fixed

This commit is contained in:
Alexey Sedunov
2015-06-15 13:43:53 +03:00
parent 98dce65337
commit 62f9672461
6 changed files with 44 additions and 2 deletions
@@ -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 {
@@ -0,0 +1,6 @@
class Exp(p1: String) {
val /*rename*/prop11: String = p1
get(): String {
return $prop11
}
}
@@ -0,0 +1,6 @@
class Exp(p1: String) {
val /*rename*/prop1: String = p1
get(): String {
return $prop1
}
}
@@ -0,0 +1,6 @@
{
"type": "MARKED_ELEMENT",
"newName": "prop11",
"mainFile": "test.kt",
"checkErrorsAfter": "true"
}
@@ -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<Any>() {
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
@@ -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");