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

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

[elpa] scratch/javaimp-gradle 480d172 1/2: More fixes for gradle


From: Filipp Gunbin
Subject: [elpa] scratch/javaimp-gradle 480d172 1/2: More fixes for gradle
Date: Thu, 31 Oct 2019 08:13:12 -0400 (EDT)

branch: scratch/javaimp-gradle
commit 480d17280e713cd32b5a01109b1b51b5e1cfb989
Author: Filipp Gunbin <address@hidden>
Commit: Filipp Gunbin <address@hidden>

    More fixes for gradle
---
 packages/javaimp/javaimp-gradle.el | 120 ++++++++++++++++---------------------
 packages/javaimp/javaimp-maven.el  |  18 +++---
 packages/javaimp/javaimp.el        |  36 +++++------
 3 files changed, 77 insertions(+), 97 deletions(-)

diff --git a/packages/javaimp/javaimp-gradle.el 
b/packages/javaimp/javaimp-gradle.el
index d0ff6b3..300bd9a 100644
--- a/packages/javaimp/javaimp-gradle.el
+++ b/packages/javaimp/javaimp-gradle.el
@@ -23,10 +23,37 @@
 
 (defcustom javaimp-gradle-program "gradle"
   "Path to the `gradle' program.  Customize it if the program is
-not on `exec-path'."
+not on `exec-path'.  If the visited project's directory contains
+gradlew program, it is used in preference."
   :group 'javaimp
   :type 'string)
 
+(defconst javaimp--gradle-get-info-action
+  "doLast {
+     println(\"id=${project.group}:${project.name}:${project.version}\")
+     if (project.parent != null) {
+       
println(\"parent-id=${project.parent.group}:${project.parent.name}:${project.parent.version}\")
+     }
+     println(\"file=${project.buildFile}\")
+     println(\"final-name=${project.archivesBaseName}\")
+     println(\"source-dirs=\" + sourceSets.stream()
+       .flatMap { it.java.srcDirs.stream().map { it.path } }
+       .collect(Collectors.joining(File.pathSeparator)))
+     println(\"build-dir=${project.buildDir}\")
+     println(\"dep-jars=\" + sourceSets.stream()
+       .flatMap { it.compileClasspath.files.stream().filter { 
it.name.endsWith(\"jar\") }.map { it.path } }
+       .collect(Collectors.joining(File.pathSeparator)))
+}"
+     "Task body, uses Java syntax to be reused in both Groovy and Kotlin")
+
+(defconst javaimp--gradle-get-jars-action
+  "doLast {
+     println(sourceSets.stream()
+       .flatMap { it.compileClasspath.files.stream().filter { 
it.name.endsWith(\"jar\") }.map { it.path } }
+       .collect(Collectors.joining(File.pathSeparator)))
+}"
+  "Task body, uses Java syntax to be reused in both Groovy and Kotlin")
+
 (defun javaimp--gradle-visit (file)
   "Calls gradle on FILE to get various project information.
 
@@ -35,8 +62,7 @@ invokes task contained in it.  This task returns all needed
 information."
   (message "Visiting Gradle build file %s..." file)
   (let* ((alists (javaimp--gradle-call file
-                                       javaimp--gradle-init-script
-                                       javaimp--gradle-init-script-kotlin
+                                       javaimp--gradle-get-info-action
                                        #'javaimp--gradle-handler
                                        "javaimpTask"))
          (modules (mapcar (lambda (alist)
@@ -72,13 +98,8 @@ information."
    :file (cdr (assq 'file alist))
    :file-orig file-orig
    :final-name (cdr (assq 'final-name alist))
-   :packaging "jar"                     ;TODO
-   :source-dir (file-name-as-directory
-                (javaimp-cygpath-convert-maybe
-                 (cdr (assq 'source-dir alist))))
-   :test-source-dir (file-name-as-directory
-                     (javaimp-cygpath-convert-maybe
-                      (cdr (assq 'test-source-dir alist))))
+   :source-dirs (javaimp--split-native-path
+                 (cdr (assq 'source-dirs alist)))
    :build-dir (file-name-as-directory
                (javaimp-cygpath-convert-maybe
                 (cdr (assq 'build-dir alist))))
@@ -99,8 +120,7 @@ information."
   ;; local gradlew which needs to be invoked will usually reside
   ;; alongside top-level build file
   (javaimp--gradle-call (javaimp-module-file-orig module)
-                        javaimp--gradle-init-script-dep-jars-only
-                        javaimp--gradle-init-script-dep-jars-only-kotlin
+                        javaimp--gradle-get-jars-action
                         (lambda ()
                           ;; expect just a single line
                           (thing-at-point 'line))
@@ -108,11 +128,13 @@ information."
                                 (javaimp-id-artifact (javaimp-module-id 
module)))))
 
 
-(defun javaimp--gradle-call (file init-script init-script-kotlin handler task)
+(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")
-                                    (if is-kotlin init-script-kotlin 
init-script)))
+                                    (if is-kotlin
+                                        (javaimp--gradle-init-script-kotlin 
init-script-body)
+                                      (javaimp--gradle-init-script 
init-script-body))))
          (local-gradlew (concat (file-name-directory file) "gradlew")))
     (javaimp--call-build-tool (if (file-exists-p local-gradlew)
                                   local-gradlew
@@ -124,58 +146,22 @@ information."
                               task)))
 
 
-(defconst javaimp--gradle-init-script
-  "allprojects {
-    task javaimpTask {
-        doLast {
-            println \"id=${project.group}:${project.name}:${project.version}\"
-            if (project.parent != null) {
-                println 
\"parent-id=${project.parent.group}:${project.parent.name}:${project.parent.version}\"
-            }
-            println \"file=${project.buildFile}\"
-            println \"final-name=${project.archivesBaseName}\"
-            println 'source-dir=' + sourceSets.main.java.srcDirs.collect { 
it.path }.join(':')
-            println 'test-source-dir=' + sourceSets.test.java.srcDirs.collect 
{ it.path }.join(':')
-            println \"build-dir=${project.buildDir}\"
-            println \"dep-jars=${configurations.testCompile.asPath}\"
-        }
-    }
-}")
-
-(defconst javaimp--gradle-init-script-dep-jars-only
-  "allprojects {
-    task javaimpTask {
-        doLast {
-            println \"${configurations.testCompile.asPath}\"
-        }
-    }
-}")
-
-(defconst javaimp--gradle-init-script-kotlin
-  "allprojects {
-    tasks.register(\"javaimpTask\") {
-        doLast {
-            println(\"id=${project.group}:${project.name}:${project.version}\")
-            if (project.parent != null) {
-                
println(\"parent-id=${project.parent.group}:${project.parent.name}:${project.parent.version}\")
-            }
-            println(\"file=${project.buildFile}\")
-            println(\"final-name=${project.archivesBaseName}\")
-            
println(\"source-dir=${sourceSets.main.java.sourceDirectories.asPath}\")
-            
println(\"test-source-dir=${sourceSets.test.java.sourceDirectories.asPath}\")
-            println(\"build-dir=${project.buildDir}\")
-            println(\"dep-jars=${configurations.testCompile.asPath}\")
-        }
-    }
-}")
-
-(defconst javaimp--gradle-init-script-dep-jars-only-kotlin
-  "allprojects {
-    tasks.register(\"javaimpTask\") {
-        doLast {
-            println(\"${configurations.testCompile.asPath}\")
-        }
-    }
-}")
+(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/packages/javaimp/javaimp-maven.el 
b/packages/javaimp/javaimp-maven.el
index b39d0b0..e9a79f7 100644
--- a/packages/javaimp/javaimp-maven.el
+++ b/packages/javaimp/javaimp-maven.el
@@ -102,16 +102,14 @@ of <project> elements"
      :file-orig file-orig
      :final-name (javaimp--xml-first-child
                  (javaimp--xml-child 'finalName build-elt))
-     :packaging (javaimp--xml-first-child
-                (javaimp--xml-child 'packaging elt))
-     :source-dir (file-name-as-directory
-                 (javaimp-cygpath-convert-maybe
-                  (javaimp--xml-first-child
-                   (javaimp--xml-child 'sourceDirectory build-elt))))
-     :test-source-dir (file-name-as-directory
-                      (javaimp-cygpath-convert-maybe
-                       (javaimp--xml-first-child
-                        (javaimp--xml-child 'testSourceDirectory build-elt))))
+     :source-dirs (list (file-name-as-directory
+                        (javaimp-cygpath-convert-maybe
+                         (javaimp--xml-first-child
+                          (javaimp--xml-child 'sourceDirectory build-elt))))
+                        (file-name-as-directory
+                        (javaimp-cygpath-convert-maybe
+                         (javaimp--xml-first-child
+                          (javaimp--xml-child 'testSourceDirectory 
build-elt)))))
      :build-dir (file-name-as-directory
                 (javaimp-cygpath-convert-maybe
                  (javaimp--xml-first-child (javaimp--xml-child 'directory 
build-elt))))
diff --git a/packages/javaimp/javaimp.el b/packages/javaimp/javaimp.el
index fd88b4e..aa2a107 100644
--- a/packages/javaimp/javaimp.el
+++ b/packages/javaimp/javaimp.el
@@ -165,8 +165,7 @@ to the completion alternatives list."
   file
   file-orig
   final-name
-  packaging
-  source-dir test-source-dir build-dir
+  source-dirs
   dep-jars
   load-ts
   dep-jars-path-fetcher)
@@ -344,8 +343,9 @@ classes in the current module."
                                      (error "Buffer is not visiting a 
file!"))))
          (node (or (javaimp--find-node
                     (lambda (m)
-                      (or (string-prefix-p (javaimp-module-source-dir m) file)
-                          (string-prefix-p (javaimp-module-test-source-dir m) 
file))))
+                       (seq-some (lambda (dir)
+                                   (string-prefix-p dir file))
+                                 (javaimp-module-source-dirs m))))
                    (error "Cannot find module by file: %s" file))))
      (javaimp--update-module-maybe node)
      (let ((module (javaimp-node-contents node)))
@@ -368,22 +368,18 @@ classes in the current module."
 (defun javaimp--get-module-classes (module)
   "Returns list of top-level classes in current module"
   (append
-   (let ((build-dir (javaimp-module-build-dir module)))
-     ;; additional source dirs
-     (and (seq-mapcat
-          (lambda (rel-dir)
-            (let ((dir (concat build-dir (file-name-as-directory rel-dir))))
-              (and (file-accessible-directory-p dir)
-                   (javaimp--get-directory-classes dir nil))))
-          javaimp-additional-source-dirs)))
-   ;; source dir
-   (let ((dir (javaimp-module-source-dir module)))
-     (and (file-accessible-directory-p dir)
-         (javaimp--get-directory-classes dir nil)))
-   ;; test source dir
-   (let ((dir (javaimp-module-test-source-dir module)))
-     (and (file-accessible-directory-p dir)
-         (javaimp--get-directory-classes dir nil)))))
+   ;; source dirs
+   (seq-mapcat (lambda (dir)
+                 (and (file-accessible-directory-p dir)
+                     (javaimp--get-directory-classes dir nil)))
+               (javaimp-module-source-dirs module))
+   ;; additional source dirs
+   (seq-mapcat (lambda (rel-dir)
+                 (let ((dir (concat (javaimp-module-build-dir module)
+                                    (file-name-as-directory rel-dir))))
+                  (and (file-accessible-directory-p dir)
+                       (javaimp--get-directory-classes dir nil))))
+               javaimp-additional-source-dirs)))
 
 (defun javaimp--get-directory-classes (dir prefix)
   (append



reply via email to

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