added lombok plugin

This commit is contained in:
2021-06-17 08:44:52 +01:00
parent 7734adfd33
commit 3aa725a851
5 changed files with 157 additions and 0 deletions

15
lombok/build.gradle Normal file
View File

@@ -0,0 +1,15 @@
plugins {
id 'maven-publish'
id 'java-gradle-plugin'
}
version = "0.1"
gradlePlugin {
plugins {
create("LombokPlugin") {
id = "net.woggioni.gradle.lombok"
implementationClass = "net.woggioni.gradle.lombok.LombokPlugin"
}
}
}

View File

@@ -0,0 +1,52 @@
package net.woggioni.gradle.lombok;
import lombok.Getter;
import org.gradle.api.file.Directory;
import org.gradle.api.tasks.JavaExec;
import org.gradle.api.tasks.OutputDirectory;
import javax.inject.Inject;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class Delombok extends JavaExec {
@Getter
@OutputDirectory
private final File outputDir;
private static String buildClasspathString(Iterable<File> classpath) {
StringBuilder sb = new StringBuilder();
Iterator<File> it = classpath.iterator();
String separator = System.getProperty("path.separator");
if(it.hasNext()) {
sb.append(it.next().getPath());
}
while(it.hasNext()) {
sb.append(separator);
sb.append(it.next().getPath());
}
for(File file : classpath) {
sb.append(file.getPath());
}
return sb.toString();
}
@Inject
public Delombok(File lombokJar, File outputDir, Iterable<File> sourceDirs, String classpath) {
this.outputDir = outputDir;
classpath(lombokJar);
List<String> args = new ArrayList<>();
args.add("delombok");
args.add("-d");
args.add(outputDir.getPath());
args.add("-c");
args.add(classpath);
for(File sourceDir : sourceDirs) args.add(sourceDir.getPath());
Object[] argsArray = new String[args.size()];
args.toArray(argsArray);
args(argsArray);
}
}

View File

@@ -0,0 +1,13 @@
package net.woggioni.gradle.lombok;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.gradle.api.provider.Property;
import javax.inject.Inject;
@RequiredArgsConstructor(onConstructor_ = { @Inject })
public class LombokExtension {
@Getter
private final Property<String> version;
}

View File

@@ -0,0 +1,76 @@
package net.woggioni.gradle.lombok;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.artifacts.dsl.DependencyHandler;
import org.gradle.api.model.ObjectFactory;
import org.gradle.api.plugins.JavaPlugin;
import org.gradle.api.plugins.JavaPluginConvention;
import org.gradle.api.provider.Provider;
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.javadoc.Javadoc;
import java.io.File;
import java.util.Map;
public class LombokPlugin implements Plugin<Project> {
@Override
public void apply(Project project) {
project.getPluginManager().apply(JavaPlugin.class);
ObjectFactory objectFactory = project.getObjects();
LombokExtension ext = project.getExtensions()
.create("lombok", LombokExtension.class,
objectFactory.property(String.class).convention("1.18.20")
);
JavaPluginConvention javaPluginConvention = project.getConvention().getPlugin(JavaPluginConvention.class);
SourceSetContainer sourceSetContainer = javaPluginConvention.getSourceSets();
project.afterEvaluate(p -> {
Provider<Map<String, String>> dependencyNotationProvider = project.provider(() ->
Map.of("group", "org.projectlombok",
"name", "lombok",
"version", ext.getVersion().get())
);
Configuration lombokConfiguration = project.getConfigurations().create("lombok");
project.getDependencies().addProvider(
lombokConfiguration.getName(),
dependencyNotationProvider,
externalModuleDependency -> {
}
);
for (SourceSet ss : sourceSetContainer) {
DependencyHandler dependencyHandler = project.getDependencies();
dependencyHandler.addProvider(
ss.getCompileOnlyConfigurationName(),
dependencyNotationProvider,
externalModuleDependency -> {
});
dependencyHandler.addProvider(
ss.getAnnotationProcessorConfigurationName(),
dependencyNotationProvider,
externalModuleDependency -> {
});
TaskContainer tasks = project.getTasks();
String javadocTaskName = ss.getJavadocTaskName();
Task javadocTask = tasks.findByName(javadocTaskName);
if(javadocTask != null) {
String delombokTaskName = "delombok" + ss.getName().substring(0, 1).toUpperCase() + ss.getName().substring(1);
File outputDir = new File(new File(project.getBuildDir(), "delombok"), ss.getName());
Provider<Delombok> delombokTask = tasks.register(delombokTaskName,
Delombok.class,
lombokConfiguration.getSingleFile(),
outputDir,
ss.getJava().getSrcDirs(),
ss.getCompileClasspath().getAsPath()
);
Javadoc javadoc = (Javadoc) javadocTask;
javadoc.setSource(outputDir);
javadoc.getInputs().files(delombokTask);
}
}
});
}
}

View File

@@ -15,3 +15,4 @@ include("dependency-export")
include("jpms-check")
include("multi-release-jar")
include("wildfly")
include("lombok")