Skip to content

Commit ef6b0cb

Browse files
committed
feat: swap event generation to source-based generation
Still being validated, we have event generation that can run as an Annotation Processor, which has the benefits of producing closer to usage events with generics that survive their usages. This enables CompositeEvent to be near-fully implemented.
1 parent 24133ec commit ef6b0cb

File tree

69 files changed

+165
-95
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+165
-95
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ MANIFEST.MF
44
dependency-reduced-pom.xml
55
.checkstyle
66
!.checkstyle/
7+
# We exclude the generated events from git to avoid
8+
# temptation to edit said generated files.
9+
src/main/generated/
710

811
# Compiled #
912
############

build.gradle.kts

Lines changed: 7 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,6 @@ import org.jetbrains.gradle.ext.delegateActions
33
import org.jetbrains.gradle.ext.settings
44
import org.jetbrains.gradle.ext.taskTriggers
55

6-
buildscript {
7-
dependencies {
8-
classpath(libs.spoon) // bump for EIG
9-
}
10-
}
116

127
plugins {
138
eclipse
@@ -21,6 +16,9 @@ plugins {
2116
alias(libs.plugins.nexusPublish)
2217
}
2318

19+
// Enable event generation to be considered part of
20+
// the main source set
21+
val generatedEventSourcesDir = project.file("src/main/generated")
2422
val javaTarget: String by project
2523
val ap by sourceSets.registering {
2624
compileClasspath += sourceSets.main.get().compileClasspath + sourceSets.main.get().output
@@ -46,7 +44,7 @@ tasks {
4644

4745
sourceSets {
4846
main {
49-
java.srcDirs(layout.buildDirectory.dir("generated/sources/annotationProcessor/java/main"))
47+
java.srcDirs(generatedEventSourcesDir)
5048
}
5149
}
5250

@@ -150,33 +148,14 @@ dependencies {
150148
tasks {
151149

152150
compileJava {
151+
options.generatedSourceOutputDirectory = generatedEventSourcesDir
153152
options.compilerArgs.addAll(listOf(
153+
"-AeventGenInclusiveFolders=org/spongepowered/api/event",
154+
"-AeventGenExclusiveFolders=org/spongepowered/api/event/cause,org/spongepowered/api/event/filter,org/spongepowered/api/event/impl,org/spongepowered/api/event/lifecycle",
154155
"-AeventGenFactory=org.spongepowered.api.event.SpongeEventFactory",
155156
"-AeventGenDebug=true",
156157
))
157158
}
158-
// genEventImpl {
159-
// sourceCompatibility = javaTarget
160-
// destinationDirectory = project.layout.buildDirectory.dir("generated/event-factory")
161-
//
162-
// outputFactory = "org.spongepowered.api.event.SpongeEventFactory"
163-
// include("org/spongepowered/api/event/*/**/*")
164-
// include("org/spongepowered/api/event/CompositeEvent.java")
165-
// exclude("org/spongepowered/api/event/action/InteractEvent.java")
166-
// exclude("org/spongepowered/api/event/cause/")
167-
// exclude("org/spongepowered/api/event/entity/AffectEntityEvent.java")
168-
// exclude("org/spongepowered/api/event/filter/")
169-
// exclude("org/spongepowered/api/event/impl/")
170-
// exclude("org/spongepowered/api/event/lifecycle/ProvideServiceEvent.java")
171-
// exclude("org/spongepowered/api/event/lifecycle/RegisterBuilderEvent.java")
172-
// exclude("org/spongepowered/api/event/lifecycle/RegisterRegistryEvent.java")
173-
// exclude("org/spongepowered/api/event/lifecycle/RegisterRegistryValueEvent.java")
174-
// exclude("org/spongepowered/api/event/lifecycle/RegisterCommandEvent.java")
175-
// exclude("org/spongepowered/api/event/lifecycle/RegisterFactoryEvent.java")
176-
// exclude("org/spongepowered/api/event/lifecycle/RegisterWorldEvent.java")
177-
// inclusiveAnnotations = setOf("org.spongepowered.api.util.annotation.eventgen.GenerateFactoryMethod")
178-
// exclusiveAnnotations = setOf("org.spongepowered.api.util.annotation.eventgen.NoFactoryMethod")
179-
// }
180159

181160
jar {
182161
from(ap.get().output)

gradle/libs.versions.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ eventImplGen-annotations = { module = "org.spongepowered:event-impl-gen-annotati
4545
checkerQual = { module = "org.checkerframework:checker-qual", version.ref = "checker" }
4646
errorprone = { module = "com.google.errorprone:error_prone_core", version.ref = "errorprone" }
4747
errorprone-annotations = { module = "com.google.errorprone:error_prone_annotations", version.ref = "errorprone" }
48-
spoon = { module = "fr.inria.gforge.spoon:spoon-core", version = "10.4.2" } # bump for EIG
4948

5049
# testing
5150

gradle/verification-metadata.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,14 @@
264264
<sha256 value="ca6529bd6d79090f0ab6f5da452eb4fbb29377b48e6a806e7612396dcb2998e0" origin="Generated by Gradle"/>
265265
</artifact>
266266
</component>
267+
<component group="com.google.dagger" name="dagger" version="2.52">
268+
<artifact name="dagger-2.52.jar">
269+
<sha256 value="dfb8e83020786daefbd64335ce0e0ebf01646a1b407fb77a27e052baf42df458" origin="Generated by Gradle"/>
270+
</artifact>
271+
<artifact name="dagger-2.52.pom">
272+
<sha256 value="5cb60843f46bbccf97bd832d5490d26ab192af2e663fad7e5971969bf20fb94e" origin="Generated by Gradle"/>
273+
</artifact>
274+
</component>
267275
<component group="com.google.errorprone" name="error_prone_annotation" version="2.24.1">
268276
<artifact name="error_prone_annotation-2.24.1.jar">
269277
<sha256 value="dc202da451680aa8cdda7c68d959f27c112dca8f8fdeaf7c597de73cb2b1a0a6" origin="Generated by Gradle"/>
@@ -748,6 +756,22 @@
748756
<sha256 value="5a65e06a159d20d3b4800624a570c646dbee710b2b539b3449a268558c289e9c" origin="Generated by Gradle"/>
749757
</artifact>
750758
</component>
759+
<component group="io.soabase.java-composer" name="java-composer" version="1.0">
760+
<artifact name="java-composer-1.0.jar">
761+
<sha256 value="d914e52079c41509cde32d8fa03b5a865d8a227867ed6fd5d8121639518d28a1" origin="Generated by Gradle"/>
762+
</artifact>
763+
<artifact name="java-composer-1.0.pom">
764+
<sha256 value="741a35966a3055c80c10631736c6cfec82d7b5e4212b3f72ded29f98935bbb5e" origin="Generated by Gradle"/>
765+
</artifact>
766+
</component>
767+
<component group="jakarta.inject" name="jakarta.inject-api" version="2.0.1">
768+
<artifact name="jakarta.inject-api-2.0.1.jar">
769+
<sha256 value="f7dc98062fccf14126abb751b64fab12c312566e8cbdc8483598bffcea93af7c" origin="Generated by Gradle"/>
770+
</artifact>
771+
<artifact name="jakarta.inject-api-2.0.1.pom">
772+
<sha256 value="e7fd7232e96307a575b2494c9367d68cf43ec98244aace3ccc23e1773ffa6fda" origin="Generated by Gradle"/>
773+
</artifact>
774+
</component>
751775
<component group="jakarta.platform" name="jakarta.jakartaee-bom" version="9.1.0">
752776
<artifact name="jakarta.jakartaee-bom-9.1.0.pom">
753777
<sha256 value="df98e0266219fdbb82562826d79a3a20776a8ba02aa787f0f0765a538654c8a4" origin="Generated by Gradle"/>
@@ -1512,6 +1536,9 @@
15121536
<artifact name="apiguardian-api-1.1.2.module">
15131537
<sha256 value="e08028131375b357d1d28734e9a4fb4216da84b240641cb3ef7e7c7d628223fc" origin="Generated by Gradle"/>
15141538
</artifact>
1539+
<artifact name="apiguardian-api-1.1.2.pom">
1540+
<sha256 value="32355081d109095c3d5d374d5a43b4f4c1b75d549e983ef50723e2772e5302a0" origin="Generated by Gradle"/>
1541+
</artifact>
15151542
</component>
15161543
<component group="org.checkerframework" name="checker-qual" version="2.10.0">
15171544
<artifact name="checker-qual-2.10.0.jar">
@@ -1621,6 +1648,11 @@
16211648
<sha256 value="5e583878df905b5f33a230ef690a52b8f19dab9cc892bedee069f3d8af4e960a" origin="Generated by Gradle"/>
16221649
</artifact>
16231650
</component>
1651+
<component group="org.eclipse.ee4j" name="project" version="1.0.6">
1652+
<artifact name="project-1.0.6.pom">
1653+
<sha256 value="4e7d8329d8da7dcf30779d824241be145f27108932f5a5a24eb907677bc8d72d" origin="Generated by Gradle"/>
1654+
</artifact>
1655+
</component>
16241656
<component group="org.eclipse.ee4j" name="project" version="1.0.7">
16251657
<artifact name="project-1.0.7.pom">
16261658
<sha256 value="205c039a42cbae3556efbeb04a483eb3a3cf9550bd75bf84260dc8f28218f105" origin="Generated by Gradle"/>

settings.gradle.kts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ plugins {
1313
}
1414

1515
dependencyResolutionManagement {
16+
repositories {
17+
mavenLocal()
18+
}
1619
repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS
1720
pluginManagement.repositories.forEach(repositories::add)
1821
}

src/main/java/org/spongepowered/api/data/DataManipulator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
import org.spongepowered.api.data.value.Value;
3131
import org.spongepowered.api.data.value.ValueContainer;
3232
import org.spongepowered.api.entity.Entity;
33-
import org.spongepowered.api.util.annotation.eventgen.TransformWith;
33+
import org.spongepowered.eventgen.annotations.TransformWith;
3434
import org.spongepowered.api.world.World;
3535

3636
import java.util.Arrays;

src/main/java/org/spongepowered/api/event/Cancellable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*/
2525
package org.spongepowered.api.event;
2626

27-
import org.spongepowered.api.util.annotation.eventgen.PropertySettings;
27+
import org.spongepowered.eventgen.annotations.PropertySettings;
2828

2929
/**
3030
* Represents an event that can be cancelled.

src/main/java/org/spongepowered/api/event/Cause.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.checkerframework.checker.nullness.qual.Nullable;
2828
import org.spongepowered.api.util.CopyableBuilder;
2929
import org.spongepowered.api.util.annotation.DoNotStore;
30+
import org.spongepowered.eventgen.annotations.NoFactoryMethod;
3031

3132
import java.util.ArrayList;
3233
import java.util.Arrays;
@@ -54,6 +55,7 @@
5455
*/
5556
@DoNotStore
5657
@SuppressWarnings("unchecked")
58+
@NoFactoryMethod
5759
public final class Cause implements Iterable<Object> {
5860

5961
/**

src/main/java/org/spongepowered/api/event/EventContext.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.checkerframework.checker.nullness.qual.Nullable;
2828
import org.spongepowered.api.util.CopyableBuilder;
2929
import org.spongepowered.api.util.annotation.DoNotStore;
30+
import org.spongepowered.eventgen.annotations.NoFactoryMethod;
3031

3132
import java.util.HashMap;
3233
import java.util.Map;
@@ -42,6 +43,7 @@
4243
* in the event's {@link Cause}.
4344
*/
4445
@DoNotStore
46+
@NoFactoryMethod
4547
public final class EventContext {
4648

4749
private static final EventContext EMPTY_CONTEXT = new EventContext(Map.of());

src/main/java/org/spongepowered/api/event/EventContextKeys.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import org.spongepowered.api.world.portal.PortalLogic;
5454
import org.spongepowered.api.world.server.ServerLocation;
5555
import org.spongepowered.api.world.server.ServerWorld;
56+
import org.spongepowered.eventgen.annotations.NoFactoryMethod;
5657
import org.spongepowered.math.vector.Vector3d;
5758
import org.spongepowered.plugin.PluginContainer;
5859

@@ -62,6 +63,7 @@
6263
* Standard keys for use within {@link EventContext}s.
6364
*/
6465
@SuppressWarnings("unused")
66+
@NoFactoryMethod
6567
public final class EventContextKeys {
6668

6769
// @formatter:off

0 commit comments

Comments
 (0)