Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,16 @@
import io.freefair.gradle.plugins.lombok.tasks.LombokConfig;
import io.freefair.gradle.plugins.lombok.tasks.LombokTask;
import lombok.Getter;

import java.lang.reflect.Method;

import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.Dependency;
import org.gradle.api.attributes.DocsType;
import org.gradle.api.internal.plugins.DslObject;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginExtension;
import org.gradle.api.plugins.quality.CodeQualityExtension;
import org.gradle.api.provider.Property;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.PathSensitivity;
Expand Down Expand Up @@ -47,7 +48,7 @@ public class LombokPlugin implements Plugin<Project> {
private LombokBasePlugin lombokBasePlugin;
private Project project;

private boolean spotbugConfigured;
private boolean spotbugsConfigured;

@Override
public void apply(Project project) {
Expand Down Expand Up @@ -123,10 +124,10 @@ private void configureSourceSetDefaults(SourceSet sourceSet) {
}

private void configureForSpotbugs(JavaPluginExtension javaPluginExtension) {
if (spotbugConfigured) {
if (spotbugsConfigured) {
return;
}
spotbugConfigured = true;
spotbugsConfigured = true;

javaPluginExtension.getSourceSets().all(sourceSet -> {
// Use findByName: sourceSets.all also fires for source sets added later
Expand All @@ -135,7 +136,7 @@ private void configureForSpotbugs(JavaPluginExtension javaPluginExtension) {
.findByName(sourceSet.getCompileOnlyConfigurationName());
if (compileOnly != null) {
compileOnly.withDependencies(deps -> {
String toolVersion = resolveSpotBugVersion();
String toolVersion = resolveSpotbugsVersion();
deps.add(project.getDependencies().create(
"com.github.spotbugs:spotbugs-annotations:" + toolVersion
));
Expand All @@ -144,18 +145,40 @@ private void configureForSpotbugs(JavaPluginExtension javaPluginExtension) {
});
}

private String resolveSpotBugVersion() {
private String resolveSpotbugsVersion() {
if (!project.getPlugins().hasPlugin("com.github.spotbugs")) {
return SPOTBUGS_DEFAULT_VERSION;
}

Object spotbugsExtension = project.getExtensions().getByName("spotbugs");
if (spotbugsExtension instanceof CodeQualityExtension) {
return ((CodeQualityExtension) spotbugsExtension).getToolVersion();
Object spotbugsExtension;
try {
spotbugsExtension = project.getExtensions().getByName("spotbugs");
} catch (Exception e) {
project.getLogger().info("Could not find SpotBugs extension; falling back to {}", SPOTBUGS_DEFAULT_VERSION);
return SPOTBUGS_DEFAULT_VERSION;
}

try {
Method method = spotbugsExtension.getClass().getMethod("getToolVersion");
Object result = method.invoke(spotbugsExtension);
if (result instanceof Property) {
@SuppressWarnings("unchecked")
Property<String> toolVersionProperty = (Property<String>) result;
String resolved = toolVersionProperty.getOrElse(SPOTBUGS_DEFAULT_VERSION);
return resolved.isBlank() ? SPOTBUGS_DEFAULT_VERSION : resolved;
} else if (result instanceof String version && !version.isBlank()) {
return version;
} else {
project.getLogger().debug("resolveSpotbugsVersion: getToolVersion() returned unexpected type {}; using default {}",
result == null ? "null" : result.getClass().getName(), SPOTBUGS_DEFAULT_VERSION);
}
} catch (ReflectiveOperationException | RuntimeException e) {
Throwable cause = e.getCause() != null ? e.getCause() : e;
project.getLogger().info("Could not resolve SpotBugs tool version via reflection ({}); falling back to {}",
cause.getMessage(), SPOTBUGS_DEFAULT_VERSION);
}

Property<String> toolVersionProperty = (Property<String>) new DslObject(spotbugsExtension).getAsDynamicObject().getProperty("toolVersion");
return toolVersionProperty.get();
return SPOTBUGS_DEFAULT_VERSION;
}

private void configureDelombokDefaults(Delombok delombok) {
Expand Down
Loading