/*
 * Copyright 2009 Google Inc.
 *
 * 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.template.soy.parseinfo;

import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.protobuf.Descriptors.GenericDescriptor;

/**
 * Parsed info about a Soy file.
 *
 */
public class SoyFileInfo {

  /**
   * Enum for whether there are prefix expressions in the 'css' tags that a CSS name appears in.
   * Note that it's possible for the same CSS name to appear in multiple 'css' tags, some of which
   * contain prefixes and some of which don't.
   */
  public enum CssTagsPrefixPresence {
    ALWAYS,
    NEVER,
    SOMETIMES;
  }

  /** The source Soy file's name. */
  private final String fileName;

  /** The Soy file's namespace. */
  private final String namespace;

  /** List of public basic templates in this Soy file. */
  private final ImmutableList<SoyTemplateInfo> templates;

  /**
   * List of all deltemplate names in the Soy file.
   *
   * <p>These are the mangled names.
   */
  private final ImmutableList<String> deltemplateNames;

  /** Map from each CSS name appearing in this file to its CssTagsPrefixPresence state. */
  private final ImmutableMap<String, CssTagsPrefixPresence> cssNameMap;

  /**
   * Constructor for internal use only.
   *
   * <p>Important: Do not construct SoyFileInfo objects outside of Soy internal or Soy-generated
   * code. User code that constructs SoyFileInfo objects will be broken by future Soy changes.
   *
   * @param fileName The source Soy file's name.
   * @param namespace The Soy file's namespace.
   * @param templates List of templates in this Soy file.
   */
  public SoyFileInfo(
      String fileName,
      String namespace,
      ImmutableList<SoyTemplateInfo> templates,
      ImmutableMap<String, CssTagsPrefixPresence> cssNameMap,
      ImmutableList<String> deltemplateNames) {
    this.fileName = fileName;
    this.namespace = namespace;
    this.templates = templates;
    this.cssNameMap = cssNameMap;
    this.deltemplateNames = deltemplateNames;
  }

  /** Returns the source Soy file's name. */
  public final String getFileName() {
    return fileName;
  }

  /** Returns the Soy file's namespace. */
  public final String getNamespace() {
    return namespace;
  }

  /** Returns the list of templates in this Soy file. */
  public final ImmutableList<SoyTemplateInfo> getTemplates() {
    return templates;
  }

  /** Returns a map from each CSS name appearing in this file to its CssTagsPrefixPresence state. */
  public final ImmutableMap<String, CssTagsPrefixPresence> getCssNames() {
    return cssNameMap;
  }

  /**
   * Returns a list of any protocol buffer types used by the templates. The elements of the list are
   * the default object for a given proto type.
   */
  public ImmutableList<Object> getProtoTypes() {
    @SuppressWarnings({"rawtypes", "unchecked"})
    ImmutableList<Object> typed = (ImmutableList) getProtoDescriptors();
    return typed;
  }
  /**
   * Returns a list of any protocol buffer types used by the templates. The elements of the list are
   * the default object for a given proto type.
   */
  public ImmutableList<GenericDescriptor> getProtoDescriptors() {
    return ImmutableList.of();
  }

  /** Returns the fully qualified names of all deltemplates in the file. */
  public final ImmutableList<String> getDelTemplateNames() {
    return deltemplateNames;
  }
}

@@ -3245,438 +3245,83 @@
 tes.
- The elements of the list are%0A   * the default object for a given proto type.%0A   */%0A  public ImmutableList%3CObject%3E getProtoTypes() %7B%0A    @SuppressWarnings(%7B%22rawtypes%22, %22unchecked%22%7D)%0A    ImmutableList%3CObject%3E typed = (ImmutableList) getProtoDescriptors();%0A    return typed;%0A  %7D%0A  /**%0A   * Returns a list of any protocol buffer types used by the templates. The elements of the list are%0A   * the default object for a given proto type
+%0A   *%0A   * %3Cp%3EThe elements are either Descriptors or EnumDescriptor objects
 .%0A  

Delete SoyFileInfo.getProtoTypes(), the getProtoDescriptors() should be used instead.