/* * 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 GosuSpacingOther extends GosuElementTypes { private static Spacing getSpacingBeforeComma(@NotNull CommonCodeStyleSettings settings) { return GosuSpaces.getSpace(settings.SPACE_BEFORE_COMMA, settings); } private static Spacing getSpacingAfterComma(@NotNull CommonCodeStyleSettings settings) { return GosuSpaces.getSpace(settings.SPACE_AFTER_COMMA, settings); } private static Spacing getSpacingBeforeColon(@NotNull CommonCodeStyleSettings settings, @NotNull GosuCodeStyleSettings gosuSettings) { return GosuSpaces.getSpace(gosuSettings.SPACE_BEFORE_COLON, settings); } private static Spacing getSpacingAfterColon(@NotNull CommonCodeStyleSettings settings, @NotNull GosuCodeStyleSettings gosuSettings) { return GosuSpaces.getSpace(gosuSettings.SPACE_AFTER_COLON, settings); } private static Spacing getSpacingAfterTypeCast(@NotNull CommonCodeStyleSettings settings) { return GosuSpaces.getSpace(settings.SPACE_AFTER_TYPE_CAST, settings); } @Nullable public static Spacing getSpacing(PsiElement psi1, PsiElement psi2, @NotNull CommonCodeStyleSettings settings, @NotNull GosuCodeStyleSettings gosuSettings) { // smth [SPACE] , if (psiElement(TT_OP_comma).accepts(psi2)) { return getSpacingBeforeComma(settings); } // , [SPACE] smth if (psiElement(TT_OP_comma).accepts(psi1)) { return getSpacingAfterComma(settings); } // smth [SPACE] : // Must be after GosuSpacingInTernaryOperator if (psiElement(TT_OP_colon).accepts(psi2)) { return getSpacingBeforeColon(settings, gosuSettings); } // : [SPACE] smth // Must be after GosuSpacingInTernaryOperator if (psiElement(TT_OP_colon).accepts(psi1)) { return getSpacingAfterColon(settings, gosuSettings); } // (Type) [SPACE] smth if (psiElement(ELEM_TYPE_ParenthesizedExpression) .withParent(psiElement(ELEM_TYPE_TypeAsExpression)) .accepts(psi1)) { return getSpacingAfterTypeCast(settings); } return null; } }