| /* |
| * Copyright 2000-2010 JetBrains s.r.o. |
| * |
| * Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0 |
| * |
| * 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. |
| */ |
| package com.intellij.formatting.alignment; |
| |
| import com.intellij.psi.tree.TokenSet; |
| |
| /** |
| * Encapsulates information necessary for correct <code>'align in columns'</code> processing. |
| * <p/> |
| * Thread-safe. |
| * <p/> |
| * <b>Note:</b> this class doesn't provide custom realization for {@link #hashCode()} and {@link #equals(Object)} at the moment. |
| * Feel free to add them as necessary. |
| * |
| * @author Denis Zhdanov |
| * @see AlignmentInColumnsHelper |
| * @since May 24, 2010 3:17:40 PM |
| */ |
| public class AlignmentInColumnsConfig { |
| private final TokenSet myStopMultilineCheckElementTypes; |
| private final TokenSet myTargetDeclarationTypes; |
| private final TokenSet myWhiteSpaceTokenTypes; |
| private final TokenSet myCommentTokenTypes; |
| private final TokenSet myDistinguishableTypes; |
| |
| /** |
| * Creates new <code>AlignmentInColumnsConfig</code> object that is used to tweak <code>'align in columns'</code> processing. |
| * <p/> |
| * 'Alignment in columns' means formatting code as shown below: |
| * <p/> |
| * <pre> |
| * double start = 1; |
| * int end = 2; |
| * private int tmp = 3; |
| * private int tmp2; |
| * protected double tmp3; |
| * </pre> |
| * |
| * @param stopMultilineCheckElementTypes <code>'align in column'</code> algorithm performs number of checks in order to decide |
| * if two variable declarations should be aligned in columns. One of that checks is |
| * examination for sub-elements consistency. E.g. <code>'int end = 2'</code> statement |
| * from example above is not aligned to <code>'private int tmp = 3;'</code> because the |
| * former doesn't have modifier. Element types given here defines boundary for such |
| * a checks, e.g. we can define type of <code>'='</code> element to be stop check type |
| * for example above |
| * @param whiteSpaceTokenTypes defines types of the tokens that should be treated as a white space |
| * @param commentTokenTypes defines types of the tokens that should be treated as comments |
| * @param distinguishableTypes <code>'align in column'</code> algorithm doesn't align elements, containing different sets |
| * of distinguishable elements. |
| * E.g. <code>'private int tmp = 3'</code> is not aligned to <code>'private int tmp2'</code> |
| * at example above, providing that distinguishable types contain <code>'='</code> token. |
| * @param targetDeclarationTypes defines variable declaration sub-element types to be aligned. Example above |
| * shows alignment for <code>'modifier list'</code>, <code>'type reference'</code>, |
| * <code>'identifier'</code> and <code>'='</code> types. The general idea of this property |
| * is to let avoid alignment of unnecessary types, e.g. variable definition expressions |
| */ |
| public AlignmentInColumnsConfig(TokenSet stopMultilineCheckElementTypes, |
| TokenSet whiteSpaceTokenTypes, |
| TokenSet commentTokenTypes, |
| TokenSet distinguishableTypes, |
| TokenSet targetDeclarationTypes) { |
| myStopMultilineCheckElementTypes = stopMultilineCheckElementTypes; |
| myWhiteSpaceTokenTypes = whiteSpaceTokenTypes; |
| myCommentTokenTypes = commentTokenTypes; |
| myDistinguishableTypes = distinguishableTypes; |
| myTargetDeclarationTypes = targetDeclarationTypes; |
| } |
| |
| public TokenSet getStopMultilineCheckElementTypes() { |
| return myStopMultilineCheckElementTypes; |
| } |
| |
| public TokenSet getWhiteSpaceTokenTypes() { |
| return myWhiteSpaceTokenTypes; |
| } |
| |
| public TokenSet getCommentTokenTypes() { |
| return myCommentTokenTypes; |
| } |
| |
| public TokenSet getDistinguishableTypes() { |
| return myDistinguishableTypes; |
| } |
| |
| public TokenSet getTargetDeclarationTypes() { |
| return myTargetDeclarationTypes; |
| } |
| } |