diff --git a/build.gradle.kts b/build.gradle.kts index 93d09a3..084d506 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -65,7 +65,10 @@ fun allSources(): List { tasks.javadoc { dependsOn(embed) setSource(allSources()) - exclude("datadog/instrument/glue", "datadog/instrument/utils/JVM.java") + exclude( + "datadog/instrument/glue", + "datadog/instrument/utils/JVM.java", + "**/*.class") val javadocOptions = (options as StandardJavadocDocletOptions) if (JavaVersion.current().isJava9Compatible) { javadocOptions.addBooleanOption("html5", true) @@ -76,6 +79,7 @@ tasks.javadoc { tasks.named("sourcesJar") { dependsOn(embed) from(allSources()) + exclude("**/*.class") } publishing { diff --git a/buildSrc/src/main/kotlin/instrument-glue.gradle.kts b/buildSrc/src/main/kotlin/instrument-glue.gradle.kts index 0a12e92..e68647b 100644 --- a/buildSrc/src/main/kotlin/instrument-glue.gradle.kts +++ b/buildSrc/src/main/kotlin/instrument-glue.gradle.kts @@ -20,6 +20,7 @@ sourceSets { val glueImplementation = configurations.getByName("glueImplementation") dependencies { glueImplementation(libs.asm) + glueImplementation(libs.asm.commons) glueImplementation(libs.spotbugs.annotations) glueImplementation(project(":utils")) } @@ -36,9 +37,17 @@ val generateGlue = tasks.register("generateGlue") { mainClass = "datadog.instrument.glue.GlueGenerator" classpath = sourceSets["glue"].runtimeClasspath args = listOf(resourcePath.toString(), javaPath.toString()) + glue - outputs.dirs(resourcePath, javaPath) + outputs.dirs(generatedGlueResources, generatedGlueJava) } tasks.processResources { dependsOn(generateGlue) } tasks.compileJava { dependsOn(generateGlue) } tasks.named("sourcesJar") { dependsOn(generateGlue) } + +// exclude generated synthetic class resources from spotbugs +sourceSets.configureEach { + val compiledClasses = output.classesDirs + tasks.named(getTaskName("spotbugs", null)) { + classDirs.setFrom(compiledClasses) + } +} diff --git a/class-inject/src/glue/java/datadog/instrument/glue/DefineClassGlueGenerator.java b/class-inject/src/glue/java/datadog/instrument/glue/DefineClassGlueGenerator.java index 224ecac..aa926ce 100644 --- a/class-inject/src/glue/java/datadog/instrument/glue/DefineClassGlueGenerator.java +++ b/class-inject/src/glue/java/datadog/instrument/glue/DefineClassGlueGenerator.java @@ -126,7 +126,7 @@ static byte[] generateBytecode(String unsafeNamespace) { cw.visit( V1_8, - ACC_PUBLIC | ACC_FINAL, + ACC_PUBLIC | ACC_FINAL | ACC_SYNTHETIC, DEFINECLASSGLUE_CLASS, null, OBJECT_CLASS, diff --git a/utils/build.gradle.kts b/utils/build.gradle.kts index 5693265..7e79655 100644 --- a/utils/build.gradle.kts +++ b/utils/build.gradle.kts @@ -3,7 +3,6 @@ plugins { } dependencies { - sampleBytecode("org.springframework:spring-web:7.0.9") jmh(project(":testing")) } diff --git a/utils/src/main/java/datadog/instrument/glue/GlueGenerator.java b/utils/src/main/java/datadog/instrument/glue/GlueGenerator.java index d8637a4..b1a9062 100644 --- a/utils/src/main/java/datadog/instrument/glue/GlueGenerator.java +++ b/utils/src/main/java/datadog/instrument/glue/GlueGenerator.java @@ -7,6 +7,7 @@ package datadog.instrument.glue; import java.lang.reflect.Method; +import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; @@ -20,14 +21,16 @@ private GlueGenerator() {} * Entry-point for generating instrumentation glue into resource files or Java source code. * * @param args the command-line arguments - * @throws ReflectiveOperationException if the glue cannot be generated + * @throws Exception if the glue cannot be generated */ - public static void main(String[] args) throws ReflectiveOperationException { + public static void main(String[] args) throws Exception { if (args.length < 3) { throw new IllegalArgumentException("Expected: resource-path java-path glue-name..."); } Path resourcePath = Paths.get(args[0]); Path javaPath = Paths.get(args[1]); + Files.createDirectories(resourcePath); + Files.createDirectories(javaPath); for (int i = 2; i < args.length; i++) { Class generatorClass = Class.forName("datadog.instrument.glue." + args[i] + "Generator"); Method generateGlue = generatorClass.getMethod("generateGlue", Path.class, Path.class);