branch: scratch/javaimp-gradle commit 480d17280e713cd32b5a01109b1b51b5e1cfb989 Author: Filipp Gunbin <fgun...@fastmail.fm> Commit: Filipp Gunbin <fgun...@fastmail.fm>
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