/* * Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC * All rights reserved. * * The source code of this document is proprietary work, and is not licensed for * distribution. For information about licensing, contact Sam Harwell at: * sam@tunnelvisionlabs.com */ package org.tvl.goworks.editor.go.formatting; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import java.util.prefs.Preferences; import org.antlr.netbeans.editor.formatting.AbstractFormatOption; import org.antlr.netbeans.editor.formatting.BooleanFormatOption; import org.antlr.netbeans.editor.formatting.EnumFormatOption; import org.antlr.netbeans.editor.formatting.FormatOptions; import org.antlr.netbeans.editor.formatting.IntFormatOption; import org.openide.util.NbBundle; /** * * @author Sam Harwell */ @NbBundle.Messages({ "SAMPLE_Default=", "AD_Preview=", "AN_Preview=", }) public class GoFormatOptions extends FormatOptions { // -J-Dorg.tvl.goworks.editor.go.formatting.GoFormatOptions.level=FINE private static final Logger LOGGER = Logger.getLogger(GoFormatOptions.class.getName()); public static final BooleanFormatOption alignMultilineArrayInitializer = new BooleanFormatOption("alignMultilineArrayInitializer", false); public static final BooleanFormatOption alignMultilineAssignment = new BooleanFormatOption("alignMultilineAssignment", false); public static final BooleanFormatOption alignMultilineBinaryOperators = new BooleanFormatOption("alignMultilineBinaryOperators", false); public static final BooleanFormatOption alignMultilineCallArguments = new BooleanFormatOption("alignMultilineCallArguments", false); public static final BooleanFormatOption alignMultilineCompositeLiteral = new BooleanFormatOption("alignMultilineCompositeLiteral", false); public static final BooleanFormatOption alignMultilineFor = new BooleanFormatOption("alignMultilineFor", false); public static final BooleanFormatOption alignMultilineMethodParameters = new BooleanFormatOption("alignMultilineMethodParameters", false); public static final BooleanFormatOption alignMultilineParenthesized = new BooleanFormatOption("alignMultilineParenthesized", false); public static final BooleanFormatOption alignMultilineReturnParameters = new BooleanFormatOption("alignMultilineReturnParameters", false); public static final BooleanFormatOption alignMultilineTernaryOperators = new BooleanFormatOption("alignMultilineTernaryOperators", false); public static final IntFormatOption blankLinesBeforePackage = new IntFormatOption("blankLinesBeforePackage", 0); public static final IntFormatOption blankLinesAfterPackage = new IntFormatOption("blankLinesAfterPackage", 1); public static final IntFormatOption blankLinesBeforeImports = new IntFormatOption("blankLinesBeforeImports", 1); public static final IntFormatOption blankLinesAfterImports = new IntFormatOption("blankLinesAfterImports", 1); public static final IntFormatOption blankLinesBeforeType = new IntFormatOption("blankLinesBeforeType", 1); public static final IntFormatOption blankLinesAfterType = new IntFormatOption("blankLinesAfterType", 0); public static final IntFormatOption blankLinesBeforeVar = new IntFormatOption("blankLinesBeforeVar", 0); public static final IntFormatOption blankLinesAfterVar = new IntFormatOption("blankLinesAfterVar", 0); public static final IntFormatOption blankLinesBeforeFunction = new IntFormatOption("blankLinesBeforeFunction", 1); public static final IntFormatOption blankLinesAfterFunction = new IntFormatOption("blankLinesAfterFunction", 0); public static final BooleanFormatOption spaceBeforeWhile = new BooleanFormatOption("spaceBeforeWhile", true); public static final BooleanFormatOption spaceBeforeElse = new BooleanFormatOption("spaceBeforeElse", true); public static final BooleanFormatOption spaceBeforeParensMethodDeclaration = new BooleanFormatOption("spaceBeforeParensMethodDeclaration", false); public static final BooleanFormatOption spaceBeforeParensMethodCall = new BooleanFormatOption("spaceBeforeParensMethodCall", false); public static final BooleanFormatOption spaceBeforeParensIf = new BooleanFormatOption("spaceBeforeParensIf", true); public static final BooleanFormatOption spaceBeforeParensFor = new BooleanFormatOption("spaceBeforeParensFor", true); public static final BooleanFormatOption spaceBeforeParensWhile = new BooleanFormatOption("spaceBeforeParensWhile", true); public static final BooleanFormatOption spaceBeforeParensSwitch = new BooleanFormatOption("spaceBeforeParensSwitch", true); public static final BooleanFormatOption spaceAroundUnaryOperators = new BooleanFormatOption("spaceAroundUnaryOperators", false); public static final BooleanFormatOption spaceAroundBinaryOperators = new BooleanFormatOption("spaceAroundBinaryOperators", true); public static final BooleanFormatOption spaceAroundTernaryOperators = new BooleanFormatOption("spaceAroundTernaryOperators", true); public static final BooleanFormatOption spaceAroundAssignmentOperators = new BooleanFormatOption("spaceAroundAssignmentOperators", true); public static final BooleanFormatOption spaceBeforeBraceTypeDeclaration = new BooleanFormatOption("spaceBeforeBraceTypeDeclaration", true); public static final BooleanFormatOption spaceBeforeBraceMethodDeclaration = new BooleanFormatOption("spaceBeforeBraceMethodDeclaration", true); public static final BooleanFormatOption spaceBeforeBraceIf = new BooleanFormatOption("spaceBeforeBraceIf", true); public static final BooleanFormatOption spaceBeforeBraceElse = new BooleanFormatOption("spaceBeforeBraceElse", true); public static final BooleanFormatOption spaceBeforeBraceFor = new BooleanFormatOption("spaceBeforeBraceFor", true); public static final BooleanFormatOption spaceBeforeBraceDo = new BooleanFormatOption("spaceBeforeBraceDo", true); public static final BooleanFormatOption spaceBeforeBraceWhile = new BooleanFormatOption("spaceBeforeBraceWhile", true); public static final BooleanFormatOption spaceBeforeBraceSwitch = new BooleanFormatOption("spaceBeforeBraceSwitch", true); public static final BooleanFormatOption spaceBeforeBraceStaticInitializer = new BooleanFormatOption("spaceBeforeBraceStaticInitializer", true); public static final BooleanFormatOption spaceBeforeBraceArrayInitializer = new BooleanFormatOption("spaceBeforeBraceArrayInitializer", false); public static final BooleanFormatOption spaceInParens = new BooleanFormatOption("spaceInParens", false); public static final BooleanFormatOption spaceInParensMethodDeclaration = new BooleanFormatOption("spaceInParensMethodDeclaration", false); public static final BooleanFormatOption spaceInParensMethodCall = new BooleanFormatOption("spaceInParensMethodCall", false); public static final BooleanFormatOption spaceInParensIf = new BooleanFormatOption("spaceInParensIf", false); public static final BooleanFormatOption spaceInParensFor = new BooleanFormatOption("spaceInParensFor", false); public static final BooleanFormatOption spaceInParensWhile = new BooleanFormatOption("spaceInParensWhile", false); public static final BooleanFormatOption spaceInParensSwitch = new BooleanFormatOption("spaceInParensSwitch", false); public static final BooleanFormatOption spaceInParensTypeCast = new BooleanFormatOption("spaceInParensTypeCast", false); public static final BooleanFormatOption spaceInParensBraces = new BooleanFormatOption("spaceInParensBraces", false); public static final BooleanFormatOption spaceInParensArrayInitBrackets = new BooleanFormatOption("spaceInParensArrayInitBrackets", false); public static final BooleanFormatOption spaceBeforeComma = new BooleanFormatOption("spaceBeforeComma", false); public static final BooleanFormatOption spaceAfterComma = new BooleanFormatOption("spaceAfterComma", true); public static final BooleanFormatOption spaceBeforeSemicolon = new BooleanFormatOption("spaceBeforeSemicolon", false); public static final BooleanFormatOption spaceAfterSemicolon = new BooleanFormatOption("spaceAfterSemicolon", true); public static final BooleanFormatOption spaceBeforeColon = new BooleanFormatOption("spaceBeforeColon", true); public static final BooleanFormatOption spaceAfterColon = new BooleanFormatOption("spaceAfterColon", true); public static final BooleanFormatOption spaceAfterTypeCast = new BooleanFormatOption("spaceAfterTypeCast", false); public static final BooleanFormatOption enableCommentsFormatting = new BooleanFormatOption("enableCommentsFormatting", true); public static final BooleanFormatOption formatBlockComments = new BooleanFormatOption("formatBlockComments", false); public static final BooleanFormatOption addLeadingStarInComments = new BooleanFormatOption("addLeadingStarInComments", true); public static final BooleanFormatOption wrapTextInComments = new BooleanFormatOption("wrapTextInComments", true); public static final BooleanFormatOption wrapOneLineComments = new BooleanFormatOption("wrapOneLineComments", true); public static final BooleanFormatOption preserveNewLinesInComments = new BooleanFormatOption("preserveNewLinesInComments", false); public static final EnumFormatOption<WrapStyle> wrapArrayInitializer = new EnumFormatOption<>("wrapArrayInitializer", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapAssignmentOperators = new EnumFormatOption<>("wrapAssignmentOperators", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapBinaryOperators = new EnumFormatOption<>("wrapBinaryOperators", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapChainedMethodCalls = new EnumFormatOption<>("wrapChainedMethodCalls", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapDoWhileStatement = new EnumFormatOption<>("wrapDoWhileStatement", WrapStyle.class, WrapStyle.ALWAYS); public static final EnumFormatOption<WrapStyle> wrapEnumConstants = new EnumFormatOption<>("wrapEnumConstants", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapFor = new EnumFormatOption<>("wrapFor", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapForStatement = new EnumFormatOption<>("wrapForStatement", WrapStyle.class, WrapStyle.ALWAYS); public static final EnumFormatOption<WrapStyle> wrapIfStatement = new EnumFormatOption<>("wrapIfStatement", WrapStyle.class, WrapStyle.ALWAYS); public static final EnumFormatOption<WrapStyle> wrapMethodCallArguments = new EnumFormatOption<>("wrapMethodCallArguments", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapMethodParameters = new EnumFormatOption<>("wrapMethodParameters", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapTernaryOperators = new EnumFormatOption<>("wrapTernaryOperators", WrapStyle.class, WrapStyle.NEVER); public static final EnumFormatOption<WrapStyle> wrapWhileStatement = new EnumFormatOption<>("wrapWhileStatement", WrapStyle.class, WrapStyle.ALWAYS); public static CodeStyleFactory codeStyleFactory; private static final Map<String, AbstractFormatOption> knownOptions; static { knownOptions = new HashMap<>(); for (Field field : GoFormatOptions.class.getDeclaredFields()) { if (Modifier.isStatic(field.getModifiers()) && Modifier.isFinal(field.getModifiers()) && Modifier.isPublic(field.getModifiers()) && AbstractFormatOption.class.isAssignableFrom(field.getType())) { try { AbstractFormatOption value = (AbstractFormatOption)field.get(null); if (value != null) { knownOptions.put(value.getName(), value); } } catch (IllegalArgumentException | IllegalAccessException ex) { LOGGER.log(Level.WARNING, "An exception occurred while examining formatting options.", ex); } } } } public static AbstractFormatOption getOption(String name) { return knownOptions.get(name); } public static interface CodeStyleFactory { public GoCodeStyle create(Preferences preferences); } }