Rename: Rename overridden property and all its accessors on attempt to rename overriding accessor in Java code

#KT-4791 Fixed
(cherry picked from commit 29e450e)
This commit is contained in:
Alexey Sedunov
2016-06-14 17:04:38 +03:00
parent 4c447d0580
commit d0a3732c94
14 changed files with 107 additions and 3 deletions
+1
View File
@@ -223,6 +223,7 @@
- [`KT-8512`](https://youtrack.jetbrains.com/issue/KT-8512) Support "Rename tests" options in Rename dialog
###### Issues fixed
- [`KT-4791`](https://youtrack.jetbrains.com/issue/KT-4791) Rename overridden property and all its accessors on attempt to rename overriding accessor in Java code
- [`KT-6363`](https://youtrack.jetbrains.com/issue/KT-6363) Do not rename ambiguous references in import directives
- [`KT-6663`](https://youtrack.jetbrains.com/issue/KT-6663) Fixed rename of ambiguous import reference to class/function when some referenced declarations are not changed
- [`KT-8541`](https://youtrack.jetbrains.com/issue/KT-8541), [`KT-8786`](https://youtrack.jetbrains.com/issue/KT-8786) Do now show 'Rename overloads' options if target function has no overloads
@@ -38,7 +38,8 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils
class KotlinElementDescriptionProvider : ElementDescriptionProvider {
override fun getElementDescription(element: PsiElement, location: ElementDescriptionLocation): String? {
val targetElement = element.unwrapped ?: element
val shouldUnwrap = location !is UsageViewShortNameLocation && location !is UsageViewLongNameLocation
val targetElement = if (shouldUnwrap) element.unwrapped ?: element else element
fun elementKind() = when (targetElement) {
is KtClass -> if (targetElement.isInterface()) "interface" else "class"
@@ -65,7 +66,7 @@ class KotlinElementDescriptionProvider : ElementDescriptionProvider {
if (targetElement !is PsiNamedElement || targetElement.language != KotlinLanguage.INSTANCE) return null
return when(location) {
is UsageViewTypeLocation -> elementKind()
is UsageViewShortNameLocation, is UsageViewLongNameLocation -> targetElement.getName()
is UsageViewShortNameLocation, is UsageViewLongNameLocation -> targetElement.name
is RefactoringDescriptionLocation -> {
val kind = elementKind() ?: return null
val descriptor = targetDescriptor() ?: return null
@@ -243,8 +243,10 @@ class RenameKotlinPropertyProcessor : RenameKotlinPsiProcessor() {
else -> throw IllegalStateException("Can't be for element $element there because of canProcessElement()")
}
val newPropertyName = if (newName != null && element is KtLightMethod) propertyNameByAccessor(newName, element) else newName
for (propertyMethod in propertyMethods) {
addRenameElements(propertyMethod, (element as PsiNamedElement).name, newName, allRenames, scope)
addRenameElements(propertyMethod, (element as PsiNamedElement).name, newPropertyName, allRenames, scope)
}
}
@@ -0,0 +1,5 @@
package lib
interface Foo {
var bar: Int
}
@@ -0,0 +1,14 @@
package usage;
import lib.Foo;
public class JUsage implements Foo {
@Override
public int getBar() {
return 1;
}
@Override
public void setBar(int value) {
}
}
@@ -0,0 +1,5 @@
package lib
interface Foo {
var foo: Int
}
@@ -0,0 +1,14 @@
package usage;
import lib.Foo;
public class JUsage implements Foo {
@Override
public int /*rename*/getFoo() {
return 1;
}
@Override
public void setFoo(int value) {
}
}
@@ -0,0 +1,6 @@
{
"type": "MARKED_ELEMENT",
"mainFile": "usage/JUsage.java",
"newName": "getBar",
"withRuntime": "true"
}
@@ -0,0 +1,5 @@
package lib
interface Foo {
var bar: Int
}
@@ -0,0 +1,14 @@
package usage;
import lib.Foo;
public class JUsage implements Foo {
@Override
public int getBar() {
return 1;
}
@Override
public void setBar(int value) {
}
}
@@ -0,0 +1,5 @@
package lib
interface Foo {
var foo: Int
}
@@ -0,0 +1,14 @@
package usage;
import lib.Foo;
public class JUsage implements Foo {
@Override
public int getFoo() {
return 1;
}
@Override
public void /*rename*/setFoo(int value) {
}
}
@@ -0,0 +1,6 @@
{
"type": "MARKED_ELEMENT",
"mainFile": "usage/JUsage.java",
"newName": "setBar",
"withRuntime": "true"
}
@@ -863,6 +863,18 @@ public class RenameTestGenerated extends AbstractRenameTest {
doTest(fileName);
}
@TestMetadata("renameOverriddenPropertyViaJavaGetter/renameOverriddenPropertyViaJavaGetter.test")
public void testRenameOverriddenPropertyViaJavaGetter_RenameOverriddenPropertyViaJavaGetter() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameOverriddenPropertyViaJavaGetter/renameOverriddenPropertyViaJavaGetter.test");
doTest(fileName);
}
@TestMetadata("renameOverriddenPropertyViaJavaSetter/renameOverriddenPropertyViaJavaSetter.test")
public void testRenameOverriddenPropertyViaJavaSetter_RenameOverriddenPropertyViaJavaSetter() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renameOverriddenPropertyViaJavaSetter/renameOverriddenPropertyViaJavaSetter.test");
doTest(fileName);
}
@TestMetadata("renamePlus/plus.test")
public void testRenamePlus_Plus() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/refactoring/rename/renamePlus/plus.test");