Automatic renaming subclasses.

#KT-4642 in progress
This commit is contained in:
Evgeny Gerashchenko
2015-04-15 16:48:08 +03:00
parent e6e5e28e1d
commit 260b8ae431
6 changed files with 78 additions and 2 deletions
+1
View File
@@ -306,6 +306,7 @@
<renameHandler implementation="org.jetbrains.kotlin.idea.refactoring.rename.RenameDynamicMemberHandler"/>
<renameHandler implementation="org.jetbrains.kotlin.idea.refactoring.rename.RenameOnSecondaryConstructorHandler"/>
<automaticRenamerFactory implementation="org.jetbrains.kotlin.idea.refactoring.rename.AutomaticVariableRenamerFactory"/>
<automaticRenamerFactory implementation="org.jetbrains.kotlin.idea.refactoring.rename.AutomaticInheritorRenamerFactory"/>
<spellchecker.support implementationClass="org.jetbrains.kotlin.idea.KotlinSpellcheckingStrategy" language="jet"/>
@@ -0,0 +1,61 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.refactoring.rename
import com.intellij.psi.PsiClass
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiNamedElement
import com.intellij.psi.search.searches.ClassInheritorsSearch
import com.intellij.refactoring.JavaRefactoringSettings
import com.intellij.refactoring.RefactoringBundle
import com.intellij.refactoring.rename.naming.AutomaticRenamer
import com.intellij.refactoring.rename.naming.AutomaticRenamerFactory
import com.intellij.refactoring.rename.naming.InheritorRenamer
import com.intellij.usageView.UsageInfo
import org.jetbrains.kotlin.asJava.LightClassUtil
import org.jetbrains.kotlin.asJava.unwrapped
import org.jetbrains.kotlin.psi.JetClass
public class AutomaticInheritorRenamer(klass: JetClass, newName: String): AutomaticRenamer() {
init {
val lightClass = LightClassUtil.getPsiClass(klass)
if (lightClass != null) {
for (inheritorLightClass in ClassInheritorsSearch.search(lightClass, true).findAll()) {
if (inheritorLightClass.getName() != null) {
myElements.add(inheritorLightClass.unwrapped as PsiNamedElement)
}
}
}
suggestAllNames(klass.getName(), newName)
}
override fun getDialogTitle() = RefactoringBundle.message("rename.inheritors.title")
override fun getDialogDescription() = RefactoringBundle.message("rename.inheritors.with.the.following.names.to")
override fun entityName() = RefactoringBundle.message("entity.name.inheritor")
}
public class AutomaticInheritorRenamerFactory : AutomaticRenamerFactory {
override fun isApplicable(element: PsiElement) = element is JetClass
override fun getOptionName() = RefactoringBundle.message("rename.inheritors")
override fun isEnabled() = JavaRefactoringSettings.getInstance().isToRenameInheritors()
override fun setEnabled(enabled: Boolean) = JavaRefactoringSettings.getInstance().setRenameInheritors(enabled)
override fun createRenamer(element: PsiElement, newName: String, usages: Collection<UsageInfo>): AutomaticRenamer {
return AutomaticInheritorRenamer(element as JetClass, newName)
}
}
@@ -0,0 +1,3 @@
class JavaBar extends Bar {
}
@@ -1,4 +1,4 @@
class Bar : Throwable()
open class Bar : Throwable()
val bar: Bar = Bar()
val bar1: Bar = Bar()
@@ -33,3 +33,7 @@ fun topLevel(bar: Bar) {
fun collectionLikes(bars: List<Array<Bar>>, foos: List<Map<Bar, Bar>>) {
}
class BarImpl : Bar()
object BarObj : Bar()
@@ -0,0 +1,3 @@
class JavaFoo extends Foo {
}
@@ -1,4 +1,4 @@
class Foo : Throwable()
open class Foo : Throwable()
val foo: Foo = Foo()
val foo1: Foo = Foo()
@@ -33,3 +33,7 @@ fun topLevel(foo: Foo) {
fun collectionLikes(foos: List<Array<Foo>>, foos: List<Map<Foo, Foo>>) {
}
class FooImpl : Foo()
object FooObj : Foo()