Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
Binary file added android-gradle-aspectj/.DS_Store
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ internal class AndroidConfig(val project: Project, val scope: ConfigScope) {

val extAndroid: BaseExtension
val isLibraryPlugin: Boolean
val plugin: BasePlugin<*, *>
val plugin: BasePlugin<*, *, *>

init {
when {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ class BuildTimeListener: TaskExecutionListener, BuildListener {
private var startTime: Long = 0L
private var times = mutableListOf<Pair<Long, String>>()

override fun buildStarted(gradle: Gradle) {}
override fun settingsEvaluated(settings: Settings) {}
override fun projectsLoaded(gradle: Gradle) {}
override fun projectsEvaluated(gradle: Gradle) {}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@ package com.archinamon.api.jars
import com.android.build.api.transform.Format
import com.android.build.api.transform.TransformException
import com.android.build.api.transform.TransformInvocation
import com.android.utils.FileUtils
import com.archinamon.api.transform.AspectJTransform
import java.io.File
import java.nio.file.Files

/**
* Merging all jars and aars in project with dependenciesO
Expand All @@ -18,10 +18,10 @@ internal class AspectJMergeJars {
private val target = com.archinamon.api.transform.TRANSFORM_NAME

internal fun doMerge(transform: AspectJTransform, context: TransformInvocation, resultDir: File) {
if (resultDir.listFiles().isNotEmpty()) {
if (resultDir.listFiles()?.isNotEmpty() == true) {
val jarFile = context.outputProvider.getContentLocation(target, transform.outputTypes, transform.scopes, Format.JAR)
FileUtils.mkdirs(jarFile.parentFile)
FileUtils.deleteIfExists(jarFile)
Files.createDirectory(jarFile.parentFile.toPath())
jarFile.delete()

val jarMerger = JarMerger(jarFile.toPath(), JarMerger.CLASSES_ONLY)
try {
Expand All @@ -33,6 +33,6 @@ internal class AspectJMergeJars {
}
}

FileUtils.deletePath(resultDir)
resultDir.delete()
}
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.archinamon.api.jars

import com.android.SdkConstants
import com.android.utils.PathUtils
import com.google.common.collect.ImmutableSortedMap
import org.gradle.internal.impldep.com.google.common.collect.ImmutableSortedMap
import java.io.*
import java.nio.file.FileVisitResult
import java.nio.file.Files
Expand Down Expand Up @@ -42,7 +40,7 @@ class JarMerger @Throws(IOException::class) @JvmOverloads constructor(
directory,
object : SimpleFileVisitor<Path>() {
override fun visitFile(file: Path, attrs: BasicFileAttributes): FileVisitResult {
var entryPath = PathUtils.toSystemIndependentPath(directory.relativize(file))
var entryPath = toSystemIndependentPath(directory.relativize(file))
if (filterOverride != null && !filterOverride.test(entryPath)) {
return FileVisitResult.CONTINUE
}
Expand Down Expand Up @@ -134,8 +132,9 @@ class JarMerger @Throws(IOException::class) @JvmOverloads constructor(
val manifest = Manifest()
val global = manifest.mainAttributes
global[Attributes.Name.MANIFEST_VERSION] = "1.0.0"
properties.forEach(
{ attributeName, attributeValue -> global[Attributes.Name(attributeName)] = attributeValue })
properties.forEach { (attributeName, attributeValue) ->
global[Attributes.Name(attributeName)] = attributeValue
}
val manifestEntry = JarEntry(JarFile.MANIFEST_NAME)
setEntryAttributes(manifestEntry)
jarOutputStream.putNextEntry(manifestEntry)
Expand Down Expand Up @@ -167,6 +166,14 @@ class JarMerger @Throws(IOException::class) @JvmOverloads constructor(
entry.creationTime = fileTime
}

private fun toSystemIndependentPath(path: Path): String {
return if (File.separatorChar != '/') {
path.toString().replace(File.separatorChar, '/')
} else {
path.toString()
}
}

interface Transformer {
/**
* Transforms the given file.
Expand All @@ -185,8 +192,8 @@ class JarMerger @Throws(IOException::class) @JvmOverloads constructor(

companion object {

val CLASSES_ONLY = { archivePath: String -> archivePath.endsWith(SdkConstants.DOT_CLASS) }
val EXCLUDE_CLASSES = { archivePath: String -> !archivePath.endsWith(SdkConstants.DOT_CLASS) }
val CLASSES_ONLY = { archivePath: String -> archivePath.endsWith(".class") }
val EXCLUDE_CLASSES = { archivePath: String -> !archivePath.endsWith(".class") }

val fileTime: FileTime = FileTime.fromMillis(0)
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,17 @@
package com.archinamon.api.transform

import com.android.build.api.transform.*
import com.android.build.api.variant.impl.VariantPropertiesImpl
import com.android.build.api.variant.impl.VariantImpl
import com.android.build.gradle.internal.pipeline.TransformInvocationBuilder
import com.android.build.gradle.internal.pipeline.TransformManager
import com.android.build.gradle.internal.variant.BaseVariantData
import com.android.utils.FileUtils
import com.archinamon.AndroidConfig
import com.archinamon.api.jars.AspectJMergeJars
import com.archinamon.api.AspectJWeaver
import com.archinamon.plugin.ConfigScope
import com.archinamon.utils.*
import com.archinamon.utils.DependencyFilter.isExcludeFilterMatched
import com.archinamon.utils.DependencyFilter.isIncludeFilterMatched
import com.google.common.collect.Sets
import org.aspectj.util.FileUtil
import org.gradle.api.Project
import java.io.File
Expand Down Expand Up @@ -52,7 +50,7 @@ internal abstract class AspectJTransform(val project: Project, private val polic
return this
}

private fun <T: BaseVariantData> setupVariant(variantData: Pair<T, VariantPropertiesImpl>) {
private fun <T: BaseVariantData> setupVariant(variantData: Pair<T, VariantImpl>) {
val javaTask = getJavaTask(variantData.first)
getAjSourceAndExcludeFromJavac(project, variantData)
aspectJWeaver.encoding = javaTask.options.encoding
Expand All @@ -67,15 +65,15 @@ internal abstract class AspectJTransform(val project: Project, private val polic
}

override fun getInputTypes(): Set<QualifiedContent.ContentType> {
return Sets.immutableEnumSet(QualifiedContent.DefaultContentType.CLASSES)
return setOf(QualifiedContent.DefaultContentType.CLASSES)
}

override fun getOutputTypes(): Set<QualifiedContent.ContentType> {
return TransformManager.CONTENT_CLASS
}

override fun getScopes(): MutableSet<in QualifiedContent.Scope> {
return if (modeComplex()) TransformManager.SCOPE_FULL_PROJECT else Sets.immutableEnumSet(QualifiedContent.Scope.PROJECT)
return if (modeComplex()) TransformManager.SCOPE_FULL_PROJECT else mutableSetOf(QualifiedContent.Scope.PROJECT)
}

override fun getReferencedScopes(): MutableSet<in QualifiedContent.Scope> {
Expand Down Expand Up @@ -112,8 +110,8 @@ internal abstract class AspectJTransform(val project: Project, private val polic
}

val outputDir = outputProvider.getContentLocation(TRANSFORM_NAME, outputTypes, scopes, Format.DIRECTORY)
if (outputDir.isDirectory) FileUtils.deleteDirectoryContents(outputDir)
FileUtils.mkdirs(outputDir)
if (outputDir.isDirectory) outputDir.delete()
Files.createDirectory(outputDir.toPath())

aspectJWeaver.destinationDir = outputDir.absolutePath
aspectJWeaver.bootClasspath = config.getBootClasspath().joinToString(separator = File.pathSeparator)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,12 @@ package com.archinamon.api.transform

import com.android.build.api.transform.QualifiedContent
import com.android.build.gradle.internal.pipeline.TransformManager
import com.google.common.collect.Sets
import org.gradle.api.Project

internal class LibraryTransformer(project: Project): AspectJTransform(project, BuildPolicy.LIBRARY) {

override fun getScopes(): MutableSet<QualifiedContent.Scope> {
return Sets.immutableEnumSet(QualifiedContent.Scope.PROJECT)
return mutableSetOf(QualifiedContent.Scope.PROJECT)
}

override fun getReferencedScopes(): MutableSet<in QualifiedContent.Scope> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package com.archinamon.plugin
import com.android.build.gradle.AppPlugin
import com.android.build.gradle.LibraryPlugin
import com.android.build.gradle.internal.core.VariantDslInfoImpl
import com.android.builder.core.VariantType
import com.android.builder.core.VariantTypeImpl
import com.archinamon.AndroidConfig
import com.archinamon.AspectJExtension
import com.archinamon.MISDEFINITION
Expand All @@ -12,7 +14,6 @@ import com.archinamon.api.BuildTimeListener
import com.archinamon.utils.LANG_AJ
import com.archinamon.utils.getJavaTask
import com.archinamon.utils.getVariantDataList
import com.google.wireless.android.sdk.stats.GradleBuildVariant
import org.gradle.api.GradleException
import org.gradle.api.Plugin
import org.gradle.api.Project
Expand Down Expand Up @@ -53,7 +54,7 @@ private fun prepareVariant(config: AndroidConfig) {
getVariantDataList(config.plugin).forEach { variant ->
val props = variant.second
props.productFlavors.forEach { applier(it.second) }
applier(props.buildType ?: props.flavorName)
applier(props.buildType ?: props.flavorName ?: props.name)
}
}

Expand Down Expand Up @@ -87,8 +88,9 @@ private fun configureCompiler(project: Project, config: AndroidConfig) {
else -> null
}

if (variantAnalyticsType is GradleBuildVariant.VariantType
&& variantAnalyticsType == GradleBuildVariant.VariantType.UNIT_TEST) {
if (variantAnalyticsType is VariantType
&& variantAnalyticsType == VariantTypeImpl.UNIT_TEST
) {
if (config.aspectj().compileTests) {
ajc.overwriteJavac(true)
.buildAndAttach(config)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
package com.archinamon.utils

import org.gradle.internal.impldep.jakarta.xml.bind.JAXBContext
import org.gradle.internal.impldep.jakarta.xml.bind.annotation.XmlAccessType
import org.gradle.internal.impldep.jakarta.xml.bind.annotation.XmlAccessorType
import org.gradle.internal.impldep.jakarta.xml.bind.annotation.XmlAttribute
import org.gradle.internal.impldep.jakarta.xml.bind.annotation.XmlRootElement
import java.io.File
import javax.xml.bind.JAXBContext
import javax.xml.bind.annotation.*

internal fun findPackageNameIfAar(input: File): String {
if (!input.absolutePath.contains("build-cache")) return input.absolutePath
Expand All @@ -12,9 +15,9 @@ internal fun findPackageNameIfAar(input: File): String {

do {
f = f?.parentFile
} while (f?.isDirectory!! && !f.listFiles().any(::findManifest))
} while (f?.isDirectory!! && f.listFiles()?.any(::findManifest) == false)

val manifest = f.listFiles().find(::findManifest)
val manifest = f.listFiles()?.find(::findManifest)
if (manifest != null) {
val xml = readXml(manifest, Manifest::class.java)
return xml.libPackage
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.archinamon.utils

import com.android.build.api.variant.impl.VariantPropertiesImpl
import com.android.build.api.variant.impl.VariantImpl
import com.android.build.gradle.internal.plugins.BasePlugin
import com.android.build.gradle.internal.scope.TaskContainer
import com.android.build.gradle.internal.variant.BaseVariantData
Expand Down Expand Up @@ -50,7 +50,7 @@ fun getJavaTask(baseVariantData: BaseVariantData): JavaCompile {
return baseVariantData.taskContainer.javacTask.get()
}

fun getAjSourceAndExcludeFromJavac(project: Project, variantData: Pair<BaseVariantData, VariantPropertiesImpl>): FileCollection {
fun getAjSourceAndExcludeFromJavac(project: Project, variantData: Pair<BaseVariantData, VariantImpl>): FileCollection {
val javaTask = getJavaTask(variantData.first)
val props = variantData.second

Expand Down Expand Up @@ -97,9 +97,9 @@ fun findSourcesForVariant(project: Project, variantName: String, language: Strin
return LinkedHashSet(possibleDirs)
}

fun getVariantDataList(plugin: BasePlugin<*, *>): List<Pair<BaseVariantData, VariantPropertiesImpl>> {
fun getVariantDataList(plugin: BasePlugin<*, *, *>): List<Pair<BaseVariantData, VariantImpl>> {
return plugin.variantManager.mainComponents.map {
it.properties.variantData to it.properties
it.variant.variantData to it.variant
}
}

Expand Down
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ allprojects {
google()
jcenter()
mavenCentral()
maven { url = uri("http://repository.jetbrains.com/utils") }
maven { url = uri("https://repository.jetbrains.com/utils") }
maven { url = uri("https://dl.bintray.com/archinamon/maven") }
}
}
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
aspectjPluginGroup=com.archinamon
aspectjPluginVersion=4.3.0

androidGradleVersion=4.1.0
androidGradleVersion=7.0.3
aspectjVersion=1.9.4
kotlinVersion=1.4.10
org.gradle.jvmargs=-Xms256m -Xmx256m -Dfile.encoding=UTF-8
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists