Skip to content

Commit 9d0c92a

Browse files
committed
Add annotation processing
1 parent 37f24a7 commit 9d0c92a

File tree

15 files changed

+214
-5
lines changed

15 files changed

+214
-5
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
plugins {
2+
java
3+
`maven-publish`
4+
}
5+
6+
publishing {
7+
publications {
8+
create<MavenPublication>("maven") {
9+
artifactId = "lavalink-annotation-processor"
10+
from(components["java"])
11+
}
12+
}
13+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package dev.arbjerg.lavalink.processor;
2+
3+
import javax.annotation.processing.*;
4+
import javax.lang.model.SourceVersion;
5+
import javax.lang.model.element.ElementKind;
6+
import javax.lang.model.element.TypeElement;
7+
import javax.tools.Diagnostic.Kind;
8+
import javax.tools.StandardLocation;
9+
import java.io.BufferedWriter;
10+
import java.io.IOException;
11+
import java.util.ArrayList;
12+
import java.util.List;
13+
import java.util.Set;
14+
15+
@SupportedSourceVersion(SourceVersion.RELEASE_17)
16+
@SupportedAnnotationTypes(LavalinkAnnotationProcessor.SPRING_CONFIGURATION)
17+
public class LavalinkAnnotationProcessor extends AbstractProcessor {
18+
19+
public static final String SPRING_CONFIGURATION = "org.springframework.context.annotation.Configuration";
20+
private TypeElement springConfigurationElement;
21+
private final List<CharSequence> configurationClasses = new ArrayList<>();
22+
23+
@Override
24+
public synchronized void init(final ProcessingEnvironment processingEnv) {
25+
springConfigurationElement = processingEnv.getElementUtils().getTypeElement(SPRING_CONFIGURATION);
26+
super.init(processingEnv);
27+
}
28+
29+
@Override
30+
public boolean process(final Set<? extends TypeElement> annotations, final RoundEnvironment roundEnv) {
31+
if (roundEnv.processingOver()) {
32+
writeStorage();
33+
return false;
34+
}
35+
var newConfigurations = roundEnv.getElementsAnnotatedWith(springConfigurationElement)
36+
.stream()
37+
.filter(element -> element.getKind() == ElementKind.CLASS)
38+
.map(clazz -> processingEnv.getElementUtils().getBinaryName((TypeElement) clazz))
39+
.toList();
40+
processingEnv.getMessager().printMessage(Kind.NOTE, "Found the following new configurations: " + newConfigurations);
41+
configurationClasses.addAll(newConfigurations);
42+
return false;
43+
}
44+
45+
private void writeStorage() {
46+
try (var resource = new BufferedWriter(processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", "META-INF/configurations.idx").openWriter())) {
47+
for (CharSequence className : configurationClasses) {
48+
resource.write(className.toString());
49+
resource.newLine();
50+
}
51+
} catch (IOException e) {
52+
processingEnv.getMessager().printMessage(Kind.ERROR, e.getMessage());
53+
throw new RuntimeException(e);
54+
}
55+
}
56+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
dev.arbjerg.lavalink.processor.LavalinkAnnotationProcessor

build.gradle.kts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@ plugins {
22
`kotlin-dsl`
33
alias(libs.plugins.gradle.publish)
44
`maven-publish`
5+
alias(libs.plugins.buildconfig)
56
}
67

7-
group = "dev.arbjerg"
8-
version = "1.1.2"
8+
allprojects {
9+
group = "dev.arbjerg"
10+
version = "2.0.0"
911

10-
repositories {
11-
mavenCentral()
12+
repositories {
13+
mavenCentral()
14+
}
1215
}
1316

1417
kotlin {
@@ -19,6 +22,11 @@ dependencies {
1922
compileOnly(kotlin("gradle-plugin"))
2023
}
2124

25+
buildConfig {
26+
packageName("dev.arbjerg.lavalink.gradle")
27+
buildConfigField("String", "VERSION", provider { "\"${project.version}\"" })
28+
}
29+
2230
gradlePlugin {
2331
plugins {
2432
create("lavalink-gradle-plugin") {

example/build.gradle.kts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,18 @@ plugins {
66
group = "dev.arbjerg.lavalink.example"
77
version = "1.0.0"
88

9+
repositories {
10+
mavenLocal()
11+
mavenCentral()
12+
}
13+
914
dependencies {
1015
// Only here to test dependency handling
1116
// And Kotlin is best dependency <3
1217
implementation(kotlin("stdlib", "2.0.21"))
1318
implementation("org.jetbrains.kotlinx", "kotlinx-serialization-json", "1.7.3")
1419
implementation("org.jetbrains.kotlinx", "kotlinx-coroutines-core", "1.9.0")
20+
annotationProcessor("dev.arbjerg", "lavalink-annotation-processor", "2.0.0")
1521
}
1622

1723
java {

example/settings.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
12
includeBuild("..")

example/src/main/java/dev/arbjerg/lavalink/example/Plugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,10 @@
55
import org.jetbrains.annotations.NotNull;
66
import org.slf4j.Logger;
77
import org.slf4j.LoggerFactory;
8+
import org.springframework.context.annotation.Configuration;
89
import org.springframework.stereotype.Service;
910

11+
@Configuration
1012
@Service
1113
public class Plugin extends PluginEventHandler {
1214

gradle/libs.versions.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,9 @@
1+
[versions]
2+
ksp = "2.0.21-1.0.27"
3+
4+
[libraries]
5+
ksp-api = { group = "com.google.devtools.ksp", name = "symbol-processing-api", version.ref = "ksp" }
6+
17
[plugins]
28
gradle-publish = { id = "com.gradle.plugin-publish", version = "1.3.0" }
9+
buildconfig = { id = "com.github.gmazzo.buildconfig", version = "5.5.0" }
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
plugins {
2+
kotlin("jvm")
3+
}
4+
5+
kotlin {
6+
jvmToolchain(17)
7+
}
8+
9+
dependencies {
10+
implementation(libs.ksp.api)
11+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package dev.arbjerg.lavalink.processor
2+
3+
const val SPRING_CONFIGURATION = "org.springframework.context.annotation.Configuration"
4+
const val PF4J_EXTENSION = "org.pf4j.Extension"

0 commit comments

Comments
 (0)