| /* |
| * Copyright 2000-2009 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; |
| |
| import org.jetbrains.annotations.NonNls; |
| |
| class IndentImpl extends Indent { |
| private final boolean myIsAbsolute; |
| private final boolean myRelativeToDirectParent; |
| |
| private final Type myType; |
| private final int mySpaces; |
| private final boolean myEnforceIndentToChildren; |
| |
| public IndentImpl(final Type type, boolean absolute, boolean relativeToDirectParent) { |
| this(type, absolute, 0, relativeToDirectParent, false); |
| } |
| |
| public IndentImpl(final Type type, boolean absolute, final int spaces, boolean relativeToDirectParent, boolean enforceIndentToChildren) { |
| myType = type; |
| myIsAbsolute = absolute; |
| mySpaces = spaces; |
| myRelativeToDirectParent = relativeToDirectParent; |
| myEnforceIndentToChildren = enforceIndentToChildren; |
| } |
| |
| Type getType() { |
| return myType; |
| } |
| |
| public int getSpaces() { |
| return mySpaces; |
| } |
| |
| /** |
| * @return <code>'isAbsolute'</code> property value as defined during {@link IndentImpl} object construction |
| */ |
| boolean isAbsolute(){ |
| return myIsAbsolute; |
| } |
| |
| /** |
| * Allows to answer if current indent object is configured to anchor direct parent that lays on a different line. |
| * <p/> |
| * Feel free to check {@link Indent} class-level javadoc in order to get more information and examples about expected |
| * usage of this property. |
| * |
| * @return flag that indicates if this indent should anchor direct parent that lays on a different line |
| */ |
| public boolean isRelativeToDirectParent() { |
| return myRelativeToDirectParent; |
| } |
| |
| /** |
| * Allows to answer if current indent object is configured to enforce indent for sub-blocks of composite block that doesn't start |
| * new line. |
| * <p/> |
| * Feel free to check {@link Indent} javadoc for the more detailed explanation of this property usage. |
| * |
| * @return <code>true</code> if current indent object is configured to enforce indent for sub-blocks of composite block |
| * that doesn't start new line; <code>false</code> otherwise |
| */ |
| public boolean isEnforceIndentToChildren() { |
| return myEnforceIndentToChildren; |
| } |
| |
| @NonNls |
| @Override |
| public String toString() { |
| if (myType == Type.SPACES) { |
| return "<Indent: SPACES(" + mySpaces + ")>"; |
| } |
| return "<Indent: " + myType + (myIsAbsolute ? ":ABSOLUTE " : "") |
| + (myRelativeToDirectParent ? " relative to direct parent " : "") |
| + (myEnforceIndentToChildren ? " enforce indent to children" : "") + ">"; |
| } |
| } |