/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.formatting;
import com.intellij.formatting.Spacing;
import com.intellij.psi.PsiElement;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import gw.plugin.ij.lang.parser.GosuElementTypes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static com.intellij.patterns.PlatformPatterns.psiElement;
public class GosuSpacingBeforeLeftBrace extends GosuElementTypes {
// Before left brace
private static Spacing getSpacingBeforeClassLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_CLASS_LBRACE, settings);
}
private static Spacing getSpacingBeforeFunctionLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_METHOD_LBRACE, settings);
}
private static Spacing getSpacingBeforeIfLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_IF_LBRACE, settings);
}
private static Spacing getSpacingBeforeElseLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_ELSE_LBRACE, settings);
}
private static Spacing getSpacingBeforeForEachLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_FOR_LBRACE, settings);
}
private static Spacing getSpacingBeforeWhileLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_WHILE_LBRACE, settings);
}
private static Spacing getSpacingBeforeDoWhileLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_DO_LBRACE, settings);
}
private static Spacing getSpacingBeforeSwitchLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_SWITCH_LBRACE, settings);
}
private static Spacing getSpacingBeforeTryLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_TRY_LBRACE, settings);
}
private static Spacing getSpacingBeforeCatchLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_CATCH_LBRACE, settings);
}
private static Spacing getSpacingBeforeFinallyLeftBrace(@NotNull CommonCodeStyleSettings settings) {
return GosuSpaces.getSpace(settings.SPACE_BEFORE_FINALLY_LBRACE, settings);
}
private static Spacing getSpacingBeforeUsingLeftBrace(@NotNull CommonCodeStyleSettings settings, @NotNull GosuCodeStyleSettings gosuSettings) {
return GosuSpaces.getSpace(gosuSettings.SPACE_BEFORE_USING_LBRACE, settings);
}
@Nullable
public static Spacing getSpacing(PsiElement psi1, PsiElement psi2, @NotNull CommonCodeStyleSettings settings, @NotNull GosuCodeStyleSettings gosuSettings) {
// class/interface/enhancement/enum Indentifier [SPACE] {
if (psiElement(TT_OP_brace_left)
.withParent(GosuIndentProcessor.ALL_DEFINITIONS)
.accepts(psi2)) {
return getSpacingBeforeClassLeftBrace(settings);
}
// function Indentifier () [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(METHOD_DEFINITION))
.accepts(psi2)) {
return getSpacingBeforeFunctionLeftBrace(settings);
}
// if () [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(ELEM_TYPE_IfStatement))
.beforeLeaf(psiElement(TT_else))
.accepts(psi2)) {
return getSpacingBeforeIfLeftBrace(settings);
}
// else [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(ELEM_TYPE_IfStatement))
.afterLeaf(psiElement(TT_else))
.accepts(psi2)) {
return getSpacingBeforeElseLeftBrace(settings);
}
// for () [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(ELEM_TYPE_ForEachStatement))
.accepts(psi2)) {
return getSpacingBeforeForEachLeftBrace(settings);
}
// while () [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(ELEM_TYPE_WhileStatement))
.accepts(psi2)) {
return getSpacingBeforeWhileLeftBrace(settings);
}
// do () [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(ELEM_TYPE_DoWhileStatement))
.accepts(psi2)) {
return getSpacingBeforeDoWhileLeftBrace(settings);
}
// switch () [SPACE] {
if (psiElement(TT_OP_brace_left)
.withParent(psiElement(ELEM_TYPE_SwitchStatement))
.accepts(psi2)) {
return getSpacingBeforeSwitchLeftBrace(settings);
}
// try [SPACE] {
if (psiElement(TT_try).accepts(psi1) &&
psiElement(ELEM_TYPE_StatementList).accepts(psi2)) {
return getSpacingBeforeTryLeftBrace(settings);
}
// catch () [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(ELEM_TYPE_CatchClause))
.accepts(psi2)) {
return getSpacingBeforeCatchLeftBrace(settings);
}
// finally [SPACE] {
if (psiElement(TT_finally).accepts(psi1) &&
psiElement(ELEM_TYPE_StatementList).accepts(psi2)) {
return getSpacingBeforeFinallyLeftBrace(settings);
}
// using() [SPACE] {
if (psiElement(ELEM_TYPE_StatementList)
.withParent(psiElement(ELEM_TYPE_UsingStatement))
.accepts(psi2)) {
return getSpacingBeforeUsingLeftBrace(settings, gosuSettings);
}
return null;
}
}