// 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.skylarkinterface.SkylarkValue;
import com.google.devtools.build.lib.syntax.SkylarkNestedSet;
import com.google.devtools.build.lib.syntax.StarlarkSemantics.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 extends SkylarkValue {

  @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);
}
