Skip to content

Commit

Permalink
Fix alpha10 compatibility
Browse files Browse the repository at this point in the history
  • Loading branch information
tylerbwong committed Jun 13, 2024
1 parent 6db4d2c commit 73122ae
Show file tree
Hide file tree
Showing 17 changed files with 99 additions and 111 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ local.properties
.DS_Store

kotlin-js-store
.kotlin
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ plugins {
...

metalava {
format.set(Format.V4)
filename.set("api.txt")
...
}
```
Expand All @@ -85,7 +87,7 @@ Check out the [samples](https://github.com/tylerbwong/metalava-gradle/tree/main/

### License

Copyright 2023 Tyler Wong
Copyright 2024 Tyler Wong

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
Expand Down
6 changes: 3 additions & 3 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
[versions]
androidGradle = "8.1.3"
androidGradle = "8.4.2"
junit = "5.9.3"
kotlin = "1.9.20"
ktlintGradle = "11.4.0"
kotlin = "2.0.0"
ktlintGradle = "12.1.1"
pluginPublish = "1.2.0"
metalavaGradle = "0.3.5"

Expand Down
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
3 changes: 2 additions & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
22 changes: 13 additions & 9 deletions gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@ done
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
Expand Down Expand Up @@ -130,26 +131,29 @@ location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC3045
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
Expand Down Expand Up @@ -198,11 +202,11 @@ fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.

set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
Expand Down
19 changes: 0 additions & 19 deletions plugin/api/0.3.6-SNAPSHOT.txt
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
// Signature format: 4.0
package me.tylerbwong.gradle.metalava {

public enum Documentation {
method public String toString();
method public static me.tylerbwong.gradle.metalava.Documentation valueOf(String value);
method public static me.tylerbwong.gradle.metalava.Documentation[] values();
enum_constant public static final me.tylerbwong.gradle.metalava.Documentation HIDDEN;
enum_constant public static final me.tylerbwong.gradle.metalava.Documentation PACKAGE;
enum_constant public static final me.tylerbwong.gradle.metalava.Documentation PRIVATE;
enum_constant public static final me.tylerbwong.gradle.metalava.Documentation PROTECTED;
enum_constant public static final me.tylerbwong.gradle.metalava.Documentation PUBLIC;
}

public enum Format {
method public String toString();
method public static me.tylerbwong.gradle.metalava.Format valueOf(String value);
Expand Down Expand Up @@ -41,36 +30,28 @@ package me.tylerbwong.gradle.metalava.extension {
public class MetalavaExtension {
ctor @javax.inject.Inject public MetalavaExtension(org.gradle.api.model.ObjectFactory objectFactory);
method public final org.gradle.api.provider.Property<java.lang.String> getApiType();
method public final org.gradle.api.provider.Property<me.tylerbwong.gradle.metalava.Documentation> getDocumentation();
method public final org.gradle.api.provider.Property<java.lang.Boolean> getEnforceCheck();
method public final org.gradle.api.provider.Property<java.lang.String> getFilename();
method public final org.gradle.api.provider.Property<me.tylerbwong.gradle.metalava.Format> getFormat();
method public final org.gradle.api.provider.SetProperty<java.lang.String> getHiddenAnnotations();
method public final org.gradle.api.provider.Property<java.lang.Boolean> getIncludeSignatureVersion();
method public final org.gradle.api.provider.Property<java.lang.Boolean> getInputKotlinNulls();
method public final org.gradle.api.provider.Property<org.gradle.api.JavaVersion> getJavaSourceLevel();
method public final org.gradle.api.provider.Property<java.lang.String> getKeepFilename();
method public final org.gradle.api.provider.Property<java.lang.String> getMetalavaJarPath();
method public final org.gradle.api.provider.Property<java.lang.Boolean> getOutputDefaultValues();
method public final org.gradle.api.provider.Property<java.lang.Boolean> getOutputKotlinNulls();
method public final org.gradle.api.provider.Property<java.lang.Boolean> getReportLintsAsErrors();
method public final org.gradle.api.provider.Property<java.lang.Boolean> getReportWarningsAsErrors();
method public final org.gradle.api.provider.Property<me.tylerbwong.gradle.metalava.Signature> getSignature();
method public final org.gradle.api.file.ConfigurableFileCollection getSourcePaths();
method public final org.gradle.api.provider.Property<java.lang.String> getVersion();
property public final org.gradle.api.provider.Property<java.lang.String> apiType;
property public final org.gradle.api.provider.Property<me.tylerbwong.gradle.metalava.Documentation> documentation;
property public final org.gradle.api.provider.Property<java.lang.Boolean> enforceCheck;
property public final org.gradle.api.provider.Property<java.lang.String> filename;
property public final org.gradle.api.provider.Property<me.tylerbwong.gradle.metalava.Format> format;
property public final org.gradle.api.provider.SetProperty<java.lang.String> hiddenAnnotations;
property public final org.gradle.api.provider.Property<java.lang.Boolean> includeSignatureVersion;
property public final org.gradle.api.provider.Property<java.lang.Boolean> inputKotlinNulls;
property public final org.gradle.api.provider.Property<org.gradle.api.JavaVersion> javaSourceLevel;
property public final org.gradle.api.provider.Property<java.lang.String> keepFilename;
property public final org.gradle.api.provider.Property<java.lang.String> metalavaJarPath;
property public final org.gradle.api.provider.Property<java.lang.Boolean> outputDefaultValues;
property public final org.gradle.api.provider.Property<java.lang.Boolean> outputKotlinNulls;
property public final org.gradle.api.provider.Property<java.lang.Boolean> reportLintsAsErrors;
property public final org.gradle.api.provider.Property<java.lang.Boolean> reportWarningsAsErrors;
property public final org.gradle.api.provider.Property<me.tylerbwong.gradle.metalava.Signature> signature;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ internal sealed class Module {
override fun compileClasspath(variant: String?): FileCollection {
return extension.targets
.flatMap { it.compilations }
.filter { it.defaultSourceSetName.contains("main", ignoreCase = true) }
.filter { it.defaultSourceSet.name.contains("main", ignoreCase = true) }
.map { it.compileDependencyFiles }
.reduce(FileCollection::plus)
.filter { it.exists() && it.checkDirectory(listOf(".jar", ".class")) }
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package me.tylerbwong.gradle.metalava.extension

import me.tylerbwong.gradle.metalava.Documentation
import me.tylerbwong.gradle.metalava.Format
import me.tylerbwong.gradle.metalava.Signature
import org.gradle.api.JavaVersion
Expand All @@ -16,7 +15,7 @@ open class MetalavaExtension @Inject constructor(
/**
* The version of Metalava to use.
*/
val version: Property<String> = objectFactory.property { set("1.0.0-alpha10") }
val version: Property<String> = objectFactory.property<String>().also { it.set("1.0.0-alpha10") }

/**
* A custom Metalava JAR location path to use instead of the embedded dependency.
Expand Down Expand Up @@ -45,39 +44,11 @@ open class MetalavaExtension @Inject constructor(
*/
val filename: Property<String> = objectFactory.property { set("api.txt") }

/**
* @see Documentation
*/
@Deprecated("This has been removed and is not currently used.")
val documentation: Property<Documentation> = objectFactory.property {
set(Documentation.PROTECTED)
}

/**
* Type is one of 'api' and 'removed', which checks either the public api or the removed api.
*/
val apiType: Property<String> = objectFactory.property { set("api") }

/**
* Controls whether nullness annotations should be formatted as in Kotlin (with "?" for nullable
* types, "" for non-nullable types, and "!" for unknown. The default is true.
*/
@Deprecated("This has been removed and is not currently used.")
val outputKotlinNulls: Property<Boolean> = objectFactory.property { set(true) }

/**
* Controls whether default values should be included in signature files. The default is true.
*/
@Deprecated("This has been removed and is not currently used.")
val outputDefaultValues: Property<Boolean> = objectFactory.property { set(true) }

/**
* Whether the signature files should include a comment listing the format version of the
* signature file. The default is true.
*/
@Deprecated("This has been removed and is not currently used.")
val includeSignatureVersion: Property<Boolean> = objectFactory.property { set(true) }

/**
* Remove the given packages from the API even if they have not been marked with @hide.
*/
Expand Down Expand Up @@ -126,9 +97,9 @@ open class MetalavaExtension @Inject constructor(

private inline fun <reified T> ObjectFactory.property(
configuration: Property<T>.() -> Unit = {}
) = property(T::class.java).apply { configuration() }
): Property<T> = property(T::class.java).apply { configuration() }

private inline fun <reified T> ObjectFactory.setProperty(
configuration: SetProperty<T>.() -> Unit = {}
) = setProperty(T::class.java).apply { configuration() }
): SetProperty<T> = setProperty(T::class.java).apply { configuration() }
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import me.tylerbwong.gradle.metalava.Module.Companion.module
import me.tylerbwong.gradle.metalava.extension.MetalavaExtension
import me.tylerbwong.gradle.metalava.task.MetalavaCheckCompatibilityTask
import me.tylerbwong.gradle.metalava.task.MetalavaGenerateSignatureTask
import me.tylerbwong.gradle.metalava.task.MetalavaHelpTask
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.model.ObjectFactory
Expand Down Expand Up @@ -40,15 +41,21 @@ internal class MetalavaPlugin @Inject constructor(
module: Module,
variantName: String? = null,
) {
MetalavaGenerateSignatureTask.create(
MetalavaHelpTask.register(
project = project.rootProject,
objectFactory = objectFactory,
extension = metalavaExtension,
)

MetalavaGenerateSignatureTask.register(
project = project,
objectFactory = objectFactory,
extension = metalavaExtension,
module = module,
variantName = variantName,
)

val checkCompatibilityTask = MetalavaCheckCompatibilityTask.create(
val checkCompatibilityTask = MetalavaCheckCompatibilityTask.register(
project = project,
objectFactory = objectFactory,
extension = metalavaExtension,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import org.gradle.api.provider.Property
import org.gradle.api.provider.SetProperty
import org.gradle.api.tasks.Classpath
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import org.gradle.api.tasks.OutputFile
import org.gradle.kotlin.dsl.setProperty
import org.gradle.workers.WorkerExecutor
Expand All @@ -21,15 +22,19 @@ internal abstract class BaseMetalavaTask(
@get:Classpath
abstract val metalavaClasspath: ConfigurableFileCollection

@get:Optional
@get:OutputFile
abstract val filename: Property<String>

@get:Optional
@get:Input
abstract val format: Property<Format>

@get:Optional
@get:Input
val hiddenPackages: SetProperty<String> = objectFactory.setProperty()

@get:Optional
@get:Input
val hiddenAnnotations: SetProperty<String> = objectFactory.setProperty()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ internal abstract class MetalavaCheckCompatibilityTask @Inject constructor(
"Checks API compatibility between the code base and the released API."
private const val METALAVA_CURRENT_PATH = "metalava/current.txt"

fun create(
fun register(
project: Project,
objectFactory: ObjectFactory,
extension: MetalavaExtension,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ internal abstract class MetalavaGenerateSignatureTask @Inject constructor(
private const val TASK_NAME = "metalavaGenerateSignature"
private const val TASK_DESCRIPTION = "Generates a Metalava signature descriptor file."

fun create(
fun register(
project: Project,
objectFactory: ObjectFactory,
extension: MetalavaExtension,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package me.tylerbwong.gradle.metalava.task

import me.tylerbwong.gradle.metalava.extension.MetalavaExtension
import org.gradle.api.Project
import org.gradle.api.model.ObjectFactory
import org.gradle.api.tasks.CacheableTask
import org.gradle.api.tasks.TaskAction
import org.gradle.kotlin.dsl.register
import org.gradle.workers.WorkerExecutor
import javax.inject.Inject

@CacheableTask
internal abstract class MetalavaHelpTask @Inject constructor(
objectFactory: ObjectFactory,
workerExecutor: WorkerExecutor,
) : BaseMetalavaTask(objectFactory, workerExecutor) {

init {
group = "other"
description = TASK_DESCRIPTION
}

@TaskAction
fun metalavaHelp() {
executeMetalavaWork(listOf("--help"))
}

companion object : MetalavaTaskContainer() {
private const val TASK_NAME = "metalavaHelp"
private const val TASK_DESCRIPTION = "Displays the metalava help message."

fun register(
project: Project,
objectFactory: ObjectFactory,
extension: MetalavaExtension,
) {
val metalavaClasspath = project.getMetalavaClasspath(
objectFactory,
jarPath = extension.metalavaJarPath.get().ifEmpty { null },
version = extension.version.get(),
)
if (project.tasks.findByName(TASK_NAME) == null) {
project.tasks.register<MetalavaHelpTask>(TASK_NAME) {
this.metalavaClasspath.from(metalavaClasspath)
}
}
}
}
}
Loading

0 comments on commit 73122ae

Please sign in to comment.