update run configuration on package rename
This commit is contained in:
committed by
Nikolay Krasko
parent
c6c2404dcf
commit
79602163a3
@@ -40,6 +40,7 @@ import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiMethod;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import com.intellij.refactoring.listeners.RefactoringElementAdapter;
|
||||
import com.intellij.refactoring.listeners.RefactoringElementListener;
|
||||
import kotlin.KotlinPackage;
|
||||
@@ -246,9 +247,16 @@ public class JetRunConfiguration extends ModuleBasedConfiguration<RunConfigurati
|
||||
@Nullable
|
||||
@Override
|
||||
public RefactoringElementListener getRefactoringElementListener(PsiElement element) {
|
||||
FqName fqNameBeingRenamed = null;
|
||||
if (element instanceof JetDeclarationContainer) {
|
||||
FqName name = KotlinRunConfigurationProducer.Companion.getStartClassFqName((JetDeclarationContainer) element);
|
||||
if (name != null && name.asString().equals(MAIN_CLASS_NAME)) {
|
||||
fqNameBeingRenamed = KotlinRunConfigurationProducer.Companion.getStartClassFqName((JetDeclarationContainer) element);
|
||||
}
|
||||
else if (element instanceof PsiPackage) {
|
||||
fqNameBeingRenamed = new FqName(((PsiPackage) element).getQualifiedName());
|
||||
}
|
||||
FqName ourClassName = new FqName(MAIN_CLASS_NAME);
|
||||
if (fqNameBeingRenamed != null && fqNameBeingRenamed.isAncestorOf(ourClassName)) {
|
||||
if (element instanceof JetDeclarationContainer) {
|
||||
return new RefactoringElementAdapter() {
|
||||
@Override
|
||||
public void undoElementMovedOrRenamed(@NotNull PsiElement newElement, @NotNull String oldQualifiedName) {
|
||||
@@ -261,6 +269,20 @@ public class JetRunConfiguration extends ModuleBasedConfiguration<RunConfigurati
|
||||
}
|
||||
};
|
||||
}
|
||||
else {
|
||||
final String nameSuffix = MAIN_CLASS_NAME.substring(fqNameBeingRenamed.toString().length());
|
||||
return new RefactoringElementAdapter() {
|
||||
@Override
|
||||
protected void elementRenamedOrMoved(@NotNull PsiElement newElement) {
|
||||
updateMainClassNameWithSuffix(newElement, nameSuffix);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void undoElementMovedOrRenamed(@NotNull PsiElement newElement, @NotNull String oldQualifiedName) {
|
||||
updateMainClassNameWithSuffix(newElement, nameSuffix);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
@@ -273,6 +295,12 @@ public class JetRunConfiguration extends ModuleBasedConfiguration<RunConfigurati
|
||||
}
|
||||
}
|
||||
|
||||
private void updateMainClassNameWithSuffix(PsiElement element, String suffix) {
|
||||
if (element instanceof PsiPackage) {
|
||||
MAIN_CLASS_NAME = ((PsiPackage) element).getQualifiedName() + suffix;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String suggestedName() {
|
||||
if (MAIN_CLASS_NAME == null) {
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
package renameTest
|
||||
|
||||
import kotlin.platform.platformStatic
|
||||
|
||||
object Foo {
|
||||
platformStatic fun main(args: Array<String>) {
|
||||
}
|
||||
}
|
||||
@@ -33,10 +33,7 @@ import com.intellij.openapi.module.Module
|
||||
import com.intellij.openapi.projectRoots.Sdk
|
||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.psi.PsiComment
|
||||
import com.intellij.psi.PsiDocumentManager
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.PsiManager
|
||||
import com.intellij.psi.*
|
||||
import com.intellij.refactoring.RefactoringFactory
|
||||
import com.intellij.testFramework.MapDataContext
|
||||
import com.intellij.testFramework.PlatformTestCase
|
||||
@@ -116,6 +113,19 @@ class RunConfigurationTest: CodeInsightTestCase() {
|
||||
Assert.assertEquals("renameTest.Bar", runConfiguration.MAIN_CLASS_NAME)
|
||||
}
|
||||
|
||||
fun testUpdateOnPackageRename() {
|
||||
val createModuleResult = configureModule(moduleDirPath("module"), getTestProject().getBaseDir()!!)
|
||||
ConfigLibraryUtil.configureKotlinRuntimeAndSdk(createModuleResult.module, PluginTestCaseBase.mockJdk())
|
||||
|
||||
val runConfiguration = createConfigurationFromObject("renameTest.Foo", save = true)
|
||||
|
||||
val pkg = JavaPsiFacade.getInstance(getTestProject()).findPackage("renameTest")
|
||||
val rename = RefactoringFactory.getInstance(getTestProject()).createRename(pkg, "afterRenameTest")
|
||||
rename.run()
|
||||
|
||||
Assert.assertEquals("afterRenameTest.Foo", runConfiguration.MAIN_CLASS_NAME)
|
||||
}
|
||||
|
||||
private fun doTest(configureRuntime: (Module, Sdk) -> Unit) {
|
||||
val baseDir = getTestProject().getBaseDir()!!
|
||||
val createModuleResult = configureModule(moduleDirPath("module"), baseDir)
|
||||
|
||||
Reference in New Issue
Block a user