aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/skylarkbuildapi/android/AndroidSkylarkApiProviderApi.java
blob: d86d5a0fab87a7407e3784928872e769ac80b86f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
// 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.android;

import com.google.common.collect.ImmutableCollection;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.collect.nestedset.NestedSet;
import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
import com.google.devtools.build.lib.skylarkbuildapi.java.OutputJarApi;
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 javax.annotation.Nullable;

/**
 * A class that exposes the Android providers to Skylark. It is intended to provide a simple and
 * stable interface for Skylark users.
 */
@SkylarkModule(
    name = "AndroidSkylarkApiProvider",
    title = "android",
    category = SkylarkModuleCategory.PROVIDER,
    doc =
        "Provides access to information about Android rules. Every Android-related target provides "
            + "this struct, accessible as a <code>android</code> field on a "
            + "<a href=\"Target.html\">target</a>.")
public interface AndroidSkylarkApiProviderApi<FileT extends FileApi> {

  @SkylarkCallable(
      name = "apk",
      structField = true,
      allowReturnNones = true,
      doc = "Returns an APK produced by this target.")
  FileT getApk();

  @SkylarkCallable(
      name = "java_package",
      structField = true,
      allowReturnNones = true,
      doc = "Returns a java package for this target.")
  String getJavaPackage();

  @SkylarkCallable(
      name = "manifest",
      structField = true,
      allowReturnNones = true,
      doc = "Returns a manifest file for this target.")
  FileT getManifest();

  @SkylarkCallable(
      name = "merged_manifest",
      structField = true,
      allowReturnNones = true,
      doc = "Returns a manifest file for this target after all processing, e.g.: merging, etc.")
  FileT getMergedManifest();

  @SkylarkCallable(
      name = "native_libs",
      structField = true,
      doc =
          "Returns the native libraries as a dictionary of the libraries' architecture as a string "
              + "to a set of the native library files, or the empty dictionary if there are no "
              + "native libraries.")
  ImmutableMap<String, NestedSet<FileT>> getNativeLibs();

  @SkylarkCallable(
      name = "resource_apk",
      structField = true,
      doc = "Returns the resources container for the target.")
  FileT getResourceApk();

  @SkylarkCallable(
      name = "apks_under_test",
      structField = true,
      allowReturnNones = true,
      doc = "Returns a collection of APKs that this target tests.")
  ImmutableCollection<FileT> getApksUnderTest();

  @SkylarkCallable(
      name = "defines_resources",
      structField = true,
      doc = "Returns <code>True</code> if the target defines any Android resources directly.")
  boolean definesAndroidResources();

  @SkylarkCallable(
      name = "idl",
      structField = true,
      doc = "Returns information about IDL files associated with this target.")
  IdlInfoApi<FileT> getIdlInfo();

  @SkylarkCallable(
      name = "resources",
      structField = true,
      doc = "Returns resources defined by this target.")
  NestedSet<FileT> getResources();

  @SkylarkCallable(
      name = "resource_jar",
      structField = true,
      allowReturnNones = true,
      doc = "Returns a jar file for classes generated from resources.")
  @Nullable
  OutputJarApi<FileT> getResourceJar();

  @SkylarkCallable(
      name = "aar",
      structField = true,
      allowReturnNones = true,
      doc = "Returns the aar output of this target.")
  FileT getAar();

  /** Helper class to provide information about IDLs related to this rule. */
  @SkylarkModule(
      name = "AndroidSkylarkIdlInfo",
      category = SkylarkModuleCategory.NONE,
      doc = "Provides access to information about Android rules.")
  interface IdlInfoApi<FileT extends FileApi> {
    @SkylarkCallable(
        name = "import_root",
        structField = true,
        allowReturnNones = true,
        doc = "Returns the root of IDL packages if not the java root.")
    String getImportRoot();

    @SkylarkCallable(name = "sources", structField = true, doc = "Returns a list of IDL files.")
    ImmutableCollection<FileT> getSources();

    @SkylarkCallable(
        name = "generated_java_files",
        structField = true,
        doc = "Returns a list Java files generated from IDL sources.")
    ImmutableCollection<FileT> getIdlGeneratedJavaFiles();

    @SkylarkCallable(
        name = "output",
        structField = true,
        allowReturnNones = true,
        doc = "Returns a jar file for classes generated from IDL sources.")
    @Nullable
    OutputJarApi<FileT> getIdlOutput();
  }
}