// 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.rules.android;

import com.google.common.annotations.VisibleForTesting;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.packages.RuleClass.ConfiguredTargetFactory.RuleErrorException;
import com.google.devtools.build.lib.packages.RuleErrorConsumer;

/**
 * A {@link CompiledMergableAndroidData} that has been fully processed, validated, and packaged.
 *
 * <p>It contains resources and, depending on implementation, possibly assets and manifest.
 *
 * <p>TODO(b/76418178): Once resources and assets are completely decoupled and {@link
 * ResourceContainer} is removed, this interface can be replaced with {@link
 * ValidatedAndroidResources}
 */
public interface ValidatedAndroidData extends CompiledMergableAndroidData {

  Artifact getRTxt();

  Artifact getAapt2RTxt();

  Artifact getStaticLibrary();

  ValidatedAndroidData filter(
      RuleErrorConsumer errorConsumer, ResourceFilter resourceFilter, boolean isDependency)
      throws RuleErrorException;

  Artifact getJavaClassJar();

  String getJavaPackage();

  Artifact getJavaSourceJar();

  @VisibleForTesting
  Artifact getApk();

  /**
   * Gets an Artifact containing a zip of merged resources.
   *
   * <p>If assets were processed together with resources, the zip will also contain merged assets.
   *
   * @deprecated This artifact is produced by an often-expensive action and should not be used if
   *     another option is available. Furthermore, it will be replaced by flat files once we
   *     completely move to aapt2.
   */
  @Deprecated
  Artifact getMergedResources();

  ProcessedAndroidManifest getProcessedManifest();
}
