All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.autonomousapps.internal.analyzer.DependencyAnalyzer.kt Maven / Gradle / Ivy

There is a newer version: 2.0.2
Show newest version
@file:Suppress("UnstableApiUsage")

package com.autonomousapps.internal.analyzer

import com.autonomousapps.services.InMemoryCache
import com.autonomousapps.tasks.*
import org.gradle.api.Project
import org.gradle.api.UnknownTaskException
import org.gradle.api.attributes.Attribute
import org.gradle.api.file.FileTree
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskProvider
import org.gradle.api.tasks.compile.JavaCompile
import org.gradle.kotlin.dsl.named
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

/**
 * Abstraction for differentiating between android-app, android-lib, and java-lib projects.
 */
internal interface DependencyAnalyzer {
  /**
   * E.g., `flavorDebug`
   */
  val variantName: String

  /**
   * E.g., 'flavor'
   */
  val flavorName: String?

  /**
   * E.g., `FlavorDebug`
   */
  val variantNameCapitalized: String

  val compileConfigurationName: String
  val runtimeConfigurationName: String

  val attribute: Attribute
  val attributeValue: String
  val attributeValueRes: String?

  val kotlinSourceFiles: FileTree
  val javaSourceFiles: FileTree?
  val javaAndKotlinSourceFiles: FileTree?

  val isDataBindingEnabled: Boolean
  val isViewBindingEnabled: Boolean

  val testJavaCompileName: String
  val testKotlinCompileName: String

  fun registerCreateVariantFilesTask(): TaskProvider

  /**
   * This produces a report that lists all of the used classes (FQCN) in the project.
   */
  fun registerClassAnalysisTask(createVariantFiles: TaskProvider): TaskProvider

  fun registerManifestPackageExtractionTask(): TaskProvider? = null

  fun registerAndroidResToSourceAnalysisTask(
    manifestPackageExtractionTask: TaskProvider
  ): TaskProvider? = null

  fun registerAndroidResToResAnalysisTask(): TaskProvider? = null

  fun registerFindNativeLibsTask(
    locateDependenciesTask: TaskProvider
  ): TaskProvider? = null

  fun registerFindDeclaredProcsTask(
    inMemoryCacheProvider: Provider,
    locateDependenciesTask: TaskProvider
  ): TaskProvider

  fun registerFindUnusedProcsTask(
    findDeclaredProcs: TaskProvider,
    importFinder: TaskProvider
  ): TaskProvider

  /**
   * This is a no-op for `com.android.application` and JVM `application` projects (including
   * Spring Boot), since they have no meaningful ABI.
   */
  fun registerAbiAnalysisTask(
    findClassesTask: TaskProvider,
    abiExclusions: Provider
  ): TaskProvider? = null
}

internal abstract class AbstractDependencyAnalyzer(
  protected val project: Project
) : DependencyAnalyzer {

  protected val testJavaCompile by lazy {
    try {
      project.tasks.named(testJavaCompileName)
    } catch (e: UnknownTaskException) {
      null
    }
  }

  protected val testKotlinCompile by lazy {
    try {
      project.tasks.named(testKotlinCompileName)
    } catch (e: UnknownTaskException) {
      null
    } catch (e: NoClassDefFoundError) {
      null
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy