package com.bitbakery.plugin.arc.formatting; /* * Copyright (c) Kurt Christensen, 2009 * * Licensed under the Artistic License, Version 2.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at: * * http://www.opensource.org/licenses/artistic-license-2.0.php * * Unless required by applicable law or agreed to in writing, software distributed under * the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS * OF ANY KIND, either express or implied. See the License for the specific language * governing permissions and limitations under the License.. */ import com.bitbakery.plugin.arc.psi.SingleArgFn; import com.intellij.formatting.Alignment; import com.intellij.formatting.Block; import com.intellij.formatting.Indent; import com.intellij.formatting.Wrap; import com.intellij.lang.ASTNode; import com.intellij.psi.PsiElement; import com.intellij.psi.codeStyle.CodeStyleSettings; import java.util.ArrayList; import java.util.List; /** * Created by IntelliJ IDEA. * User: kurtc * Date: Mar 1, 2009 * Time: 9:58:26 PM * To change this template use File | Settings | File Templates. */ public class ArcBlockGenerator { private static ASTNode myNode; private static Alignment myAlignment; private static Wrap myWrap; private static CodeStyleSettings mySettings; private static ArcBlock myBlock; public static List<Block> generateSubBlocks(ASTNode node, Alignment alignment, Wrap wrap, CodeStyleSettings settings, ArcBlock block) { myNode = node; myWrap = wrap; mySettings = settings; myAlignment = alignment; myBlock = block; PsiElement blockPsi = myBlock.getNode().getPsi(); final ArrayList<Block> subBlocks = new ArrayList<Block>(); ASTNode children[] = myNode.getChildren(null); ASTNode prevChildNode = null; final Alignment align = mustAlign(blockPsi) ? Alignment.createAlignment() : null; for (ASTNode childNode : children) { if (canBeCorrectBlock(childNode)) { final Indent indent = ArcIndentProcessor.getChildIndent(myBlock, prevChildNode, childNode); subBlocks.add(new ArcBlock(childNode, align, indent, myWrap, mySettings)); prevChildNode = childNode; } } return subBlocks; } private static boolean mustAlign(PsiElement blockPsi) { return blockPsi instanceof SingleArgFn; } private static boolean canBeCorrectBlock(final ASTNode node) { return (node.getText().trim().length() > 0); } }