Move: Add intention to change file package without moving it physically
This commit is contained in:
@@ -21,17 +21,20 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage;
|
||||
import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub;
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes;
|
||||
import org.jetbrains.kotlin.lexer.JetTokens;
|
||||
import org.jetbrains.kotlin.name.FqName;
|
||||
import org.jetbrains.kotlin.name.Name;
|
||||
import org.jetbrains.kotlin.name.SpecialNames;
|
||||
import org.jetbrains.kotlin.psi.psiUtil.PsiUtilPackage;
|
||||
import org.jetbrains.kotlin.psi.stubs.KotlinPlaceHolderStub;
|
||||
import org.jetbrains.kotlin.psi.stubs.elements.JetStubElementTypes;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class JetPackageDirective extends JetModifierListOwnerStub<KotlinPlaceHolderStub<JetPackageDirective>> implements JetReferenceExpression {
|
||||
public class JetPackageDirective
|
||||
extends JetModifierListOwnerStub<KotlinPlaceHolderStub<JetPackageDirective>>
|
||||
implements JetReferenceExpression {
|
||||
private String qualifiedNameCache = null;
|
||||
|
||||
public JetPackageDirective(@NotNull ASTNode node) {
|
||||
@@ -116,6 +119,29 @@ public class JetPackageDirective extends JetModifierListOwnerStub<KotlinPlaceHol
|
||||
return new FqName(getQualifiedNameOf(nameExpression));
|
||||
}
|
||||
|
||||
public void setFqName(@NotNull FqName fqName) {
|
||||
if (fqName.isRoot()) {
|
||||
delete();
|
||||
return;
|
||||
}
|
||||
|
||||
JetPsiFactory psiFactory = new JetPsiFactory(getProject());
|
||||
PsiElement newExpression = psiFactory.createExpression(fqName.asString());
|
||||
JetExpression currentExpression = getPackageNameExpression();
|
||||
if (currentExpression != null) {
|
||||
currentExpression.replace(newExpression);
|
||||
return;
|
||||
}
|
||||
|
||||
PsiElement keyword = getPackageKeyword();
|
||||
if (keyword != null) {
|
||||
addAfter(newExpression, keyword);
|
||||
return;
|
||||
}
|
||||
|
||||
replace(psiFactory.createPackageDirective(fqName));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public String getQualifiedName() {
|
||||
if (qualifiedNameCache == null) {
|
||||
@@ -139,6 +165,11 @@ public class JetPackageDirective extends JetModifierListOwnerStub<KotlinPlaceHol
|
||||
return builder.toString();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PsiElement getPackageKeyword() {
|
||||
return findChildByType(JetTokens.PACKAGE_KEYWORD);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subtreeChanged() {
|
||||
qualifiedNameCache = null;
|
||||
|
||||
@@ -284,8 +284,12 @@ public class JetPsiFactory(private val project: Project) {
|
||||
return stringTemplateExpression.getEntries()[0] as JetStringTemplateEntryWithExpression
|
||||
}
|
||||
|
||||
public fun createPackageDirective(fqName: FqName): JetPackageDirective {
|
||||
return createFile("package ${fqName.asString()}").getPackageDirective()
|
||||
}
|
||||
|
||||
public fun createPackageDirectiveIfNeeded(fqName: FqName): JetPackageDirective? {
|
||||
return if (fqName.isRoot()) null else createFile("package ${fqName.asString()}").getPackageDirective()
|
||||
return if (fqName.isRoot()) null else createPackageDirective(fqName)
|
||||
}
|
||||
|
||||
public fun createImportDirective(path: String): JetImportDirective {
|
||||
|
||||
Reference in New Issue
Block a user