branch: scratch/javaimp-gradle commit 66c8204255ed5fb5a2fc447b948a453eb901ff04 Author: Filipp Gunbin <fgun...@fastmail.fm> Commit: Filipp Gunbin <fgun...@fastmail.fm>
Fixes for gradle --- packages/javaimp/getInfo.inc.kts | 21 ++++++++++++++ packages/javaimp/getJarsOnly.inc.kts | 8 ++++++ packages/javaimp/javaimp-gradle.el | 54 +++++++++++++----------------------- 3 files changed, 48 insertions(+), 35 deletions(-) diff --git a/packages/javaimp/getInfo.inc.kts b/packages/javaimp/getInfo.inc.kts new file mode 100644 index 0000000..3aceb9b --- /dev/null +++ b/packages/javaimp/getInfo.inc.kts @@ -0,0 +1,21 @@ +// use syntax which is valid both in Groovy and in Kotlin +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("build-dir=${project.buildDir}") + if (project.hasProperty("sourceSets")) { + println("source-dirs=" + project.sourceSets.stream() + .flatMap { it.java.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("source-dirs=") + println("dep-jars=") + } +} diff --git a/packages/javaimp/getJarsOnly.inc.kts b/packages/javaimp/getJarsOnly.inc.kts new file mode 100644 index 0000000..4951255 --- /dev/null +++ b/packages/javaimp/getJarsOnly.inc.kts @@ -0,0 +1,8 @@ +// use syntax which is valid both in Groovy and in Kotlin +doLast { + if (project.hasProperty("sourceSets")) { + println(project.sourceSets.stream() + .flatMap { it.compileClasspath.files.stream().filter { it.name.endsWith("jar") }.map { it.path } } + .collect(Collectors.joining(File.pathSeparator))) + } +} diff --git a/packages/javaimp/javaimp-gradle.el b/packages/javaimp/javaimp-gradle.el index 62be517..9dc74fd 100644 --- a/packages/javaimp/javaimp-gradle.el +++ b/packages/javaimp/javaimp-gradle.el @@ -28,30 +28,16 @@ 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))) -}" +(defconst javaimp--gradle-get-info-script + (with-temp-buffer + (insert-file-contents "getInfo.inc.kts") + (buffer-string)) + "Task body, uses Java syntax to be reused in both Groovy and Kotlin") + +(defconst javaimp--gradle-get-jars-script + (with-temp-buffer + (insert-file-contents "getJarsOnly.inc.kts") + (buffer-string)) "Task body, uses Java syntax to be reused in both Groovy and Kotlin") (defun javaimp--gradle-visit (file) @@ -62,7 +48,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-get-info-action + javaimp--gradle-get-info-script #'javaimp--gradle-handler "javaimpTask")) (modules (mapcar (lambda (alist) @@ -75,18 +61,16 @@ information." (defun javaimp--gradle-handler () (goto-char (point-min)) - (let (alist res parts sym val) - (while (not (eobp)) - (setq parts (split-string (thing-at-point 'line) "[=\n]+" t)) - (setq sym (intern (or (nth 0 parts) - (error "Invalid line in gradle output: %s" - (thing-at-point 'line)))) - val (nth 1 parts)) + (let (alist res sym val) + (while (re-search-forward "^\\([[:alnum:]-]+\\)=\\(.*\\)$" nil t) + (setq sym (intern (match-string 1)) + val (match-string 2)) + (if (string-blank-p val) + (setq val nil)) (when (and (eq sym 'id) alist) ;start of next module (push alist res) (setq alist nil)) - (push (cons sym val) alist) - (forward-line 1)) + (push (cons sym val) alist)) (when alist ;last module (push alist res)) (nreverse res))) @@ -121,7 +105,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-get-jars-action + javaimp--gradle-get-jars-script (lambda () ;; expect just a single line (thing-at-point 'line))