Skip to content

Commit e08c5bc

Browse files
committed
Redesign API to be more like JarJar
1 parent 17613ca commit e08c5bc

21 files changed

+309
-427
lines changed

at-gradle-demo/build.gradle

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@ plugins {
55

66
java.toolchain.languageVersion = JavaLanguageVersion.of(17)
77

8-
accessTransformers.register {
9-
logLevel = LogLevel.LIFECYCLE
10-
config = project.file('accesstransformer.cfg')
11-
}
12-
138
dependencies {
14-
implementation accessTransformers.dep(libs.coremods)
9+
implementation(libs.coremods) {
10+
accessTransformers.configure(it) {
11+
config = project.file('accesstransformer.cfg')
12+
}
13+
}
1514
compileOnly libs.log4j.api
1615
}

at-gradle-demo/gradle.properties

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
org.gradle.caching=true
2+
org.gradle.parallel=true
3+
org.gradle.configureondemand=true
4+
5+
org.gradle.configuration-cache=true
6+
org.gradle.configuration-cache.parallel=true
7+
org.gradle.configuration-cache.problems=warn
8+
9+
net.minecraftforge.gradleutils.compilation.defaults=true

at-gradle-demo/settings.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,16 @@ pluginManagement {
22
includeBuild '../at-gradle'
33

44
repositories {
5-
//mavenLocal()
65
mavenCentral()
76
gradlePluginPortal()
87
maven { url = 'https://maven.minecraftforge.net' }
8+
//mavenLocal()
99
}
1010
}
1111

1212
plugins {
1313
id 'org.gradle.toolchains.foojay-resolver-convention' version '1.0.0'
14-
id 'net.minecraftforge.gradleutils' version '3.2.6'
14+
id 'net.minecraftforge.gradleutils' version '3.3.11'
1515
}
1616

1717
rootProject.name = 'at-gradle-demo'

at-gradle/build.gradle

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ plugins {
77
id 'idea'
88
id 'eclipse'
99
id 'maven-publish'
10-
id 'io.freefair.javadoc-links'
10+
//id 'io.freefair.javadoc-links'
1111
id 'net.minecraftforge.gradleutils'
1212
alias libs.plugins.gitversion
1313
alias libs.plugins.changelog
@@ -16,32 +16,19 @@ plugins {
1616
alias libs.plugins.shadow
1717
}
1818

19-
final projectDisplayName = 'AccessTransformers Gradle Plugin'
19+
gradleutils.displayName = 'AccessTransformers Gradle Plugin'
2020
description = 'Enables Gradle projects to use AccessTransformers on dependencies with minimal hassle.'
2121
base.archivesName = 'accesstransformers-gradle'
2222
group = 'net.minecraftforge'
2323
version = gitversion.tagOffset
2424

25-
println "Version: $version"
26-
2725
java {
2826
toolchain.languageVersion = JavaLanguageVersion.of(17)
2927
withSourcesJar()
3028
withJavadocJar()
3129
}
3230

33-
configurations {
34-
// Applies the "Gradle Plugin API Version" attribute to configuration
35-
// This was added in Gradle 7, gives consumers useful errors if they are on an old version
36-
def applyGradleVersionAttribute = { Configuration configuration ->
37-
configuration.attributes {
38-
attribute(GradlePluginApiVersion.GRADLE_PLUGIN_API_VERSION_ATTRIBUTE, objects.named(GradlePluginApiVersion, libs.versions.gradle.get()))
39-
}
40-
}
41-
42-
named(JavaPlugin.RUNTIME_ELEMENTS_CONFIGURATION_NAME, applyGradleVersionAttribute)
43-
named(ShadowJavaPlugin.SHADOW_RUNTIME_ELEMENTS_CONFIGURATION_NAME, applyGradleVersionAttribute)
44-
}
31+
gradleutils.pluginDevDefaults(configurations, libs.versions.gradle)
4532

4633
dependencies {
4734
// Static Analysis
@@ -57,15 +44,6 @@ dependencies {
5744
implementation libs.bundles.utils
5845
}
5946

60-
// Removes local Gradle API from compileOnly. This is a workaround for bugged plugins.
61-
// Publish Plugin: https://github.com/gradle/plugin-portal-requests/issues/260
62-
// Shadow: https://github.com/GradleUp/shadow/pull/1422
63-
afterEvaluate { project ->
64-
project.configurations.named(JavaPlugin.COMPILE_ONLY_CONFIGURATION_NAME) { compileOnly ->
65-
compileOnly.dependencies.remove(project.dependencies.gradleApi())
66-
}
67-
}
68-
6947
license {
7048
header = rootProject.file('../LICENSE-header.txt')
7149
newLine = false
@@ -84,11 +62,6 @@ tasks.named('shadowJar', ShadowJar) {
8462

8563
tasks.withType(Javadoc).configureEach {
8664
javadocTool = javaToolchains.javadocToolFor { languageVersion = JavaLanguageVersion.of(24) }
87-
88-
options { StandardJavadocDocletOptions options ->
89-
options.windowTitle = projectDisplayName + project.version
90-
options.tags 'apiNote:a:API Note:', 'implNote:a:Implementation Note:', 'implSpec:a:Implementation Requirements:'
91-
}
9265
}
9366

9467
changelog {
@@ -102,7 +75,7 @@ gradlePlugin {
10275
plugins.register('accesstransformers') {
10376
id = 'net.minecraftforge.accesstransformers'
10477
implementationClass = 'net.minecraftforge.accesstransformers.gradle.AccessTransformersPlugin'
105-
displayName = projectDisplayName
78+
displayName = gradleutils.displayName
10679
description = project.description
10780
tags = ['minecraftforge']
10881
}
@@ -118,7 +91,7 @@ publishing {
11891
gradleutils.promote(it)
11992

12093
pom { pom ->
121-
name = projectDisplayName
94+
name = gradleutils.displayName
12295
description = project.description
12396

12497
gradleutils.pom.addRemoteDetails(pom)
@@ -133,6 +106,3 @@ publishing {
133106
}
134107
}
135108
}
136-
137-
idea.module { downloadSources = downloadJavadoc = true }
138-
eclipse.classpath { downloadSources = downloadJavadoc = true }

at-gradle/gradle.properties

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,9 @@ org.gradle.configuration-cache.parallel=true
77
org.gradle.configuration-cache.problems=warn
88

99
systemProp.org.gradle.unsafe.suppress-gradle-api=true
10+
11+
net.minecraftforge.gradleutils.publishing.use-base-archives-name=true
12+
net.minecraftforge.gradleutils.ide.automatic.sources=true
13+
net.minecraftforge.gradleutils.compilation.defaults=true
14+
15+
net.minecraftforge.gitversion.log.version=true

at-gradle/settings.gradle

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,24 +4,24 @@ plugins {
44
// NOTE: We need to load this into the classpath before GradleUtils for the service to load correctly
55
id 'io.freefair.javadoc-links' version '8.14' apply false // https://plugins.gradle.org/plugin/io.freefair.javadoc-links
66

7-
id 'net.minecraftforge.gradleutils' version '3.2.6' // https://plugins.gradle.org/plugin/net.minecraftforge.gradleutils
7+
id 'net.minecraftforge.gradleutils' version '3.3.11' // https://plugins.gradle.org/plugin/net.minecraftforge.gradleutils
88
}
99

1010
rootProject.name = 'at-gradle'
1111

1212
dependencyResolutionManagement {
1313
repositories {
14-
//mavenLocal()
1514
mavenCentral()
1615
maven gradleutils.forgeMaven
1716
maven { url = 'https://maven.moddinglegacy.com/maven' } // Gradle API
17+
//mavenLocal()
1818
}
1919

2020
//@formatter:off
2121
versionCatalogs.register('libs') {
2222
plugin 'licenser', 'net.minecraftforge.licenser' version '1.2.0' // https://plugins.gradle.org/plugin/net.minecraftforge.licenser
23-
plugin 'gitversion', 'net.minecraftforge.gitversion' version '3.0.3' // https://plugins.gradle.org/plugin/net.minecraftforge.changelog
24-
plugin 'changelog', 'net.minecraftforge.changelog' version '3.0.3' // https://plugins.gradle.org/plugin/net.minecraftforge.changelog
23+
plugin 'gitversion', 'net.minecraftforge.gitversion' version '3.1.0' // https://plugins.gradle.org/plugin/net.minecraftforge.changelog
24+
plugin 'changelog', 'net.minecraftforge.changelog' version '3.1.1' // https://plugins.gradle.org/plugin/net.minecraftforge.changelog
2525
plugin 'plugin-publish', 'com.gradle.plugin-publish' version '1.3.1' // https://plugins.gradle.org/plugin/com.gradle.plugin-publish
2626
plugin 'shadow', 'com.gradleup.shadow' version '9.0.2' // https://plugins.gradle.org/plugin/com.gradleup.shadow
2727

@@ -35,7 +35,7 @@ dependencyResolutionManagement {
3535
library 'gradle', 'name.remal.gradle-api', 'gradle-api' versionRef 'gradle'
3636

3737
// GradleUtils Shared Base
38-
library 'gradleutils-shared', 'net.minecraftforge', 'gradleutils-shared' version '3.2.6'
38+
library 'gradleutils-shared', 'net.minecraftforge', 'gradleutils-shared' version '3.3.11'
3939

4040
// Utils
4141
library 'utils-hash', 'net.minecraftforge', 'hash-utils' version '0.1.9'
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.minecraftforge.accesstransformers.gradle;
2+
3+
import org.gradle.api.file.RegularFileProperty;
4+
5+
/// Configuration for individual dependencies to be run through AccessTransformers.
6+
public sealed interface AccessTransformersConfiguration permits AccessTransformersContainer.Options, AccessTransformersConfigurationInternal {
7+
/// Gets the AccessTransformer configuration to use.
8+
///
9+
/// @return The property for the configuration
10+
RegularFileProperty getConfig();
11+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package net.minecraftforge.accesstransformers.gradle;
2+
3+
import org.gradle.api.file.RegularFileProperty;
4+
5+
record AccessTransformersConfigurationImpl(
6+
RegularFileProperty getConfig,
7+
AccessTransformersContainerImpl.OptionsImpl options
8+
) implements AccessTransformersConfigurationInternal { }
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package net.minecraftforge.accesstransformers.gradle;
2+
3+
import org.gradle.api.reflect.HasPublicType;
4+
import org.gradle.api.reflect.TypeOf;
5+
6+
non-sealed interface AccessTransformersConfigurationInternal extends AccessTransformersConfiguration, HasPublicType {
7+
@Override
8+
default TypeOf<?> getPublicType() {
9+
return TypeOf.typeOf(AccessTransformersConfiguration.class);
10+
}
11+
}

at-gradle/src/main/java/net/minecraftforge/accesstransformers/gradle/AccessTransformersContainer.java

Lines changed: 17 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -4,53 +4,36 @@
44
*/
55
package net.minecraftforge.accesstransformers.gradle;
66

7-
import groovy.lang.Closure;
8-
import groovy.lang.DelegatesTo;
9-
import groovy.transform.stc.ClosureParams;
10-
import groovy.transform.stc.SimpleType;
11-
import net.minecraftforge.gradleutils.shared.Closures;
127
import org.gradle.api.Action;
138
import org.gradle.api.Project;
149
import org.gradle.api.artifacts.Dependency;
15-
import org.gradle.api.attributes.Attribute;
10+
import org.gradle.api.attributes.HasConfigurableAttributes;
1611
import org.gradle.api.file.ConfigurableFileCollection;
1712
import org.gradle.api.file.FileCollection;
18-
import org.gradle.api.file.RegularFileProperty;
1913
import org.gradle.api.logging.LogLevel;
2014
import org.gradle.api.provider.ListProperty;
2115
import org.gradle.api.provider.Property;
22-
import org.gradle.api.provider.Provider;
23-
import org.gradle.api.provider.ProviderConvertible;
2416
import org.gradle.jvm.toolchain.JavaLauncher;
2517
import org.jetbrains.annotations.ApiStatus;
2618

27-
import java.util.function.UnaryOperator;
28-
2919
/// Represents a container of dependencies that will be access transformed.
3020
///
31-
/// Containers are created with [AccessTransformersExtension#register(Attribute, Action)]. Dependencies can be added
32-
/// using [#dep(Object, Closure)].
21+
/// Containers are created with [AccessTransformersExtension#register(Action)]. Dependencies can be registered to it
22+
/// inside their configuring closures using [#configure(Dependency)].
3323
///
3424
/// @apiNote This interface is effectively sealed and [must not be extended][ApiStatus.NonExtendable].
3525
/// @see AccessTransformersExtension
3626
public sealed interface AccessTransformersContainer permits AccessTransformersContainerInternal, AccessTransformersExtension {
3727
/// Registers a new container using the given attribute and options.
3828
///
39-
/// @param project The project to make the container for
40-
/// @param attribute The boolean attribute to use for this container
41-
/// @param options The options to apply
29+
/// @param project The project to make the container for]
30+
/// @param options The options to apply
4231
/// @return The registered container
4332
/// @see AccessTransformersContainer.Options
44-
static AccessTransformersContainer register(Project project, Attribute<Boolean> attribute, Action<? super AccessTransformersContainer.Options> options) {
45-
return AccessTransformersContainerInternal.register(project, attribute, options);
33+
static AccessTransformersContainer register(Project project, Action<? super AccessTransformersContainer.Options> options) {
34+
return AccessTransformersContainerInternal.register(project, options);
4635
}
4736

48-
/// Gets the attribute used by the [transformer][ArtifactAccessTransformer]. It must be unique to this container.
49-
///
50-
/// @return The attribute
51-
/// @see <a href="https://docs.gradle.org/current/userguide/artifact_transforms.html">Artifact Transforms</a>
52-
Attribute<Boolean> getAttribute();
53-
5437
/// Gets the access transformer options.
5538
///
5639
/// @return The options
@@ -65,103 +48,22 @@ default void options(Action<? super AccessTransformersContainer.Options> action)
6548
action.execute(this.getOptions());
6649
}
6750

68-
/// Queues the given dependency to be transformed by AccessTransformers.
51+
/// Configures the given dependency to use this AccessTransformers container.
6952
///
70-
/// @param dependencyNotation The dependency (notation)
71-
/// @param closure A configuring closure for the dependency
72-
/// @return The dependency to be transformed
73-
Dependency dep(
74-
Object dependencyNotation,
75-
@DelegatesTo(Dependency.class)
76-
@ClosureParams(value = SimpleType.class, options = "org.gradle.api.artifacts.Dependency")
77-
Closure<?> closure
78-
);
79-
80-
/// Queues the given dependency to be transformed by AccessTransformers.
81-
///
82-
/// @param dependencyNotation The dependency (notation)
83-
/// @param action A configuring action for the dependency
84-
/// @return The dependency to be transformed
85-
default Dependency dep(Object dependencyNotation, Action<? super Dependency> action) {
86-
return this.dep(dependencyNotation, Closures.action(this, action));
53+
/// @param dependency The dependency to configure AccessTransformers for
54+
default void configure(Dependency dependency) {
55+
this.configure(dependency, it -> { });
8756
}
8857

89-
/// Queues the given dependency to be transformed by AccessTransformers.
58+
/// Configures the given dependency to use this AccessTransformers container.
9059
///
91-
/// @param dependencyNotation The dependency (notation)
92-
/// @return The dependency to be transformed
93-
default Dependency dep(Object dependencyNotation) {
94-
return this.dep(dependencyNotation, Closures.<Dependency>unaryOperator(this, UnaryOperator.identity()));
95-
}
60+
/// @param dependency The dependency to configure AccessTransformers for
61+
/// @param action A configuring action to modify dependency-level AccessTransformer options
62+
void configure(Dependency dependency, Action<? super AccessTransformersConfiguration> action);
9663

97-
/// Queues the given dependency to be transformed by AccessTransformers.
98-
///
99-
/// @param dependencyNotation The dependency (notation)
100-
/// @param closure A configuring closure for the dependency
101-
/// @return The dependency to be transformed
102-
Provider<?> dep(
103-
Provider<?> dependencyNotation,
104-
@DelegatesTo(Dependency.class)
105-
@ClosureParams(value = SimpleType.class, options = "org.gradle.api.artifacts.Dependency")
106-
Closure<?> closure
107-
);
108-
109-
/// Queues the given dependency to be transformed by AccessTransformers.
110-
///
111-
/// @param dependencyNotation The dependency (notation)
112-
/// @param action A configuring action for the dependency
113-
/// @return The dependency to be transformed
114-
default Provider<?> dep(Provider<?> dependencyNotation, Action<? super Dependency> action) {
115-
return this.dep(dependencyNotation, Closures.action(this, action));
116-
}
117-
118-
/// Queues the given dependency to be transformed by AccessTransformers.
119-
///
120-
/// @param dependencyNotation The dependency (notation)
121-
/// @return The dependency to be transformed
122-
default Provider<?> dep(Provider<?> dependencyNotation) {
123-
return this.dep(dependencyNotation, Closures.<Dependency>unaryOperator(this, UnaryOperator.identity()));
124-
}
125-
126-
/// Queues the given dependency to be transformed by AccessTransformers.
127-
///
128-
/// @param dependencyNotation The dependency (notation)
129-
/// @param closure A configuring closure for the dependency
130-
/// @return The dependency to be transformed
131-
default Provider<?> dep(
132-
ProviderConvertible<?> dependencyNotation,
133-
@DelegatesTo(Dependency.class)
134-
@ClosureParams(value = SimpleType.class, options = "org.gradle.api.artifacts.Dependency")
135-
Closure<?> closure
136-
) {
137-
return this.dep(dependencyNotation.asProvider(), closure);
138-
}
139-
140-
/// Queues the given dependency to be transformed by AccessTransformers.
141-
///
142-
/// @param dependencyNotation The dependency (notation)
143-
/// @param action A configuring action for the dependency
144-
/// @return The dependency to be transformed
145-
default Provider<?> dep(ProviderConvertible<?> dependencyNotation, Action<? super Dependency> action) {
146-
return this.dep(dependencyNotation, Closures.action(this, action));
147-
}
148-
149-
/// Queues the given dependency to be transformed by AccessTransformers.
150-
///
151-
/// @param dependencyNotation The dependency (notation)
152-
/// @return The dependency to be transformed
153-
default Provider<?> dep(ProviderConvertible<?> dependencyNotation) {
154-
return this.dep(dependencyNotation, Closures.<Dependency>unaryOperator(this, UnaryOperator.identity()));
155-
}
156-
157-
/// When initially registering an AccessTransformers container, the consumer must define key information regarding
64+
/// When initially registering an AccessTransformers container, the consumer should define key information regarding
15865
/// how AccessTransformers will be used. This interface is used to define that information.
159-
sealed interface Options permits AccessTransformersContainerInternal.Options {
160-
/// Gets the AccessTransformer configuration to use.
161-
///
162-
/// @return The property for the configuration
163-
RegularFileProperty getConfig();
164-
66+
sealed interface Options extends AccessTransformersConfiguration permits AccessTransformersContainerInternal.Options {
16567
/// Gets the log level to pipe the output of AccessTransformers to.
16668
///
16769
/// @return The property log level to use

0 commit comments

Comments
 (0)