Don't modify modifier outside of a write command

This commit is contained in:
Ben Gruver 2014-12-31 14:28:47 -08:00
parent 145cd6d518
commit 2ab03ae212

View File

@ -32,6 +32,7 @@
package org.jf.smalidea.psi.impl; package org.jf.smalidea.psi.impl;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.psi.PsiModifier.ModifierConstant; import com.intellij.psi.PsiModifier.ModifierConstant;
import com.intellij.psi.PsiModifierList; import com.intellij.psi.PsiModifierList;
import com.intellij.psi.PsiModifierListOwner; import com.intellij.psi.PsiModifierListOwner;
@ -120,21 +121,30 @@ public class SmaliModifierList extends SmaliStubBasedPsiElement<SmaliModifierLis
public void setModifierProperty(@ModifierConstant @NotNull @NonNls String name, boolean addModifier) public void setModifierProperty(@ModifierConstant @NotNull @NonNls String name, boolean addModifier)
throws IncorrectOperationException { throws IncorrectOperationException {
if (addModifier) { if (addModifier) {
SmaliAccessList accessListNode = findAccessListNode(); final SmaliAccessList accessListNode = findAccessListNode();
if (accessListNode == null) { if (accessListNode == null) {
throw new IncorrectOperationException("Cannot add modifier: no .class statement"); throw new IncorrectOperationException("Cannot add modifier: no .class statement");
} }
TreeElement leaf = Factory.createSingleLeafElement(SmaliTokens.ACCESS_SPEC, name, null, getManager()); final TreeElement leaf = Factory.createSingleLeafElement(SmaliTokens.ACCESS_SPEC, name, null, getManager());
accessListNode.addInternal(leaf, leaf, null, null);
new WriteCommandAction.Simple(getProject(), getContainingFile()) {
@Override protected void run() throws Throwable {
accessListNode.addInternal(leaf, leaf, null, null);
}
}.execute();
} else { } else {
SmaliAccessList accessListNode = findAccessListNode(); SmaliAccessList accessListNode = findAccessListNode();
if (accessListNode == null) { if (accessListNode == null) {
return; return;
} }
ASTNode accessSpec = accessListNode.getAccessFlagNode(name); final ASTNode accessSpec = accessListNode.getAccessFlagNode(name);
if (accessSpec != null) { if (accessSpec != null) {
accessSpec.getPsi().delete(); new WriteCommandAction.Simple(getProject(), getContainingFile()) {
@Override protected void run() throws Throwable {
accessSpec.getPsi().delete();
}
}.execute();
} }
} }
} }