Automatic renaming subclasses.
#KT-4642 in progress
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user