com.google.dart.tools.core.DartCoreDebug.java Source code

Java tutorial

Introduction

Here is the source code for com.google.dart.tools.core.DartCoreDebug.java

Source

/*
 * Copyright (c) 2012, the Dart project authors.
 * 
 * Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 * 
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
package com.google.dart.tools.core;

import com.google.dart.engine.AnalysisEngine;
import com.google.dart.engine.utilities.instrumentation.InstrumentationBuilder;

import org.apache.commons.lang3.StringUtils;
import org.eclipse.core.runtime.Platform;

import java.util.HashMap;
import java.util.Map;

/**
 * Debug/Tracing options for the {@link DartCore} plugin.
 * 
 * @coverage dart.tools.core
 */
public class DartCoreDebug {

    // Sparse map of all settings automatically built by calls to isOptionTrue()

    public static final Map<String, String> SPARSE_OPTION_MAP = new HashMap<String, String>(30);

    // Debugging / Tracing options  

    public static final boolean METRICS = isOptionTrue("debug/metrics");
    public static final boolean VERBOSE = isOptionTrue("debug/verbose");
    public static final boolean LOGGING_DEBUGGER = isOptionTrue("logging/debugger");

    public static final boolean TRACE_UPDATE = isOptionTrue("trace/update");

    public static final boolean ENABLE_CONTENT_ASSIST_TIMING = isOptionTrue("debug/ResultCollector");

    // Performance measurement and reporting options.

    public static final boolean PERF_OS_RESOURCES = isOptionTrue("perf/osResources");
    public static final boolean PERF_THREAD_CONTENTION_MONIOR = isOptionTrue("perf/threadContentionMonitor");

    // Experimental functionality options.

    public static final boolean EXPERIMENTAL = isOptionTrue("experimental")
            || CmdLineOptions.getOptions().getExperimental();

    public static final boolean ENABLE_ALT_KEY_BINDINGS = isOptionTrue("experimental/altKeyBindings");
    public static final boolean ENABLE_TESTS_VIEW = isOptionTrue("experimental/testsView");

    public static final boolean ASK_FOR_USER_ANALYTICS = isOptionTrue("experimental/analytics");
    public static final boolean ENABLE_NEW_FEEDBACK = isOptionTrue("experimental/feedback");
    public static final Boolean ENABLE_NULL_AWARE_OPERATORS = isOptionTrue("experimental/nullAwareOperators");
    public static final boolean ENABLE_TAB_COLORING = isOptionTrue("experimental/tabColors");
    public static final boolean ENABLE_HTML_VALIDATION = isOptionTrue("experimental/validateHtml");
    public static final boolean ENABLE_COVERAGE = isOptionTrue("experimental/coverage");

    public static final String ENABLE_ANALYSIS_SERVER_PREF = "enableAnalysisServer";
    public static final boolean ENABLE_ANALYSIS_SERVER = isOptionTrue("experimental/analysisServer")
            || DartCore.getPlugin().getPrefs().getBoolean(ENABLE_ANALYSIS_SERVER_PREF, true);

    public static final String ENABLE_LINTING_PREF = "enableLinting";

    public static final boolean ANALYSIS_SERVER_DEBUG = isOptionTrue("experimental/analysisServer/debug");

    public static final boolean ANALYSIS_SERVER_INCREMENTAL_RESOLUTION_API = isOptionTrue(
            "experimental/analysisServer/incrementalResolutionApi");
    public static final String ANALYSIS_SERVER_INCREMENTAL_RESOLUTION_LOG = getOptionValue(
            "experimental/analysisServer/incrementalResolutionLog");
    public static final boolean ANALYSIS_SERVER_INCREMENTAL_RESOLUTION_VALIDATION = isOptionTrue(
            "experimental/analysisServer/incrementalResolutionValidation");

    public static final String ANALYSIS_SERVER_INSTRUMENTATION_LOG_FILE = getOptionValue(
            "experimental/analysisServer/instrumentationLogFile");

    public static final boolean ANALYSIS_SERVER_NEW_TASK_MODEL = isOptionTrue(
            "experimental/analysisServer/newTaskModel");

    // http diagnostic port 
    public static final String ANALYSIS_SERVER_HTTP_PORT_PREF = "analysisServerHttpPort";
    public static final String ANALYSIS_SERVER_HTTP_PORT = getOptionOrPrefValue(
            "experimental/analysisServer/http_port", ANALYSIS_SERVER_HTTP_PORT_PREF);

    public static final String ANALYSIS_SERVER_LOG_FILE = getOptionValue("experimental/analysisServer/logFile");
    public static final String ANALYSIS_SERVER_PATH = getOptionValue("experimental/analysisServer/path");
    public static final boolean ANALYSIS_SERVER_PRINT_TO_CONSOLE = isOptionTrue(
            "experimental/analysisServer/printToConsole");
    public static final boolean ANALYSIS_SERVER_PROFILE = isOptionTrue("experimental/analysisServer/profile");
    public static final boolean NO_PUB_PACKAGES = isOptionTrue("experimental/noPubPackages");
    // The defaults are duplicated for tests in
    // editor/tools/plugins/com.google.dart.engine_test/src/com/google/dart/engine/resolver/ResolverTestCase.java
    public static final boolean ENABLE_UNION_TYPES = isOptionTrue("experimental/enableUnionTypes");
    public static final boolean STRICT_UNION_TYPES = isOptionTrue("experimental/strictUnionTypes");
    public static final boolean DISABLE_MARK_OCCURRENCES = isOptionTrue("dev/disableMarkOccurrences");

    // Persistent developer settings

    public static final boolean DISABLE_DARTIUM_DEBUGGER = isOptionTrue("user/disableDartiumDebugger");

    // User settings

    public static final boolean DISABLE_CLI_DEBUGGER = isOptionTrue("user/disableCommandLineDebugger");
    /**
     * Flag to disable the semantic highlighting optimization so that an underlying semantic
     * highlighting bug can be better investigated.
     */
    public static final boolean DISABLE_SEMANTIC_HIGHLIGHT_FILTERING = isOptionTrue(
            "experimental/analysisServer/disableSemanticHighlightFiltering");

    /**
     * Report each of these parameters to the provided instrumentation builder
     */
    public static void record(InstrumentationBuilder instrumentation) {

        // Cause AnalysisEngine to throw exceptions if server is enabled
        AnalysisEngine.setDisableEngine(ENABLE_ANALYSIS_SERVER);

        instrumentation.metric("ENABLE_ANALYSIS_SERVER", ENABLE_ANALYSIS_SERVER);
        instrumentation.metric("ANALYSIS_SERVER_HTTP_PORT", ANALYSIS_SERVER_HTTP_PORT);

        instrumentation.metric("METRICS", METRICS);
        instrumentation.metric("VERBOSE", VERBOSE);
        instrumentation.metric("LOGGING_DEBUGGER", LOGGING_DEBUGGER);

        instrumentation.metric("TRACE_UPDATE", TRACE_UPDATE);

        instrumentation.metric("ENABLE_CONTENT_ASSIST_TIMING", ENABLE_CONTENT_ASSIST_TIMING);

        instrumentation.metric("PERF_OS_RESOURCES", PERF_OS_RESOURCES);
        instrumentation.metric("PERF_THREAD_CONTENTION_MONIOR", PERF_THREAD_CONTENTION_MONIOR);

        instrumentation.metric("EXPERIMENTAL", EXPERIMENTAL);

        instrumentation.metric("ENABLE_ALT_KEY_BINDINGS", ENABLE_ALT_KEY_BINDINGS);
        instrumentation.metric("ENABLE_TESTS_VIEW", ENABLE_TESTS_VIEW);
        instrumentation.metric("ENABLE_TAB_COLORING", ENABLE_TAB_COLORING);
        instrumentation.metric("ENABLE_HTML_VALIDATION", ENABLE_HTML_VALIDATION);
        instrumentation.metric("NO_PUB_PACKAGES", NO_PUB_PACKAGES);

        instrumentation.metric("DISABLE_MARK_OCCURRENCES", DISABLE_MARK_OCCURRENCES);

        instrumentation.metric("DISABLE_DARTIUM_DEBUGGER", DISABLE_DARTIUM_DEBUGGER);
        instrumentation.metric("DISABLE_CLI_DEBUGGER", DISABLE_CLI_DEBUGGER);

        instrumentation.metric("DISABLE_SEMANTIC_HIGHLIGHT_FILTERING", DISABLE_SEMANTIC_HIGHLIGHT_FILTERING);
    }

    /**
     * Returns a value of the option or the preference.
     */
    private static String getOptionOrPrefValue(String optionSuffix, String prefKey) {
        String value = getOptionValue(optionSuffix);
        if (value == null || value.length() == 0) {
            value = DartCore.getPlugin().getPrefs().get(prefKey, "");
        }
        return value;
    }

    /**
     * Returns a value of the option, {@code null} if not set.
     */
    private static String getOptionValue(String optionSuffix) {
        String option = DartCore.PLUGIN_ID + "/" + optionSuffix;
        String value = Platform.getDebugOption(option);
        if (value == null) {
            value = DartCore.getUserDefinedProperty(option);
        }
        return value;
    }

    /**
     * @return <code>true</code> if option has value "true".
     */
    private static boolean isOptionTrue(String optionSuffix) {
        return isOptionValue(optionSuffix, "true");
    }

    /**
     * @return <code>true</code> if option has "expected" value.
     */
    private static boolean isOptionValue(String optionSuffix, String expected) {
        String value = getOptionValue(optionSuffix);
        if (value != null && !"false".equals(value)) {
            SPARSE_OPTION_MAP.put(optionSuffix, value);
        }
        return StringUtils.equalsIgnoreCase(value, expected);
    }

}