void (@NotNull PsiVariable variable) { CompositeElement variableElement = (CompositeElement)variable.getNode(); PsiTypeElement typeElement = variable.getTypeElement(); PsiIdentifier nameElement = variable.getNameIdentifier(); LOG.assertTrue(typeElement != null && nameElement != null); ASTNode type = typeElement.getNode(); ASTNode name = nameElement.getNode(); ASTNode firstBracket = null; ASTNode lastBracket = null; int arrayCount = 0; ASTNode element = name; MultiMap<Integer, AnnotationElement> annotationElementsToMove = new MultiMap<>(); while (element != null) { element = PsiImplUtil.skipWhitespaceAndComments(element.getTreeNext()); if (element instanceof AnnotationElement) { annotationElementsToMove.putValue(arrayCount, (AnnotationElement)element); continue; } if (element == null || element.getElementType() != JavaTokenType.LBRACKET) break; if (firstBracket == null) firstBracket = element; lastBracket = element; arrayCount++; element = PsiImplUtil.skipWhitespaceAndComments(element.getTreeNext()); if (element == null || element.getElementType() != JavaTokenType.RBRACKET) break; lastBracket = element; } if (firstBracket != null) { element = PsiImplUtil.skipWhitespaceAndComments(name.getTreeNext()); while (element != null) { ASTNode next = PsiImplUtil.skipWhitespaceAndComments(element.getTreeNext()); CodeEditUtil.removeChild(variableElement, element); if (element == lastBracket) break; element = next; } CompositeElement newType = (CompositeElement)type.clone(); if (!(typeElement.getType() instanceof PsiArrayType)) { CompositeElement newType1 = ASTFactory.composite(JavaElementType.TYPE); newType1.rawAddChildren(newType); newType = newType1; } for (int i = arrayCount - 1; i >= 0; i--) { // add in reverse so the anchor can remain the same TreeElement anchor = newType.getFirstChildNode(); anchor.rawInsertAfterMe(ASTFactory.leaf(JavaTokenType.RBRACKET, "]")); anchor.rawInsertAfterMe(ASTFactory.leaf(JavaTokenType.LBRACKET, "[")); List<AnnotationElement> annotations = (List<AnnotationElement>)annotationElementsToMove.get(i); for (int j = annotations.size() - 1; j >= 0; j--) { anchor.rawInsertAfterMe(annotations.get(j)); } } newType.acceptTree(new GeneratedMarkerVisitor()); newType.putUserData(CharTable.CHAR_TABLE_KEY, SharedImplUtil.findCharTableByTree(type)); CodeEditUtil.replaceChild(variableElement, type, newType); } }