emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/javaimp ec5bfd7: Improve Gradle support, remove Kotlin


From: Filipp Gunbin
Subject: [elpa] externals/javaimp ec5bfd7: Improve Gradle support, remove Kotlin task variant
Date: Wed, 27 Oct 2021 21:06:20 -0400 (EDT)

branch: externals/javaimp
commit ec5bfd7188fb39e88e1b346a5ca4172568fe85f5
Author: Filipp Gunbin <fgunbin@fastmail.fm>
Commit: Filipp Gunbin <fgunbin@fastmail.fm>

    Improve Gradle support, remove Kotlin task variant
---
 .gitignore                 |  1 +
 gradleTaskBody.inc.kts     | 27 -----------------
 javaimp-gradle.el          | 74 ++++++++++++++--------------------------------
 javaimp-init-script.gradle | 50 +++++++++++++++++++++++++++++++
 4 files changed, 74 insertions(+), 78 deletions(-)

diff --git a/.gitignore b/.gitignore
index 902e9cf..fe62052 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
 /javaimp-pkg.el
 /javaimp-autoloads.el
 *.elc
+*~
diff --git a/gradleTaskBody.inc.kts b/gradleTaskBody.inc.kts
deleted file mode 100644
index 942814f..0000000
--- a/gradleTaskBody.inc.kts
+++ /dev/null
@@ -1,27 +0,0 @@
-// use syntax which is valid both in Groovy and in Kotlin
-doLast {
-     println("id=${project.group};${project.path};${project.version}")
-     if (project.parent != null) {
-       
println("parent-id=${project.parent.group};${project.parent.path};${project.parent.version}")
-     }
-     println("file=${project.buildFile}")
-     println("build-dir=${project.buildDir}")
-     if (project.pluginManager.hasPlugin("java")) {
-       // "archives" configuration and "sourceSets" property defined by java 
plugin
-       println("final-name=" + 
project.configurations.getByName("archives").artifacts.stream()
-         .filter { it.type.equals("jar") || it.type.equals("war") }
-         .map { it.file.path }
-         .findFirst()
-         .orElse(""))
-       println("source-dirs=" + project.sourceSets.stream()
-         .flatMap { it.allJava.srcDirs.stream().map { it.path } }
-         .collect(Collectors.joining(File.pathSeparator)))
-       println("dep-jars=" + project.sourceSets.stream()
-         .flatMap { it.compileClasspath.files.stream().filter { 
it.name.endsWith("jar") }.map { it.path } }
-         .collect(Collectors.joining(File.pathSeparator)))
-     } else {
-       println("final-name=")
-       println("source-dirs=")
-       println("dep-jars=")
-     }
-}
diff --git a/javaimp-gradle.el b/javaimp-gradle.el
index e5c3a50..d7e3753 100644
--- a/javaimp-gradle.el
+++ b/javaimp-gradle.el
@@ -20,22 +20,14 @@
 
 (require 'javaimp-util)
 
-(defconst javaimp--gradle-task-body
-  (with-temp-buffer
-    (insert-file-contents
-     (expand-file-name "gradleTaskBody.inc.kts" javaimp--basedir))
-    (buffer-string))
-  "Task body, uses syntax which can be used both in Groovy and Kotlin")
-
 (defun javaimp--gradle-visit (file)
   "Calls gradle on FILE to get various project information.
 
 Passes specially crafted init file as -I argument to gradle and
-invokes task contained in it.  This task returns all needed
+invokes task contained in it.  This task outputs all needed
 information."
   (message "Visiting Gradle build file %s..." file)
   (let* ((alists (javaimp--gradle-call file
-                                       javaimp--gradle-task-body
                                        #'javaimp--gradle-handler
                                        "javaimpTask"))
          (modules (mapcar (lambda (alist)
@@ -119,52 +111,32 @@ descriptor."
 (defun javaimp--gradle-fetch-dep-jars-path (module)
   ;; Always invoke on root file becase module's file may not exist,
   ;; even if reported by Gradle as project.buildFile
-  (javaimp--gradle-call (javaimp-module-file-orig module)
-                        javaimp--gradle-task-body
-                        (lambda ()
-                          (re-search-forward "^dep-jars=\\(.*\\)$")
-                          (match-string 1))
-                        (concat (if (javaimp-module-parent-id module)
-                                    (concat ":" (javaimp-id-artifact 
(javaimp-module-id module))))
-                                ":javaimpTask")))
-
-(defun javaimp--gradle-call (file init-script-body handler task)
-  (let* ((is-kotlin (equal (file-name-extension file) "kts"))
-         (init-file
-          (make-temp-file "javaimp" nil
-                          (if is-kotlin ".kts")
-                          (funcall (if is-kotlin
-                                       #'javaimp--gradle-init-script-kotlin
-                                     #'javaimp--gradle-init-script)
-                                   init-script-body)))
-         (local-gradlew (concat (file-name-directory file) "gradlew")))
+  (javaimp--gradle-call
+   (javaimp-module-file-orig module)
+   (lambda ()
+     (re-search-forward "^dep-jars=\\(.*\\)$")
+     (match-string 1))
+   (concat (if (javaimp-module-parent-id module)
+               (concat ":" (javaimp-id-artifact (javaimp-module-id module))))
+           ":javaimpTask")))
+
+(defun javaimp--gradle-call (file handler task)
+  (let* ((local-gradlew (concat (file-name-directory file) "gradlew"))
+         (gradlew (if (file-exists-p local-gradlew)
+                      local-gradlew
+                    javaimp-gradle-program)))
     (javaimp--call-build-tool
-     (if (file-exists-p local-gradlew)
-         local-gradlew
-       javaimp-gradle-program)
+     gradlew
      handler
      "-q"
+     ;; It's easier for us to track jars instead of classes for java-library
+     ;; projects.  See
+     ;; 
https://docs.gradle.org/current/userguide/java_library_plugin.html#sec:java_library_classes_usage
+     "-Dorg.gradle.java.compile-classpath-packaging=true"
      "-b" (javaimp-cygpath-convert-maybe file)
-     "-I" (javaimp-cygpath-convert-maybe init-file)
+     "-I" (javaimp-cygpath-convert-maybe
+           (expand-file-name "javaimp-init-script.gradle"
+                             javaimp--basedir))
      task)))
 
-
-(defun javaimp--gradle-init-script (body)
-  (concat "
-import java.io.File
-import java.util.stream.Collectors
-allprojects {
-  task javaimpTask {"
-          body
-          "} }"))
-
-(defun javaimp--gradle-init-script-kotlin (body)
-  (concat "
-import java.io.File
-import java.util.stream.Collectors
-allprojects {
-  tasks.register(\"javaimpTask\") {"
-          body
-          "} }"))
-
 (provide 'javaimp-gradle)
diff --git a/javaimp-init-script.gradle b/javaimp-init-script.gradle
new file mode 100644
index 0000000..096fb52
--- /dev/null
+++ b/javaimp-init-script.gradle
@@ -0,0 +1,50 @@
+import java.io.File
+import java.util.stream.Collectors
+
+allprojects {
+    task javaimpTask {
+        doLast {
+            println("id=${project.group};${project.path};${project.version}")
+            if (project.parent != null) {
+                print("parent-id=${project.parent.group};")
+                println("${project.parent.path};${project.parent.version}")
+            }
+            println("file=${project.buildFile}")
+            println("build-dir=${project.buildDir}")
+
+            String finalName = ""
+            String sourceDirs = ""
+            String depJars = ""
+            if (project.pluginManager.hasPlugin("java")) {
+                // "archives" configuration and "sourceSets" property
+                // are defined by Java plugin
+
+                finalName = 
project.configurations.getByName("archives").artifacts.stream()
+                    .filter {
+                        it.type.equals("jar") || it.type.equals("war")
+                    }
+                    .map { it.file.path }
+                    .findFirst()
+                    .orElse("")
+                sourceDirs = project.sourceSets.stream()
+                    .flatMap {
+                        it.allJava.srcDirs.stream()
+                            .map { it.path }
+                    }
+                    .collect(Collectors.joining(File.pathSeparator))
+                depJars = project.sourceSets.stream()
+                    .flatMap {
+                        it.compileClasspath.files.stream()
+                            .filter {
+                                it.name.endsWith("jar")
+                            }
+                            .map { it.path }
+                    }
+                    .collect(Collectors.joining(File.pathSeparator))
+            }
+            println("final-name=${finalName}")
+            println("source-dirs=${sourceDirs}")
+            println("dep-jars=${depJars}")
+        }
+    }
+}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]