Rename: Update references to facade class when renaming file via matching top-level class

#KT-11903 Fixed
(cherry picked from commit a1d9a25)
This commit is contained in:
Alexey Sedunov
2016-06-22 17:38:06 +03:00
parent 932892243c
commit b83902a8b5
9 changed files with 40 additions and 1 deletions
+1
View File
@@ -254,6 +254,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-11903`](https://youtrack.jetbrains.com/issue/KT-11903) Update references to facade class when renaming file via matching top-level class
- [`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
@@ -69,6 +69,7 @@ abstract class LightClassDataProvider<T : WithFileStubAndExtraDiagnostics>(
abstract val isLocal: Boolean
override fun compute(): CachedValueProvider.Result<T>? {
if (files.isEmpty()) return null
return CachedValueProvider.Result.create(
computeLightClassData(),
if (isLocal) PsiModificationTracker.MODIFICATION_COUNT else PsiModificationTracker.OUT_OF_CODE_BLOCK_MODIFICATION_COUNT
@@ -21,6 +21,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiReference
import com.intellij.refactoring.JavaRefactoringSettings
import com.intellij.refactoring.listeners.RefactoringElementListener
import com.intellij.refactoring.rename.RenamePsiElementProcessor
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.asJava.KtLightClass
import org.jetbrains.kotlin.asJava.KtLightClassForExplicitDeclaration
@@ -69,7 +70,9 @@ class RenameKotlinClassProcessor : RenameKotlinPsiProcessor() {
if (virtualFile != null) {
val nameWithoutExtensions = virtualFile.nameWithoutExtension
if (nameWithoutExtensions == classOrObject.name) {
allRenames.put(file, newName + "." + virtualFile.extension)
val newFileName = newName + "." + virtualFile.extension
allRenames.put(file, newFileName)
RenamePsiElementProcessor.forElement(file).prepareRenaming(file, newFileName, allRenames)
}
}
}
@@ -0,0 +1,4 @@
package foo
class TopLevel2 {}
fun topMe() {}
@@ -0,0 +1,7 @@
package foo;
public class TopUser {
public void use() {
TopLevel2Kt.topMe();
}
}
@@ -0,0 +1,4 @@
package foo
class /*rename*/TopLevel {}
fun topMe() {}
@@ -0,0 +1,7 @@
package foo;
public class TopUser {
public void use() {
TopLevelKt.topMe();
}
}
@@ -0,0 +1,6 @@
{
"type": "MARKED_ELEMENT",
"mainFile": "foo/TopLevel.kt",
"newName": "TopLevel2",
"withRuntime": "true"
}
@@ -515,6 +515,12 @@ public class RenameTestGenerated extends AbstractRenameTest {
doTest(fileName);
}
@TestMetadata("renameKotlinFacadeClassViaTopLevelClass/renameKotlinFacadeClassViaTopLevelClass.test")
public void testRenameKotlinFacadeClassViaTopLevelClass_RenameKotlinFacadeClassViaTopLevelClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinFacadeClassViaTopLevelClass/renameKotlinFacadeClassViaTopLevelClass.test");
doTest(fileName);
}
@TestMetadata("renameKotlinFacadeClassWithDefaultNameAndCommentsByRef/renameKotlinFacadeClassWithDefaultNameByRef.test")
public void testRenameKotlinFacadeClassWithDefaultNameAndCommentsByRef_RenameKotlinFacadeClassWithDefaultNameByRef() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameKotlinFacadeClassWithDefaultNameAndCommentsByRef/renameKotlinFacadeClassWithDefaultNameByRef.test");