Move: Add intention to change file package without moving it physically

This commit is contained in:
Alexey Sedunov
2015-04-28 12:34:58 +03:00
parent 6ee59a06dd
commit 8879166f53
43 changed files with 498 additions and 42 deletions
@@ -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 {