// Copyright 2018 The Bazel Authors. All rights reserved.
//
// 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.devtools.build.lib.skylarkbuildapi;

import com.google.devtools.build.lib.skylarkinterface.Param;
import com.google.devtools.build.lib.skylarkinterface.SkylarkCallable;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModule;
import com.google.devtools.build.lib.skylarkinterface.SkylarkModuleCategory;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.SkylarkSemantics.FlagIdentifier;

/**
 * Interface for a build target.
 */
@SkylarkModule(
  name = "Target",
  category = SkylarkModuleCategory.BUILTIN,
  doc =
      "A BUILD target. It is essentially a <code>struct</code> with the following fields:"
          + "<ul>"
          + "<li><h3 id=\"modules.Target.label\">label</h3><code><a class=\"anchor\" "
          + "href=\"Label.html\">Label</a> Target.label</code><br>The identifier of the "
          + "target.</li>"
          + "<li><h3 id=\"modules.Target.files\">files</h3><code><a class=\"anchor\" "
          + "href=\"depset.html\">depset</a> Target.files </code><br>The set of "
          + "<a class=\"anchor\" href=\"File.html\">File</a>s produced directly by this "
          + "target.</li>"
          + "<li><h3 id=\"modules.Target.aspect_ids\">aspect_ids</h3><code><a class=\"anchor\""
          + "href=\"list.html\">list</a> Target.aspect_ids </code><br>The list of "
          + "<a class=\"anchor\" href=\"ctx.html#aspect_id\">aspect_id</a>s applied to this "
          + "target.</li>"
          + "<li><h3 id=\"modules.Target.extraproviders\">Extra providers</h3>For rule targets all "
          + "additional providers provided by this target are accessible as <code>struct</code> "
          + "fields. These extra providers are defined in the <code>struct</code> returned by the "
          + "rule implementation function.</li>"
          + "</ul>"
)
public interface TransitiveInfoCollectionApi {

  @SkylarkCallable(
    name = "output_group",
    documented = false, //  TODO(dslomov): document.
    parameters = {
      @Param(name = "group_name", type = String.class, doc = "Output group name", named = true)
    },
    disableWithFlag = FlagIdentifier.INCOMPATIBLE_NO_TARGET_OUTPUT_GROUP)
  SkylarkNestedSet outputGroup(String group);
}
