/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.plugin.ij.formatting;
import com.intellij.formatting.Spacing;
import com.intellij.patterns.ElementPattern;
import com.intellij.psi.PsiElement;
import com.intellij.psi.codeStyle.CodeStyleSettings;
import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
import gw.plugin.ij.lang.GosuLanguage;
import gw.plugin.ij.lang.GosuTokenSets;
import gw.plugin.ij.lang.parser.GosuElementTypes;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static com.intellij.patterns.PlatformPatterns.psiElement;
import static com.intellij.patterns.StandardPatterns.or;
public class GosuSpacingProcessor {
@Nullable
public static Spacing getSpacing(@NotNull GosuBlock child1, @NotNull GosuBlock child2, @NotNull CodeStyleSettings settings) {
final PsiElement psi1 = child1.getNode().getPsi();
final PsiElement psi2 = child2.getNode().getPsi();
final CommonCodeStyleSettings commonSettings = settings.getCommonSettings(GosuLanguage.instance());
final GosuCodeStyleSettings gosuSettings= settings.getCustomSettings(GosuCodeStyleSettings.class);
Spacing spacing;
if ((spacing = GosuSpacingNonConfigured.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingWithinTypeArguments.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingBeforeParentheses.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingAround.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingBeforeLeftBrace.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingBeforeKeywords.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingWithin.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingInTernaryOperator.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingInBlocks.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null ||
(spacing = GosuSpacingOther.getSpacing(psi1, psi2, commonSettings, gosuSettings)) != null) {
return spacing;
}
return null;
}
}