From 4c00060c7c603b9f6e069986f743f3bb19972d54 Mon Sep 17 00:00:00 2001 From: ABHAY SINGH <75938293+ABHAY0O7@users.noreply.github.com> Date: Tue, 27 Jul 2021 14:47:14 +0530 Subject: [PATCH] Implemented abstract model of the plugin deployement Implemented the default plugin, task and action classes to develope the plugin. --- depclean-gradle-plugin/build.gradle | 1 + .../se/kth/depclean/DepCleanGradleAction.java | 19 +++++++++++ .../se/kth/depclean/DepCleanGradlePlugin.java | 34 +++++++++++++++++++ .../se/kth/depclean/DepCleanGradleTask.java | 27 +++++++++++++++ 4 files changed, 81 insertions(+) create mode 100644 depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleAction.java create mode 100644 depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradlePlugin.java create mode 100644 depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleTask.java diff --git a/depclean-gradle-plugin/build.gradle b/depclean-gradle-plugin/build.gradle index dd7ea3df..e246e6e3 100644 --- a/depclean-gradle-plugin/build.gradle +++ b/depclean-gradle-plugin/build.gradle @@ -14,6 +14,7 @@ repositories { dependencies { implementation(gradleApi()) implementation('se.kth.castor:depclean-core:2.0.2-SNAPSHOT') + implementation('se.kth.castor:depclean-maven-plugin:2.0.2-SNAPSHOT') compileOnly('org.projectlombok:lombok:1.18.20') testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0' diff --git a/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleAction.java b/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleAction.java new file mode 100644 index 00000000..a7877165 --- /dev/null +++ b/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleAction.java @@ -0,0 +1,19 @@ +package se.kth.depclean; + +import lombok.SneakyThrows; +import org.gradle.api.Action; +import org.gradle.api.Project; +import org.jetbrains.annotations.NotNull; + + +/** + * Depclean default and only action. + */ +public class DepCleanGradleAction implements Action { + + @SneakyThrows + @Override + public void execute(@NotNull Project project) { + // To be continued. + } +} diff --git a/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradlePlugin.java b/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradlePlugin.java new file mode 100644 index 00000000..dcec0901 --- /dev/null +++ b/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradlePlugin.java @@ -0,0 +1,34 @@ +package se.kth.depclean; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.jetbrains.annotations.NotNull; + +/** + * This plugin checks the bytecode of a gradle project and configure out whether a dependency + * is used in that project or not. After analysis, it also configures out the source of that + * dependency i.e. whether
+ * 1) It is declared directly in your build.gradle file or,
+ * 2) Inherited from any direct dependency or,
+ * 3) Just a transitive dependency. + */ +public class DepCleanGradlePlugin implements Plugin { + + @Override + public void apply(@NotNull Project project) { + // Creating the default task. + createTask(project); + } + + /** + * Creating a task that performs the DepClean default action. + * + * @param project The Gradle project. + */ + public void createTask(final Project project) { + final String depCleanTaskName = "debloat"; + DepCleanGradleTask task = project.getTasks().create(depCleanTaskName, DepCleanGradleTask.class); + task.setGroup("dependency management"); + task.setDescription("Analyze the project byte-code and configure out the debloated dependencies."); + } +} diff --git a/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleTask.java b/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleTask.java new file mode 100644 index 00000000..75c3907a --- /dev/null +++ b/depclean-gradle-plugin/src/main/java/se/kth/depclean/DepCleanGradleTask.java @@ -0,0 +1,27 @@ +package se.kth.depclean; + +import org.gradle.api.Action; +import org.gradle.api.DefaultTask; +import org.gradle.api.Project; +import org.gradle.api.tasks.TaskAction; + +/** + * Task that configures out the bloated dependencies. + */ +public class DepCleanGradleTask extends DefaultTask { + + /** + * Action that analyzes the project dependencies and show the results. + */ + @TaskAction + public void analyzeProject() { + + getProject().getLogger().lifecycle("Starting DepClean dependency analysis"); + + // Applying the only default action on the project and it's sub-projects (if any). + Action defaultAction = new DepCleanGradleAction(); + getProject().allprojects(defaultAction); + + } + +}