Skip to content

Commit 067b0ea

Browse files
zhaoqxucopybara-github
authored andcommitted
Expose the ApkInfo provider constructor to Starlark.
PiperOrigin-RevId: 579971552 Change-Id: I8de99d8875ee3cdd6bbd56d4b931377657fa33e2
1 parent a18a6d5 commit 067b0ea

3 files changed

Lines changed: 91 additions & 12 deletions

File tree

src/main/java/com/google/devtools/build/lib/rules/android/ApkInfo.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
// limitations under the License.
1414
package com.google.devtools.build.lib.rules.android;
1515

16+
import static com.google.devtools.build.lib.rules.android.AndroidStarlarkData.fromNoneable;
17+
1618
import com.google.common.collect.ImmutableList;
1719
import com.google.devtools.build.lib.actions.Artifact;
1820
import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable;
@@ -21,9 +23,8 @@
2123
import com.google.devtools.build.lib.starlarkbuildapi.android.ApkInfoApi;
2224
import java.util.List;
2325
import javax.annotation.Nullable;
24-
import net.starlark.java.eval.Dict;
2526
import net.starlark.java.eval.EvalException;
26-
import net.starlark.java.eval.Starlark;
27+
import net.starlark.java.eval.Sequence;
2728

2829
/** A provider for targets that produce an apk file. */
2930
@Immutable
@@ -123,15 +124,32 @@ public String getSigningMinV3RotationApiVersion() {
123124

124125
/** Provider for {@link ApkInfo}. */
125126
public static class ApkInfoProvider extends BuiltinProvider<ApkInfo>
126-
implements ApkInfoApiProvider {
127+
implements ApkInfoApiProvider<Artifact> {
127128

128129
private ApkInfoProvider() {
129130
super(STARLARK_NAME, ApkInfo.class);
130131
}
131132

132133
@Override
133-
public ApkInfoApi<?> createInfo(Dict<String, Object> kwargs) throws EvalException {
134-
throw Starlark.errorf("'%s' cannot be constructed from Starlark", getPrintableName());
134+
public ApkInfoApi<Artifact> createInfo(
135+
Artifact apk,
136+
Artifact unsignedApk,
137+
Artifact deployJar,
138+
Object coverageMetadata,
139+
Artifact mergedManifest,
140+
Sequence<?> signingKeys,
141+
Object signingLineage,
142+
Object signingMinV3RotationApiVersion)
143+
throws EvalException {
144+
return new ApkInfo(
145+
apk,
146+
unsignedApk,
147+
deployJar,
148+
fromNoneable(coverageMetadata, Artifact.class),
149+
mergedManifest,
150+
Sequence.cast(signingKeys, Artifact.class, "signing_keys"),
151+
fromNoneable(signingLineage, Artifact.class),
152+
fromNoneable(signingMinV3RotationApiVersion, String.class));
135153
}
136154
}
137155
}

src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ public class AndroidBootstrap implements Bootstrap {
4242

4343
public AndroidBootstrap(
4444
AndroidStarlarkCommonApi<?, ?, ?, ?, ?> androidCommon,
45-
ApkInfoApiProvider apkInfoProvider,
45+
ApkInfoApiProvider<?> apkInfoProvider,
4646
AndroidInstrumentationInfoApiProvider<?> androidInstrumentationInfoProvider,
4747
AndroidDeviceBrokerInfoApiProvider androidDeviceBrokerInfoProvider,
4848
AndroidResourcesInfoApiProvider<?, ?, ?> androidResourcesInfoProvider,

src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/ApkInfoApi.java

Lines changed: 67 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,18 @@
1515

1616
import com.google.common.collect.ImmutableList;
1717
import com.google.devtools.build.docgen.annot.DocCategory;
18+
import com.google.devtools.build.docgen.annot.StarlarkConstructor;
1819
import com.google.devtools.build.lib.starlarkbuildapi.FileApi;
1920
import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi;
2021
import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi;
2122
import javax.annotation.Nullable;
2223
import net.starlark.java.annot.Param;
24+
import net.starlark.java.annot.ParamType;
2325
import net.starlark.java.annot.StarlarkBuiltin;
2426
import net.starlark.java.annot.StarlarkMethod;
25-
import net.starlark.java.eval.Dict;
2627
import net.starlark.java.eval.EvalException;
28+
import net.starlark.java.eval.NoneType;
29+
import net.starlark.java.eval.Sequence;
2730

2831
/** A provider for targets that produce an apk file. */
2932
@StarlarkBuiltin(
@@ -120,15 +123,73 @@ public interface ApkInfoApi<FileT extends FileApi> extends StructApi {
120123
"Do not use this module. It is intended for migration purposes only. If you depend on "
121124
+ "it, you will be broken when it is removed.",
122125
documented = false)
123-
interface ApkInfoApiProvider extends ProviderApi {
126+
interface ApkInfoApiProvider<FileT extends FileApi> extends ProviderApi {
124127

125128
@StarlarkMethod(
126129
name = "ApkInfo",
127-
// This is left undocumented as it throws a "not-implemented in Starlark" error when
128-
// invoked.
130+
doc = "The <code>ApkInfo<code> constructor.",
129131
documented = false,
130-
extraKeywords = @Param(name = "kwargs"),
132+
parameters = {
133+
@Param(
134+
name = "signed_apk",
135+
doc = "The signed APK file.",
136+
allowedTypes = {
137+
@ParamType(type = FileApi.class),
138+
},
139+
named = true),
140+
@Param(
141+
name = "unsigned_apk",
142+
doc = "The unsigned APK file.",
143+
allowedTypes = {
144+
@ParamType(type = FileApi.class),
145+
},
146+
named = true),
147+
@Param(
148+
name = "deploy_jar",
149+
doc = "The deploy jar file.",
150+
allowedTypes = {
151+
@ParamType(type = FileApi.class),
152+
},
153+
named = true),
154+
@Param(
155+
name = "coverage_metadata",
156+
doc = "The coverage metadata file generated in the transitive closure.",
157+
allowedTypes = {@ParamType(type = FileApi.class), @ParamType(type = NoneType.class)},
158+
named = true),
159+
@Param(
160+
name = "merged_manifest",
161+
doc = "The merged manifest file.",
162+
allowedTypes = {
163+
@ParamType(type = FileApi.class),
164+
},
165+
named = true),
166+
@Param(
167+
name = "signing_keys",
168+
doc = "The list of signing keys used to sign the APK.",
169+
allowedTypes = {@ParamType(type = Sequence.class, generic1 = FileApi.class)},
170+
named = true),
171+
@Param(
172+
name = "signing_lineage",
173+
doc = "The signing lineage file. If present, that was used to sign the APK",
174+
allowedTypes = {@ParamType(type = FileApi.class), @ParamType(type = NoneType.class)},
175+
named = true),
176+
@Param(
177+
name = "signing_min_v3_rotation_api_version",
178+
doc = "The minimum API version for signing the APK with key rotation.",
179+
allowedTypes = {@ParamType(type = String.class), @ParamType(type = NoneType.class)},
180+
named = true),
181+
},
131182
selfCall = true)
132-
ApkInfoApi<?> createInfo(Dict<String, Object> kwargs) throws EvalException;
183+
@StarlarkConstructor
184+
ApkInfoApi<FileT> createInfo(
185+
FileT signedApk,
186+
FileT unsignedApk,
187+
FileT deployJar,
188+
Object coverageMetadata,
189+
FileT mergedManifest,
190+
Sequence<?> signingKeys, // <Artifact> expected
191+
Object signingLineage,
192+
Object signingMinV3RotationApiVersion)
193+
throws EvalException;
133194
}
134195
}

0 commit comments

Comments
 (0)