langtools/test/tools/javac/lib/combo/ComboTask.java
author mcimadamore
Mon, 31 Aug 2015 17:33:34 +0100
changeset 32454 b0ac04e0fefe
child 43769 c60feafb47db
permissions -rw-r--r--
8129962: Investigate performance improvements in langtools combo tests Summary: New combo API that runs all combo instances in a shared javac context (whenever possible). Reviewed-by: jjg, jlahoda, vromero
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32454
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     1
/*
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     2
 * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     4
 *
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     7
 * published by the Free Software Foundation.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     8
 *
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    13
 * accompanied this code).
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    14
 *
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    18
 *
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    21
 * questions.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    22
 */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    23
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    24
package combo;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    25
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    26
import com.sun.source.tree.CompilationUnitTree;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    27
import com.sun.source.util.JavacTask;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    28
import com.sun.source.util.TaskEvent.Kind;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    29
import com.sun.source.util.TaskListener;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    30
import com.sun.tools.javac.api.JavacTool;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    31
import com.sun.tools.javac.util.List;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    32
import combo.ComboParameter.Resolver;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    33
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    34
import javax.lang.model.element.Element;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    35
import javax.tools.Diagnostic;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    36
import javax.tools.DiagnosticListener;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    37
import javax.tools.JavaFileObject;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    38
import javax.tools.SimpleJavaFileObject;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    39
import java.io.IOException;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    40
import java.io.Writer;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    41
import java.net.URI;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    42
import java.util.HashMap;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    43
import java.util.Map;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    44
import java.util.stream.Collectors;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    45
import java.util.stream.StreamSupport;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    46
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    47
/**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    48
 * This class represents a compilation task associated with a combo test instance. This is a small
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    49
 * wrapper around {@link JavacTask} which allows for fluent setup style and which makes use of
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    50
 * the shared compilation context to speedup performances.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    51
 */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    52
public class ComboTask {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    53
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    54
    /** Sources to be compiled in this task. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    55
    private List<JavaFileObject> sources = List.nil();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    56
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    57
    /** Options associated with this task. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    58
    private List<String> options = List.nil();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    59
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    60
    /** Diagnostic collector. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    61
    private DiagnosticCollector diagsCollector = new DiagnosticCollector();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    62
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    63
    /** Output writer. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    64
    private Writer out;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    65
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    66
    /** Listeners associated with this task. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    67
    private List<TaskListener> listeners = List.nil();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    68
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    69
    /** Underlying javac task object. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    70
    private JavacTask task;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    71
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    72
    /** Combo execution environment. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    73
    private ComboTestHelper<?>.Env env;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    74
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    75
    ComboTask(ComboTestHelper<?>.Env env) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    76
        this.env = env;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    77
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    78
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    79
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    80
     * Add a new source to this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    81
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    82
    public ComboTask withSource(JavaFileObject comboSource) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    83
        sources = sources.prepend(comboSource);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    84
        return this;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    85
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    86
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    87
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    88
     * Add a new template source with given name to this task; the template is replaced with
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    89
     * corresponding combo parameters (as defined in the combo test environment).
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    90
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    91
    public ComboTask withSourceFromTemplate(String name, String template) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    92
        return withSource(new ComboTemplateSource(name, template));
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    93
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    94
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    95
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    96
     * Add a new template source with default name ("Test") to this task; the template is replaced with
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    97
     * corresponding combo parameters (as defined in the combo test environment).
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    98
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
    99
    public ComboTask withSourceFromTemplate(String template) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   100
        return withSource(new ComboTemplateSource("Test", template));
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   101
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   102
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   103
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   104
     * Add a new template source with given name to this task; the template is replaced with
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   105
     * corresponding combo parameters (as defined in the combo test environment). A custom resolver
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   106
     * is used to add combo parameter mappings to the current combo test environment.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   107
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   108
    public ComboTask withSourceFromTemplate(String name, String template, Resolver resolver) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   109
        return withSource(new ComboTemplateSource(name, template, resolver));
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   110
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   111
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   112
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   113
     * Add a new template source with default name ("Test") to this task; the template is replaced with
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   114
     * corresponding combo parameters (as defined in the combo test environment). A custom resolver
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   115
     * is used to add combo parameter mappings to the current combo test environment.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   116
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   117
    public ComboTask withSourceFromTemplate(String template, Resolver resolver) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   118
        return withSource(new ComboTemplateSource("Test", template, resolver));
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   119
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   120
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   121
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   122
     * Add a new option to this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   123
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   124
    public ComboTask withOption(String opt) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   125
        options = options.append(opt);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   126
        return this;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   127
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   128
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   129
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   130
     * Add a set of options to this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   131
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   132
    public ComboTask withOptions(String[] opts) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   133
        for (String opt : opts) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   134
            options = options.append(opt);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   135
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   136
        return this;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   137
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   138
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   139
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   140
     * Add a set of options to this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   141
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   142
    public ComboTask withOptions(Iterable<? extends String> opts) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   143
        for (String opt : opts) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   144
            options = options.append(opt);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   145
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   146
        return this;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   147
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   148
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   149
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   150
     * Set the output writer associated with this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   151
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   152
    public ComboTask withWriter(Writer out) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   153
        this.out = out;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   154
        return this;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   155
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   156
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   157
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   158
     * Add a task listener to this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   159
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   160
    public ComboTask withListener(TaskListener listener) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   161
        listeners = listeners.prepend(listener);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   162
        return this;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   163
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   164
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   165
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   166
     * Parse the sources associated with this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   167
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   168
    public Result<Iterable<? extends CompilationUnitTree>> parse() throws IOException {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   169
        return new Result<>(getTask().parse());
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   170
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   171
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   172
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   173
     * Parse and analyzes the sources associated with this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   174
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   175
    public Result<Iterable<? extends Element>> analyze() throws IOException {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   176
        return new Result<>(getTask().analyze());
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   177
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   178
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   179
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   180
     * Parse, analyze and perform code generation for the sources associated with this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   181
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   182
    public Result<Iterable<? extends JavaFileObject>> generate() throws IOException {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   183
        return new Result<>(getTask().generate());
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   184
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   185
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   186
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   187
     * Fork a new compilation task; if possible the compilation context from previous executions is
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   188
     * retained (see comments in ReusableContext as to when it's safe to do so); otherwise a brand
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   189
     * new context is created.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   190
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   191
    public JavacTask getTask() {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   192
        if (task == null) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   193
            ReusableContext context = env.context();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   194
            String opts = options == null ? "" :
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   195
                    StreamSupport.stream(options.spliterator(), false).collect(Collectors.joining());
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   196
            context.clear();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   197
            if (!context.polluted && (context.opts == null || context.opts.equals(opts))) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   198
                //we can reuse former context
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   199
                env.info().ctxReusedCount++;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   200
            } else {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   201
                env.info().ctxDroppedCount++;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   202
                //it's not safe to reuse context - create a new one
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   203
                context = env.setContext(new ReusableContext());
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   204
            }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   205
            context.opts = opts;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   206
            JavacTask javacTask = ((JavacTool)env.javaCompiler()).getTask(out, env.fileManager(),
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   207
                    diagsCollector, options, null, sources, context);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   208
            javacTask.setTaskListener(context);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   209
            for (TaskListener l : listeners) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   210
                javacTask.addTaskListener(l);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   211
            }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   212
            task = javacTask;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   213
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   214
        return task;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   215
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   216
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   217
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   218
     * This class is used to help clients accessing the results of a given compilation task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   219
     * Contains several helper methods to inspect diagnostics generated during the task execution.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   220
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   221
    public class Result<D> {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   222
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   223
        /** The underlying compilation results. */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   224
        private final D data;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   225
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   226
        public Result(D data) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   227
            this.data = data;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   228
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   229
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   230
        public D get() {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   231
            return data;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   232
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   233
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   234
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   235
         * Did this task generate any error diagnostics?
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   236
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   237
        public boolean hasErrors() {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   238
            return diagsCollector.diagsByKind.containsKey(Diagnostic.Kind.ERROR);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   239
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   240
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   241
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   242
         * Did this task generate any warning diagnostics?
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   243
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   244
        public boolean hasWarnings() {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   245
            return diagsCollector.diagsByKind.containsKey(Diagnostic.Kind.WARNING);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   246
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   247
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   248
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   249
         * Did this task generate any note diagnostics?
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   250
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   251
        public boolean hasNotes() {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   252
            return diagsCollector.diagsByKind.containsKey(Diagnostic.Kind.NOTE);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   253
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   254
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   255
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   256
         * Did this task generate any diagnostic with given key?
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   257
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   258
        public boolean containsKey(String key) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   259
            return diagsCollector.diagsByKeys.containsKey(key);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   260
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   261
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   262
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   263
         * Retrieve the list of diagnostics of a given kind.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   264
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   265
        public List<Diagnostic<? extends JavaFileObject>> diagnosticsForKind(Diagnostic.Kind kind) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   266
            List<Diagnostic<? extends JavaFileObject>> diags = diagsCollector.diagsByKind.get(kind);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   267
            return diags != null ? diags : List.nil();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   268
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   269
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   270
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   271
         * Retrieve the list of diagnostics with given key.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   272
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   273
        public List<Diagnostic<? extends JavaFileObject>> diagnosticsForKey(String key) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   274
            List<Diagnostic<? extends JavaFileObject>> diags = diagsCollector.diagsByKeys.get(key);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   275
            return diags != null ? diags : List.nil();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   276
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   277
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   278
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   279
         * Dump useful info associated with this task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   280
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   281
        public String compilationInfo() {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   282
            return "instance#" + env.info().comboCount + ":[ options = " + options
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   283
                    + ", diagnostics = " + diagsCollector.diagsByKeys.keySet()
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   284
                    + ", dimensions = " + env.bindings
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   285
                    + ", sources = \n" + sources.stream().map(s -> {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   286
                try {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   287
                    return s.getCharContent(true);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   288
                } catch (IOException ex) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   289
                    return "";
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   290
                }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   291
            }).collect(Collectors.joining(",")) + "]";
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   292
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   293
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   294
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   295
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   296
     * This class represents a Java source file whose contents are defined in terms of a template
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   297
     * string. The holes in such template are expanded using corresponding combo parameter
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   298
     * instances which can be retrieved using a resolver object.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   299
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   300
    class ComboTemplateSource extends SimpleJavaFileObject {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   301
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   302
        String source;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   303
        Map<String, ComboParameter> localParametersCache = new HashMap<>();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   304
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   305
        protected ComboTemplateSource(String name, String template) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   306
            this(name, template, null);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   307
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   308
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   309
        protected ComboTemplateSource(String name, String template, Resolver resolver) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   310
            super(URI.create("myfo:/" + env.info().comboCount + "/" + name + ".java"), Kind.SOURCE);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   311
            source = ComboParameter.expandTemplate(template, pname -> resolveParameter(pname, resolver));
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   312
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   313
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   314
        @Override
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   315
        public CharSequence getCharContent(boolean ignoreEncodingErrors) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   316
            return source;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   317
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   318
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   319
        /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   320
         * Combo parameter resolver function. First parameters are looked up in the global environment,
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   321
         * then the local environment is looked up as a fallback.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   322
         */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   323
        ComboParameter resolveParameter(String pname, Resolver resolver) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   324
            //first search the env
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   325
            ComboParameter parameter = env.parametersCache.get(pname);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   326
            if (parameter == null) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   327
                //then lookup local cache
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   328
                parameter = localParametersCache.get(pname);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   329
                if (parameter == null && resolver != null) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   330
                    //if still null and we have a custom resolution function, try that
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   331
                    parameter = resolver.lookup(pname);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   332
                    if (parameter != null) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   333
                       //if a match was found, store it in the local cache to aviod redundant recomputation
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   334
                       localParametersCache.put(pname, parameter);
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   335
                    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   336
                }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   337
            }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   338
            return parameter;
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   339
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   340
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   341
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   342
    /**
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   343
     * Helper class to collect all diagnostic generated during the execution of a given compilation task.
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   344
     */
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   345
    class DiagnosticCollector implements DiagnosticListener<JavaFileObject> {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   346
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   347
        Map<Diagnostic.Kind, List<Diagnostic<? extends JavaFileObject>>> diagsByKind = new HashMap<>();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   348
        Map<String, List<Diagnostic<? extends JavaFileObject>>> diagsByKeys = new HashMap<>();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   349
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   350
        public void report(Diagnostic<? extends JavaFileObject> diagnostic) {
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   351
            List<Diagnostic<? extends JavaFileObject>> diags =
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   352
                    diagsByKeys.getOrDefault(diagnostic.getCode(), List.nil());
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   353
            diagsByKeys.put(diagnostic.getCode(), diags.prepend(diagnostic));
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   354
            Diagnostic.Kind kind = diagnostic.getKind();
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   355
            diags = diagsByKind.getOrDefault(kind, List.nil());
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   356
            diagsByKind.put(kind, diags.prepend(diagnostic));
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   357
        }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   358
    }
b0ac04e0fefe 8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff changeset
   359
}