/*
 * Copyright 2009 The Closure Compiler Authors.
 *
 * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
 *
 * 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.javascript.jscomp;

import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
import java.util.Set;

/**
 * Compilation results
 */
public class Result {
  public final boolean success;
  public final ImmutableList<JSError> errors;
  public final ImmutableList<JSError> warnings;

  public final VariableMap variableMap;
  public final VariableMap propertyMap;
  public final VariableMap namedAnonFunctionMap;
  public final VariableMap stringMap;
  public final VariableMap instrumentationMappings;
  public final SourceMap sourceMap;
  public final Map<String, Integer> cssNames;
  public final String externExport;
  public final String idGeneratorMap;
  public final Set<SourceFile> transpiledFiles;

  Result(
      ImmutableList<JSError> errors,
      ImmutableList<JSError> warnings,
      VariableMap variableMap,
      VariableMap propertyMap,
      VariableMap namedAnonFunctionMap,
      VariableMap stringMap,
      VariableMap instrumentationMappings,
      SourceMap sourceMap,
      String externExport,
      Map<String, Integer> cssNames,
      String idGeneratorMap,
      Set<SourceFile> transpiledFiles) {
    this.success = errors.isEmpty();
    this.errors  = errors;
    this.warnings = warnings;
    this.variableMap = variableMap;
    this.propertyMap = propertyMap;
    this.namedAnonFunctionMap = namedAnonFunctionMap;
    this.stringMap = stringMap;
    this.instrumentationMappings = instrumentationMappings;
    this.sourceMap = sourceMap;
    this.externExport = externExport;
    this.cssNames = cssNames;
    this.idGeneratorMap = idGeneratorMap;
    this.transpiledFiles = transpiledFiles;
  }

  @VisibleForTesting
  @Deprecated
  public Result(
      ImmutableList<JSError> errors,
      ImmutableList<JSError> warnings,
      VariableMap variableMap,
      VariableMap propertyMap,
      VariableMap namedAnonFunctionMap,
      SourceMap sourceMap,
      String externExport) {
    this(
        errors,
        warnings,
        variableMap,
        propertyMap,
        namedAnonFunctionMap,
        /* stringMap= */ null,
        /* instrumentationMappings= */ null,
        sourceMap,
        externExport,
        /* cssNames= */ null,
        /* idGeneratorMap= */ null,
        /* transpiledFiles= */ null);
  }

  /**
   * Returns an almost empty result that is used for multistage compilation.
   *
   * <p>For multistage compilations, Result for stage1 only cares about errors and warnings. It is
   * unnecessary to write all of other results in the disk.
   */
  public static Result createResultForStage1(Result result) {
    VariableMap emptyVariableMap = new VariableMap(ImmutableMap.of());
    return new Result(
        /* errors= */ result.errors,
        /* warnings= */ result.warnings,
        /* variableMap= */ emptyVariableMap,
        /* propertyMap= */ emptyVariableMap,
        /* namedAnonFunctionMap= */ emptyVariableMap,
        /* stringMap= */ null,
        /* instrumentationMappings= */ emptyVariableMap,
        /* sourceMap= */ null,
        /* externExport= */ "",
        /* cssNames= */ null,
        /* idGeneratorMap= */ null,
        /* transpiledFiles= */ null);
  }
}

@@ -845,19 +845,16 @@
 et;%0A%0A/**
-%0A *
  Compila
@@ -865,17 +865,16 @@
  results
-%0A
  */%0Apubl
@@ -1916,17 +1916,16 @@
 .errors 
- 
 = errors
@@ -3047,27 +3047,38 @@
  is 
-used for multistage
+more appropriate for a partial
  com
@@ -3108,18 +3108,17 @@
 For 
-multistage
+a partial
  com
@@ -3129,28 +3129,11 @@
 tion
-s, Result for stage1
+ we
  onl
@@ -3138,17 +3138,16 @@
 nly care
-s
  about e
@@ -3171,21 +3171,16 @@
 s. It is
-%0A   *
  unneces
@@ -3186,21 +3186,28 @@
 ssary to
- writ
+%0A   * examin
 e all of
@@ -3207,16 +3207,20 @@
  all of 
+the 
 other re
@@ -3228,21 +3228,83 @@
 ults
- in the disk.
+.%0A   *%0A   * @param result the full %60Result%60 object provided by the compiler
 %0A   
@@ -3333,13 +3333,12 @@
 ult 
-creat
+prun
 eRes
@@ -3347,14 +3347,26 @@
 tFor
-Stage1
+PartialCompilation
 (Res

Rename `Result::createResultForStage1()`