diff options
Diffstat (limited to 'java/java-psi-impl/src/com/intellij/psi/impl/source/tree/JavaSourceUtil.java')
-rw-r--r-- | java/java-psi-impl/src/com/intellij/psi/impl/source/tree/JavaSourceUtil.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/JavaSourceUtil.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/JavaSourceUtil.java index e2af7b08df0d..d4d0f3f0c88d 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/JavaSourceUtil.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/JavaSourceUtil.java @@ -22,6 +22,7 @@ import com.intellij.lang.LighterASTNode; import com.intellij.openapi.diagnostic.Logger; import com.intellij.psi.*; import com.intellij.psi.codeStyle.CodeStyleManager; +import com.intellij.psi.impl.PsiImplUtil; import com.intellij.psi.impl.source.DummyHolder; import com.intellij.psi.impl.source.SourceJavaCodeReference; import com.intellij.psi.impl.source.SourceTreeToPsiMap; @@ -142,4 +143,41 @@ public class JavaSourceUtil { TreeUtil.clearCaches(TreeUtil.getFileElement(parenthExpr)); return parenthExpr; } + + public static void deleteSeparatingComma(@NotNull CompositeElement element, @NotNull ASTNode child) { + assert child.getElementType() != JavaTokenType.COMMA : child; + + ASTNode next = PsiImplUtil.skipWhitespaceAndComments(child.getTreeNext()); + if (next != null && next.getElementType() == JavaTokenType.COMMA) { + element.deleteChildInternal(next); + } + else { + ASTNode prev = PsiImplUtil.skipWhitespaceAndCommentsBack(child.getTreePrev()); + if (prev != null && prev.getElementType() == JavaTokenType.COMMA) { + element.deleteChildInternal(prev); + } + } + } + + public static void addSeparatingComma(@NotNull CompositeElement element, @NotNull ASTNode child, @NotNull TokenSet listTypes) { + assert child.getElementType() != JavaTokenType.COMMA : child; + + scanChildren(element, child, listTypes, true); + scanChildren(element, child, listTypes, false); + } + + private static void scanChildren(CompositeElement element, ASTNode node, TokenSet listTypes, boolean forward) { + ASTNode child = node; + while (true) { + child = (forward ? child.getTreeNext() : child.getTreePrev()); + if (child == null || child.getElementType() == JavaTokenType.COMMA) break; + if (listTypes.contains(child.getElementType())) { + CharTable charTable = SharedImplUtil.findCharTableByTree(element); + PsiManager manager = element.getPsi().getManager(); + TreeElement comma = Factory.createSingleLeafElement(JavaTokenType.COMMA, ",", 0, 1, charTable, manager); + element.addInternal(comma, comma, (forward ? node : child), Boolean.FALSE); + break; + } + } + } } |