@ -61,7 +61,7 @@ _gradle_does_task_list_need_generating () {
}
##############
# Parse the tasks from `gradle(w) tasks --all` into .gradletasknamecache
# Parse the tasks from `gradle(w) tasks --all` and return them to the calling function.
# All lines in the output from gradle(w) that are between /^-+$/ and /^\s*$/
# are considered to be tasks. If and when gradle adds support for listing tasks
# for programmatic parsing, this method can be deprecated.
@ -76,7 +76,7 @@ _gradle_parse_tasks () {
task_name_buffer = ""
elif [ [ $line = ~ ^\s *$ ] ] ; then
if [ [ " $lines_might_be_tasks " = true ] ] ; then
# If a newline is found, send the buffer to .gradletasknamecache
# If a newline is found, echo the buffer to the calling function
while read -r task; do
echo $task | awk '/[a-zA-Z0-9:-]+/ {print $1}'
done <<< " $task_name_buffer "
@ -90,6 +90,25 @@ _gradle_parse_tasks () {
done <<< " $1 "
}
##############
# Gradle tasks from subprojects are allowed to be executed without specifying
# the subproject; that task will then be called on all subprojects.
# gradle(w) tasks --all only lists tasks per subproject, but when autocompleting
# we often want to be able to run a specific task on all subprojects, e.g.
# "gradle clean".
# This function uses the list of tasks from "gradle tasks --all", and for each
# line grabs everything after the last ":" and combines that output with the original
# output. The combined list is returned as the result of this function.
##############
_gradle_parse_and_extract_tasks ( ) {
# All tasks
tasks = $( _gradle_parse_tasks " $1 " )
# Task name without sub project(s) prefix
simple_tasks = $( echo $tasks | awk 'BEGIN { FS = ":" } { print $NF }' )
echo " $tasks \n $simple_tasks "
}
##############################################################################
# Discover the gradle tasks by running "gradle tasks --all"
############################################################################
@ -97,7 +116,7 @@ _gradle_tasks () {
if [ [ -f build.gradle ] ] ; then
_gradle_arguments
if _gradle_does_task_list_need_generating; then
_gradle_parse_tasks " $( gradle tasks --all) " > .gradletasknamecache
_gradle_parse_and_extract_ tasks " $( gradle tasks --all) " > .gradletasknamecache
fi
compadd -X "==== Gradle Tasks ====" $( cat .gradletasknamecache)
fi
@ -107,7 +126,7 @@ _gradlew_tasks () {
if [ [ -f build.gradle ] ] ; then
_gradle_arguments
if _gradle_does_task_list_need_generating; then
_gradle_parse_tasks " $( ./gradlew tasks --all) " > .gradletasknamecache
_gradle_parse_and_extract_ tasks " $( ./gradlew tasks --all) " > .gradletasknamecache
fi
compadd -X "==== Gradlew Tasks ====" $( cat .gradletasknamecache)
fi