[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