diff --git a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java index ded8f2c3e719cc..b1097568ad632e 100644 --- a/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java +++ b/src/main/java/com/google/devtools/build/lib/bazel/rules/BazelRuleClassProvider.java @@ -83,6 +83,7 @@ import com.google.devtools.build.lib.rules.android.AndroidNativeLibsInfo; import com.google.devtools.build.lib.rules.android.AndroidNeverLinkLibrariesProvider; import com.google.devtools.build.lib.rules.android.AndroidNeverlinkAspect; +import com.google.devtools.build.lib.rules.android.AndroidOptimizedJarInfo; import com.google.devtools.build.lib.rules.android.AndroidPreDexJarProvider; import com.google.devtools.build.lib.rules.android.AndroidProguardInfo; import com.google.devtools.build.lib.rules.android.AndroidResourcesInfo; @@ -425,7 +426,8 @@ public void init(ConfiguredRuleClassProvider.Builder builder) { AndroidBinaryDataInfo.PROVIDER, AndroidBinaryNativeLibsInfo.PROVIDER, BaselineProfileProvider.PROVIDER, - AndroidNeverLinkLibrariesProvider.PROVIDER); + AndroidNeverLinkLibrariesProvider.PROVIDER, + AndroidOptimizedJarInfo.PROVIDER); builder.addStarlarkBootstrap(bootstrap); try { diff --git a/src/main/java/com/google/devtools/build/lib/rules/android/AndroidOptimizedJarInfo.java b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidOptimizedJarInfo.java new file mode 100644 index 00000000000000..6f70984dd8b2ba --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/rules/android/AndroidOptimizedJarInfo.java @@ -0,0 +1,63 @@ +// Copyright 2023 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.rules.android; + +import com.google.devtools.build.lib.actions.Artifact; +import com.google.devtools.build.lib.concurrent.ThreadSafety.Immutable; +import com.google.devtools.build.lib.packages.BuiltinProvider; +import com.google.devtools.build.lib.packages.NativeInfo; +import com.google.devtools.build.lib.starlarkbuildapi.android.AndroidOptimizedJarInfoApi; +import net.starlark.java.eval.EvalException; + +/** A provider for Android Optimized artifacts */ +@Immutable +public class AndroidOptimizedJarInfo extends NativeInfo + implements AndroidOptimizedJarInfoApi { + + public static final String PROVIDER_NAME = "AndroidOptimizedJarInfo"; + public static final Provider PROVIDER = new Provider(); + + private final Artifact optimizedJar; + + public AndroidOptimizedJarInfo(Artifact optimizedJar) { + this.optimizedJar = optimizedJar; + } + + @Override + public Provider getProvider() { + return PROVIDER; + } + + @Override + public Artifact getOptimizedJar() { + return optimizedJar; + } + + /** Provider for {@link AndroidOptimizedJarInfo}. */ + public static class Provider extends BuiltinProvider + implements AndroidOptimizedJarInfoApi.Provider { + private Provider() { + super(PROVIDER_NAME, AndroidOptimizedJarInfo.class); + } + + public String getName() { + return PROVIDER_NAME; + } + + @Override + public AndroidOptimizedJarInfo createInfo(Artifact optimizedJar) throws EvalException { + return new AndroidOptimizedJarInfo(optimizedJar); + } + } +} diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java index 5eceb7ac05b2bf..a1a66c5afda73a 100644 --- a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidBootstrap.java @@ -65,7 +65,8 @@ public AndroidBootstrap( AndroidBinaryDataInfoApi.Provider androidBinaryDataInfoProvider, AndroidBinaryNativeLibsInfoApi.Provider androidBinaryInternalNativeLibsInfoApiProvider, BaselineProfileProviderApi.Provider baselineProfileProvider, - AndroidNeverLinkLibrariesProviderApi.Provider androidNeverLinkLibrariesProvider) { + AndroidNeverLinkLibrariesProviderApi.Provider androidNeverLinkLibrariesProvider, + AndroidOptimizedJarInfoApi.Provider androidOptimizedJarInfo) { this.androidCommon = androidCommon; ImmutableMap.Builder builder = ImmutableMap.builder(); @@ -95,6 +96,7 @@ public AndroidBootstrap( builder.put(AndroidBinaryDataInfoApi.NAME, androidBinaryDataInfoProvider); builder.put(BaselineProfileProviderApi.NAME, baselineProfileProvider); builder.put(AndroidNeverLinkLibrariesProviderApi.NAME, androidNeverLinkLibrariesProvider); + builder.put(AndroidOptimizedJarInfoApi.NAME, androidOptimizedJarInfo); providers = builder.build(); } diff --git a/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidOptimizedJarInfoApi.java b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidOptimizedJarInfoApi.java new file mode 100644 index 00000000000000..1d9aa276aef766 --- /dev/null +++ b/src/main/java/com/google/devtools/build/lib/starlarkbuildapi/android/AndroidOptimizedJarInfoApi.java @@ -0,0 +1,71 @@ +// Copyright 2023 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.starlarkbuildapi.android; + +import com.google.devtools.build.docgen.annot.StarlarkConstructor; +import com.google.devtools.build.lib.starlarkbuildapi.FileApi; +import com.google.devtools.build.lib.starlarkbuildapi.core.ProviderApi; +import com.google.devtools.build.lib.starlarkbuildapi.core.StructApi; +import net.starlark.java.annot.Param; +import net.starlark.java.annot.ParamType; +import net.starlark.java.annot.StarlarkBuiltin; +import net.starlark.java.annot.StarlarkMethod; +import net.starlark.java.eval.EvalException; + +/** Supplies a optimized jar from Android Rules. */ +@StarlarkBuiltin( + name = "AndroidOptimizedJarInfo", + doc = + "Do not use this module. It is intended for migration purposes only. If you depend on it, " + + "you will be broken when it is removed.", + documented = false) +public interface AndroidOptimizedJarInfoApi extends StructApi { + + /** Name of this info object. */ + String NAME = "AndroidOptimizedJarInfo"; + + @StarlarkMethod( + name = "optimized_jar", + doc = "The optimized jar.", + documented = false, + structField = true) + FileT getOptimizedJar(); + + /** Provider for {@link AndroidOptimizedJarInfoApi}. */ + @StarlarkBuiltin( + name = "Provider", + doc = + "Do not use this module. It is intended for migration purposes only. If you depend on " + + "it, you will be broken when it is removed.", + documented = false) + interface Provider extends ProviderApi { + + @StarlarkMethod( + name = NAME, + doc = "The AndroidOptimizedJarInfo constructor.", + documented = false, + parameters = { + @Param( + name = "optimized_jar", + allowedTypes = { + @ParamType(type = FileApi.class), + }, + named = true, + doc = "The optimized jar."), + }, + selfCall = true) + @StarlarkConstructor + AndroidOptimizedJarInfoApi createInfo(FileT optimizedJar) throws EvalException; + } +}