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.PsiClass;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiMethod;
|
import com.intellij.psi.PsiMethod;
|
||||||
|
import com.intellij.psi.PsiPackage;
|
||||||
import com.intellij.refactoring.listeners.RefactoringElementAdapter;
|
import com.intellij.refactoring.listeners.RefactoringElementAdapter;
|
||||||
import com.intellij.refactoring.listeners.RefactoringElementListener;
|
import com.intellij.refactoring.listeners.RefactoringElementListener;
|
||||||
import kotlin.KotlinPackage;
|
import kotlin.KotlinPackage;
|
||||||
@@ -246,9 +247,16 @@ public class JetRunConfiguration extends ModuleBasedConfiguration<RunConfigurati
|
|||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public RefactoringElementListener getRefactoringElementListener(PsiElement element) {
|
public RefactoringElementListener getRefactoringElementListener(PsiElement element) {
|
||||||
|
FqName fqNameBeingRenamed = null;
|
||||||
if (element instanceof JetDeclarationContainer) {
|
if (element instanceof JetDeclarationContainer) {
|
||||||
FqName name = KotlinRunConfigurationProducer.Companion.getStartClassFqName((JetDeclarationContainer) element);
|
fqNameBeingRenamed = KotlinRunConfigurationProducer.Companion.getStartClassFqName((JetDeclarationContainer) element);
|
||||||
if (name != null && name.asString().equals(MAIN_CLASS_NAME)) {
|
}
|
||||||
|
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() {
|
return new RefactoringElementAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void undoElementMovedOrRenamed(@NotNull PsiElement newElement, @NotNull String oldQualifiedName) {
|
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;
|
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
|
@Override
|
||||||
public String suggestedName() {
|
public String suggestedName() {
|
||||||
if (MAIN_CLASS_NAME == null) {
|
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.projectRoots.Sdk
|
||||||
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
import com.intellij.openapi.roots.ModuleRootModificationUtil
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.PsiComment
|
import com.intellij.psi.*
|
||||||
import com.intellij.psi.PsiDocumentManager
|
|
||||||
import com.intellij.psi.PsiElement
|
|
||||||
import com.intellij.psi.PsiManager
|
|
||||||
import com.intellij.refactoring.RefactoringFactory
|
import com.intellij.refactoring.RefactoringFactory
|
||||||
import com.intellij.testFramework.MapDataContext
|
import com.intellij.testFramework.MapDataContext
|
||||||
import com.intellij.testFramework.PlatformTestCase
|
import com.intellij.testFramework.PlatformTestCase
|
||||||
@@ -116,6 +113,19 @@ class RunConfigurationTest: CodeInsightTestCase() {
|
|||||||
Assert.assertEquals("renameTest.Bar", runConfiguration.MAIN_CLASS_NAME)
|
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) {
|
private fun doTest(configureRuntime: (Module, Sdk) -> Unit) {
|
||||||
val baseDir = getTestProject().getBaseDir()!!
|
val baseDir = getTestProject().getBaseDir()!!
|
||||||
val createModuleResult = configureModule(moduleDirPath("module"), baseDir)
|
val createModuleResult = configureModule(moduleDirPath("module"), baseDir)
|
||||||
|
|||||||
Reference in New Issue
Block a user