All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.github.javaparser.printer.configuration.DefaultPrinterConfiguration Maven / Gradle / Ivy

/*
 * Copyright (C) 2011, 2013-2021 The JavaParser Team.
 *
 * This file is part of JavaParser.
 *
 * JavaParser can be used either under the terms of
 * a) the GNU Lesser General Public License as published by
 *     the Free Software Foundation, either version 3 of the License, or
 *     (at your option) any later version.
 * b) the terms of the Apache License
 *
 * You should have received a copy of both licenses in LICENCE.LGPL and
 * LICENCE.APACHE. Please refer to those files for details.
 *
 * JavaParser is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 */

package com.github.javaparser.printer.configuration;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Optional;
import java.util.Set;

import com.github.javaparser.printer.Printer;
import com.github.javaparser.printer.configuration.Indentation.IndentType;
import com.github.javaparser.utils.Utils;

/**
 * Configuration options for the {@link Printer}.
 */
public class DefaultPrinterConfiguration implements PrinterConfiguration {
    
    public enum ConfigOption {
        /**
         * Order imports alphabetically
         */
        ORDER_IMPORTS(Boolean.class), 
        /**
         * Print comments only. It can be combined with {@code PRINT_JAVADOC} to print regular comments and javadoc.
         */
        PRINT_COMMENTS(Boolean.class), 
        /**
         * Print javadoc comments only. It can be combined with {@code PRINT_COMMENTS} to print regular javadoc and comments
         */
        PRINT_JAVADOC(Boolean.class), 
        SPACE_AROUND_OPERATORS(Boolean.class), 
        COLUMN_ALIGN_PARAMETERS(Boolean.class), 
        COLUMN_ALIGN_FIRST_METHOD_CHAIN(Boolean.class),
        /**
         * Indent the case when it is true, don't if false
         * 
{@code
         * switch(x) {            switch(x) {
         *    case 1:             case 1:
         *        return y;           return y;
         *    case 2:             case 2:
         *        return z;           return x;
         * }                       }
         * }
         */
        INDENT_CASE_IN_SWITCH(Boolean.class),
        /**
         * By default enum constants get aligned like this:
         * 
{@code
         *     enum X {
         *        A, B, C, D
         *     }
         * }
         * until the amount of constants passes this currentValue (5 by default).
         * Then they get aligned like this:
         * 
{@code
         *     enum X {
         *        A,
         *        B,
         *        C,
         *        D,
         *        E,
         *        F,
         *        G
         *     }
         * }
* Set it to a very large number (e.g. {@code Integer.MAX_VALUE} to always align horizontally. * Set it to 1 or less to always align vertically. */ MAX_ENUM_CONSTANTS_TO_ALIGN_HORIZONTALLY(Integer.class, Integer.valueOf(5)), END_OF_LINE_CHARACTER(String.class, Utils.SYSTEM_EOL), /** * Indentation proprerty */ INDENTATION(Indentation.class, new Indentation(IndentType.SPACES, 4)); Object defaultValue; Class type; // DefaultConfigurationOption without currentValue ConfigOption(Class clazz) { this.type = clazz; } // DefaultConfigurationOption with initial currentValue ConfigOption(Class clazz, Object value) { this.type = clazz; if (!(this.type.isAssignableFrom(value.getClass()))) { throw new IllegalArgumentException(String.format("%s is not an instance of %s", value, type.getName())); } this.defaultValue = value; } } // contains all available options // an option contained in the set is considered as activated private Set defaultOptions = new HashSet<>(Arrays.asList( new DefaultConfigurationOption(ConfigOption.PRINT_COMMENTS, ConfigOption.PRINT_COMMENTS.defaultValue), new DefaultConfigurationOption(ConfigOption.PRINT_JAVADOC, ConfigOption.PRINT_JAVADOC.defaultValue), new DefaultConfigurationOption(ConfigOption.SPACE_AROUND_OPERATORS, ConfigOption.SPACE_AROUND_OPERATORS.defaultValue), new DefaultConfigurationOption(ConfigOption.INDENT_CASE_IN_SWITCH, ConfigOption.INDENT_CASE_IN_SWITCH.defaultValue), new DefaultConfigurationOption(ConfigOption.MAX_ENUM_CONSTANTS_TO_ALIGN_HORIZONTALLY, ConfigOption.MAX_ENUM_CONSTANTS_TO_ALIGN_HORIZONTALLY.defaultValue), new DefaultConfigurationOption(ConfigOption.END_OF_LINE_CHARACTER, ConfigOption.END_OF_LINE_CHARACTER.defaultValue), new DefaultConfigurationOption(ConfigOption.INDENTATION, ConfigOption.INDENTATION.defaultValue) )); public DefaultPrinterConfiguration() { } /* * add the specified option if it does not exist or replace the existing option */ @Override public PrinterConfiguration addOption(ConfigurationOption option) { removeOption(option); defaultOptions.add(option); return this; } /* * remove the specified option */ @Override public PrinterConfiguration removeOption(ConfigurationOption option) { defaultOptions.remove(option); return this; } /* * True if an option is activated */ @Override public boolean isActivated(ConfigurationOption option) { return defaultOptions.contains(option); } /* * returns the specified option */ @Override public Optional get(ConfigurationOption option) { return defaultOptions.stream().filter(o-> o.equals(option)).findFirst(); } /** * returns all options configured */ @Override public Set get() { return defaultOptions; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy