This commit is contained in:
Roman Shevchenko
2011-03-11 21:12:42 +01:00
parent bb5b499383
commit 27b1cf23ed
3 changed files with 33 additions and 21 deletions
@@ -70,7 +70,9 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
@NotNull
public final PsiIdentifier getNameIdentifier() {
return (PsiIdentifier)findChildByRoleAsPsiElement(ChildRole.NAME);
final PsiElement element = findChildByRoleAsPsiElement(ChildRole.NAME);
assert element instanceof PsiIdentifier : getText();
return (PsiIdentifier)element;
}
@NotNull
@@ -98,15 +100,18 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
@NotNull
public PsiTypeElement getTypeElement() {
ASTNode first = getTreeParent().findChildByType(LOCAL_VARIABLE);
return SourceTreeToPsiMap.treeToPsiNotNull(first.findChildByType(TYPE));
final ASTNode first = getTreeParent().findChildByType(LOCAL_VARIABLE);
assert first != null : getText();
final ASTNode type = first.findChildByType(TYPE);
assert type != null : getText();
return SourceTreeToPsiMap.treeToPsiNotNull(type);
}
public PsiModifierList getModifierList() {
CompositeElement parent = getTreeParent();
final CompositeElement parent = getTreeParent();
if (parent == null) return null;
CompositeElement first = (CompositeElement)parent.findChildByType(LOCAL_VARIABLE);
return (PsiModifierList)first.findChildByRoleAsPsiElement(ChildRole.MODIFIER_LIST);
final CompositeElement first = (CompositeElement)parent.findChildByType(LOCAL_VARIABLE);
return first != null ? (PsiModifierList)first.findChildByRoleAsPsiElement(ChildRole.MODIFIER_LIST) : null;
}
public boolean hasModifierProperty(@NotNull String name) {
@@ -146,18 +151,22 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
CheckUtil.checkWritable(this);
final CharTable treeCharTab = SharedImplUtil.findCharTableByTree(this);
CompositeElement statement = getTreeParent();
PsiElement[] variables = ((PsiDeclarationStatement)SourceTreeToPsiMap.treeElementToPsi(statement)).getDeclaredElements();
if (variables.length > 1){
//CodeStyleManagerImpl codeStyleManager = (CodeStyleManagerImpl)getManager().getCodeStyleManager();
final CompositeElement statement = getTreeParent();
final PsiElement psiElement = SourceTreeToPsiMap.treeElementToPsi(statement);
final PsiElement[] variables = psiElement instanceof PsiDeclarationStatement
? ((PsiDeclarationStatement)psiElement).getDeclaredElements() : PsiElement.EMPTY_ARRAY;
if (variables.length > 1) {
final PsiModifierList modifierList = getModifierList();
final PsiTypeElement typeElement = getTypeElement();
assert modifierList != null : getText();
ASTNode last = statement;
for(int i = 1; i < variables.length; i++){
ASTNode typeCopy = getTypeElement().copy().getNode();
ASTNode modifierListCopy = getModifierList().copy().getNode();
CompositeElement variable = (CompositeElement)SourceTreeToPsiMap.psiElementToTree(variables[i]);
for (int i = 1; i < variables.length; i++) {
ASTNode typeCopy = typeElement.copy().getNode();
ASTNode modifierListCopy = modifierList.copy().getNode();
CompositeElement variable = (CompositeElement)SourceTreeToPsiMap.psiToTreeNotNull(variables[i]);
ASTNode comma = TreeUtil.skipElementsBack(variable.getTreePrev(), StdTokenSets.WHITE_SPACE_OR_COMMENT_BIT_SET);
if (comma != null && comma.getElementType() == JavaTokenType.COMMA){
if (comma != null && comma.getElementType() == JavaTokenType.COMMA) {
CodeEditUtil.removeChildren(statement, comma, variable.getTreePrev());
}
@@ -171,7 +180,7 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
variable.addChild(typeCopy, variable.getFirstChildNode());
if (modifierListCopy.getTextLength() > 0){
if (modifierListCopy.getTextLength() > 0) {
space = Factory.createSingleLeafElement(JavaTokenType.WHITE_SPACE, " ", 0, 1, treeCharTab, getManager());
variable.addChild(space, variable.getFirstChildNode());
}
@@ -179,12 +188,10 @@ public class PsiLocalVariableImpl extends CompositePsiElement implements PsiLoca
variable.addChild(modifierListCopy, variable.getFirstChildNode());
ASTNode semicolon = Factory.createSingleLeafElement(JavaTokenType.SEMICOLON, ";", 0, 1, treeCharTab, getManager());
SourceTreeToPsiMap.psiElementToTree(variables[i - 1]).addChild(semicolon, null);
SourceTreeToPsiMap.psiToTreeNotNull(variables[i - 1]).addChild(semicolon, null);
CodeEditUtil.addChild(statement.getTreeParent(), statement1, last.getTreeNext());
//?
//codeStyleManager.adjustInsertedCode(statement1);
last = statement1;
}
}
@@ -20,6 +20,7 @@ import com.intellij.psi.impl.source.tree.JavaElementType;
import com.intellij.psi.search.LocalSearchScope;
import com.intellij.psi.search.SearchScope;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.psi.util.PsiUtil;
import com.intellij.util.IncorrectOperationException;
import org.jetbrains.annotations.NotNull;
@@ -51,13 +52,13 @@ public class PsiResourceVariableImpl extends PsiLocalVariableImpl implements Psi
@Override
public void delete() throws IncorrectOperationException {
final PsiElement next = PsiTreeUtil.skipSiblingsForward(this, PsiWhiteSpace.class, PsiComment.class);
if (next instanceof PsiJavaToken && ((PsiJavaToken)next).getTokenType() == JavaTokenType.SEMICOLON) {
if (PsiUtil.isJavaToken(next, JavaTokenType.SEMICOLON)) {
getParent().deleteChildRange(this, next);
return;
}
final PsiElement prev = PsiTreeUtil.skipSiblingsBackward(this, PsiWhiteSpace.class, PsiComment.class);
if (prev instanceof PsiJavaToken && ((PsiJavaToken)prev).getTokenType() == JavaTokenType.SEMICOLON) {
if (PsiUtil.isJavaToken(prev, JavaTokenType.SEMICOLON)) {
getParent().deleteChildRange(prev, this);
return;
}