├── .gitignore ├── after ├── ftplugin │ ├── groovy.vim │ ├── java.vim │ ├── kotlin.vim │ └── xml.vim └── ftdetect │ ├── gradle.vim │ └── kotlin.vim ├── img ├── vim-android-conf.png └── vim-android-status.png ├── plugin └── gradle.vim ├── compiler └── gradle.vim ├── test ├── cache.vader ├── efm │ ├── gradle.efm │ ├── test05.efm │ ├── test01.efm │ └── test04.efm └── efm.vader ├── autoload ├── aapt.vim ├── lightline │ └── gradle.vim ├── ant.vim ├── cache.vim ├── ale_linters │ ├── android.vim │ └── java.vim ├── classpath.vim ├── xml │ └── manifest.vim ├── efm.vim ├── adb.vim ├── android.vim ├── job.vim └── gradle.vim ├── LICENSE ├── lua └── gradle │ └── health │ └── init.lua ├── tools └── efmsanity ├── CONTRIBUTING.md ├── README.md ├── gradle └── init.gradle └── doc └── vim-android.txt /.gitignore: -------------------------------------------------------------------------------- 1 | *.swp 2 | doc/tags 3 | -------------------------------------------------------------------------------- /after/ftplugin/groovy.vim: -------------------------------------------------------------------------------- 1 | call ale_linters#android#Define('groovy') 2 | -------------------------------------------------------------------------------- /after/ftdetect/gradle.vim: -------------------------------------------------------------------------------- 1 | autocmd BufNewFile,BufRead *.gradle setf groovy 2 | -------------------------------------------------------------------------------- /img/vim-android-conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsanson/vim-android/HEAD/img/vim-android-conf.png -------------------------------------------------------------------------------- /img/vim-android-status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsanson/vim-android/HEAD/img/vim-android-status.png -------------------------------------------------------------------------------- /after/ftdetect/kotlin.vim: -------------------------------------------------------------------------------- 1 | autocmd BufNewFile,BufRead *.kt setfiletype kotlin 2 | autocmd BufNewFile,BufRead *.kts setfiletype kotlin 3 | -------------------------------------------------------------------------------- /plugin/gradle.vim: -------------------------------------------------------------------------------- 1 | let g:gradle_test_dir = expand(':p:h:h') . '/test' 2 | let g:gradle_init_file = expand(':p:h:h') . '/gradle/init.gradle' 3 | let g:gradle_efm_sanity = expand(':p:h:h') . '/tools/efmsanity' 4 | -------------------------------------------------------------------------------- /after/ftplugin/java.vim: -------------------------------------------------------------------------------- 1 | if gradle#syncOnLoad() && gradle#isGradleProject() && !gradle#isGradleDepsCached() 2 | call gradle#sync() 3 | endif 4 | 5 | call gradle#setupGradleCommands() 6 | call android#setupAndroidCommands() 7 | call ale_linters#android#Define('java') 8 | -------------------------------------------------------------------------------- /after/ftplugin/kotlin.vim: -------------------------------------------------------------------------------- 1 | if gradle#syncOnLoad() && gradle#isGradleProject() && !gradle#isGradleDepsCached() 2 | call gradle#sync() 3 | endif 4 | 5 | call gradle#setupGradleCommands() 6 | call android#setupAndroidCommands() 7 | call ale_linters#android#Define('kotlin') 8 | -------------------------------------------------------------------------------- /compiler/gradle.vim: -------------------------------------------------------------------------------- 1 | let current_compiler = 'gradle' 2 | 3 | if exists(':CompilerSet') != 2 " for older vims 4 | command -nargs=* CompilerSet setlocal 5 | endif 6 | 7 | exec 'CompilerSet makeprg=' . efm#makeprg() 8 | exec 'CompilerSet errorformat=' . efm#escape(efm#efm()) 9 | -------------------------------------------------------------------------------- /test/cache.vader: -------------------------------------------------------------------------------- 1 | Execute (Test cache store): 2 | Assert empty(cache#get('store', 'key')) 3 | call cache#set('store', 'key', ['hello']) 4 | Assert !empty(cache#get('store', 'key')) 5 | AssertEqual ['hello'], cache#get('store', 'key') 6 | 7 | Execute(Test cache default): 8 | AssertEqual ['hello'], cache#get('store1', 'key1', ['hello']) 9 | -------------------------------------------------------------------------------- /after/ftplugin/xml.vim: -------------------------------------------------------------------------------- 1 | if gradle#syncOnLoad() && gradle#isGradleProject() 2 | 3 | if !gradle#isGradleDepsCached() 4 | call gradle#sync() 5 | endif 6 | 7 | if android#isAndroidProject() 8 | if expand('%:t') == 'AndroidManifest.xml' 9 | XMLns manifest 10 | else 11 | XMLns android 12 | endif 13 | endif 14 | 15 | endif 16 | 17 | call gradle#setupGradleCommands() 18 | call android#setupAndroidCommands() 19 | call ale_linters#android#Define('xml') 20 | -------------------------------------------------------------------------------- /autoload/aapt.vim: -------------------------------------------------------------------------------- 1 | function! aapt#bin() 2 | 3 | if exists('g:android_aapt_tool') 4 | return g:android_aapt_tool 5 | endif 6 | 7 | let l:aapt_paths = [ 8 | \ android#buildToolsPath() . '/aapt', 9 | \ 'aapt', 10 | \ android#buildToolsPath() . '/aapt2', 11 | \ 'aapt2', 12 | \ '/bin/false' 13 | \ ] 14 | 15 | for l:path in l:aapt_paths 16 | if(executable(l:path)) 17 | let g:android_aapt_tool = l:path 18 | break 19 | endif 20 | endfor 21 | 22 | return g:android_aapt_tool 23 | endfunction 24 | -------------------------------------------------------------------------------- /autoload/lightline/gradle.vim: -------------------------------------------------------------------------------- 1 | function! s:BuildingLine() abort 2 | return gradle#glyphBuilding() . ' ' . gradle#jobCount() 3 | endfunction 4 | 5 | function! lightline#gradle#running() abort 6 | return gradle#running() ? s:BuildingLine() : '' 7 | endfunction 8 | 9 | function! lightline#gradle#project() abort 10 | return gradle#glyphProject() 11 | endfunction 12 | 13 | function! lightline#gradle#warnings() abort 14 | let l:count = gradle#getWarningCount() 15 | if l:count == 0 16 | return '' 17 | end 18 | return g:gradle#glyphWarning() . ' ' . l:count 19 | endfunction 20 | 21 | function! lightline#gradle#errors() abort 22 | let l:count = gradle#getErrorCount() 23 | if l:count == 0 24 | return '' 25 | end 26 | return g:gradle#glyphError() . ' ' . l:count 27 | endfunction 28 | 29 | -------------------------------------------------------------------------------- /autoload/ant.vim: -------------------------------------------------------------------------------- 1 | " Function that tries to determine the location of the ant binary. It will try 2 | " first to find the executalble inside g:ant_path and if not found it will try 3 | " using the ANT_HOME environment variable. If none is found it will search it 4 | " using the vim executable() method. 5 | function! ant#bin() 6 | 7 | if !exists('g:ant_path') 8 | let g:ant_path = $ANT_HOME 9 | endif 10 | 11 | let g:ant_bin = g:ant_path . '/bin/ant' 12 | 13 | if(!executable(g:ant_bin)) 14 | if executable('ant') 15 | let g:ant_bin = 'ant' 16 | else 17 | echoerr 'ant tool could not be found' 18 | let g:ant_bin = '/bin/false' 19 | endif 20 | endif 21 | 22 | return g:ant_bin 23 | 24 | endfunction 25 | 26 | function! ant#install(device, mode) 27 | return adb#install(a:device, a:mode) 28 | endfunction 29 | 30 | -------------------------------------------------------------------------------- /test/efm/gradle.efm: -------------------------------------------------------------------------------- 1 | The JavaCompile.setDependencyCacheDir() method has been deprecated and is scheduled to be removed in Gradle 4.0. 2 | The TaskInputs.source(Object) method has been deprecated and is scheduled to be removed in Gradle 4.0. Please use TaskInputs.file(Object).skipWhenEmpty() instead. 3 | Incremental java compilation is an incubating feature. 4 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 5 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 6 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 7 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 8 | FAILURE: Build failed with an exception. 9 | * What went wrong: 10 | Task 'asdasdsa' not found in project ':Join'. 11 | * Try: 12 | Run gradlew tasks to get a list of available tasks. Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 13 | BUILD FAILED 14 | Total time: 5.92 secs 15 | -------------------------------------------------------------------------------- /autoload/cache.vim: -------------------------------------------------------------------------------- 1 | 2 | let s:cache = {} 3 | 4 | " Returns 1 if the key exists on the given store or 0 otherwise. 5 | function! cache#has(store, key) abort 6 | endfunction 7 | 8 | " Returns the value stored in the key/store 9 | function! cache#get(store, key, ...) abort 10 | let l:store = s:getStore(a:store) 11 | let l:default = get(a:, 1, '') 12 | 13 | if !has_key(l:store, a:key) 14 | let l:store[a:key] = l:default 15 | end 16 | return l:store[a:key] 17 | endfunction 18 | 19 | function! cache#set(store, key, value) abort 20 | let l:store = s:getStore(a:store) 21 | let l:store[a:key] = a:value 22 | return a:value 23 | endfunction 24 | 25 | " Generates a unique key from a file on disk. 26 | function! cache#key(filepath) abort 27 | if !filereadable(a:filepath) 28 | return 'nogradle' 29 | end 30 | return a:filepath . getftime(a:filepath) 31 | endfunction 32 | 33 | function! s:getStore(store) abort 34 | if !has_key(s:cache, a:store) 35 | let s:cache[a:store] = {} 36 | end 37 | return s:cache[a:store] 38 | endfunction 39 | -------------------------------------------------------------------------------- /autoload/ale_linters/android.vim: -------------------------------------------------------------------------------- 1 | 2 | function ale_linters#android#Define(language) abort 3 | 4 | if !exists('g:loaded_ale') 5 | return 6 | endif 7 | 8 | call ale#linter#Define(a:language, { 9 | \ 'name': 'android', 10 | \ 'executable': function('ale_linters#android#Executable'), 11 | \ 'command': function('ale_linters#android#Command'), 12 | \ 'callback': 'ale_linters#android#Handler', 13 | \}) 14 | endfunction 15 | 16 | function ale_linters#android#Executable(buffer) abort 17 | if android#isAndroidProject() 18 | return gradle#bin() 19 | endif 20 | return '' 21 | endfunction 22 | 23 | function ale_linters#android#Handler(buffer, lines) abort 24 | let l:pattern = 'lint: Warning \(.\+\):\(\d\+\):\(\d\+\) \(.\+\)$' 25 | let l:output = [] 26 | 27 | for l:match in ale#util#GetMatches(a:lines, l:pattern) 28 | call add(l:output, { 29 | \ 'filename': l:match[1], 30 | \ 'type': 'W', 31 | \ 'lnum': l:match[2] + 0, 32 | \ 'col': l:match[3] + 0, 33 | \ 'text': l:match[4], 34 | \}) 35 | endfor 36 | 37 | return l:output 38 | endfunction 39 | 40 | function ale_linters#android#Command(buffer) abort 41 | return join(gradle#cmd('lint'), ' ') . ' %t' 42 | endfunction 43 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2019, Horacio Sanson 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /lua/gradle/health/init.lua: -------------------------------------------------------------------------------- 1 | local M = {} 2 | local health = vim.health 3 | 4 | local vimscript = function(name) 5 | return vim.api.nvim_call_function(name, {}) 6 | end 7 | 8 | local check = function(name) 9 | if vimscript(name) then 10 | return 'yes' 11 | else 12 | return 'no' 13 | end 14 | end 15 | 16 | M.check = function() 17 | health.start("vim-android report") 18 | 19 | if vimscript('gradle#isGradleProject') == 1 then 20 | health.ok('Gradle poject detected') 21 | else 22 | health.info('No gradle project detected') 23 | return 24 | end 25 | 26 | local gradle_binary = vimscript('gradle#bin') 27 | 28 | if vim.fn.executable(gradle_binary) == 1 then 29 | health.ok( 30 | 'Gradle binary \n' .. 31 | ' Path: ' .. gradle_binary .. '\n' .. 32 | ' Version: ' .. vimscript('gradle#version') 33 | ) 34 | else 35 | health.warn('Missing gradle binary') 36 | end 37 | 38 | health.ok( 39 | 'Configuration: \n' .. 40 | ' Async build: ' .. check('gradle#isAsyncEnabled') .. '\n' .. 41 | ' Daemon: ' .. check('gradle#isDaemonEnabled') 42 | ) 43 | 44 | if vimscript('android#isAndroidProject') == 1 then 45 | health.ok( 46 | 'Android poject detected \n' .. 47 | ' Manifest: ' .. vimscript('android#manifestFile') 48 | ) 49 | else 50 | health.info('No Android project detected') 51 | return 52 | end 53 | 54 | if vimscript('android#checkAndroidHome') == 1 then 55 | health.ok( 56 | 'Android SDK: \n' .. 57 | ' Path: ' .. vim.g.android_sdk_path .. '\n' .. 58 | ' Emulator: ' .. vimscript('android#emulatorbin') .. '\n' .. 59 | ' Adb: ' .. vimscript('adb#bin') .. '\n' .. 60 | ' Build Tools: ' .. vimscript('android#buildToolsPath') 61 | ) 62 | else 63 | health.error( 64 | 'Android SDK home not set \n' .. 65 | 'Ensure to set g:android_sdk_path variable correctly\n' .. 66 | 'or that ANDROID_HOME environment variable is set.' 67 | ) 68 | end 69 | end 70 | return M 71 | -------------------------------------------------------------------------------- /autoload/ale_linters/java.vim: -------------------------------------------------------------------------------- 1 | function! s:LoadDeps() abort 2 | return gradle#uniq(sort(gradle#classPaths())) 3 | endfunction 4 | 5 | function! s:LoadedAle(buffer, linter) abort 6 | if !exists('g:loaded_ale') 7 | return 0 8 | endif 9 | 10 | if !exists('g:ale_linters') 11 | return 0 12 | endif 13 | 14 | let l:ft = getbufvar(a:buffer, '&filetype') 15 | 16 | if !has_key(g:ale_linters, l:ft) 17 | return 0 18 | endif 19 | 20 | if index(g:ale_linters[l:ft], a:linter) < 0 21 | return 0 22 | endif 23 | 24 | return g:loaded_ale 25 | endfunction 26 | 27 | function! ale_linters#java#EclipseLspNotifyConfigChange() abort 28 | 29 | let l:buffer = bufnr('%') 30 | 31 | if s:LoadedAle(l:buffer, 'eclipselsp') 32 | 33 | let l:config = 34 | \ { 35 | \ 'uri': ale#path#ToFileURI(expand('%:p')) 36 | \ } 37 | 38 | call ale#lsp_linter#SendRequest( 39 | \ l:buffer, 40 | \ 'eclipselsp', 41 | \ [ 0, 'java/projectConfigurationUpdate', l:config ]) 42 | 43 | call ale#lsp_linter#SendRequest( 44 | \ l:buffer, 45 | \ 'eclipselsp', 46 | \ ale#lsp#message#DidChange(l:buffer)) 47 | endif 48 | 49 | endfunction 50 | 51 | function! ale_linters#java#JavaLspNotifyConfigChange() abort 52 | 53 | let l:buffer = bufnr('%') 54 | 55 | if s:LoadedAle(l:buffer, 'javalsp') 56 | let l:config = 57 | \ { 58 | \ 'settings': { 59 | \ 'java': { 60 | \ 'classPath': s:LoadDeps(), 61 | \ 'externalDependencies': [] 62 | \ } 63 | \ } 64 | \ } 65 | 66 | call ale#lsp_linter#SendRequest( 67 | \ l:buffer, 68 | \ 'javalsp', 69 | \ [ 0, 'workspace/didChangeConfiguration', l:config ]) 70 | 71 | call ale#lsp_linter#SendRequest( 72 | \ l:buffer, 73 | \ 'javalsp', 74 | \ ale#lsp#message#DidChange(l:buffer)) 75 | endif 76 | 77 | endfunction 78 | 79 | function! ale_linters#java#NotifyConfigChange() abort 80 | call ale_linters#java#JavaLspNotifyConfigChange() 81 | call ale_linters#java#EclipseLspNotifyConfigChange() 82 | endfunction 83 | -------------------------------------------------------------------------------- /tools/efmsanity: -------------------------------------------------------------------------------- 1 | #!/bin/sed -f 2 | ## 3 | ## Vim error format is both powerful and limited at the same time. It can be 4 | ## used to match almost any message format from any compiler, linter, checker. 5 | ## Problems arise when that tool or tools output error messages that are similar 6 | ## or too generic to create useful matches. This script tries to aleviate some 7 | ## of the pain points found in the output of gradle. 8 | 9 | ## Taken from the errorformat example for javac. Changes tabs to single spaces. 10 | /\^$/s/\t/\ /g; 11 | 12 | ## Delete empty lines 13 | /^\s*$/d; 14 | 15 | ## Delete lines that start with "> ". Errors in xml resources print the same 16 | ## twice, once without the > and again with the >. We remove the ones that 17 | ## start with > as these appreas within the FAILURE: multi-line error causing 18 | ## issues. 19 | /^> /d; 20 | 21 | ## Move all the strings that start with ">" outside the block that starts wirh 22 | ## FAILURE: string. 23 | ## 24 | ## This is needed for AAPT errors that insist to appear after the FAILURE: 25 | ## causing issues with our multi-line errorformat. 26 | ## 27 | ##/^FAILURE:/,/^>/{/^>/{G;b};/^FAILURE:/{h;d};H;d}; 28 | 29 | ## Make all AndroidManifest.xml errors one liners to simplify the errorformat 30 | ## string. 31 | :x /AndroidManifest.xml:.*[Warning|Error]:$/ { N; s/\n//g ; bx }; 32 | 33 | ## Magic code to add two spaces to convert this text: 34 | ## 35 | ## FAILURE: Build failed with an exception. 36 | ## 37 | ## * What went wrong: 38 | ## Execution failed for task ':Join:kaptDebugKotlin'. 39 | ## > Compilation error. See log for more details 40 | ## 41 | ## * Try: 42 | ## Run with --stacktrace option to get the stack trace. 43 | ## 44 | ## BUILD FAILED 45 | ## 46 | ## To this text: 47 | ## 48 | ## FAILURE: Build failed with an exception. 49 | ## 50 | ## * What went wrong: 51 | ## Execution failed for task ':Join:kaptDebugKotlin'. 52 | ## > Compilation error. See log for more details 53 | ## 54 | ## * Try: 55 | ## Run with --stacktrace option to get the stack trace. 56 | ## 57 | ## BUILD FAILED 58 | ## 59 | ## Note the added spaces to the strings after the lines with "*" at the 60 | ## beginning. 61 | ## 62 | ## We do this as we consider all lines that starts with two spaces as 63 | ## info messages in the multi-line errorformat. 64 | ## 65 | ## For deatails on how this sed command works check: 66 | ## 67 | ## https://stackoverflow.com/questions/18620153/find-matching-text-and-replace-next-line 68 | ## 69 | /*/!b;n;s/^/ /; 70 | -------------------------------------------------------------------------------- /autoload/classpath.vim: -------------------------------------------------------------------------------- 1 | let s:entry = "\t\" path=\"\"/>" 2 | let s:entry_sourcepath = "\t\" path=\"\" sourcepath=\"\"/>" 3 | 4 | function! classpath#generateClasspathFile() abort 5 | 6 | if !exists('g:gradle_gen_classpath_file') 7 | let g:gradle_gen_classpath_file = 1 8 | endif 9 | 10 | if g:gradle_gen_classpath_file != 1 11 | return 12 | endif 13 | 14 | call s:generateClasspathFile() 15 | endfunction 16 | 17 | " Creates a .classpath file and fills it with dependency entries 18 | function! s:generateClasspathFile() abort 19 | 20 | " For non android project JDT generated .classpath file works fine. No need to 21 | " fiddle with it. For android project in the other hand the JDT generated one 22 | " does not work so we generate one that works with android dependencies. 23 | if !android#isAndroidProject() 24 | return 25 | endif 26 | 27 | let l:contents = [] 28 | let l:path = classpath#findClasspathFile() 29 | 30 | if len(l:path) == 0 31 | let l:path = gradle#findRoot() . '/.classpath' 32 | endif 33 | 34 | let l:contents = ['', '', ''] 35 | 36 | " Note that order is important. Sources must be added before libs in the 37 | " .classpath file. 38 | " 39 | let l:srcs = extend(gradle#sourcePaths(), android#sourcePaths()) 40 | 41 | for src in l:srcs 42 | let l:relativeSrc = fnamemodify(src, ':s?' . gradle#findRoot() . '/??') 43 | let l:row = s:newClassEntry('src', relativeSrc) 44 | if index(l:contents, l:row) < 0 45 | call insert(l:contents, l:row, -1) 46 | endif 47 | endfor 48 | 49 | let l:classes = gradle#classPaths() 50 | 51 | for jar in l:classes 52 | let l:row = s:newClassEntry('lib', jar) 53 | if index(l:contents, l:row) < 0 54 | call insert(l:contents, l:row, -1) 55 | endif 56 | endfor 57 | 58 | let l:row = s:newClassEntry('lib', '.') 59 | 60 | if index(l:contents, l:row) < 0 61 | call insert(l:contents, l:row, -1) 62 | endif 63 | 64 | call writefile(l:contents, l:path) 65 | endfunction 66 | 67 | " Generates .classpath file required by some tools to figure out dependencies 68 | " (e.g. Eclipse JDT). 69 | 70 | " Adds a new entry to the current .classpath file. 71 | function! s:newClassEntry(kind, arg, ...) 72 | let template_name = 's:entry' 73 | let args = {'kind': a:kind, 'path': substitute(a:arg, '\', '/', 'g')} 74 | 75 | if a:0 == 1 76 | let template_name = 's:entry_sourcepath' 77 | let args['src'] = substitute(a:1, '\', '/', 'g') 78 | endif 79 | 80 | if exists(template_name . '_' . a:kind) 81 | let template = {template_name}_{a:kind} 82 | else 83 | let template = {template_name} 84 | endif 85 | 86 | for [key, value] in items(args) 87 | let template = substitute(template, '<' . key . '>', value, 'g') 88 | endfor 89 | 90 | return template 91 | endfunction 92 | 93 | function! classpath#findClasspathFile() 94 | let l:file = findfile('.classpath', escape(gradle#findRoot(), ' ') . ';$HOME') 95 | 96 | if len(l:file) == 0 97 | return '' 98 | endif 99 | 100 | return copy(fnamemodify(l:file, ':p')) 101 | endfunction 102 | -------------------------------------------------------------------------------- /autoload/xml/manifest.vim: -------------------------------------------------------------------------------- 1 | " Vim XML data file 2 | " Last Change: 2016-01-02 3 | 4 | let g:xmldata_manifest = { 5 | \ 'vimxmlentities': ['lt', 'gt', 'amp', 'apos', 'quot'], 6 | \ 'vimxmlroot': ['manifest'], 7 | \ 'supports-screens': [ 8 | \ [], 9 | \ {'android:compatibleWidthLimitDp': [], 'android:largeScreens': [], 'android:requiresSmallestWidthDp': []} 10 | \ ], 11 | \ 'uses-library': [ 12 | \ [], 13 | \ {'android:name': [], 'android:required': []} 14 | \ ], 15 | \ 'uses-permission': [ 16 | \ [], 17 | \ {'android:name': []} 18 | \ ], 19 | \ 'service': [ 20 | \ ['intent-filter', 'meta-data'], 21 | \ {'android:allowEmbedded': [], 'android:enabled': [], 'android:exported': [], 'android:isolatedProcess': [], 'android:label': [], 'android:name': [], 'android:permission': [], 'android:process': [], 'android:stopWithTask': [], 'android:taskAffinity': []} 22 | \ ], 23 | \ 'grant-uri-permission': [ 24 | \ [], 25 | \ {'android:pathPattern': []} 26 | \ ], 27 | \ 'permission': [ 28 | \ [], 29 | \ {'android:name': []} 30 | \ ], 31 | \ 'instrumentation': [ 32 | \ [], 33 | \ {'android:label': [], 'android:name': [], 'android:targetPackage': []} 34 | \ ], 35 | \ 'category': [ 36 | \ [], 37 | \ {'android:name': []} 38 | \ ], 39 | \ 'activity-alias': [ 40 | \ ['intent-filter'], 41 | \ {'android:label': [], 'android:name': [], 'android:targetActivity': []} 42 | \ ], 43 | \ 'uses-feature': [ 44 | \ [], 45 | \ {'android:glEsVersion': [], 'android:name': [], 'android:required': []} 46 | \ ], 47 | \ 'manifest': [ 48 | \ ['application', 'instrumentation', 'meta-data', 'permission', 'supports-screens', 'uses-feature', 'uses-permission', 'uses-permission-sdk-m', 'uses-sdk'], 49 | \ {'android:uiOptions': [], 'android:versionCode': [], 'android:versionName': [], 'package': []} 50 | \ ], 51 | \ 'intent-filter': [ 52 | \ ['action', 'category', 'data'], 53 | \ {'android:label': []} 54 | \ ], 55 | \ 'application': [ 56 | \ ['activity', 'activity-alias', 'meta-data', 'provider', 'receiver', 'service', 'uses-library'], 57 | \ {'android:allowBackup': [], 'android:backupAgent': [], 'android:debuggable': [], 'android:description': [], 'android:fullBackupContent': [], 'android:hardwareAccelerated': [], 'android:icon': [], 'android:label': [], 'android:logo': [], 'android:name': [], 'android:persistent': [], 'android:supportsRtl': [], 'android:theme': []} 58 | \ ], 59 | \ 'meta-data': [ 60 | \ [], 61 | \ {'android:name': [], 'android:resource': [], 'android:value': []} 62 | \ ], 63 | \ 'provider': [ 64 | \ ['grant-uri-permission', 'intent-filter'], 65 | \ {'android:authorities': [], 'android:enabled': [], 'android:exported': [], 'android:grantUriPermissions': [], 'android:name': [], 'android:permission': []} 66 | \ ], 67 | \ 'data': [ 68 | \ [], 69 | \ {'android:host': [], 'android:mimeType': [], 'android:scheme': [], 'android:ssp': []} 70 | \ ], 71 | \ 'receiver': [ 72 | \ ['intent-filter', 'meta-data'], 73 | \ {'android:description': [], 'android:enabled': [], 'android:exported': [], 'android:label': [], 'android:name': [], 'android:permission': [], 'android:process': []} 74 | \ ], 75 | \ 'uses-sdk': [ 76 | \ [], 77 | \ {'android:minSdkVersion': [], 'android:targetSdkVersion': [], 'minSdkVersion': []} 78 | \ ], 79 | \ 'action': [ 80 | \ [], 81 | \ {'android:name': []} 82 | \ ], 83 | \ 'uses-permission-sdk-m': [ 84 | \ [], 85 | \ {'android:name': []} 86 | \ ], 87 | \ 'activity': [ 88 | \ ['intent-filter', 'meta-data'], 89 | \ {'android:allowEmbedded': [], 'android:configChanges': [], 'android:enabled': [], 'android:excludeFromRecents': [], 'android:exported': [], 'android:hardwareAccelerated': [], 'android:icon': [], 'android:label': [], 'android:launchMode': [], 'android:logo': [], 'android:name': [], 'android:noHistory': [], 'android:parentActivityName': [], 'android:persistableMode': [], 'android:relinquishTaskIdentity': [], 'android:screenOrientation': [], 'android:stateNotNeeded': [], 'android:taskAffinity': [], 'android:theme': [], 'android:uiOptions': [], 'android:windowSoftInputMode': []} 90 | \ ], 91 | \ } 92 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | This document describes some of the complicated parts of the plugin in hopes that contributors have an easier time when dealing with them. 2 | 3 | # Gradle Sync 4 | 5 | When a java, xml or kt file is open in vim this plugin automatically executes the __gradle#syncCmd()__ on the gradle project. This command under the hood executes the 6 | following command: 7 | 8 | ./gradlew -I init.gradle -b build.gradle vim 9 | 10 | The __init.gradle__ file contains gradle hooks and tasks specific for this plugin to work. The vim task defined in the init.gradle file inspects the whole project and 11 | outputs to stdout the project name, target SDK versions, plugin versions and all dependencies. This information is then parsed by the plugin and loaded in a cache. 12 | You can execute the command inside your gradle or android project to see the kind of information it extracts. 13 | 14 | If in the future it is needed to get additional information from the gradle project this file must be modified to ouput it and the plugin modified to read and store it. 15 | Refer to the autoload/gradle.vim file for details on how this is implemented. 16 | 17 | # Errorformat 18 | 19 | Supporting the plethora of errors that gradle can output in vim's quickfix window has been the most complex part of writing this plugin. Depending on the tool or 20 | compiler used the errors are handled differently. 21 | 22 | ## External Error Files 23 | 24 | Some tools like android's linter, PMD, findbugs, and checkstyle like to output their reports to external files in XML format. To handle these cases we have some hooks 25 | added in the init.gradle file that can find those reports, parse them, and output to stdout a simplified ASCII version of the errors. To see the ascii output generated 26 | by the hooks you can execute: 27 | 28 | ./gradlew -I init.gradle -b build.gradle lint 29 | 30 | To add error output to vim for any other tool that generates reports in external files, it is necessary to create a new hook in the init.gradle file that can find that 31 | report, parse it and output to stdout a simpler (one-line) string with the error message. 32 | 33 | ## Non Errorformat Friendly 34 | 35 | Some other tools like to generate error messages that are not easy to describe using vim's errorformat syntax. In this cases we have a __efmsanity__ filter that uses 36 | __sed__ to modify the output of gradle and try to accommodate the difficult messages to a format that is easier to match using errorformat syntax. Refer to that tool 37 | if some new tool is generating such messages. 38 | 39 | ## Gradle Errorformat 40 | 41 | The ultimate errorformat for gradle/android development can be found inside the __autoload/efm.vim__. It is able to match and display errors for java, kotlin, pmd, 42 | checkstyle, lint, aapt, manifest, among others. 43 | 44 | ## Errorformat Testing 45 | 46 | A simple change to the errorformat can easily break it for any of the currently supported tools. To ensure changes to it do not break other tools we have extensive 47 | testing suite using [vim-vader](https://github.com/junegunn/vader.vim). 48 | 49 | To run the tests simply execute the following while inside the plugin directory: 50 | 51 | vim +'Vader test/*' 52 | 53 | If you make modifications to the errorformat like adding new errors or improving current ones you must ensure the tests pass before submitting any PR. 54 | 55 | To generate new errorformat test files you can use the following command that is the same exact command used by the plugin to build the projects: 56 | 57 | LANG=en ./gradlew -I /path/to/init.gradle -b build.gradle [task] 2>&1 | /path/to/efmsanity | tee out.efm 58 | 59 | Notes: 60 | - You can use the gradlew wrapper or your locally installed gradle. 61 | - Use LANG=en to ensure error messages are not localized. That would break the errorformat. 62 | - Use the absolute path to the location of both the init.gradle and efmsanity files. These are part of this plugin. 63 | - Replace [task] with the gradle task that generates the errors you want to add. 64 | 65 | 66 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # What is this? 2 | 3 | This plugin provides functions for development of Gradle based projects. It also provides functions to support Android projects. 4 | 5 | # Installation Start 6 | 7 | Install the plugin using your favorite plugin manager (e.g. NeoBundle): 8 | 9 | NeoBundle "hsanson/vim-android" 10 | 11 | If you have a gradle wrapper script (e.g gradlew or gradlew.bat) in your project root directory or if you have gradle in your PATH environment, then you are good to go. If you prefer to setup a specific gradle version then you need to set *g:gradle_path* to the absolute path where gradle is installed: 12 | 13 | let g:gradle_path = /path/to/gradle/folder 14 | 15 | this results in the plugin using the gradle binary located at: 16 | 17 | /path/to/gradle/folder/bin/gradle 18 | 19 | If you are working in an Android project then set the *g:android_sdk_path* with the absolute path where the android sdk is installed: 20 | 21 | let g:android_sdk_path = /path/to/android-sdk 22 | 23 | # Usage 24 | 25 | Open a java, kotlin or xml source file and this plugin will automatically kick in and perform some tasks: 26 | 27 | - Execute a custom vim gradle task to inspect the project and extract 28 | dependencies, project names, and android sdk versions. 29 | - Set CLASSPATH environment variable with the JAR dependencies of the project 30 | and the Android SDK jar. 31 | - Set SRCPATH environment variables with the project source sets. 32 | - Create Gradle and Android commands that can be used to invoke gradle tasks. 33 | - Send didChangeConfiguration notification with Gradle and Android dependencies to `eclipselsp` (jdtls) or `javalsp` (java-language-server) if you have them configured with [ALE](https://github.com/dense-analysis/ale) 34 | 35 | Once the plugin finishes synchronizing gradle dependencies the Gradle command becomes available to use: 36 | 37 | :Gradle 38 | 39 | If the project is also an Android project then the android command also becomes available: 40 | 41 | :Android 42 | 43 | # Customizing Status Line 44 | 45 | Using the [Fantasque Sans](https://github.com/belluzj/fantasque-sans) font patched with the [Nerd Fonts](https://github.com/ryanoasis/nerd-fonts) these are the status line glyphs I use in my own configuration: 46 | 47 | ![Configuration](/img/vim-android-conf.png?raw=true "Configuration") 48 | 49 | Combined with the ligthline plugin my status line looks like the following screen: 50 | 51 | ![Lightline Status](/img/vim-android-status.png?raw=true "Lightline Status Line") 52 | 53 | # Features 54 | 55 | - Automatically detect if file belongs to an android project when opening a java, kotlin or xml file. 56 | - Adds custom tasks to gradle build using [Init scripts](https://docs.gradle.org/current/userguide/init_scripts.html). 57 | - Updates the CLASSPATH environment variable with all jar and class files for the target Android API and gradle dependencies. 58 | - Updates the SRCPATH environment variable to include the current project source path and any other dependency source files available. 59 | - Sets custom gradle vim compiler. 60 | - Sets an extensive errorformat that captures java errors, kotlin errors, linter errors, test errors, aapt errors and adds them to the qflist. 61 | - Adds commands to build and install APK files in one or all devices/emulators present. 62 | - Adds commands to generate tag files for the Android SDK as well as your Android application. 63 | - Improved XML omnicompletion for android resource and manifest files. Thanks to [Donnie West](https://github.com/DonnieWest). 64 | - Customizable status line method that can be integrated with status line plugins (e.g. airline) 65 | 66 | ## ALE 67 | 68 | In addition if you have [ALE](https://github.com/dense-analysis/ale) installed with either `eclipselsp` (recommended) or `javalsp` language servers, this plugin will send a [workspace/didChangeConfiguration](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#workspace_didChangeConfigurationmessage) notification to the language server with all gradle and Android dependencies. This enables ALE to auto-complete, auto-import, and go to definition of all dependencies, including Android core and generated classes (e.g. Activity, R, etc). 69 | 70 | # Details 71 | 72 | Refer to the [doc/vim-android.txt](doc/vim-android.txt) file for details on usage and configuration of this plugin. 73 | -------------------------------------------------------------------------------- /autoload/efm.vim: -------------------------------------------------------------------------------- 1 | function! efm#cmd() abort 2 | let l:makeprg = [ 3 | \ escape(gradle#bin(), ' '), 4 | \ '-I', 5 | \ g:gradle_init_file, 6 | \ '-b', 7 | \ escape(gradle#findGradleFile(), ' ') 8 | \ ] 9 | 10 | if gradle#isDaemonEnabled() 11 | call add(l:makeprg, '--daemon') 12 | else 13 | call add(l:makeprg, '--no-daemon') 14 | endif 15 | 16 | if gradle#versionNumber() >= 203 17 | call add(l:makeprg, '--console') 18 | call add(l:makeprg, 'plain') 19 | else 20 | call add(l:makeprg, '--no-color') 21 | endif 22 | 23 | return l:makeprg 24 | endfunction 25 | 26 | function! efm#makeprg() 27 | return join(efm#cmd(), '\ ') 28 | endfunction 29 | 30 | " Builds and returns the shellpipe used when runing the gradle compiler. 31 | " TODO: Win and Mac support? 32 | function! efm#shellpipe() 33 | return [ 34 | \ '2>&1', 35 | \ '|', 36 | \ g:gradle_efm_sanity, 37 | \ '|', 38 | \ 'tee' 39 | \ ] 40 | endfunction 41 | 42 | " Ultimate errorformat string for Gradle development. It supports several 43 | " plugins, compilers, linters and checkers. 44 | " 45 | " Links to understand error formats 46 | " https://flukus.github.io/vim-errorformat-demystified.html 47 | " http://qiita.com/rbtnn/items/92f80d53803ce756b4b8 (In Japanese) 48 | " https://vi.stackexchange.com/questions/4048/vim-errorformat-question-for-gradle-compiler-plugin/4052 49 | " 50 | " TODO: Cannot make the java errors column number get detected with the %p^ 51 | " pattern. 52 | function! efm#efm() 53 | let efm='%-G:%.%#,' " Filter out everything that starts with : 54 | let efm.='%-GNote:%.%#,' " Filter out everything that starts with Note: 55 | let efm.='%-G warning:%.%#,' 56 | let efm.='%Wwarning: %m,' 57 | let efm.='findbugs: %tarning %f:%l:%c %m,' " Find bugs 58 | let efm.='pmd: %tarning %f:%l:%c %m,' " PMD 59 | let efm.='checkstyle: %tarning %f:%l:%c %m,' " Checkstyle 60 | let efm.='lint: %tarning %f:%l:%c %m,' " Linter 61 | let efm.='%f:%l:%c: %trror: %m,' " single aapt 62 | let efm.='%f:%l:%c: %tarning: %m,' " single aapt 63 | let efm.='%EFAILURE: %m,' " Catch all exception start 64 | let efm.='%-ZBUILD FAILED,' " Catch all exception end 65 | let efm.='%Ee: %f:%l: error: %m,' 66 | let efm.='%Ww: %f:%l: warning: %m,' 67 | let efm.='%E%f:%l: error: %m,' 68 | let efm.='%W%f:%l: warning: %m,' 69 | let efm.='%W%f:%l:%c-%.%# Warning: %m,' " multi manifest start 70 | let efm.='%E%f:%l:%c-%.%# Error: %m,' " multi manifest start 71 | let efm.='%C%.%#%p^,' 72 | let efm.='%+Ie: %.%#,' 73 | let efm.='%+Iw: %.%#,' 74 | let efm.='%+I %.%#,' 75 | let efm.='%t: %f: (%l\, %c): %m,' " single Kotlin 76 | let efm.='%t: %f: %m,' " single Kotlin 77 | let efm.='%-G%.%#' " Remove not matching messages 78 | return efm 79 | endfunction 80 | 81 | " Trying to write errorformat strings with included escaping is extremely 82 | " confusing and not recommended. Better write them normally and then escape them 83 | " before passing them to the setlocal or SetCompiler commands. 84 | function! efm#escape(efm) 85 | return substitute(substitute(a:efm, '\', '\\\\', 'g'), ' ', '\\\ ', 'g') 86 | endfunction 87 | 88 | " Simple function to test errorformat matches. Used mostly for unit testing 89 | " via vim-vader. 90 | " 91 | " Example: 92 | " 93 | " call gradle#testErf("kotlin.efm") 94 | " 95 | " To see the list of error output samples see the test/efm folder. To 96 | " add more samples simply add them to this folder. 97 | function! efm#test(testFile) 98 | let tmpEfm = &errorformat 99 | try 100 | execute('setlocal errorformat=' . efm#escape(efm#efm())) 101 | execute('cgetfile ' . g:gradle_test_dir . '/efm/' . a:testFile) 102 | copen 103 | catch 104 | echo v:exception 105 | echo v:throwpoint 106 | finally 107 | let &errorformat=tmpEfm 108 | endtry 109 | endfunction 110 | 111 | " Simple function to test errorformat strings. Used to debug and build 112 | " new errorformat matches. 113 | " 114 | " Example: 115 | " 116 | " call gradle#testSingleErf("%t: %f: (%l\\, %c): %m", "kotlin.efm") 117 | " 118 | " The first argument is the errorformat string to test and the 119 | " second argument is a filename of the file that contains the error 120 | " output to test. 121 | " 122 | " To see the list of error output samples see the test/efm folder. To 123 | " add more samples simply add them to this folder. 124 | function! efm#testSingle(fmt, testFile) 125 | let tmpEfm = &errorformat 126 | try 127 | execute('setlocal errorformat=' .efm#escapeEfm(a:fmt)) 128 | execute('cgetfile ' . g:gradle_test_dir . '/efm/' . a:testFile) 129 | copen 130 | catch 131 | echo v:exception 132 | echo v:throwpoint 133 | finally 134 | let &errorformat=tmpEfm 135 | endtry 136 | endfunction 137 | 138 | -------------------------------------------------------------------------------- /autoload/adb.vim: -------------------------------------------------------------------------------- 1 | "" 2 | " Function that tries to determine the location of the adb binary. 3 | function! adb#bin() 4 | 5 | if exists('g:android_adb_tool') 6 | return g:android_adb_tool 7 | endif 8 | 9 | let g:android_adb_tool = g:android_sdk_path . '/platform-tools/adb' 10 | 11 | if(!executable(g:android_adb_tool)) 12 | if executable('adb') 13 | let g:android_adb_tool = 'adb' 14 | else 15 | let g:android_adb_tool = '/bin/false' 16 | endif 17 | endif 18 | 19 | return g:android_adb_tool 20 | 21 | endfunction 22 | 23 | "" 24 | " Get list of connected android devices and emulators 25 | function! adb#devices() 26 | 27 | let l:adb_output = split(system(adb#bin() . ' devices'), '\n') 28 | let l:adb_devices = [] 29 | 30 | for line in l:adb_output 31 | let l:adb_device = matchlist(line, '\v^(.+)\s+device$') 32 | if !empty(l:adb_device) 33 | let l:serial = s:trim(copy(l:adb_device[1])) 34 | let l:info = adb#getDeviceInfo(l:serial) 35 | call add(l:adb_devices, l:info) 36 | endif 37 | endfor 38 | 39 | return l:adb_devices 40 | endfunction 41 | 42 | "" 43 | " Shows a dialog that allows user to select a device and returns a list with the 44 | " device ids of the selected devices. 45 | function! adb#selectDevice() 46 | 47 | let l:devices = adb#devices() 48 | 49 | if len(l:devices) == 0 50 | call android#logw('No devices or emulators present') 51 | return [] 52 | endif 53 | 54 | if len(l:devices) == 1 55 | return [ l:devices[0][0] ] 56 | endif 57 | 58 | let l:choice = -1 59 | 60 | let l:list = ['0. All Devices'] + map(deepcopy(l:devices), '(v:key + 1) . '. ' . s:pretty(v:val)') 61 | 62 | while(l:choice < 0 || l:choice > len(l:devices)) 63 | call inputsave() 64 | let l:choice = inputlist(l:list) 65 | call inputrestore() 66 | echo '\n' 67 | endwhile 68 | 69 | if l:choice == 0 70 | return map(l:devices, 'v:val[0]') 71 | else 72 | return [ l:devices[l:choice - 1][0] ] 73 | endif 74 | 75 | endfunction 76 | 77 | "" 78 | " Returns device property as string 79 | function! adb#getProperty(device, property) 80 | let l:cmd = [ 81 | \ adb#bin(), 82 | \ '-s', 83 | \ a:device, 84 | \ 'shell getprop', 85 | \ a:property 86 | \ ] 87 | return s:chomp(system(join(l:cmd, ' '))) 88 | endfunction 89 | 90 | function! adb#getDeviceSdk(device) 91 | return adb#getProperty(a:device, 'ro.build.version.sdk') 92 | endfunction 93 | 94 | function! adb#getDeviceVersion(device) 95 | return adb#getProperty(a:device, 'ro.build.version.release') 96 | endfunction 97 | 98 | function! adb#getDeviceBrand(device) 99 | return adb#getProperty(a:device, 'ro.product.brand') 100 | endfunction 101 | 102 | function! adb#getDeviceModel(device) 103 | return adb#getProperty(a:device, 'ro.product.model') 104 | endfunction 105 | 106 | function! adb#getDeviceManufacturer(device) 107 | return adb#getProperty(a:device, 'ro.product.manufacturer') 108 | endfunction 109 | 110 | function! adb#getDeviceCountry(device) 111 | return adb#getProperty(a:device, 'persist.sys.country') 112 | endfunction 113 | 114 | function! adb#getDeviceLanguage(device) 115 | return adb#getProperty(a:device, 'persist.sys.language') 116 | endfunction 117 | 118 | function! adb#getDeviceTimezone(device) 119 | return adb#getProperty(a:device, 'persist.sys.timezone') 120 | endfunction 121 | 122 | function! adb#getDeviceInfo(device) 123 | return [ 124 | \ a:device, 125 | \ adb#getDeviceSdk(a:device), 126 | \ adb#getDeviceVersion(a:device), 127 | \ adb#getDeviceModel(a:device), 128 | \ adb#getDeviceBrand(a:device), 129 | \ adb#getDeviceManufacturer(a:device) 130 | \ ] 131 | endfunction 132 | 133 | "" 134 | " Launch android app on device 135 | function! adb#launch(device, activityId) 136 | call android#logi('Launching ' . a:activityId . ' on ' . a:device) 137 | let l:cmd = adb#bin() . ' -s ' . a:device . ' shell monkey -p ' . a:activityId . ' 1' 138 | execute '!' . l:cmd 139 | redraw! 140 | endfunction 141 | 142 | "" 143 | " Install android app on device 144 | function! adb#install(device, apk) 145 | " TODO: Make this support a multi-apk install 146 | call android#logi('Installing ' . a:apk . ' on ' . a:device) 147 | let l:cmd = adb#bin() . ' -s ' . a:device . ' install -r -d ' . a:apk 148 | execute 'silent !' . l:cmd 149 | redraw! 150 | endfunction 151 | 152 | 153 | "" 154 | " Uninstall android package from device 155 | function! adb#uninstall(device) 156 | call android#logi('Uninstalling ' . android#packageName() . ' from ' . a:device) 157 | let l:cmd = adb#bin() . ' -s ' . a:device . ' uninstall ' . android#packageName() 158 | execute 'silent !' . l:cmd 159 | redraw! 160 | endfunction 161 | 162 | "" 163 | " Helper method to sort devices list 164 | function! s:sortFunc(i1, i2) 165 | return tolower(a:i1[0]) == tolower(a:i2[0]) ? 0 : tolower(a:i1[0]) > tolower(a:i2[0]) ? 1 : -1 166 | endfunction 167 | 168 | "" 169 | " Helper method to trim spaces 170 | function! s:trim(str) 171 | return substitute(copy(a:str), '^\s*\(.\{-}\)\s*$', '\1', '') 172 | endfunction 173 | 174 | "" 175 | " Helper method to remove the end \r\n from a string. 176 | function! s:chomp(str) 177 | let l:noreturn = substitute(copy(a:str), '^\n*\(.\{-}\)\n*$', '\1', '') 178 | return substitute(l:noreturn, '^\r*\(.\{-}\)\r*$', '\1', '') 179 | endfunction 180 | 181 | "" 182 | " Helper method to pretty print device info 183 | function! s:pretty(info) 184 | return '[' . a:info[0] . '] ' 185 | \ . a:info[5] . ' ' . a:info[3] . ' ' . a:info[4] 186 | \ . ' SDK ' . a:info[2] . ' (API ' . a:info[1] . ')' 187 | endfunction 188 | -------------------------------------------------------------------------------- /gradle/init.gradle: -------------------------------------------------------------------------------- 1 | /** 2 | * This files contains custom tasks used by the vim-android plugin. 3 | */ 4 | 5 | allprojects { project -> 6 | task variants { 7 | task -> doLast { 8 | if (project.hasProperty('android')) { 9 | project.android.applicationVariants.all { variant -> 10 | System.err.println variant.name 11 | } 12 | } 13 | } 14 | } 15 | 16 | task vim { 17 | task -> doLast { 18 | System.err.println "" 19 | System.err.println "gradle-version " + gradleVersion 20 | System.err.println "vim-project " + project.name 21 | 22 | 23 | if(project.hasProperty('android')) { 24 | 25 | // Inspect android properties. 26 | // System.err.println project.properties.entrySet()*.toString() 27 | 28 | if(project.android.defaultConfig.targetSdkVersion != null) { 29 | def level = project.android.defaultConfig.targetSdkVersion.getApiLevel() 30 | System.err.println "vim-target android-" + level 31 | } 32 | 33 | // Android API jar file 34 | // e.g. /home/ryujin/Apps/android-sdk/platforms/android-29/android.jar 35 | project.android.bootClasspath.each { bootClass -> 36 | System.err.println "vim-gradle " + bootClass 37 | } 38 | 39 | if(project.android.hasProperty('applicationVariants')) { 40 | project.android.applicationVariants.all { variant -> 41 | System.err.println "vim-gradle " + project.buildDir + "/intermediates/javac/" + variant.name + "/classes" 42 | variant.sourceSets.each { srcSet -> 43 | srcSet.javaDirectories.each { javaDir -> 44 | System.err.println "vim-src " + javaDir 45 | } 46 | } 47 | 48 | variant.getCompileClasspath().each { 49 | System.err.println "vim-gradle " + it 50 | } 51 | } 52 | } 53 | 54 | if(project.android.hasProperty('testVariants')) { 55 | project.android.testVariants.all { variant -> 56 | System.err.println "vim-gradle " + project.buildDir + "/intermediates/javac/" + variant.name + "/classes" 57 | variant.getCompileClasspath().each { 58 | System.err.println "vim-gradle " + it 59 | } 60 | variant.sourceSets.each { srcSet -> 61 | srcSet.javaDirectories.each { javaDir -> 62 | System.err.println "vim-src " + javaDir 63 | } 64 | } 65 | } 66 | } 67 | 68 | if(project.android.hasProperty('unitTestVariants')) { 69 | project.android.unitTestVariants.all { variant -> 70 | System.err.println "vim-gradle " + project.buildDir + "/intermediates/javac/" + variant.name + "/classes" 71 | variant.getCompileClasspath().each { 72 | System.err.println "vim-gradle " + it 73 | } 74 | variant.sourceSets.each { srcSet -> 75 | srcSet.javaDirectories.each { javaDir -> 76 | System.err.println "vim-src " + javaDir 77 | } 78 | } 79 | } 80 | } 81 | } else { 82 | // Print build class directories. These assume the project follows a 83 | // standard gradle project with a main and test source sets. Custom 84 | // projects that change the build dir will not work. 85 | println "vim-builddir " + project.buildDir + '/classes/java/main' 86 | println "vim-builddir " + project.buildDir + '/classes/java/test' 87 | println "vim-builddir " + project.buildDir + '/classes/kotlin/main' 88 | println "vim-builddir " + project.buildDir + '/classes/kotlin/test' 89 | 90 | // Print the list of all dependencies jar files. This allows vim to parse 91 | // the list and fill the CLASSPATH with the list of dependencies. 92 | project.configurations.findAll { 93 | it.metaClass.respondsTo(it, "isCanBeResolved") ? it.isCanBeResolved() : false 94 | }.each { 95 | it.resolve().each { 96 | if(it.inspect().endsWith("jar")) { 97 | System.err.println "vim-gradle " + it 98 | } else if(it.inspect().endsWith("aar")) { 99 | // If the dependency is an AAR file we try to determine the location 100 | // of the classes.jar file in the exploded aar folder. 101 | def splitted = it.inspect().split("/") 102 | def namespace = splitted[-5] 103 | def name = splitted[-4] 104 | def version = splitted[-3] 105 | def explodedPath = "$project.buildDir/intermediates/exploded-aar" + 106 | "/$namespace/$name/$version/jars/classes.jar" 107 | System.err.println "vim-gradle " + explodedPath 108 | } 109 | } 110 | } 111 | } 112 | } 113 | } 114 | 115 | project.afterEvaluate { 116 | def hasAndroid = project.getPlugins().hasPlugin('android') || 117 | project.getPlugins().hasPlugin('android-library') 118 | 119 | if(hasAndroid) { 120 | // Ensure linter outputs XML report. We parse it after the build finishes. 121 | configure(android.lintOptions) { 122 | textReport false 123 | xmlReport true 124 | abortOnError true 125 | } 126 | } 127 | } 128 | 129 | project.gradle.buildFinished { result -> 130 | 131 | if( project.hasProperty('android') ) { 132 | def filePath = project.android.lintOptions.xmlOutput 133 | if( filePath == null ) { 134 | filePath = file([project.projectDir, "build", "outputs", "lint-results.xml"].join(File.separator)) 135 | } 136 | if( !filePath.exists() ) { 137 | filePath = file([project.projectDir, "build", "reports", "lint-results.xml"].join(File.separator)) 138 | } 139 | if( filePath.exists() ) { 140 | def xml = (new XmlParser()).parse(filePath) 141 | xml.issue.each { issue -> 142 | issue.location.each { location -> 143 | def explanation = issue.@explanation.split("(?<=\\G.{70})") 144 | System.err.println "lint: ${issue.@severity} ${location.@file}:${location.@line}:${location.@column} ${issue.@message}" 145 | for(line in explanation) { 146 | System.err.println " ${line}" 147 | } 148 | } 149 | } 150 | } 151 | } 152 | } 153 | } 154 | -------------------------------------------------------------------------------- /autoload/android.vim: -------------------------------------------------------------------------------- 1 | function! android#logi(msg) 2 | redraw 3 | echomsg "vim-android: " . a:msg 4 | endfunction 5 | 6 | function! android#logw(msg) 7 | echohl warningmsg 8 | echo "vim-android: " . a:msg 9 | echohl normal 10 | endfunction 11 | 12 | function! android#loge(msg) 13 | echohl errormsg 14 | echo "vim-android: " . a:msg 15 | echohl normal 16 | endfunction 17 | 18 | function! android#glyph() 19 | 20 | if !exists('g:gradle_glyph_android') 21 | let g:gradle_glyph_android = "A" 22 | endif 23 | 24 | return g:gradle_glyph_android 25 | endfunction 26 | 27 | " If there is a target sdk version defined it means the project is an android 28 | " project. 29 | function! android#isAndroidProject() 30 | return filereadable(android#manifestFile()) && android#checkAndroidHome() 31 | endfunction 32 | 33 | " Tries to determine the location of the AndroidManifest.xml file relative to 34 | " the location of the build.gradle file. Since the findfile() call can take a 35 | " long time to finish and we call this method several times it caches the 36 | " results in a script variable. 37 | function! s:findManifestFile() 38 | let l:file = findfile("AndroidManifest.xml", escape(gradle#findRoot(), ' ') . "/**3") 39 | return copy(fnamemodify(l:file, ":p")) 40 | endfunction 41 | 42 | function! android#manifestFile() abort 43 | return cache#get(gradle#key(gradle#findGradleFile()), 'manifest', s:findManifestFile()) 44 | endfunction 45 | 46 | function! android#homePath() 47 | 48 | if exists('$ANDROID_HOME') 49 | let g:android_sdk_path = $ANDROID_HOME 50 | endif 51 | 52 | if exists('g:android_sdk_path') 53 | return g:android_sdk_path 54 | endif 55 | 56 | let g:android_sdk_path = "$HOME/android-sdk" 57 | 58 | return g:android_sdk_path 59 | endfunction 60 | 61 | " Function returns the absolute path of the newest build-tools installed inside 62 | " android home directory. 63 | function! android#buildToolsPath() 64 | return reverse(sort(globpath(android#homePath(), 'build-tools/*', v:true, v:true)))[0] 65 | endfunction 66 | 67 | function! android#checkAndroidHome() 68 | if finddir(escape(android#homePath(), ' ')) == "" 69 | return 0 70 | endif 71 | return 1 72 | endfunction 73 | 74 | " Compatibility method to run android build commands. If the passed command is 75 | " build or debug it is converted to assembleBuild and assembleDebug before 76 | " passing it to gradle. 77 | function! android#compile(...) 78 | 79 | if(a:0 == 0) 80 | let l:mode = "build" 81 | call gradle#compile(l:mode) 82 | elseif(a:0 == 1 && a:1 == "debug") 83 | let l:mode = 'assemble' . android#capitalize(a:1) 84 | call gradle#compile(l:mode) 85 | elseif(a:0 == 1 && a:1 == "release") 86 | let l:mode = 'assemble' . android#capitalize(a:1) 87 | call gradle#compile(l:mode) 88 | else 89 | call call('gradle#compile', a:000) 90 | endif 91 | 92 | endfunction 93 | 94 | function! android#install(mode) 95 | 96 | let l:devices = adb#selectDevice() 97 | 98 | for l:device in l:devices 99 | call android#logi("Install " . a:mode . " " . l:device) 100 | let l:result = gradle#install(l:device, a:mode) 101 | if (l:result[0] > 0) || (l:result[1] > 0) 102 | call android#logi("Install failed") 103 | return 104 | else 105 | call android#logi ("") 106 | endif 107 | endfor 108 | endfunction 109 | 110 | function! android#launch(mode) 111 | function! Callback(id, data, event) closure abort 112 | if (a:event ==# 'stdout' || a:event ==# 'stderr') 113 | return 114 | endif 115 | 116 | " Dictionary to map variant names to APK filenames. 117 | let l:variants = {} 118 | let l:app_ids = {} 119 | 120 | " Find the outpus APK directory 121 | let l:outputs = globpath('.', '**/outputs/apk', 1, 1) 122 | 123 | if empty(l:outputs) 124 | call android#loge("Could not find APK outputs directory") 125 | return 126 | endif 127 | 128 | let l:outputs = fnamemodify(l:outputs[0], ':p') 129 | 130 | if ! isdirectory(l:outputs) 131 | call android#loge("Could not find APK outputs directory") 132 | return 133 | endif 134 | 135 | " Find all output-metadata.json files. 136 | let l:metadata_files = globpath(l:outputs, '**/output-metadata.json', 1, 1) 137 | 138 | " Build the variants map to APK and id dictionaries 139 | for l:metadata_file in l:metadata_files 140 | let l:metadata = json_decode(readfile(l:metadata_file)) 141 | let l:name = l:metadata['variantName'] 142 | let l:file = globpath(l:outputs . '/**', l:metadata['elements'][0]['outputFile'], 1, 0) 143 | let l:id = l:metadata['applicationId'] 144 | if filereadable(l:file) 145 | let l:variants[l:name] = l:file 146 | let l:app_ids[l:name] = l:id 147 | endif 148 | endfor 149 | 150 | let l:apk = get(l:variants, a:mode, '') 151 | let l:mainId = get(l:app_ids, a:mode, '') 152 | 153 | if ! filereadable(l:apk) 154 | call android#logi("Could not find APK. Install/Launch failed") 155 | return 156 | endif 157 | 158 | let l:devices = adb#selectDevice() 159 | 160 | for l:device in l:devices 161 | call android#logi("Install and Launch " . a:mode . " " . l:device) 162 | let l:result = adb#install(l:device, l:apk) 163 | if (l:result[0] > 0) || (l:result[1] > 0) 164 | call android#logi("Install/Launch failed") 165 | return 166 | else 167 | call android#logi('Main ' . l:mainId . '' ) 168 | let l:launchResult = adb#launch(l:device, l:mainId) 169 | if (l:launchResult[0] > 0) || (l:launchResult[1] > 0) 170 | call android#logi("Launch failed") 171 | return 172 | else 173 | call android#logi("") 174 | endif 175 | endif 176 | endfor 177 | endfunction 178 | 179 | let l:options = { 180 | \ 'on_exit': function('Callback'), 181 | \ 'on_stderr': function('Callback'), 182 | \ 'on_stdout': function('Callback') 183 | \ } 184 | 185 | let l:cmd = [ 186 | \ gradle#bin(), 187 | \ '-b', 188 | \ gradle#findGradleFile(), 189 | \ 'assemble' . a:mode 190 | \ ] 191 | 192 | call job#start(join(l:cmd, ' '), l:options) 193 | endfunction 194 | 195 | function! android#uninstall(mode) 196 | 197 | let l:devices = adb#selectDevice() 198 | 199 | for l:device in l:devices 200 | call android#logi("Uninstall " . a:mode . " " . l:device) 201 | let l:result = gradle#uninstall(l:device, a:mode) 202 | if (l:result[0] > 0) || (l:result[1] > 0) 203 | call android#logi("Uninstall failed") 204 | return 205 | else 206 | call android#logi ("") 207 | endif 208 | endfor 209 | endfunction 210 | 211 | " Find the adroid sdk srouce files for the target sdk version. 212 | function! android#targetSrcPath() 213 | let l:targetSrc = android#homePath() . '/sources/' . android#targetVersion() . '/' 214 | if isdirectory(l:targetSrc) 215 | return targetSrc 216 | endif 217 | return '' 218 | endfunction 219 | 220 | function! android#targetVersion() 221 | return gradle#targetVersion() 222 | endfunction 223 | 224 | " Return array of android source paths. 225 | function! android#sourcePaths() 226 | 227 | let l:paths = [] 228 | 229 | if ! android#isAndroidProject() 230 | return l:paths 231 | endif 232 | 233 | let l:targetSrc = android#targetSrcPath() 234 | 235 | if len(l:targetSrc) > 0 236 | call add(l:paths, l:targetSrc) 237 | endif 238 | 239 | return l:paths 240 | endfunction 241 | 242 | function! android#listDevices() 243 | let l:devices = adb#devices() 244 | if len(l:devices) <= 0 245 | call android#logw("Could not find any android devices or emulators.") 246 | else 247 | call android#logi("Android Devices: " . join(l:devices, " ")) 248 | endif 249 | endfunction 250 | 251 | " Upcase the first letter of string. 252 | function! android#capitalize(str) 253 | return substitute(a:str, '\(^.\)', '\u&', 'g') 254 | endfunction 255 | 256 | "" 257 | " Find android emulator binary 258 | function! android#emulatorbin() 259 | 260 | if exists('g:android_emulator') 261 | return g:android_emulator 262 | endif 263 | 264 | let g:android_emulator = android#homePath() . '/emulator/emulator' 265 | 266 | if(!executable(g:android_emulator)) 267 | if executable('emulator') 268 | let g:android_emulator = 'emulator' 269 | else 270 | throw 'Unable to find android emulator binary. Ensure you set g:android_sdk_path correctly.' 271 | endif 272 | endif 273 | 274 | return g:android_emulator 275 | endfunction 276 | 277 | "" 278 | " List AVD emulators 279 | function! android#avds() 280 | 281 | let l:avd_output = split(system(android#emulatorbin() . ' -list-avds')) 282 | let l:avd = map(l:avd_output, 'v:key+1 . ". " . v:val') 283 | 284 | "call android#logi(len(l:devices) . " Devices " . join(l:devices, " || ")) 285 | 286 | return l:avd 287 | endfunction 288 | 289 | function! android#emulator() 290 | 291 | let l:avds = extend(['0. Cancel'], android#avds()) 292 | 293 | " There are no avds defined 294 | if len(l:avds) == 0 295 | call android#logw('No android emulator defined') 296 | return 0 297 | endif 298 | 299 | let l:choice = -1 300 | 301 | while(l:choice < 0 || l:choice >= len(l:avds)) 302 | echom 'Select target device' 303 | call inputsave() 304 | let l:choice = inputlist(l:avds) 305 | call inputrestore() 306 | echo "\n" 307 | endwhile 308 | 309 | if l:choice <= 0 310 | redraw! 311 | return 0 312 | endif 313 | 314 | let l:option = l:avds[l:choice] 315 | let l:avd = strpart(l:option, 3) 316 | 317 | let l:options = { 'detach': 1 } 318 | call jobstart(android#emulatorbin() . ' -avd ' . l:avd . ' 2>/dev/null', l:options) 319 | redraw! 320 | 321 | endfunction 322 | 323 | function! s:variantCompletions(a, l, p) abort 324 | return gradle#listVariants() 325 | endfunction 326 | 327 | function! android#setupAndroidCommands() 328 | if android#checkAndroidHome() 329 | command! -nargs=+ Android call android#compile() 330 | command! -nargs=? -complete=custom,s:variantCompletions AndroidBuild call android#compile() 331 | command! -nargs=1 -complete=custom,s:variantCompletions AndroidInstall call android#install() 332 | command! -nargs=1 -complete=custom,s:variantCompletions AndroidUninstall call android#uninstall() 333 | command! -nargs=1 -complete=custom,s:variantCompletions AndroidLaunch call android#launch() 334 | command! AndroidDevices call android#listDevices() 335 | command! AndroidEmulator call android#emulator() 336 | else 337 | command! -nargs=? Android call android#loge("Could not find android SDK. Ensure the g:android_sdk_path variable or ANDROID_HOME env variable are set and correct.") 338 | endif 339 | endfunction 340 | 341 | -------------------------------------------------------------------------------- /test/efm/test05.efm: -------------------------------------------------------------------------------- 1 | :preBuild UP-TO-DATE 2 | :preDebugBuild UP-TO-DATE 3 | :checkDebugManifest 4 | :preDebugAndroidTestBuild UP-TO-DATE 5 | :preDebugUnitTestBuild UP-TO-DATE 6 | :preReleaseBuild UP-TO-DATE 7 | :preReleaseUnitTestBuild UP-TO-DATE 8 | :prepareComCouchbaseLiteCouchbaseLiteAndroid140Library UP-TO-DATE 9 | :prepareComCouchbaseLiteCouchbaseLiteAndroidSqliteCustom140Library UP-TO-DATE 10 | :prepareDebugDependencies 11 | :compileDebugAidl UP-TO-DATE 12 | :compileDebugRenderscript UP-TO-DATE 13 | :generateDebugBuildConfig UP-TO-DATE 14 | :generateDebugAssets UP-TO-DATE 15 | :mergeDebugAssets UP-TO-DATE 16 | :generateDebugResValues UP-TO-DATE 17 | :generateDebugResources UP-TO-DATE 18 | :mergeDebugResources UP-TO-DATE 19 | :processDebugManifest UP-TO-DATE 20 | :processDebugResources UP-TO-DATE 21 | :generateDebugSources UP-TO-DATE 22 | :processDebugJavaRes UP-TO-DATE 23 | :compileDebugJavaWithJavac UP-TO-DATE 24 | :compileLint 25 | :checkReleaseManifest 26 | :prepareReleaseDependencies 27 | :compileReleaseAidl 28 | :compileReleaseRenderscript 29 | :generateReleaseBuildConfig 30 | :generateReleaseAssets UP-TO-DATE 31 | :mergeReleaseAssets 32 | :generateReleaseResValues UP-TO-DATE 33 | :generateReleaseResources 34 | :mergeReleaseResources 35 | :processReleaseManifest 36 | :processReleaseResources 37 | :generateReleaseSources 38 | :processReleaseJavaRes UP-TO-DATE 39 | :compileReleaseJavaWithJavac 40 | :lint 41 | Ran lint on variant debug: 18 issues found 42 | Ran lint on variant release: 18 issues found 43 | Wrote HTML report to file:/home/ryujin/Projects/Manabook/manabook-sdk/build/outputs/lint-results.html 44 | Wrote XML report to /home/ryujin/Projects/Manabook/manabook-sdk/build/outputs/lint-results.xml 45 | :lint FAILED 46 | FAILURE: Build failed with an exception. 47 | * What went wrong: 48 | Execution failed for task ':lint'. 49 | Fix the issues identified by lint, or add the following to your build script to proceed with errors: 50 | ... 51 | android { 52 | lintOptions { 53 | abortOnError false 54 | } 55 | } 56 | ... 57 | * Try: 58 | Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 59 | BUILD FAILED 60 | Total time: 8.842 secs 61 | lint: Warning /home/ryujin/Projects/Manabook/manabook-sdk/build.gradle:46:5 Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. 62 | When your application runs on a version of Android that is more recent 63 | than your `targetSdkVersion` specifies that it has been tested with, 64 | various compatibility modes kick in. This ensures that your applicatio 65 | n continues to work, but it may look out of place. For example, if the 66 | `targetSdkVersion` is less than 14, your app may get an option button 67 | in the UI. To fix this issue, set the `targetSdkVersion` to the high 68 | est available value. Then test your app to make sure everything works 69 | correctly. You may want to consult the compatibility notes to see what 70 | changes apply to each version you are adding support for: http://deve 71 | loper.android.com/reference/android/os/Build.VERSION_CODES.html 72 | lint: Warning /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/BookModelTest.java:27:19 To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 73 | Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 74 | e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 75 | eFormat suitable for the user's locale. The main reason you'd create a 76 | n instance this class directly is because you need to format/parse a s 77 | pecific machine-readable format, in which case you almost certainly wa 78 | nt to explicitly ask for US to ensure that you get ASCII digits (rathe 79 | r than, say, Arabic digits). Therefore, you should either use the for 80 | m of the SimpleDateFormat constructor where you pass in an explicit lo 81 | cale, such as Locale.US, or use one of the get instance methods, or su 82 | ppress this error if really know what you are doing. 83 | lint: Warning /home/ryujin/Projects/Manabook/manabook-sdk/src/main/java/jp/co/skillupjapan/manabook/api/models/ManabookDate.java:16:14 To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 84 | Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 85 | e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 86 | eFormat suitable for the user's locale. The main reason you'd create a 87 | n instance this class directly is because you need to format/parse a s 88 | pecific machine-readable format, in which case you almost certainly wa 89 | nt to explicitly ask for US to ensure that you get ASCII digits (rathe 90 | r than, say, Arabic digits). Therefore, you should either use the for 91 | m of the SimpleDateFormat constructor where you pass in an explicit lo 92 | cale, such as Locale.US, or use one of the get instance methods, or su 93 | ppress this error if really know what you are doing. 94 | lint: Warning /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/PaymentApiTest.java:67:25 To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 95 | Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 96 | e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 97 | eFormat suitable for the user's locale. The main reason you'd create a 98 | n instance this class directly is because you need to format/parse a s 99 | pecific machine-readable format, in which case you almost certainly wa 100 | nt to explicitly ask for US to ensure that you get ASCII digits (rathe 101 | r than, say, Arabic digits). Therefore, you should either use the for 102 | m of the SimpleDateFormat constructor where you pass in an explicit lo 103 | cale, such as Locale.US, or use one of the get instance methods, or su 104 | ppress this error if really know what you are doing. 105 | lint: Warning /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/PaymentApiTest.java:78:25 To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 106 | Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 107 | e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 108 | eFormat suitable for the user's locale. The main reason you'd create a 109 | n instance this class directly is because you need to format/parse a s 110 | pecific machine-readable format, in which case you almost certainly wa 111 | nt to explicitly ask for US to ensure that you get ASCII digits (rathe 112 | r than, say, Arabic digits). Therefore, you should either use the for 113 | m of the SimpleDateFormat constructor where you pass in an explicit lo 114 | cale, such as Locale.US, or use one of the get instance methods, or su 115 | ppress this error if really know what you are doing. 116 | lint: Warning /home/ryujin/Projects/Manabook/manabook-sdk/build.gradle:110:3 A newer version of com.android.support:support-annotations than 25.3.1 is available: 26.0.0-alpha1 117 | This detector looks for usages of libraries where the version you are 118 | using is not the current stable release. Using older versions is fine, 119 | and there are cases where you deliberately want to stick with an olde 120 | r version. However, you may simply not be aware that a more recent ver 121 | sion is available, and that is what this lint check helps find. 122 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:55:25 Must be one of: 0, 3, 2, 1 123 | Ensures that when parameter in a method only allows a specific set of 124 | constants, calls obey those rules. 125 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:58:25 Must be one of: 0, 3, 2, 1 126 | Ensures that when parameter in a method only allows a specific set of 127 | constants, calls obey those rules. 128 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:61:25 Must be one of: 0, 3, 2, 1 129 | Ensures that when parameter in a method only allows a specific set of 130 | constants, calls obey those rules. 131 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:64:25 Must be one of: 0, 3, 2, 1 132 | Ensures that when parameter in a method only allows a specific set of 133 | constants, calls obey those rules. 134 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:95:25 Must be one of: 0, 3, 2, 1 135 | Ensures that when parameter in a method only allows a specific set of 136 | constants, calls obey those rules. 137 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:130:25 Must be one of: 0, 3, 2, 1 138 | Ensures that when parameter in a method only allows a specific set of 139 | constants, calls obey those rules. 140 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:165:25 Must be one of: 0, 3, 2, 1 141 | Ensures that when parameter in a method only allows a specific set of 142 | constants, calls obey those rules. 143 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:196:25 Must be one of: 0, 3, 2, 1 144 | Ensures that when parameter in a method only allows a specific set of 145 | constants, calls obey those rules. 146 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:199:25 Must be one of: 0, 3, 2, 1 147 | Ensures that when parameter in a method only allows a specific set of 148 | constants, calls obey those rules. 149 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:202:25 Must be one of: 0, 3, 2, 1 150 | Ensures that when parameter in a method only allows a specific set of 151 | constants, calls obey those rules. 152 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/ResourceModelTest.java:205:25 Must be one of: 0, 3, 2, 1 153 | Ensures that when parameter in a method only allows a specific set of 154 | constants, calls obey those rules. 155 | lint: Error /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/SNSApiTest.java:19:18 Must be one of: 156 | Ensures that when parameter in a method only allows a specific set of 157 | constants, calls obey those rules. 158 | -------------------------------------------------------------------------------- /autoload/job.vim: -------------------------------------------------------------------------------- 1 | " Author: Prabir Shrestha 2 | " Website: https://github.com/prabirshrestha/async.vim 3 | " License: The MIT License {{{ 4 | " The MIT License (MIT) 5 | " 6 | " Copyright (c) 2016 Prabir Shrestha 7 | " 8 | " Permission is hereby granted, free of charge, to any person obtaining a copy 9 | " of this software and associated documentation files (the "Software"), to deal 10 | " in the Software without restriction, including without limitation the rights 11 | " to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | " copies of the Software, and to permit persons to whom the Software is 13 | " furnished to do so, subject to the following conditions: 14 | " 15 | " The above copyright notice and this permission notice shall be included in all 16 | " copies or substantial portions of the Software. 17 | " 18 | " THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | " IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | " FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | " AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | " LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | " OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 24 | " SOFTWARE. 25 | " }}} 26 | 27 | let s:save_cpo = &cpo 28 | set cpo&vim 29 | 30 | let s:jobidseq = 0 31 | let s:jobs = {} " { job, opts, type: 'vimjob|nvimjob'} 32 | let s:job_type_nvimjob = 'nvimjob' 33 | let s:job_type_vimjob = 'vimjob' 34 | let s:job_error_unsupported_job_type = -2 " unsupported job type 35 | 36 | function! s:noop(...) abort 37 | endfunction 38 | 39 | function! s:job_supported_types() abort 40 | let l:supported_types = [] 41 | if has('nvim') 42 | let l:supported_types += [s:job_type_nvimjob] 43 | endif 44 | if !has('nvim') && has('job') && has('channel') && has('lambda') 45 | let l:supported_types += [s:job_type_vimjob] 46 | endif 47 | return l:supported_types 48 | endfunction 49 | 50 | function! s:job_supports_type(type) abort 51 | return index(s:job_supported_types(), a:type) >= 0 52 | endfunction 53 | 54 | function! s:out_cb(jobid, opts, job, data) abort 55 | call a:opts.on_stdout(a:jobid, a:data, 'stdout') 56 | endfunction 57 | 58 | function! s:out_cb_array(jobid, opts, job, data) abort 59 | call a:opts.on_stdout(a:jobid, split(a:data, "\n", 1), 'stdout') 60 | endfunction 61 | 62 | function! s:err_cb(jobid, opts, job, data) abort 63 | call a:opts.on_stderr(a:jobid, a:data, 'stderr') 64 | endfunction 65 | 66 | function! s:err_cb_array(jobid, opts, job, data) abort 67 | call a:opts.on_stderr(a:jobid, split(a:data, "\n", 1), 'stderr') 68 | endfunction 69 | 70 | function! s:exit_cb(jobid, opts, job, status) abort 71 | if has_key(a:opts, 'on_exit') 72 | call a:opts.on_exit(a:jobid, a:status, 'exit') 73 | endif 74 | if has_key(s:jobs, a:jobid) 75 | call remove(s:jobs, a:jobid) 76 | endif 77 | endfunction 78 | 79 | function! s:on_stdout(jobid, data, event) abort 80 | let l:jobinfo = s:jobs[a:jobid] 81 | call l:jobinfo.opts.on_stdout(a:jobid, a:data, a:event) 82 | endfunction 83 | 84 | function! s:on_stdout_string(jobid, data, event) abort 85 | let l:jobinfo = s:jobs[a:jobid] 86 | call l:jobinfo.opts.on_stdout(a:jobid, join(a:data, "\n"), a:event) 87 | endfunction 88 | 89 | function! s:on_stderr(jobid, data, event) abort 90 | let l:jobinfo = s:jobs[a:jobid] 91 | call l:jobinfo.opts.on_stderr(a:jobid, a:data, a:event) 92 | endfunction 93 | 94 | function! s:on_stderr_string(jobid, data, event) abort 95 | let l:jobinfo = s:jobs[a:jobid] 96 | call l:jobinfo.opts.on_stderr(a:jobid, join(a:data, "\n"), a:event) 97 | endfunction 98 | 99 | function! s:on_exit(jobid, status, event) abort 100 | if has_key(s:jobs, a:jobid) 101 | let l:jobinfo = s:jobs[a:jobid] 102 | if has_key(l:jobinfo.opts, 'on_exit') 103 | call l:jobinfo.opts.on_exit(a:jobid, a:status, a:event) 104 | endif 105 | if has_key(s:jobs, a:jobid) 106 | call remove(s:jobs, a:jobid) 107 | endif 108 | endif 109 | endfunction 110 | 111 | function! s:job_start(cmd, opts) abort 112 | let l:jobtypes = s:job_supported_types() 113 | let l:jobtype = '' 114 | 115 | if has_key(a:opts, 'type') 116 | if type(a:opts.type) == type('') 117 | if !s:job_supports_type(a:opts.type) 118 | return s:job_error_unsupported_job_type 119 | endif 120 | let l:jobtype = a:opts.type 121 | else 122 | let l:jobtypes = a:opts.type 123 | endif 124 | endif 125 | 126 | if empty(l:jobtype) 127 | " find the best jobtype 128 | for l:jobtype2 in l:jobtypes 129 | if s:job_supports_type(l:jobtype2) 130 | let l:jobtype = l:jobtype2 131 | endif 132 | endfor 133 | endif 134 | 135 | if l:jobtype ==? '' 136 | return s:job_error_unsupported_job_type 137 | endif 138 | 139 | " options shared by both vim and neovim 140 | let l:jobopt = {} 141 | if has_key(a:opts, 'cwd') 142 | let l:jobopt.cwd = a:opts.cwd 143 | endif 144 | 145 | let l:normalize = get(a:opts, 'normalize', 'array') " array/string/raw 146 | 147 | if l:jobtype == s:job_type_nvimjob 148 | if l:normalize ==# 'string' 149 | let l:jobopt['on_stdout'] = has_key(a:opts, 'on_stdout') ? function('s:on_stdout_string') : function('s:noop') 150 | let l:jobopt['on_stderr'] = has_key(a:opts, 'on_stderr') ? function('s:on_stderr_string') : function('s:noop') 151 | else " array or raw 152 | let l:jobopt['on_stdout'] = has_key(a:opts, 'on_stdout') ? function('s:on_stdout') : function('s:noop') 153 | let l:jobopt['on_stderr'] = has_key(a:opts, 'on_stderr') ? function('s:on_stderr') : function('s:noop') 154 | endif 155 | call extend(l:jobopt, { 'on_exit': function('s:on_exit') }) 156 | let l:job = jobstart(a:cmd, l:jobopt) 157 | if l:job <= 0 158 | return l:job 159 | endif 160 | let l:jobid = l:job " nvimjobid and internal jobid is same 161 | let s:jobs[l:jobid] = { 162 | \ 'type': s:job_type_nvimjob, 163 | \ 'opts': a:opts, 164 | \ } 165 | let s:jobs[l:jobid].job = l:job 166 | elseif l:jobtype == s:job_type_vimjob 167 | let s:jobidseq = s:jobidseq + 1 168 | let l:jobid = s:jobidseq 169 | if l:normalize ==# 'array' 170 | let l:jobopt['out_cb'] = has_key(a:opts, 'on_stdout') ? function('s:out_cb_array', [l:jobid, a:opts]) : function('s:noop') 171 | let l:jobopt['err_cb'] = has_key(a:opts, 'on_stderr') ? function('s:err_cb_array', [l:jobid, a:opts]) : function('s:noop') 172 | else " raw or string 173 | let l:jobopt['out_cb'] = has_key(a:opts, 'on_stdout') ? function('s:out_cb', [l:jobid, a:opts]) : function('s:noop') 174 | let l:jobopt['err_cb'] = has_key(a:opts, 'on_stderr') ? function('s:err_cb', [l:jobid, a:opts]) : function('s:noop') 175 | endif 176 | call extend(l:jobopt, { 177 | \ 'exit_cb': function('s:exit_cb', [l:jobid, a:opts]), 178 | \ 'mode': 'raw', 179 | \ }) 180 | if has('patch-8.1.889') 181 | let l:jobopt['noblock'] = 1 182 | endif 183 | let l:job = job_start(a:cmd, l:jobopt) 184 | if job_status(l:job) !=? 'run' 185 | return -1 186 | endif 187 | let s:jobs[l:jobid] = { 188 | \ 'type': s:job_type_vimjob, 189 | \ 'opts': a:opts, 190 | \ 'job': l:job, 191 | \ 'channel': job_getchannel(l:job), 192 | \ 'buffer': '' 193 | \ } 194 | else 195 | return s:job_error_unsupported_job_type 196 | endif 197 | 198 | return l:jobid 199 | endfunction 200 | 201 | function! s:job_stop(jobid) abort 202 | if has_key(s:jobs, a:jobid) 203 | let l:jobinfo = s:jobs[a:jobid] 204 | if l:jobinfo.type == s:job_type_nvimjob 205 | " See: vital-Whisky/System.Job 206 | try 207 | call jobstop(a:jobid) 208 | catch /^Vim\%((\a\+)\)\=:E900/ 209 | " NOTE: 210 | " Vim does not raise exception even the job has already closed so fail 211 | " silently for 'E900: Invalid job id' exception 212 | endtry 213 | elseif l:jobinfo.type == s:job_type_vimjob 214 | if type(s:jobs[a:jobid].job) == v:t_job 215 | call job_stop(s:jobs[a:jobid].job) 216 | elseif type(s:jobs[a:jobid].job) == v:t_channel 217 | call ch_close(s:jobs[a:jobid].job) 218 | endif 219 | endif 220 | endif 221 | endfunction 222 | 223 | function! s:job_send(jobid, data, opts) abort 224 | let l:jobinfo = s:jobs[a:jobid] 225 | let l:close_stdin = get(a:opts, 'close_stdin', 0) 226 | if l:jobinfo.type == s:job_type_nvimjob 227 | call jobsend(a:jobid, a:data) 228 | if l:close_stdin 229 | call chanclose(a:jobid, 'stdin') 230 | endif 231 | elseif l:jobinfo.type == s:job_type_vimjob 232 | " There is no easy way to know when ch_sendraw() finishes writing data 233 | " on a non-blocking channels -- has('patch-8.1.889') -- and because of 234 | " this, we cannot safely call ch_close_in(). So when we find ourselves 235 | " in this situation (i.e. noblock=1 and close stdin after send) we fall 236 | " back to using s:flush_vim_sendraw() and wait for transmit buffer to be 237 | " empty 238 | " 239 | " Ref: https://groups.google.com/d/topic/vim_dev/UNNulkqb60k/discussion 240 | if has('patch-8.1.818') && (!has('patch-8.1.889') || !l:close_stdin) 241 | call ch_sendraw(l:jobinfo.channel, a:data) 242 | else 243 | let l:jobinfo.buffer .= a:data 244 | call s:flush_vim_sendraw(a:jobid, v:null) 245 | endif 246 | if l:close_stdin 247 | while len(l:jobinfo.buffer) != 0 248 | sleep 1m 249 | endwhile 250 | call ch_close_in(l:jobinfo.channel) 251 | endif 252 | endif 253 | endfunction 254 | 255 | function! s:flush_vim_sendraw(jobid, timer) abort 256 | " https://github.com/vim/vim/issues/2548 257 | " https://github.com/natebosch/vim-lsc/issues/67#issuecomment-357469091 258 | let l:jobinfo = s:jobs[a:jobid] 259 | sleep 1m 260 | if len(l:jobinfo.buffer) <= 4096 261 | call ch_sendraw(l:jobinfo.channel, l:jobinfo.buffer) 262 | let l:jobinfo.buffer = '' 263 | else 264 | let l:to_send = l:jobinfo.buffer[:4095] 265 | let l:jobinfo.buffer = l:jobinfo.buffer[4096:] 266 | call ch_sendraw(l:jobinfo.channel, l:to_send) 267 | call timer_start(1, function('s:flush_vim_sendraw', [a:jobid])) 268 | endif 269 | endfunction 270 | 271 | function! s:job_wait_single(jobid, timeout, start) abort 272 | if !has_key(s:jobs, a:jobid) 273 | return -3 274 | endif 275 | 276 | let l:jobinfo = s:jobs[a:jobid] 277 | if l:jobinfo.type == s:job_type_nvimjob 278 | let l:timeout = a:timeout - reltimefloat(reltime(a:start)) * 1000 279 | return jobwait([a:jobid], float2nr(l:timeout))[0] 280 | elseif l:jobinfo.type == s:job_type_vimjob 281 | let l:timeout = a:timeout / 1000.0 282 | try 283 | while l:timeout < 0 || reltimefloat(reltime(a:start)) < l:timeout 284 | let l:info = job_info(l:jobinfo.job) 285 | if l:info.status ==# 'dead' 286 | return l:info.exitval 287 | elseif l:info.status ==# 'fail' 288 | return -3 289 | endif 290 | sleep 1m 291 | endwhile 292 | catch /^Vim:Interrupt$/ 293 | return -2 294 | endtry 295 | endif 296 | return -1 297 | endfunction 298 | 299 | function! s:job_wait(jobids, timeout) abort 300 | let l:start = reltime() 301 | let l:exitcode = 0 302 | let l:ret = [] 303 | for l:jobid in a:jobids 304 | if l:exitcode != -2 " Not interrupted. 305 | let l:exitcode = s:job_wait_single(l:jobid, a:timeout, l:start) 306 | endif 307 | let l:ret += [l:exitcode] 308 | endfor 309 | return l:ret 310 | endfunction 311 | 312 | function! s:job_pid(jobid) abort 313 | if !has_key(s:jobs, a:jobid) 314 | return 0 315 | endif 316 | 317 | let l:jobinfo = s:jobs[a:jobid] 318 | if l:jobinfo.type == s:job_type_nvimjob 319 | return jobpid(a:jobid) 320 | elseif l:jobinfo.type == s:job_type_vimjob 321 | let l:vimjobinfo = job_info(a:jobid) 322 | if type(l:vimjobinfo) == type({}) && has_key(l:vimjobinfo, 'process') 323 | return l:vimjobinfo['process'] 324 | endif 325 | endif 326 | return 0 327 | endfunction 328 | 329 | function! s:callback_cb(jobid, opts, ch, data) abort 330 | if has_key(a:opts, 'on_stdout') 331 | call a:opts.on_stdout(a:jobid, a:data, 'stdout') 332 | endif 333 | endfunction 334 | 335 | function! s:callback_cb_array(jobid, opts, ch, data) abort 336 | if has_key(a:opts, 'on_stdout') 337 | call a:opts.on_stdout(a:jobid, split(a:data, "\n", 1), 'stdout') 338 | endif 339 | endfunction 340 | 341 | function! s:close_cb(jobid, opts, ch) abort 342 | if has_key(a:opts, 'on_exit') 343 | call a:opts.on_exit(a:jobid, 'closed', 'exit') 344 | endif 345 | if has_key(s:jobs, a:jobid) 346 | call remove(s:jobs, a:jobid) 347 | endif 348 | endfunction 349 | 350 | " public apis {{{ 351 | function! job#start(cmd, opts) abort 352 | return s:job_start(a:cmd, a:opts) 353 | endfunction 354 | 355 | function! job#stop(jobid) abort 356 | call s:job_stop(a:jobid) 357 | endfunction 358 | 359 | function! job#send(jobid, data, ...) abort 360 | let l:opts = get(a:000, 0, {}) 361 | call s:job_send(a:jobid, a:data, l:opts) 362 | endfunction 363 | 364 | function! job#wait(jobids, ...) abort 365 | let l:timeout = get(a:000, 0, -1) 366 | return s:job_wait(a:jobids, l:timeout) 367 | endfunction 368 | 369 | function! job#pid(jobid) abort 370 | return s:job_pid(a:jobid) 371 | endfunction 372 | 373 | function! job#connect(addr, opts) abort 374 | let s:jobidseq = s:jobidseq + 1 375 | let l:jobid = s:jobidseq 376 | let l:retry = 0 377 | let l:normalize = get(a:opts, 'normalize', 'array') " array/string/raw 378 | while l:retry < 5 379 | let l:ch = ch_open(a:addr, {'waittime': 1000}) 380 | call ch_setoptions(l:ch, { 381 | \ 'callback': function(l:normalize ==# 'array' ? 's:callback_cb_array' : 's:callback_cb', [l:jobid, a:opts]), 382 | \ 'close_cb': function('s:close_cb', [l:jobid, a:opts]), 383 | \ 'mode': 'raw', 384 | \}) 385 | if ch_status(l:ch) ==# 'open' 386 | break 387 | endif 388 | sleep 100m 389 | let l:retry += 1 390 | endwhile 391 | let s:jobs[l:jobid] = { 392 | \ 'type': s:job_type_vimjob, 393 | \ 'opts': a:opts, 394 | \ 'job': l:ch, 395 | \ 'channel': l:ch, 396 | \ 'buffer': '' 397 | \} 398 | return l:jobid 399 | endfunction 400 | " }}} 401 | 402 | let &cpo = s:save_cpo 403 | unlet s:save_cpo 404 | -------------------------------------------------------------------------------- /test/efm/test01.efm: -------------------------------------------------------------------------------- 1 | The JavaCompile.setDependencyCacheDir() method has been deprecated and is scheduled to be removed in Gradle 4.0. 2 | The TaskInputs.source(Object) method has been deprecated and is scheduled to be removed in Gradle 4.0. Please use TaskInputs.file(Object).skipWhenEmpty() instead. 3 | Incremental java compilation is an incubating feature. 4 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 5 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 6 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 7 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 8 | :Join:preBuild UP-TO-DATE 9 | :Join:preAlphaBuild UP-TO-DATE 10 | :Join:checkAlphaManifest 11 | :Join:extractProguardFiles 12 | :Join:preBetaBuild 13 | :Join:preDebugBuild UP-TO-DATE 14 | :Join:preReleaseBuild 15 | :XMPP:preBuild UP-TO-DATE 16 | :XMPP:preReleaseBuild UP-TO-DATE 17 | :XMPP:checkReleaseManifest 18 | :XMPP:preDebugAndroidTestBuild UP-TO-DATE 19 | :XMPP:preDebugBuild UP-TO-DATE 20 | :XMPP:preDebugUnitTestBuild UP-TO-DATE 21 | :XMPP:preReleaseUnitTestBuild UP-TO-DATE 22 | :XmppAnnotations:compileKotlin 23 | :XmppAnnotations:compileJava UP-TO-DATE 24 | :XmppAnnotations:copyMainKotlinClasses UP-TO-DATE 25 | :XmppAnnotations:processResources UP-TO-DATE 26 | :XmppAnnotations:classes UP-TO-DATE 27 | :XmppAnnotations:jar UP-TO-DATE 28 | :XmppAnnotationProcessor:compileKotlin 29 | :XmppAnnotationProcessor:compileJava UP-TO-DATE 30 | :XmppAnnotationProcessor:copyMainKotlinClasses UP-TO-DATE 31 | :XmppAnnotationProcessor:processResources UP-TO-DATE 32 | :XmppAnnotationProcessor:classes UP-TO-DATE 33 | :XmppAnnotationProcessor:jar UP-TO-DATE 34 | :joindatabase:preBuild UP-TO-DATE 35 | :joindatabase:preReleaseBuild UP-TO-DATE 36 | :joindatabase:checkReleaseManifest 37 | :joindatabase:preDebugAndroidTestBuild UP-TO-DATE 38 | :joindatabase:preDebugBuild UP-TO-DATE 39 | :joindatabase:preDebugUnitTestBuild UP-TO-DATE 40 | :joindatabase:preReleaseUnitTestBuild UP-TO-DATE 41 | :joindatabase:prepareComAndroidSupportMultidex101Library UP-TO-DATE 42 | :joindatabase:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 43 | :joindatabase:prepareReleaseDependencies 44 | :joindatabase:compileReleaseAidl UP-TO-DATE 45 | :joindatabase:compileReleaseNdk UP-TO-DATE 46 | :joindatabase:compileLint UP-TO-DATE 47 | :joindatabase:copyReleaseLint UP-TO-DATE 48 | :joindatabase:mergeReleaseShaders UP-TO-DATE 49 | :joindatabase:compileReleaseShaders UP-TO-DATE 50 | :joindatabase:generateReleaseAssets UP-TO-DATE 51 | :joindatabase:mergeReleaseAssets UP-TO-DATE 52 | :joindatabase:mergeReleaseProguardFiles UP-TO-DATE 53 | :joindatabase:packageReleaseRenderscript UP-TO-DATE 54 | :joindatabase:compileReleaseRenderscript UP-TO-DATE 55 | :joindatabase:generateReleaseResValues UP-TO-DATE 56 | :joindatabase:generateReleaseResources UP-TO-DATE 57 | :joindatabase:packageReleaseResources UP-TO-DATE 58 | :joindatabase:processReleaseManifest UP-TO-DATE 59 | :joindatabase:generateReleaseBuildConfig UP-TO-DATE 60 | :joindatabase:mergeReleaseResources UP-TO-DATE 61 | :joindatabase:processReleaseResources UP-TO-DATE 62 | :joindatabase:generateReleaseSources UP-TO-DATE 63 | :joindatabase:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 64 | :joindatabase:compileReleaseKotlin UP-TO-DATE 65 | :joindatabase:compileReleaseJavaWithJavac UP-TO-DATE 66 | :joindatabase:copyReleaseKotlinClasses UP-TO-DATE 67 | :joindatabase:processReleaseJavaRes UP-TO-DATE 68 | :joindatabase:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 69 | :joindatabase:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 70 | :joindatabase:mergeReleaseJniLibFolders UP-TO-DATE 71 | :joindatabase:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 72 | :joindatabase:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 73 | :joindatabase:bundleRelease UP-TO-DATE 74 | :util:compileKotlin 75 | :util:compileJava UP-TO-DATE 76 | :util:copyMainKotlinClasses UP-TO-DATE 77 | :util:processResources UP-TO-DATE 78 | :util:classes UP-TO-DATE 79 | :util:jar UP-TO-DATE 80 | :XMPP:prepareAndroidClientJoindatabaseUnspecifiedLibrary UP-TO-DATE 81 | :XMPP:prepareComAndroidSupportMultidex101Library UP-TO-DATE 82 | :XMPP:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 83 | :XMPP:prepareReleaseDependencies 84 | :XMPP:compileReleaseAidl UP-TO-DATE 85 | :XMPP:compileReleaseNdk UP-TO-DATE 86 | :XMPP:compileLint UP-TO-DATE 87 | :XMPP:copyReleaseLint UP-TO-DATE 88 | :XMPP:compileReleaseRenderscript UP-TO-DATE 89 | :XMPP:generateReleaseBuildConfig UP-TO-DATE 90 | :XMPP:generateReleaseResValues UP-TO-DATE 91 | :XMPP:generateReleaseResources UP-TO-DATE 92 | :XMPP:mergeReleaseResources UP-TO-DATE 93 | :XMPP:processReleaseManifest UP-TO-DATE 94 | :XMPP:processReleaseResources UP-TO-DATE 95 | :XMPP:generateReleaseSources UP-TO-DATE 96 | :XMPP:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 97 | :joindatabase:checkDebugManifest 98 | :joindatabase:prepareDebugDependencies 99 | :joindatabase:compileDebugAidl UP-TO-DATE 100 | :joindatabase:compileDebugNdk UP-TO-DATE 101 | :joindatabase:copyDebugLint UP-TO-DATE 102 | :joindatabase:mergeDebugShaders UP-TO-DATE 103 | :joindatabase:compileDebugShaders UP-TO-DATE 104 | :joindatabase:generateDebugAssets UP-TO-DATE 105 | :joindatabase:mergeDebugAssets UP-TO-DATE 106 | :joindatabase:mergeDebugProguardFiles UP-TO-DATE 107 | :joindatabase:packageDebugRenderscript UP-TO-DATE 108 | :joindatabase:compileDebugRenderscript UP-TO-DATE 109 | :joindatabase:generateDebugResValues UP-TO-DATE 110 | :joindatabase:generateDebugResources UP-TO-DATE 111 | :joindatabase:packageDebugResources UP-TO-DATE 112 | :joindatabase:processDebugManifest UP-TO-DATE 113 | :joindatabase:generateDebugBuildConfig UP-TO-DATE 114 | :joindatabase:mergeDebugResources UP-TO-DATE 115 | :joindatabase:processDebugResources UP-TO-DATE 116 | :joindatabase:generateDebugSources UP-TO-DATE 117 | :joindatabase:incrementalDebugJavaCompilationSafeguard UP-TO-DATE 118 | :joindatabase:compileDebugKotlin UP-TO-DATE 119 | :joindatabase:compileDebugJavaWithJavac UP-TO-DATE 120 | :joindatabase:copyDebugKotlinClasses UP-TO-DATE 121 | :joindatabase:processDebugJavaRes UP-TO-DATE 122 | :joindatabase:transformResourcesWithMergeJavaResForDebug UP-TO-DATE 123 | :joindatabase:transformClassesAndResourcesWithSyncLibJarsForDebug UP-TO-DATE 124 | :joindatabase:mergeDebugJniLibFolders UP-TO-DATE 125 | :joindatabase:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE 126 | :joindatabase:transformNative_libsWithSyncJniLibsForDebug UP-TO-DATE 127 | :joindatabase:bundleDebug UP-TO-DATE 128 | :XMPP:compileReleaseJavaWithJavac UP-TO-DATE 129 | :XMPP:extractReleaseAnnotations UP-TO-DATE 130 | :XMPP:mergeReleaseShaders UP-TO-DATE 131 | :XMPP:compileReleaseShaders UP-TO-DATE 132 | :XMPP:generateReleaseAssets UP-TO-DATE 133 | :XMPP:mergeReleaseAssets UP-TO-DATE 134 | :XMPP:mergeReleaseProguardFiles UP-TO-DATE 135 | :XMPP:packageReleaseRenderscript UP-TO-DATE 136 | :XMPP:packageReleaseResources UP-TO-DATE 137 | :XMPP:processReleaseJavaRes UP-TO-DATE 138 | :XMPP:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 139 | :XMPP:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 140 | :XMPP:mergeReleaseJniLibFolders UP-TO-DATE 141 | :XMPP:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 142 | :XMPP:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 143 | :XMPP:bundleRelease UP-TO-DATE 144 | :XmppService:preBuild UP-TO-DATE 145 | :XmppService:preReleaseBuild UP-TO-DATE 146 | :XmppService:checkReleaseManifest 147 | :XmppService:preDebugAndroidTestBuild UP-TO-DATE 148 | :XmppService:preDebugBuild UP-TO-DATE 149 | :XmppService:preDebugUnitTestBuild UP-TO-DATE 150 | :XmppService:preReleaseUnitTestBuild UP-TO-DATE 151 | :joinmediasdk:preBuild UP-TO-DATE 152 | :joinmediasdk:preReleaseBuild UP-TO-DATE 153 | :joinmediasdk:checkReleaseManifest 154 | :joinmediasdk:preDebugAndroidTestBuild UP-TO-DATE 155 | :joinmediasdk:preDebugBuild UP-TO-DATE 156 | :joinmediasdk:preDebugUnitTestBuild UP-TO-DATE 157 | :joinmediasdk:preReleaseUnitTestBuild UP-TO-DATE 158 | :joinmediasdk:prepareComAndroidSupportAnimatedVectorDrawable2520Library UP-TO-DATE 159 | :joinmediasdk:prepareComAndroidSupportAppcompatV72520Library UP-TO-DATE 160 | :joinmediasdk:prepareComAndroidSupportSupportCompat2520Library UP-TO-DATE 161 | :joinmediasdk:prepareComAndroidSupportSupportCoreUi2520Library UP-TO-DATE 162 | :joinmediasdk:prepareComAndroidSupportSupportCoreUtils2520Library UP-TO-DATE 163 | :joinmediasdk:prepareComAndroidSupportSupportFragment2520Library UP-TO-DATE 164 | :joinmediasdk:prepareComAndroidSupportSupportMediaCompat2520Library UP-TO-DATE 165 | :joinmediasdk:prepareComAndroidSupportSupportV42520Library UP-TO-DATE 166 | :joinmediasdk:prepareComAndroidSupportSupportVectorDrawable2520Library UP-TO-DATE 167 | :joinmediasdk:prepareReleaseDependencies 168 | :joinmediasdk:compileReleaseAidl UP-TO-DATE 169 | :joinmediasdk:compileReleaseNdk UP-TO-DATE 170 | :joinmediasdk:compileLint UP-TO-DATE 171 | :joinmediasdk:copyReleaseLint UP-TO-DATE 172 | :joinmediasdk:compileReleaseRenderscript UP-TO-DATE 173 | :joinmediasdk:generateReleaseBuildConfig UP-TO-DATE 174 | :joinmediasdk:generateReleaseResValues UP-TO-DATE 175 | :joinmediasdk:generateReleaseResources UP-TO-DATE 176 | :joinmediasdk:mergeReleaseResources UP-TO-DATE 177 | :joinmediasdk:processReleaseManifest UP-TO-DATE 178 | :joinmediasdk:processReleaseResources UP-TO-DATE 179 | :joinmediasdk:generateReleaseSources UP-TO-DATE 180 | :joinmediasdk:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 181 | :joinmediasdk:compileReleaseKotlin UP-TO-DATE 182 | :joinmediasdk:compileReleaseJavaWithJavac UP-TO-DATE 183 | :joinmediasdk:copyReleaseKotlinClasses UP-TO-DATE 184 | :joinmediasdk:extractReleaseAnnotations UP-TO-DATE 185 | :joinmediasdk:mergeReleaseShaders UP-TO-DATE 186 | :joinmediasdk:compileReleaseShaders UP-TO-DATE 187 | :joinmediasdk:generateReleaseAssets UP-TO-DATE 188 | :joinmediasdk:mergeReleaseAssets UP-TO-DATE 189 | :joinmediasdk:mergeReleaseProguardFiles UP-TO-DATE 190 | :joinmediasdk:packageReleaseRenderscript UP-TO-DATE 191 | :joinmediasdk:packageReleaseResources UP-TO-DATE 192 | :joinmediasdk:processReleaseJavaRes UP-TO-DATE 193 | :joinmediasdk:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 194 | :joinmediasdk:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 195 | :joinmediasdk:mergeReleaseJniLibFolders UP-TO-DATE 196 | :joinmediasdk:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 197 | :joinmediasdk:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 198 | :joinmediasdk:bundleRelease UP-TO-DATE 199 | :XmppService:prepareAndroidClientJoindatabaseUnspecifiedLibrary UP-TO-DATE 200 | :XmppService:prepareAndroidClientJoinmediasdkUnspecifiedLibrary UP-TO-DATE 201 | :XmppService:prepareAndroidClientXMPPUnspecifiedLibrary UP-TO-DATE 202 | :XmppService:prepareComAndroidSupportAnimatedVectorDrawable2520Library UP-TO-DATE 203 | :XmppService:prepareComAndroidSupportAppcompatV72520Library UP-TO-DATE 204 | :XmppService:prepareComAndroidSupportMultidex101Library UP-TO-DATE 205 | :XmppService:prepareComAndroidSupportSupportCompat2520Library UP-TO-DATE 206 | :XmppService:prepareComAndroidSupportSupportCoreUi2520Library UP-TO-DATE 207 | :XmppService:prepareComAndroidSupportSupportCoreUtils2520Library UP-TO-DATE 208 | :XmppService:prepareComAndroidSupportSupportFragment2520Library UP-TO-DATE 209 | :XmppService:prepareComAndroidSupportSupportMediaCompat2520Library UP-TO-DATE 210 | :XmppService:prepareComAndroidSupportSupportV42520Library UP-TO-DATE 211 | :XmppService:prepareComAndroidSupportSupportVectorDrawable2520Library UP-TO-DATE 212 | :XmppService:prepareComGoogleAndroidGmsPlayServicesAnalytics700Library UP-TO-DATE 213 | :XmppService:prepareComGoogleAndroidGmsPlayServicesBase700Library UP-TO-DATE 214 | :XmppService:prepareComGoogleAndroidGmsPlayServicesGcm700Library UP-TO-DATE 215 | :XmppService:prepareComGoogleAndroidGmsPlayServicesLocation700Library UP-TO-DATE 216 | :XmppService:prepareComGoogleAndroidGmsPlayServicesMaps700Library UP-TO-DATE 217 | :XmppService:prepareIoPristineLibjingle9694Library UP-TO-DATE 218 | :XmppService:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 219 | :XmppService:prepareReleaseDependencies 220 | :XmppService:compileReleaseAidl UP-TO-DATE 221 | :XmppService:compileReleaseNdk UP-TO-DATE 222 | :XmppService:compileLint UP-TO-DATE 223 | :XmppService:copyReleaseLint UP-TO-DATE 224 | :XMPP:checkDebugManifest 225 | :XMPP:prepareDebugDependencies 226 | :XMPP:compileDebugAidl UP-TO-DATE 227 | :XMPP:compileDebugNdk UP-TO-DATE 228 | :XMPP:copyDebugLint UP-TO-DATE 229 | :XMPP:compileDebugRenderscript UP-TO-DATE 230 | :XMPP:generateDebugBuildConfig UP-TO-DATE 231 | :XMPP:generateDebugResValues UP-TO-DATE 232 | :XMPP:generateDebugResources UP-TO-DATE 233 | :XMPP:mergeDebugResources UP-TO-DATE 234 | :XMPP:processDebugManifest UP-TO-DATE 235 | :XMPP:processDebugResources UP-TO-DATE 236 | :XMPP:generateDebugSources UP-TO-DATE 237 | :XMPP:incrementalDebugJavaCompilationSafeguard UP-TO-DATE 238 | :XMPP:compileDebugJavaWithJavac UP-TO-DATE 239 | :XMPP:extractDebugAnnotations UP-TO-DATE 240 | :XMPP:mergeDebugShaders UP-TO-DATE 241 | :XMPP:compileDebugShaders UP-TO-DATE 242 | :XMPP:generateDebugAssets UP-TO-DATE 243 | :XMPP:mergeDebugAssets UP-TO-DATE 244 | :XMPP:mergeDebugProguardFiles UP-TO-DATE 245 | :XMPP:packageDebugRenderscript UP-TO-DATE 246 | :XMPP:packageDebugResources UP-TO-DATE 247 | :XMPP:processDebugJavaRes UP-TO-DATE 248 | :XMPP:transformResourcesWithMergeJavaResForDebug UP-TO-DATE 249 | :XMPP:transformClassesAndResourcesWithSyncLibJarsForDebug UP-TO-DATE 250 | :XMPP:mergeDebugJniLibFolders UP-TO-DATE 251 | :XMPP:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE 252 | :XMPP:transformNative_libsWithSyncJniLibsForDebug UP-TO-DATE 253 | :XMPP:bundleDebug UP-TO-DATE 254 | :XmppService:compileReleaseRenderscript UP-TO-DATE 255 | :XmppService:generateReleaseBuildConfig UP-TO-DATE 256 | :XmppService:generateReleaseResValues UP-TO-DATE 257 | :XmppService:generateReleaseResources UP-TO-DATE 258 | :XmppService:mergeReleaseResources UP-TO-DATE 259 | :XmppService:processReleaseManifest UP-TO-DATE 260 | :XmppService:processReleaseResources UP-TO-DATE 261 | :XmppService:generateReleaseSources UP-TO-DATE 262 | :XmppService:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 263 | :joinmediasdk:checkDebugManifest 264 | :joinmediasdk:prepareDebugDependencies 265 | :joinmediasdk:compileDebugAidl UP-TO-DATE 266 | :joinmediasdk:compileDebugNdk UP-TO-DATE 267 | :joinmediasdk:copyDebugLint UP-TO-DATE 268 | :joinmediasdk:compileDebugRenderscript UP-TO-DATE 269 | :joinmediasdk:generateDebugBuildConfig UP-TO-DATE 270 | :joinmediasdk:generateDebugResValues UP-TO-DATE 271 | :joinmediasdk:generateDebugResources UP-TO-DATE 272 | :joinmediasdk:mergeDebugResources UP-TO-DATE 273 | :joinmediasdk:processDebugManifest UP-TO-DATE 274 | :joinmediasdk:processDebugResources UP-TO-DATE 275 | :joinmediasdk:generateDebugSources UP-TO-DATE 276 | :joinmediasdk:incrementalDebugJavaCompilationSafeguard UP-TO-DATE 277 | :joinmediasdk:compileDebugKotlin UP-TO-DATE 278 | :joinmediasdk:compileDebugJavaWithJavac UP-TO-DATE 279 | :joinmediasdk:copyDebugKotlinClasses UP-TO-DATE 280 | :joinmediasdk:extractDebugAnnotations UP-TO-DATE 281 | :joinmediasdk:mergeDebugShaders UP-TO-DATE 282 | :joinmediasdk:compileDebugShaders UP-TO-DATE 283 | :joinmediasdk:generateDebugAssets UP-TO-DATE 284 | :joinmediasdk:mergeDebugAssets UP-TO-DATE 285 | :joinmediasdk:mergeDebugProguardFiles UP-TO-DATE 286 | :joinmediasdk:packageDebugRenderscript UP-TO-DATE 287 | :joinmediasdk:packageDebugResources UP-TO-DATE 288 | :joinmediasdk:processDebugJavaRes UP-TO-DATE 289 | :joinmediasdk:transformResourcesWithMergeJavaResForDebug UP-TO-DATE 290 | :joinmediasdk:transformClassesAndResourcesWithSyncLibJarsForDebug UP-TO-DATE 291 | :joinmediasdk:mergeDebugJniLibFolders UP-TO-DATE 292 | :joinmediasdk:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE 293 | :joinmediasdk:transformNative_libsWithSyncJniLibsForDebug UP-TO-DATE 294 | :joinmediasdk:bundleDebug UP-TO-DATE 295 | :XmppService:compileReleaseJavaWithJavac UP-TO-DATE 296 | :XmppService:extractReleaseAnnotations UP-TO-DATE 297 | :XmppService:mergeReleaseShaders UP-TO-DATE 298 | :XmppService:compileReleaseShaders UP-TO-DATE 299 | :XmppService:generateReleaseAssets UP-TO-DATE 300 | :XmppService:mergeReleaseAssets UP-TO-DATE 301 | :XmppService:mergeReleaseProguardFiles UP-TO-DATE 302 | :XmppService:packageReleaseRenderscript UP-TO-DATE 303 | :XmppService:packageReleaseResources UP-TO-DATE 304 | :XmppService:processReleaseJavaRes UP-TO-DATE 305 | :XmppService:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 306 | :XmppService:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 307 | :XmppService:mergeReleaseJniLibFolders UP-TO-DATE 308 | :XmppService:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 309 | :XmppService:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 310 | :XmppService:bundleRelease UP-TO-DATE 311 | :library:preBuild UP-TO-DATE 312 | :library:preReleaseBuild UP-TO-DATE 313 | :library:checkReleaseManifest 314 | :library:prepareReleaseDependencies 315 | :library:compileReleaseAidl UP-TO-DATE 316 | :library:compileReleaseNdk UP-TO-DATE 317 | :library:compileLint UP-TO-DATE 318 | :library:copyReleaseLint UP-TO-DATE 319 | :library:mergeReleaseShaders UP-TO-DATE 320 | :library:compileReleaseShaders UP-TO-DATE 321 | :library:generateReleaseAssets UP-TO-DATE 322 | :library:mergeReleaseAssets UP-TO-DATE 323 | :library:mergeReleaseProguardFiles UP-TO-DATE 324 | :library:packageReleaseRenderscript UP-TO-DATE 325 | :library:compileReleaseRenderscript UP-TO-DATE 326 | :library:generateReleaseResValues UP-TO-DATE 327 | :library:generateReleaseResources UP-TO-DATE 328 | :library:packageReleaseResources UP-TO-DATE 329 | :library:processReleaseManifest UP-TO-DATE 330 | :library:generateReleaseBuildConfig UP-TO-DATE 331 | :library:processReleaseResources UP-TO-DATE 332 | :library:generateReleaseSources UP-TO-DATE 333 | :library:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 334 | :library:compileReleaseKotlin 335 | :library:compileReleaseJavaWithJavac UP-TO-DATE 336 | :library:copyReleaseKotlinClasses UP-TO-DATE 337 | :library:processReleaseJavaRes UP-TO-DATE 338 | :library:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 339 | :library:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 340 | :library:mergeReleaseJniLibFolders UP-TO-DATE 341 | :library:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 342 | :library:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 343 | :library:bundleRelease UP-TO-DATE 344 | :Join:prepareAndroidArchCoreCore100Alpha3Library UP-TO-DATE 345 | :Join:prepareAndroidArchLifecycleExtensions100Alpha3Library UP-TO-DATE 346 | :Join:prepareAndroidArchLifecycleRuntime100Alpha3Library UP-TO-DATE 347 | :Join:prepareAndroidClientEffectsReleaseUnspecifiedLibrary UP-TO-DATE 348 | :Join:prepareAndroidClientJoindatabaseUnspecifiedLibrary UP-TO-DATE 349 | :Join:prepareAndroidClientJoinmediasdkUnspecifiedLibrary UP-TO-DATE 350 | :Join:prepareAndroidClientLibraryUnspecifiedLibrary UP-TO-DATE 351 | :Join:prepareAndroidClientM4mAndroidUnspecifiedLibrary UP-TO-DATE 352 | :Join:prepareAndroidClientXMPPUnspecifiedLibrary UP-TO-DATE 353 | :Join:prepareAndroidClientXmppServiceUnspecifiedLibrary UP-TO-DATE 354 | :Join:prepareComAndroidDatabindingAdapters121Library UP-TO-DATE 355 | :Join:prepareComAndroidDatabindingLibrary121Library UP-TO-DATE 356 | :Join:prepareComAndroidSupportAnimatedVectorDrawable2520Library UP-TO-DATE 357 | :Join:prepareComAndroidSupportAppcompatV72520Library UP-TO-DATE 358 | :Join:prepareComAndroidSupportDesign2520Library UP-TO-DATE 359 | :Join:prepareComAndroidSupportGridlayoutV72520Library UP-TO-DATE 360 | :Join:preDebugAndroidTestBuild UP-TO-DATE 361 | :Join:prepareComAndroidSupportMultidex101Library UP-TO-DATE 362 | :Join:prepareComAndroidSupportRecyclerviewV72520Library UP-TO-DATE 363 | :Join:prepareComAndroidSupportSupportCompat2531Library UP-TO-DATE 364 | :Join:prepareComAndroidSupportSupportCoreUi2531Library UP-TO-DATE 365 | :Join:prepareComAndroidSupportSupportCoreUtils2531Library UP-TO-DATE 366 | :Join:prepareComAndroidSupportSupportFragment2531Library UP-TO-DATE 367 | :Join:prepareComAndroidSupportSupportMediaCompat2531Library UP-TO-DATE 368 | :Join:prepareComAndroidSupportSupportV42520Library UP-TO-DATE 369 | :Join:prepareComAndroidSupportSupportVectorDrawable2520Library UP-TO-DATE 370 | :Join:prepareComAndroidSupportTransition2520Library UP-TO-DATE 371 | :Join:prepareComCrashlyticsSdkAndroidAnswers1310Library UP-TO-DATE 372 | :Join:prepareComCrashlyticsSdkAndroidBeta122Library UP-TO-DATE 373 | :Join:prepareComCrashlyticsSdkAndroidCrashlytics265Library UP-TO-DATE 374 | :Join:prepareComCrashlyticsSdkAndroidCrashlyticsCore2314Library UP-TO-DATE 375 | :Join:prepareComGetbaseFloatingactionbutton1100Library UP-TO-DATE 376 | :Join:prepareComGithubAfollestadMaterialDialogsCore0857Library UP-TO-DATE 377 | :Join:prepareComGithubBumptechGlideOkhttp3Integration140Library UP-TO-DATE 378 | :Join:prepareComGithubChrisbanesPhotoView131Library UP-TO-DATE 379 | :Join:prepareComGithubRahatarmanahmedCircularprogressview232Library UP-TO-DATE 380 | :Join:prepareComGoogleAndroidGmsPlayServicesAnalytics700Library UP-TO-DATE 381 | :Join:prepareComGoogleAndroidGmsPlayServicesBase700Library UP-TO-DATE 382 | :Join:prepareComGoogleAndroidGmsPlayServicesGcm700Library UP-TO-DATE 383 | :Join:prepareComGoogleAndroidGmsPlayServicesLocation700Library UP-TO-DATE 384 | :Join:prepareComGoogleAndroidGmsPlayServicesMaps700Library UP-TO-DATE 385 | :Join:prepareComMelnykovFloatingactionbutton120Library UP-TO-DATE 386 | :Join:prepareComSoundcloudAndroidAndroidCrop100Library UP-TO-DATE 387 | :Join:prepareIoFabricSdkAndroidFabric1314Library UP-TO-DATE 388 | :Join:prepareIoPristineLibjingle9694Library UP-TO-DATE 389 | :Join:prepareIoReactivexRxjava2Rxandroid200Library UP-TO-DATE 390 | :Join:prepareMeZhanghaiAndroidMaterialprogressbarLibrary115Library UP-TO-DATE 391 | :Join:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 392 | :Join:prepareOrgJdeferredJdeferredAndroidAar123Library UP-TO-DATE 393 | :Join:prepareOrgXwalkXwalk_core_library174644810Library UP-TO-DATE 394 | :Join:prepareSeEmilsjolanderStickylistheaders270Library UP-TO-DATE 395 | :Join:prepareAlphaDependencies 396 | :Join:compileAlphaRenderscript UP-TO-DATE 397 | :Join:mergeAlphaShaders UP-TO-DATE 398 | :Join:compileAlphaShaders UP-TO-DATE 399 | :Join:generateAlphaAssets UP-TO-DATE 400 | :Join:mergeAlphaAssets UP-TO-DATE 401 | :Join:processAlphaManifest UP-TO-DATE 402 | :Join:fabricGenerateResourcesAlpha 403 | :Join:generateAlphaResValues UP-TO-DATE 404 | :Join:generateAlphaResources 405 | :Join:mergeAlphaResources 406 | :Join:dataBindingProcessLayoutsAlpha 407 | :Join:compileAlphaAidl UP-TO-DATE 408 | :Join:generateAlphaBuildConfig UP-TO-DATE 409 | FAILED 410 | FAILURE: Build failed with an exception. 411 | * What went wrong: 412 | Execution failed for task ':Join:processAlphaResources'. 413 | * Try: 414 | Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 415 | BUILD FAILED 416 | Total time: 8.529 secs 417 | -------------------------------------------------------------------------------- /test/efm/test04.efm: -------------------------------------------------------------------------------- 1 | The JavaCompile.setDependencyCacheDir() method has been deprecated and is scheduled to be removed in Gradle 4.0. 2 | The TaskInputs.source(Object) method has been deprecated and is scheduled to be removed in Gradle 4.0. Please use TaskInputs.file(Object).skipWhenEmpty() instead. 3 | Incremental java compilation is an incubating feature. 4 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 5 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 6 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 7 | 'kapt.generateStubs' is not used by the 'kotlin-kapt' plugin 8 | :Join:preBuild UP-TO-DATE 9 | :Join:preDebugBuild UP-TO-DATE 10 | :Join:checkDebugManifest 11 | :Join:preAlphaBuild UP-TO-DATE 12 | :Join:extractProguardFiles 13 | :Join:preBetaBuild 14 | :Join:preReleaseBuild 15 | :XMPP:preBuild UP-TO-DATE 16 | :XMPP:preReleaseBuild UP-TO-DATE 17 | :XMPP:checkReleaseManifest 18 | :XMPP:preDebugAndroidTestBuild UP-TO-DATE 19 | :XMPP:preDebugBuild UP-TO-DATE 20 | :XMPP:preDebugUnitTestBuild UP-TO-DATE 21 | :XMPP:preReleaseUnitTestBuild UP-TO-DATE 22 | :XmppAnnotations:compileKotlin 23 | :XmppAnnotations:compileJava UP-TO-DATE 24 | :XmppAnnotations:copyMainKotlinClasses UP-TO-DATE 25 | :XmppAnnotations:processResources UP-TO-DATE 26 | :XmppAnnotations:classes UP-TO-DATE 27 | :XmppAnnotations:jar UP-TO-DATE 28 | :XmppAnnotationProcessor:compileKotlin 29 | :XmppAnnotationProcessor:compileJava UP-TO-DATE 30 | :XmppAnnotationProcessor:copyMainKotlinClasses UP-TO-DATE 31 | :XmppAnnotationProcessor:processResources UP-TO-DATE 32 | :XmppAnnotationProcessor:classes UP-TO-DATE 33 | :XmppAnnotationProcessor:jar UP-TO-DATE 34 | :joindatabase:preBuild UP-TO-DATE 35 | :joindatabase:preReleaseBuild UP-TO-DATE 36 | :joindatabase:checkReleaseManifest 37 | :joindatabase:preDebugAndroidTestBuild UP-TO-DATE 38 | :joindatabase:preDebugBuild UP-TO-DATE 39 | :joindatabase:preDebugUnitTestBuild UP-TO-DATE 40 | :joindatabase:preReleaseUnitTestBuild UP-TO-DATE 41 | :joindatabase:prepareComAndroidSupportMultidex101Library UP-TO-DATE 42 | :joindatabase:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 43 | :joindatabase:prepareReleaseDependencies 44 | :joindatabase:compileReleaseAidl UP-TO-DATE 45 | :joindatabase:compileReleaseNdk UP-TO-DATE 46 | :joindatabase:compileLint UP-TO-DATE 47 | :joindatabase:copyReleaseLint UP-TO-DATE 48 | :joindatabase:mergeReleaseShaders UP-TO-DATE 49 | :joindatabase:compileReleaseShaders UP-TO-DATE 50 | :joindatabase:generateReleaseAssets UP-TO-DATE 51 | :joindatabase:mergeReleaseAssets UP-TO-DATE 52 | :joindatabase:mergeReleaseProguardFiles UP-TO-DATE 53 | :joindatabase:packageReleaseRenderscript UP-TO-DATE 54 | :joindatabase:compileReleaseRenderscript UP-TO-DATE 55 | :joindatabase:generateReleaseResValues UP-TO-DATE 56 | :joindatabase:generateReleaseResources UP-TO-DATE 57 | :joindatabase:packageReleaseResources UP-TO-DATE 58 | :joindatabase:processReleaseManifest UP-TO-DATE 59 | :joindatabase:generateReleaseBuildConfig UP-TO-DATE 60 | :joindatabase:mergeReleaseResources UP-TO-DATE 61 | :joindatabase:processReleaseResources UP-TO-DATE 62 | :joindatabase:generateReleaseSources UP-TO-DATE 63 | :joindatabase:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 64 | :joindatabase:compileReleaseKotlin UP-TO-DATE 65 | :joindatabase:compileReleaseJavaWithJavac UP-TO-DATE 66 | :joindatabase:copyReleaseKotlinClasses UP-TO-DATE 67 | :joindatabase:processReleaseJavaRes UP-TO-DATE 68 | :joindatabase:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 69 | :joindatabase:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 70 | :joindatabase:mergeReleaseJniLibFolders UP-TO-DATE 71 | :joindatabase:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 72 | :joindatabase:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 73 | :joindatabase:bundleRelease UP-TO-DATE 74 | :util:compileKotlin 75 | :util:compileJava UP-TO-DATE 76 | :util:copyMainKotlinClasses UP-TO-DATE 77 | :util:processResources UP-TO-DATE 78 | :util:classes UP-TO-DATE 79 | :util:jar UP-TO-DATE 80 | :XMPP:prepareAndroidClientJoindatabaseUnspecifiedLibrary UP-TO-DATE 81 | :XMPP:prepareComAndroidSupportMultidex101Library UP-TO-DATE 82 | :XMPP:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 83 | :XMPP:prepareReleaseDependencies 84 | :XMPP:compileReleaseAidl UP-TO-DATE 85 | :XMPP:compileReleaseNdk UP-TO-DATE 86 | :XMPP:compileLint UP-TO-DATE 87 | :XMPP:copyReleaseLint UP-TO-DATE 88 | :XMPP:compileReleaseRenderscript UP-TO-DATE 89 | :XMPP:generateReleaseBuildConfig UP-TO-DATE 90 | :XMPP:generateReleaseResValues UP-TO-DATE 91 | :XMPP:generateReleaseResources UP-TO-DATE 92 | :XMPP:mergeReleaseResources UP-TO-DATE 93 | :XMPP:processReleaseManifest UP-TO-DATE 94 | :XMPP:processReleaseResources UP-TO-DATE 95 | :XMPP:generateReleaseSources UP-TO-DATE 96 | :XMPP:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 97 | :joindatabase:checkDebugManifest 98 | :joindatabase:prepareDebugDependencies 99 | :joindatabase:compileDebugAidl UP-TO-DATE 100 | :joindatabase:compileDebugNdk UP-TO-DATE 101 | :joindatabase:copyDebugLint UP-TO-DATE 102 | :joindatabase:mergeDebugShaders UP-TO-DATE 103 | :joindatabase:compileDebugShaders UP-TO-DATE 104 | :joindatabase:generateDebugAssets UP-TO-DATE 105 | :joindatabase:mergeDebugAssets UP-TO-DATE 106 | :joindatabase:mergeDebugProguardFiles UP-TO-DATE 107 | :joindatabase:packageDebugRenderscript UP-TO-DATE 108 | :joindatabase:compileDebugRenderscript UP-TO-DATE 109 | :joindatabase:generateDebugResValues UP-TO-DATE 110 | :joindatabase:generateDebugResources UP-TO-DATE 111 | :joindatabase:packageDebugResources UP-TO-DATE 112 | :joindatabase:processDebugManifest UP-TO-DATE 113 | :joindatabase:generateDebugBuildConfig UP-TO-DATE 114 | :joindatabase:mergeDebugResources UP-TO-DATE 115 | :joindatabase:processDebugResources UP-TO-DATE 116 | :joindatabase:generateDebugSources UP-TO-DATE 117 | :joindatabase:incrementalDebugJavaCompilationSafeguard UP-TO-DATE 118 | :joindatabase:compileDebugKotlin UP-TO-DATE 119 | :joindatabase:compileDebugJavaWithJavac UP-TO-DATE 120 | :joindatabase:copyDebugKotlinClasses UP-TO-DATE 121 | :joindatabase:processDebugJavaRes UP-TO-DATE 122 | :joindatabase:transformResourcesWithMergeJavaResForDebug UP-TO-DATE 123 | :joindatabase:transformClassesAndResourcesWithSyncLibJarsForDebug UP-TO-DATE 124 | :joindatabase:mergeDebugJniLibFolders UP-TO-DATE 125 | :joindatabase:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE 126 | :joindatabase:transformNative_libsWithSyncJniLibsForDebug UP-TO-DATE 127 | :joindatabase:bundleDebug UP-TO-DATE 128 | :XMPP:compileReleaseJavaWithJavac UP-TO-DATE 129 | :XMPP:extractReleaseAnnotations UP-TO-DATE 130 | :XMPP:mergeReleaseShaders UP-TO-DATE 131 | :XMPP:compileReleaseShaders UP-TO-DATE 132 | :XMPP:generateReleaseAssets UP-TO-DATE 133 | :XMPP:mergeReleaseAssets UP-TO-DATE 134 | :XMPP:mergeReleaseProguardFiles UP-TO-DATE 135 | :XMPP:packageReleaseRenderscript UP-TO-DATE 136 | :XMPP:packageReleaseResources UP-TO-DATE 137 | :XMPP:processReleaseJavaRes UP-TO-DATE 138 | :XMPP:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 139 | :XMPP:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 140 | :XMPP:mergeReleaseJniLibFolders UP-TO-DATE 141 | :XMPP:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 142 | :XMPP:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 143 | :XMPP:bundleRelease UP-TO-DATE 144 | :XmppService:preBuild UP-TO-DATE 145 | :XmppService:preReleaseBuild UP-TO-DATE 146 | :XmppService:checkReleaseManifest 147 | :XmppService:preDebugAndroidTestBuild UP-TO-DATE 148 | :XmppService:preDebugBuild UP-TO-DATE 149 | :XmppService:preDebugUnitTestBuild UP-TO-DATE 150 | :XmppService:preReleaseUnitTestBuild UP-TO-DATE 151 | :joinmediasdk:preBuild UP-TO-DATE 152 | :joinmediasdk:preReleaseBuild UP-TO-DATE 153 | :joinmediasdk:checkReleaseManifest 154 | :joinmediasdk:preDebugAndroidTestBuild UP-TO-DATE 155 | :joinmediasdk:preDebugBuild UP-TO-DATE 156 | :joinmediasdk:preDebugUnitTestBuild UP-TO-DATE 157 | :joinmediasdk:preReleaseUnitTestBuild UP-TO-DATE 158 | :joinmediasdk:prepareComAndroidSupportAnimatedVectorDrawable2520Library UP-TO-DATE 159 | :joinmediasdk:prepareComAndroidSupportAppcompatV72520Library UP-TO-DATE 160 | :joinmediasdk:prepareComAndroidSupportSupportCompat2520Library UP-TO-DATE 161 | :joinmediasdk:prepareComAndroidSupportSupportCoreUi2520Library UP-TO-DATE 162 | :joinmediasdk:prepareComAndroidSupportSupportCoreUtils2520Library UP-TO-DATE 163 | :joinmediasdk:prepareComAndroidSupportSupportFragment2520Library UP-TO-DATE 164 | :joinmediasdk:prepareComAndroidSupportSupportMediaCompat2520Library UP-TO-DATE 165 | :joinmediasdk:prepareComAndroidSupportSupportV42520Library UP-TO-DATE 166 | :joinmediasdk:prepareComAndroidSupportSupportVectorDrawable2520Library UP-TO-DATE 167 | :joinmediasdk:prepareReleaseDependencies 168 | :joinmediasdk:compileReleaseAidl UP-TO-DATE 169 | :joinmediasdk:compileReleaseNdk UP-TO-DATE 170 | :joinmediasdk:compileLint UP-TO-DATE 171 | :joinmediasdk:copyReleaseLint UP-TO-DATE 172 | :joinmediasdk:compileReleaseRenderscript UP-TO-DATE 173 | :joinmediasdk:generateReleaseBuildConfig UP-TO-DATE 174 | :joinmediasdk:generateReleaseResValues UP-TO-DATE 175 | :joinmediasdk:generateReleaseResources UP-TO-DATE 176 | :joinmediasdk:mergeReleaseResources UP-TO-DATE 177 | :joinmediasdk:processReleaseManifest UP-TO-DATE 178 | :joinmediasdk:processReleaseResources UP-TO-DATE 179 | :joinmediasdk:generateReleaseSources UP-TO-DATE 180 | :joinmediasdk:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 181 | :joinmediasdk:compileReleaseKotlin UP-TO-DATE 182 | :joinmediasdk:compileReleaseJavaWithJavac UP-TO-DATE 183 | :joinmediasdk:copyReleaseKotlinClasses UP-TO-DATE 184 | :joinmediasdk:extractReleaseAnnotations UP-TO-DATE 185 | :joinmediasdk:mergeReleaseShaders UP-TO-DATE 186 | :joinmediasdk:compileReleaseShaders UP-TO-DATE 187 | :joinmediasdk:generateReleaseAssets UP-TO-DATE 188 | :joinmediasdk:mergeReleaseAssets UP-TO-DATE 189 | :joinmediasdk:mergeReleaseProguardFiles UP-TO-DATE 190 | :joinmediasdk:packageReleaseRenderscript UP-TO-DATE 191 | :joinmediasdk:packageReleaseResources UP-TO-DATE 192 | :joinmediasdk:processReleaseJavaRes UP-TO-DATE 193 | :joinmediasdk:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 194 | :joinmediasdk:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 195 | :joinmediasdk:mergeReleaseJniLibFolders UP-TO-DATE 196 | :joinmediasdk:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 197 | :joinmediasdk:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 198 | :joinmediasdk:bundleRelease UP-TO-DATE 199 | :XmppService:prepareAndroidClientJoindatabaseUnspecifiedLibrary UP-TO-DATE 200 | :XmppService:prepareAndroidClientJoinmediasdkUnspecifiedLibrary UP-TO-DATE 201 | :XmppService:prepareAndroidClientXMPPUnspecifiedLibrary UP-TO-DATE 202 | :XmppService:prepareComAndroidSupportAnimatedVectorDrawable2520Library UP-TO-DATE 203 | :XmppService:prepareComAndroidSupportAppcompatV72520Library UP-TO-DATE 204 | :XmppService:prepareComAndroidSupportMultidex101Library UP-TO-DATE 205 | :XmppService:prepareComAndroidSupportSupportCompat2520Library UP-TO-DATE 206 | :XmppService:prepareComAndroidSupportSupportCoreUi2520Library UP-TO-DATE 207 | :XmppService:prepareComAndroidSupportSupportCoreUtils2520Library UP-TO-DATE 208 | :XmppService:prepareComAndroidSupportSupportFragment2520Library UP-TO-DATE 209 | :XmppService:prepareComAndroidSupportSupportMediaCompat2520Library UP-TO-DATE 210 | :XmppService:prepareComAndroidSupportSupportV42520Library UP-TO-DATE 211 | :XmppService:prepareComAndroidSupportSupportVectorDrawable2520Library UP-TO-DATE 212 | :XmppService:prepareComGoogleAndroidGmsPlayServicesAnalytics700Library UP-TO-DATE 213 | :XmppService:prepareComGoogleAndroidGmsPlayServicesBase700Library UP-TO-DATE 214 | :XmppService:prepareComGoogleAndroidGmsPlayServicesGcm700Library UP-TO-DATE 215 | :XmppService:prepareComGoogleAndroidGmsPlayServicesLocation700Library UP-TO-DATE 216 | :XmppService:prepareComGoogleAndroidGmsPlayServicesMaps700Library UP-TO-DATE 217 | :XmppService:prepareIoPristineLibjingle9694Library UP-TO-DATE 218 | :XmppService:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 219 | :XmppService:prepareReleaseDependencies 220 | :XmppService:compileReleaseAidl UP-TO-DATE 221 | :XmppService:compileReleaseNdk UP-TO-DATE 222 | :XmppService:compileLint UP-TO-DATE 223 | :XmppService:copyReleaseLint UP-TO-DATE 224 | :XMPP:checkDebugManifest 225 | :XMPP:prepareDebugDependencies 226 | :XMPP:compileDebugAidl UP-TO-DATE 227 | :XMPP:compileDebugNdk UP-TO-DATE 228 | :XMPP:copyDebugLint UP-TO-DATE 229 | :XMPP:compileDebugRenderscript UP-TO-DATE 230 | :XMPP:generateDebugBuildConfig UP-TO-DATE 231 | :XMPP:generateDebugResValues UP-TO-DATE 232 | :XMPP:generateDebugResources UP-TO-DATE 233 | :XMPP:mergeDebugResources UP-TO-DATE 234 | :XMPP:processDebugManifest UP-TO-DATE 235 | :XMPP:processDebugResources UP-TO-DATE 236 | :XMPP:generateDebugSources UP-TO-DATE 237 | :XMPP:incrementalDebugJavaCompilationSafeguard UP-TO-DATE 238 | :XMPP:compileDebugJavaWithJavac UP-TO-DATE 239 | :XMPP:extractDebugAnnotations UP-TO-DATE 240 | :XMPP:mergeDebugShaders UP-TO-DATE 241 | :XMPP:compileDebugShaders UP-TO-DATE 242 | :XMPP:generateDebugAssets UP-TO-DATE 243 | :XMPP:mergeDebugAssets UP-TO-DATE 244 | :XMPP:mergeDebugProguardFiles UP-TO-DATE 245 | :XMPP:packageDebugRenderscript UP-TO-DATE 246 | :XMPP:packageDebugResources UP-TO-DATE 247 | :XMPP:processDebugJavaRes UP-TO-DATE 248 | :XMPP:transformResourcesWithMergeJavaResForDebug UP-TO-DATE 249 | :XMPP:transformClassesAndResourcesWithSyncLibJarsForDebug UP-TO-DATE 250 | :XMPP:mergeDebugJniLibFolders UP-TO-DATE 251 | :XMPP:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE 252 | :XMPP:transformNative_libsWithSyncJniLibsForDebug UP-TO-DATE 253 | :XMPP:bundleDebug UP-TO-DATE 254 | :XmppService:compileReleaseRenderscript UP-TO-DATE 255 | :XmppService:generateReleaseBuildConfig UP-TO-DATE 256 | :XmppService:generateReleaseResValues UP-TO-DATE 257 | :XmppService:generateReleaseResources UP-TO-DATE 258 | :XmppService:mergeReleaseResources UP-TO-DATE 259 | :XmppService:processReleaseManifest UP-TO-DATE 260 | :XmppService:processReleaseResources UP-TO-DATE 261 | :XmppService:generateReleaseSources UP-TO-DATE 262 | :XmppService:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 263 | :joinmediasdk:checkDebugManifest 264 | :joinmediasdk:prepareDebugDependencies 265 | :joinmediasdk:compileDebugAidl UP-TO-DATE 266 | :joinmediasdk:compileDebugNdk UP-TO-DATE 267 | :joinmediasdk:copyDebugLint UP-TO-DATE 268 | :joinmediasdk:compileDebugRenderscript UP-TO-DATE 269 | :joinmediasdk:generateDebugBuildConfig UP-TO-DATE 270 | :joinmediasdk:generateDebugResValues UP-TO-DATE 271 | :joinmediasdk:generateDebugResources UP-TO-DATE 272 | :joinmediasdk:mergeDebugResources UP-TO-DATE 273 | :joinmediasdk:processDebugManifest UP-TO-DATE 274 | :joinmediasdk:processDebugResources UP-TO-DATE 275 | :joinmediasdk:generateDebugSources UP-TO-DATE 276 | :joinmediasdk:incrementalDebugJavaCompilationSafeguard UP-TO-DATE 277 | :joinmediasdk:compileDebugKotlin UP-TO-DATE 278 | :joinmediasdk:compileDebugJavaWithJavac UP-TO-DATE 279 | :joinmediasdk:copyDebugKotlinClasses UP-TO-DATE 280 | :joinmediasdk:extractDebugAnnotations UP-TO-DATE 281 | :joinmediasdk:mergeDebugShaders UP-TO-DATE 282 | :joinmediasdk:compileDebugShaders UP-TO-DATE 283 | :joinmediasdk:generateDebugAssets UP-TO-DATE 284 | :joinmediasdk:mergeDebugAssets UP-TO-DATE 285 | :joinmediasdk:mergeDebugProguardFiles UP-TO-DATE 286 | :joinmediasdk:packageDebugRenderscript UP-TO-DATE 287 | :joinmediasdk:packageDebugResources UP-TO-DATE 288 | :joinmediasdk:processDebugJavaRes UP-TO-DATE 289 | :joinmediasdk:transformResourcesWithMergeJavaResForDebug UP-TO-DATE 290 | :joinmediasdk:transformClassesAndResourcesWithSyncLibJarsForDebug UP-TO-DATE 291 | :joinmediasdk:mergeDebugJniLibFolders UP-TO-DATE 292 | :joinmediasdk:transformNative_libsWithMergeJniLibsForDebug UP-TO-DATE 293 | :joinmediasdk:transformNative_libsWithSyncJniLibsForDebug UP-TO-DATE 294 | :joinmediasdk:bundleDebug UP-TO-DATE 295 | :XmppService:compileReleaseJavaWithJavac UP-TO-DATE 296 | :XmppService:extractReleaseAnnotations UP-TO-DATE 297 | :XmppService:mergeReleaseShaders UP-TO-DATE 298 | :XmppService:compileReleaseShaders UP-TO-DATE 299 | :XmppService:generateReleaseAssets UP-TO-DATE 300 | :XmppService:mergeReleaseAssets UP-TO-DATE 301 | :XmppService:mergeReleaseProguardFiles UP-TO-DATE 302 | :XmppService:packageReleaseRenderscript UP-TO-DATE 303 | :XmppService:packageReleaseResources UP-TO-DATE 304 | :XmppService:processReleaseJavaRes UP-TO-DATE 305 | :XmppService:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 306 | :XmppService:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 307 | :XmppService:mergeReleaseJniLibFolders UP-TO-DATE 308 | :XmppService:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 309 | :XmppService:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 310 | :XmppService:bundleRelease UP-TO-DATE 311 | :library:preBuild UP-TO-DATE 312 | :library:preReleaseBuild UP-TO-DATE 313 | :library:checkReleaseManifest 314 | :library:prepareReleaseDependencies 315 | :library:compileReleaseAidl UP-TO-DATE 316 | :library:compileReleaseNdk UP-TO-DATE 317 | :library:compileLint UP-TO-DATE 318 | :library:copyReleaseLint UP-TO-DATE 319 | :library:mergeReleaseShaders UP-TO-DATE 320 | :library:compileReleaseShaders UP-TO-DATE 321 | :library:generateReleaseAssets UP-TO-DATE 322 | :library:mergeReleaseAssets UP-TO-DATE 323 | :library:mergeReleaseProguardFiles UP-TO-DATE 324 | :library:packageReleaseRenderscript UP-TO-DATE 325 | :library:compileReleaseRenderscript UP-TO-DATE 326 | :library:generateReleaseResValues UP-TO-DATE 327 | :library:generateReleaseResources UP-TO-DATE 328 | :library:packageReleaseResources UP-TO-DATE 329 | :library:processReleaseManifest UP-TO-DATE 330 | :library:generateReleaseBuildConfig UP-TO-DATE 331 | :library:processReleaseResources UP-TO-DATE 332 | :library:generateReleaseSources UP-TO-DATE 333 | :library:incrementalReleaseJavaCompilationSafeguard UP-TO-DATE 334 | :library:compileReleaseKotlin 335 | :library:compileReleaseJavaWithJavac UP-TO-DATE 336 | :library:copyReleaseKotlinClasses UP-TO-DATE 337 | :library:processReleaseJavaRes UP-TO-DATE 338 | :library:transformResourcesWithMergeJavaResForRelease UP-TO-DATE 339 | :library:transformClassesAndResourcesWithSyncLibJarsForRelease UP-TO-DATE 340 | :library:mergeReleaseJniLibFolders UP-TO-DATE 341 | :library:transformNative_libsWithMergeJniLibsForRelease UP-TO-DATE 342 | :library:transformNative_libsWithSyncJniLibsForRelease UP-TO-DATE 343 | :library:bundleRelease UP-TO-DATE 344 | :Join:prepareAndroidArchCoreCore100Alpha3Library UP-TO-DATE 345 | :Join:prepareAndroidArchLifecycleExtensions100Alpha3Library UP-TO-DATE 346 | :Join:prepareAndroidArchLifecycleRuntime100Alpha3Library UP-TO-DATE 347 | :Join:prepareAndroidClientEffectsReleaseUnspecifiedLibrary UP-TO-DATE 348 | :Join:prepareAndroidClientJoindatabaseUnspecifiedLibrary UP-TO-DATE 349 | :Join:prepareAndroidClientJoinmediasdkUnspecifiedLibrary UP-TO-DATE 350 | :Join:prepareAndroidClientLibraryUnspecifiedLibrary UP-TO-DATE 351 | :Join:prepareAndroidClientM4mAndroidUnspecifiedLibrary UP-TO-DATE 352 | :Join:prepareAndroidClientXMPPUnspecifiedLibrary UP-TO-DATE 353 | :Join:prepareAndroidClientXmppServiceUnspecifiedLibrary UP-TO-DATE 354 | :Join:prepareComAndroidDatabindingAdapters121Library UP-TO-DATE 355 | :Join:prepareComAndroidDatabindingLibrary121Library UP-TO-DATE 356 | :Join:prepareComAndroidSupportAnimatedVectorDrawable2520Library UP-TO-DATE 357 | :Join:prepareComAndroidSupportAppcompatV72520Library UP-TO-DATE 358 | :Join:prepareComAndroidSupportDesign2520Library UP-TO-DATE 359 | :Join:prepareComAndroidSupportGridlayoutV72520Library UP-TO-DATE 360 | :Join:preDebugAndroidTestBuild UP-TO-DATE 361 | :Join:prepareComAndroidSupportMultidex101Library UP-TO-DATE 362 | :Join:prepareComAndroidSupportRecyclerviewV72520Library UP-TO-DATE 363 | :Join:prepareComAndroidSupportSupportCompat2531Library UP-TO-DATE 364 | :Join:prepareComAndroidSupportSupportCoreUi2531Library UP-TO-DATE 365 | :Join:prepareComAndroidSupportSupportCoreUtils2531Library UP-TO-DATE 366 | :Join:prepareComAndroidSupportSupportFragment2531Library UP-TO-DATE 367 | :Join:prepareComAndroidSupportSupportMediaCompat2531Library UP-TO-DATE 368 | :Join:prepareComAndroidSupportSupportV42520Library UP-TO-DATE 369 | :Join:prepareComAndroidSupportSupportVectorDrawable2520Library UP-TO-DATE 370 | :Join:prepareComAndroidSupportTransition2520Library UP-TO-DATE 371 | :Join:prepareComCrashlyticsSdkAndroidAnswers1310Library UP-TO-DATE 372 | :Join:prepareComCrashlyticsSdkAndroidBeta122Library UP-TO-DATE 373 | :Join:prepareComCrashlyticsSdkAndroidCrashlytics265Library UP-TO-DATE 374 | :Join:prepareComCrashlyticsSdkAndroidCrashlyticsCore2314Library UP-TO-DATE 375 | :Join:prepareComGetbaseFloatingactionbutton1100Library UP-TO-DATE 376 | :Join:prepareComGithubAfollestadMaterialDialogsCore0857Library UP-TO-DATE 377 | :Join:prepareComGithubBumptechGlideOkhttp3Integration140Library UP-TO-DATE 378 | :Join:prepareComGithubChrisbanesPhotoView131Library UP-TO-DATE 379 | :Join:prepareComGithubRahatarmanahmedCircularprogressview232Library UP-TO-DATE 380 | :Join:prepareComGoogleAndroidGmsPlayServicesAnalytics700Library UP-TO-DATE 381 | :Join:prepareComGoogleAndroidGmsPlayServicesBase700Library UP-TO-DATE 382 | :Join:prepareComGoogleAndroidGmsPlayServicesGcm700Library UP-TO-DATE 383 | :Join:prepareComGoogleAndroidGmsPlayServicesLocation700Library UP-TO-DATE 384 | :Join:prepareComGoogleAndroidGmsPlayServicesMaps700Library UP-TO-DATE 385 | :Join:prepareComMelnykovFloatingactionbutton120Library UP-TO-DATE 386 | :Join:prepareComSoundcloudAndroidAndroidCrop100Library UP-TO-DATE 387 | :Join:prepareIoFabricSdkAndroidFabric1314Library UP-TO-DATE 388 | :Join:prepareIoPristineLibjingle9694Library UP-TO-DATE 389 | :Join:prepareIoReactivexRxjava2Rxandroid200Library UP-TO-DATE 390 | :Join:prepareMeZhanghaiAndroidMaterialprogressbarLibrary115Library UP-TO-DATE 391 | :Join:prepareNetZeteticAndroidDatabaseSqlcipher351Library UP-TO-DATE 392 | :Join:prepareOrgJdeferredJdeferredAndroidAar123Library UP-TO-DATE 393 | :Join:prepareOrgXwalkXwalk_core_library174644810Library UP-TO-DATE 394 | :Join:prepareSeEmilsjolanderStickylistheaders270Library UP-TO-DATE 395 | :Join:prepareDebugDependencies 396 | :Join:compileDebugRenderscript UP-TO-DATE 397 | :Join:mergeDebugShaders UP-TO-DATE 398 | :Join:compileDebugShaders UP-TO-DATE 399 | :Join:generateDebugAssets UP-TO-DATE 400 | :Join:mergeDebugAssets UP-TO-DATE 401 | :Join:processDebugManifest UP-TO-DATE 402 | :Join:fabricGenerateResourcesDebug 403 | :Join:generateDebugResValues UP-TO-DATE 404 | :Join:generateDebugResources 405 | :Join:mergeDebugResources 406 | /home/ryujin/Projects/Join/android-client/Join/src/main/res/values-ja/strings.xml:7:39: Error: The element type "sring" must be terminated by the matching end-tag "". 407 | :Join:mergeDebugResources FAILED 408 | FAILURE: Build failed with an exception. 409 | * What went wrong: 410 | Execution failed for task ':Join:mergeDebugResources'. 411 | * Try: 412 | Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 413 | BUILD FAILED 414 | Total time: 8.172 secs 415 | -------------------------------------------------------------------------------- /doc/vim-android.txt: -------------------------------------------------------------------------------- 1 | *vim-android.txt* For Vim version 7.3 or NeoVim Last change: 2019 Jun 20 2 | 3 | Author: Horacio Sanson 4 | Licence: Vim licence, see |license| 5 | Homepage: https://github.com/hsanson/vim-android 6 | Version: 1.6.1 7 | 8 | ============================================================================== 9 | Contents *vim-android* *vim-android-contents* 10 | 11 | 1. Intro ........................... |vim-android-intro| 12 | Supported Features |vim-android-features| 13 | Known Issues |vim-android-issues| 14 | 2. Requirements .................... |vim-android-requirements| 15 | 3. Installation .................... |vim-android-installation| 16 | 4. Usage ........................... |vim-android-usage| 17 | Commands ...................... |vim-android-commands| 18 | Key mappings .................. |vim-android-keys| 19 | Omnicompletion ................ |vim-android-omnicomplete| 20 | Status Line.................... |vim-android-statusline| 21 | Airline Status Line.......... |vim-android-airline| 22 | LightLine Status Line........ |vim-android-lightline| 23 | Troubleshooting ............... |vim-android-troubleshooting| 24 | 5. ALE Integration ................. |vim-android-ale| 25 | 6. Configuration ................... |vim-android-configuration| 26 | 7. Todo ............................ |vim-android-todo| 27 | 8. Credits ......................... |vim-android-credits| 28 | 29 | ============================================================================== 30 | 1. Intro *vim-android-intro* 31 | 32 | vim-android is a plugin that facilitates the development of Gradle and Android 33 | applications within vim. When editing a java, kotlin or xml file this plugin 34 | tries to find gradle.build file in the current directory and if found it 35 | configures a set of variables and commands that allows easier development for 36 | Gradle projects. If the gradle.build file contains the android gradle plugin 37 | then Android specific commands are also configured. 38 | 39 | ------------------------------------------------------------------------------ 40 | SUPPORTED FEATURES *vim-android-features* 41 | 42 | The following features are supported by vim-android: 43 | 44 | - Auto-detection of Gradle and Android projects when opening a Java, kotlin or 45 | XML file. For this the plugin uses findfile function that searches from the 46 | current buffer path backwards until it finds a build.gradle file for the 47 | project. 48 | - Custom gradle vim task that invokes gradle directly with any arguments 49 | passed to the command. 50 | - Custom errorformat that captures java errors, linter errors, test errors, 51 | aapt errors and displays them in the loclist window. This 52 | requires that gradle be invoked with the vim init file loaded. 53 | - Updates the CLASSPATH environment variable to include paths for your 54 | current project, external libs, external lib-projects and the current 55 | target Android SDK jars. This allows auto-completion of Java code using 56 | other plugins. 57 | - Updates the SRCPATH environment variable to include source paths for the 58 | current project and dependencies if available. This allows debuggers like 59 | vebugger to follow source code during step debugging. 60 | - Generates .classpath file that works with Android projects. 61 | - Adds useful commands to compile and install your application APK into 62 | your emulator/devices. 63 | - Improved XML omnicompletion for Android resource and manifest XML files. 64 | - Takes advantage of neovim async functions to perfom long running tasks in 65 | the background (e.g. GradleSync) 66 | - Integration with ALE for linter and auto-completion support. 67 | 68 | ------------------------------------------------------------------------------ 69 | Known Issues *vim-android-issues* 70 | 71 | - The first time an android java or xml file is opened we create a list of 72 | dependencies for the project and a cache with all the packages found in the 73 | gradle home folder. This process can be extremely slow depending on the 74 | number of dependencies the project has and the number of packages cached in 75 | your gradle home. When running in neovim with async functions these tasks do 76 | not block the interface but all Gradle and Android commands won't be 77 | available until the tasks complete in the background. 78 | 79 | - To get full support of AAPT errors in the loclist window of vim it is 80 | recommended that you use the android gradle plugin version 1.3.0 or newer. 81 | Previous versions of the android gradle plugin fail to show correctly the 82 | absolute path of the XML files that have errors making it difficult to jump 83 | to the problem files directly within vim. 84 | 85 | https://code.google.com/p/android/issues/detail?id=57513 86 | https://code.google.com/p/android/issues/detail?id=174778 87 | 88 | 89 | ============================================================================== 90 | 2. Requirements *vim-android-requirements* 91 | 92 | The following requirements have to be met in order to be able to use vim-android: 93 | 94 | - Vim 7.3 or a recent build of Neovim. This plugin may also work with previous 95 | versions but I have only tested Vim 7.3 and Neovim. 96 | - Android SDK installed and with the platform-tools directory set in your 97 | PATH environment variable. 98 | - Android gradle plugin 1.3.0 or newer recommended. 99 | - Android build tools 22.0.1 or newer recommended. 100 | - Gradle 2.2+ in your PATH or gradle wrapper script. 101 | 102 | ============================================================================== 103 | 3. Installation *vim-android-installation* 104 | 105 | It is recommended that you use a package manager like Pathogen or Vundle to 106 | install this plugin. In the case of Vundle all you have to do is add this 107 | line to your vimrc: 108 | > 109 | Bundle 'hsanson/vim-android' 110 | < 111 | and then inside vim run the |:BundleInstall| command. 112 | 113 | ============================================================================== 114 | 4. Usage *vim-android-usage* 115 | 116 | Before using this plugin you must tell it where you have the android SDK 117 | installed. There are two ways to do this: you can set the ANDROID_HOME 118 | environment variable to the absolute path of the android SDK or you can set 119 | it to the global variable g:android_sdk_path in your vimrc file. 120 | 121 | When you open a Java, Kotlin or XML file this plugin looks for a build.gradle 122 | file starting from the location of the current open buffer upwards until your 123 | HOME directory. If it is found this plugin activates and enables several 124 | commands that faciliate working on Android projects and exports environment 125 | variables that can be used by other plugins for omnicomplete and debugging. 126 | 127 | Optionally you may also set |g:gradle_path| to tell the plugin where to look 128 | for the gradle binaries. Check the options documentation below for more 129 | details on these and other options. 130 | 131 | ------------------------------------------------------------------------------ 132 | COMMANDS *vim-android-commands* 133 | 134 | :GradleSync 135 | Synchronizes the vim-android environment with that of the gradle.build 136 | file. This is run automatically when opening a buffer with a java, kotlin 137 | or xml file inside a gradle or android project. You should execute this 138 | command every time you make changes to your build.gradle file. 139 | 140 | :GradleInfo 141 | Displays the output of the last command executed by the plugin. Useful 142 | for figuring out why something may not be working properly. 143 | 144 | :Gradle 145 | Invokes gradle passing the verbatim. Any gradle options 146 | available via command line can be used using this command (e.g. :Gradle 147 | build). 148 | 149 | :GradleGenClassPathFile 150 | Manually generate the .classpath file with all gradle dependencies and 151 | sources. This .classpath file is read by some tools like Eclipse JDT 152 | language server for lsp features. 153 | 154 | Note that this command is affected by |g:gradle_gen_classpath_file| 155 | configuration. 156 | 157 | After generating the .classpath file you may want to run |GradleSync| to 158 | update the language servers (Eclipse JDT) configurations. If after this 159 | you get unknown references it may be necessary to restart the language 160 | server itself. 161 | 162 | Warning: for now this command only works for Android projects. For non 163 | Android projects this command has no effect. 164 | 165 | :Android 166 | This is an alias to the Gradle command. 167 | 168 | :AndroidInstall *:AndroidDebugInstall* 169 | Build and installs the application in mode. In the case that you 170 | have several emulators running and/or several devices connected then this 171 | command will present you a list of emulators/devices so you can choose to 172 | which one the APK should be installed to. If there are not apk files 173 | build this command fails with an error. Current version of gradle can also 174 | install the APK on all connected devices so invoking :Gradle installDebug 175 | or :Gradle installRelease should have the same effect if you have a recent 176 | enough version of the android gradle plugin. 177 | 178 | :AndroidUninstall *:AndroidUninstall* 179 | This command allows to uninstall the application. If you have several 180 | emulators running and/or several devices connected, then this command will 181 | prompt you with a list of emulators/devices so you can choose from which one 182 | the app should be uninstalled. Current version of gradle can also uninstall 183 | the APKs from all connected devices so invoking :Gradle uninstallAll should 184 | have the same effect as long as you have a recent version of android gradle 185 | plugin. 186 | 187 | :AndroidDevices *:AndroidDevices* 188 | Lists all android devices connected and all running emulators. 189 | 190 | :AndroidEmulator *:AndroidEmulator* 191 | Allows to start defined avd emulators within vim. 192 | 193 | ------------------------------------------------------------------------------ 194 | KEY MAPPINGS *vim-android-keys* 195 | 196 | By default the vim-android plugin has no mappings and all functionality is 197 | accessed using the commands |vim-android-commands| but this does not impede 198 | you from creating your own mappings. 199 | 200 | For example you can map a function key (e.g. F5) to compile your project in 201 | debug mode using: 202 | 203 | > 204 | nmap :Gradle assembleDebug 205 | < 206 | 207 | this way anytime you press the key it will build and install your 208 | Android application. 209 | 210 | Every time you modify the build.gradle file by adding or removing dependencies 211 | it is a good idea to run the GradleSync command so the dependencies get loaded 212 | into vim-android. If you are using NeoVim and have async |g:gradle_async| 213 | enabled you may prefer to set an autocommand so this happens automatically. 214 | For this simply add the following to your vim configuration: 215 | 216 | > 217 | au BufWrite build.gradle call gradle#sync() 218 | < 219 | 220 | ------------------------------------------------------------------------------ 221 | ANDROID OMNI-COMPLETION *vim-android-omnicomplete* 222 | 223 | This plugin by itself does not provide omni-completion of Android classes 224 | and/or methods. It is highly recommended to install ALE 225 | (https://github.com/w0rp/ale) with the `eclipselsp` or `javalsp` LSP linter to get 226 | this functionality. 227 | 228 | 229 | ------------------------------------------------------------------------------ 230 | STATUS LINE *vim-android-statusline* 231 | 232 | This plugin provides some methods that return strings indiciating the plugin 233 | status. 234 | 235 | Function |lightline#gradle#running()| returns |g:gradle_glyph_building| 236 | followed with the number of running gradle jobs. If no jobs are currently 237 | running then an empty string is returned. 238 | 239 | Function |lightline#gradle#project()| returns |g:gradle_glyph_android| if the 240 | current project is an android project, |g:gradle_glyph_gradle| if the 241 | current project is a gradle project, or an empty string otherwise. 242 | 243 | Function |lightline#gradle#errors()| returns |g:gradle_glyph_errors| followed 244 | by the number of errors currently listed in the loclist. 245 | 246 | Function |lightline#gradle#warnings()| returns |g:gradle_glyph_warnings| followed 247 | by the number of warnings currently listed in the loclist. 248 | 249 | 250 | *g:gradle_glyph_gradle* 251 | g:gradle_glyph_gradle~ 252 | Default: "G" 253 | > 254 | let g:gradle_glyph_gradle = 'U+e73a' 255 | < 256 | *g:gradle_glyph_android* 257 | g:gradle_glyph_android~ 258 | Default: "A" 259 | > 260 | let g:gradle_glyph_android = 'U+f17b' 261 | < 262 | *g:gradle_glyph_error* 263 | g:gradle_glyph_error~ 264 | Default: "E" 265 | > 266 | let g:android_airline_error_glyph = 'U+f06a' 267 | < 268 | *g:gradle_glyph_warning* 269 | g:gradle_glyph_warning~ 270 | Default: "W" 271 | > 272 | let g:gradle_glyph_warning = 'U+f071' 273 | < 274 | *g:gradle_glyph_building* 275 | g:gradle_glyph_building~ 276 | Default: "B" 277 | > 278 | let g:gradle_glyph_building... = 'U+f253' 279 | < 280 | Note: To use the examples above you must have a powerline enabled font. You 281 | can use a program such as fontmatrix to browse the glyphs available in your 282 | font and find the HEX representation. Once you know the HEX representation of 283 | the glyph you can copy/paste it or input it by pressing followed by 284 | 'u' and the HEX code in insert mode. 285 | 286 | ------------------------------------------------------------------------------ 287 | AIRLINE STATUS LINE *vim-android-airline* 288 | 289 | To show the gradle/android status line in Airline you can add the following to 290 | your vim configuration to create airline gradle parts: 291 | > 292 | call airline#parts#define_function( 293 | \ 'gradle-running', 294 | \ 'lightline#gradle#running' 295 | \) 296 | 297 | call airline#parts#define_function( 298 | \ 'gradle-errors', 299 | \ 'lightline#gradle#errors' 300 | \) 301 | 302 | call airline#parts#define_function( 303 | \ 'gradle-warnings', 304 | \ 'lightline#gradle#warnings' 305 | \) 306 | 307 | call airline#parts#define_function( 308 | \ 'gradle-project', 309 | \ 'lightline#gradle#project' 310 | \) 311 | < 312 | Then you can add the parts to any airline section you want: 313 | > 314 | let g:airline_section_x= airline#section#create_right([ 315 | \ 'filetype', 316 | \ 'gradle-running', 317 | \ 'gradle-errors', 318 | \ 'gradle-warnings' 319 | \]) 320 | < 321 | 322 | Refer to airline documentation for details on how parts and sections are 323 | defined and used. 324 | 325 | ------------------------------------------------------------------------------ 326 | LIGHTLINE STATUS LINE *vim-android-lightline* 327 | 328 | To show the gradle/android status line in Lightline you can add the following 329 | to your vim configuration: 330 | 331 | let g:lightline = { 332 | \ 'active': { 333 | \ 'left': [ ['gradle_project'] ], 334 | \ 'right': [ ['gradle_running'], ['gradle_errors'], ['gradle_warnings'] ] 335 | \ }, 336 | \ 'component_expand': { 337 | \ 'gradle_errors': 'lightline#gradle#errors', 338 | \ 'gradle_warnings': 'lightline#gradle#warnings', 339 | \ 'gradle_running': 'lightline#gradle#running', 340 | \ 'gradle_project': 'lightline#gradle#project' 341 | \ }, 342 | \ 'component_type': { 343 | \ 'gradle_errors': 'error', 344 | \ 'gradle_warnings': 'warning', 345 | \ 'gradle_running': 'left', 346 | \ 'gradle_project': 'left' 347 | \ } 348 | \ } 349 | 350 | Read the Lightline documentation for details on how this configuration works and 351 | adapt to your own usage. 352 | 353 | ------------------------------------------------------------------------------ 354 | TROUBLESHOOTING *vim-android-troubleshooting* 355 | 356 | Using neovim *health* feature you can check your environment setup running the 357 | CheckHealth command: 358 | > 359 | :checkhealth gradle 360 | < 361 | ============================================================================== 362 | 5. ALE Integration *vim-android-ale* 363 | 364 | This plugin full potential is achieved when used in combination with the 365 | ALE (https://github.com/w0rp/ale) plugin. When this plugin is installed and 366 | configured we get additional features: 367 | 368 | - ALE with eclipselsp (jdtls) or javalsp linter gets support for 369 | linting, auto-completing, import, and go to definition of Android 370 | dependencies. 371 | - ALE gains a new `android` linter available for xml, java, kotlin, and 372 | groovy files. You need to add `android` to these file types in your 373 | |g:ale_linters| configuration. 374 | - vim-android benefits from all linters/fixers available in ALE like 375 | checkstyle, google_format, etc. 376 | - vim-android benefits from ALE auto-completion for java/kotlin files. 377 | 378 | Example configuration for best ALE/vim-android combination: 379 | > 380 | let g:gradle_loclist_show = 0 381 | let g:gradle_show_signs = 0 382 | 383 | let g:ale_linters = { 384 | \ 'xml': ['android'], 385 | \ 'groovy': ['android'], 386 | \ 'java': ['android', 'checkstyle', 'eclipselsp'], 387 | \ 'kotlin': ['android', 'ktlint', 'languageserver'] 388 | \ } 389 | < 390 | Refer to ALE documentation for installation and configuration details of each 391 | linter. 392 | 393 | Both ALE and vim-android modify the loclist and buffer signs conflicting with 394 | each other. Is recommended to set both |g:gradle_loclist_show| and 395 | |g:gradle_show_signs| variables to 0 and let ALE take care of handling them. 396 | 397 | 398 | ============================================================================== 399 | 6. Configuration *vim-android-configuration* 400 | 401 | *g:android_sdk_path* 402 | g:android_sdk_path~ 403 | Default: $ANDROID_HOME 404 | 405 | This option must specify the location of your Android SDK installation. 406 | 407 | Example: 408 | > 409 | let g:android_sdk_path = '/opt/adroid-sdk' 410 | < 411 | *g:gradle_bin* 412 | g:gradle_bin~ 413 | Default: Gradle Wrapper 414 | 415 | By default this plugin tries to use gradle wrapper script (e.g. gradlew) to 416 | build the project unless this variable is set. If set then the plugin uses this 417 | gradle binary to build all project. If this variable is not set and the 418 | project does not have a gradle wrapper script, then the binary is searched 419 | inside the GRADLE_HOME and PATH environment variables. See |g:gradle_path| for 420 | a way to customize this behaviour. 421 | 422 | Example: 423 | > 424 | let g:gradle_bin=/opt/gradle/bin/gradle 425 | < 426 | *g:gradle_sync_on_load* 427 | g:gradle_sync_on_load~ 428 | Default: 1 429 | 430 | This plugin runs gradle#sync() the first time a java, kotlin, or xml file of a 431 | project is open. This behavior can be disabled by setting this variable to 0. 432 | 433 | *g:gradle_path* 434 | g:gradle_path~ 435 | Default: GRADLE_HOME 436 | 437 | When the project has no gradle wrapper script and |g:gradle_bin| is not 438 | defined, then this project tries to search for the gradle binary inside 439 | GRADLE_HOME and PATH environment variables. If your gradle installation 440 | is in a non-standard location you can change the search path by setting 441 | this g:gradle_path variable: 442 | 443 | Example: 444 | > 445 | let g:gradle_path=/opt/gradle 446 | < 447 | The above will cause the plugin to search for the gradle binary in the 448 | /bin directory within /opt/gradle folder. 449 | 450 | *g:gradle_daemon* 451 | g:gradle_daemon~ 452 | Default: 1 453 | 454 | If this variable is 1 then gradle will be executed with the daemon option on. 455 | This greatly improves the speed of builds and is recommended to let it 456 | enabled. If for some reason you prefer to not run gradle in daemon mode then 457 | set this variable to 0. 458 | 459 | Example: 460 | > 461 | let g:gradle_daemon=0 462 | < 463 | 464 | *g:android_adb_tool* 465 | g:android_adb_tool~ 466 | Default: ${g:android_sdk_path}/tools/adb 467 | 468 | This plugin relies heavily on the Android ADB tool to query devices/emulators 469 | and to install the APK files. By default this tool is found inside the 470 | Android SDK so you do not need to set this variable but if for some reason in 471 | you installation the ADB tool is located in a different path you can 472 | explicitly tell the plugin where to find it using this variable. 473 | 474 | Example: 475 | > 476 | let g:android_adb_tool=/path/to/tool/adb 477 | < 478 | 479 | *g:android_aapt_tool* 480 | g:android_aapt_tool~ 481 | Default: ${g:android_sdk_path}/build-tools/{latest-version}/aapt2 482 | 483 | Some functions such as AndroidLaunch require the aapt2 binary. By default this 484 | plugin looks for the latest version of build tools installed inside the 485 | android SDK path. 486 | 487 | Example: 488 | > 489 | let g:android_aapt_tool=/path/to/tool/aapt2 490 | < 491 | 492 | *g:gradle_loclist_show* 493 | g:gradle_loclist_show~ 494 | Default: 0 495 | 496 | Setting this variable will cause the plugin to open the loclist automatically 497 | if there are any errors present. Since this may conflict with other plugins 498 | that also modify the loclist (e.g. ALE) this is disabled by default. 499 | 500 | Example: 501 | > 502 | let g:gradle_loclist_show=1 503 | < 504 | *g:gradle_async* 505 | g:gradle_async~ 506 | Default: 1 507 | 508 | If you are running NeoVim then this plugin will execute gradle tasks in the 509 | background using NeoVim job functions. If for some reason you need to disable 510 | this functionality you can do so by setting this variable to zero. 511 | 512 | Example: 513 | > 514 | let g:gradle_async=0 515 | < 516 | *g:gradle_set_classpath* 517 | g:gradle_set_classpath~ 518 | Default: 1 519 | 520 | This plugin will automatically set the CLASSPATH and SRCPATH environment 521 | variables after gradle sync task completes. But there are other plugins (e.g. 522 | javacomplete2) that also set these environment variables. To avoid conflict 523 | you can disable this feature by setting this configuration variable to 0. In 524 | this case this plugin will not touch the CLASSPATH and SRCPATH environment 525 | variables. 526 | 527 | Example: 528 | > 529 | let g:gradle_set_classpath=0 530 | < 531 | *g:gradle_gen_classpath_file* 532 | g:gradle_gen_classpath_file~ 533 | Default: 1 534 | 535 | This plugin will automatically generate a .classpath file with dependencies 536 | after gradle sync task completes for Android projects. This file is required 537 | for some language servers (e.g. Eclipse JDT) to figure out dependencies for 538 | auto completion, auto import, and other useful functions. If you prefer to not 539 | generate this file then set this configuration variable to 0. 540 | 541 | Note that the .classpath file is generated only for Android projects. For 542 | non-Android projects this configuration has no effect. 543 | 544 | Example: 545 | > 546 | let g:gradle_gen_classpath_file=0 547 | < 548 | *g:gradle_show_signs* 549 | g:gradle_show_signs~ 550 | Default: 1 (0 if ALE is present) 551 | 552 | This variable determines if the plugin should display vim signs marking 553 | errors and warnings. To avoid conflict with ALE, this is disabled by default 554 | if the ALE plugin is also installed and loaded. 555 | 556 | Example: 557 | > 558 | let g:gradle_show_signs=0 559 | < 560 | ============================================================================== 561 | 7. Todo *vim-android-todo* 562 | 563 | - Project creation commands. 564 | 565 | ============================================================================== 566 | 8. Credits *vim-android-credits* 567 | 568 | Contributors: 569 | 570 | - Donnie West (https://github.com/DonnieWest) 571 | - Grim Kriegor (https://github.com/GrimKriegor) 572 | 573 | Ideas stolen from: 574 | 575 | - https://github.com/bpowell/vim-android 576 | - https://github.com/mgarriott/vim-android 577 | - http://flukus.github.io/2015/07/03/2015_07_03-Vim-errorformat-Demystified/ 578 | 579 | Recommended : 580 | 581 | - https://github.com/w0rp/ale 582 | 583 | ============================================================================== 584 | vim: tw=78 ts=8 sw=4 sts=4 et ft=help 585 | -------------------------------------------------------------------------------- /autoload/gradle.vim: -------------------------------------------------------------------------------- 1 | let s:chunks = {} 2 | let s:lastOutput = [] 3 | let s:files = {} 4 | let s:jobidseq = 0 5 | let s:isBuilding = 0 6 | let $LC_ALL='en_US.UTF8' 7 | 8 | function! gradle#logi(msg) 9 | redraw 10 | echomsg a:msg 11 | endfunction 12 | 13 | 14 | " Returns the path to the gradle installation. 15 | " TODO: The default works only in Linux OS. 16 | function! gradle#gradleHome() 17 | 18 | if exists('$GRADLE_HOME') 19 | let g:gradle_path = $GRADLE_HOME 20 | return g:gradle_path 21 | endif 22 | 23 | if exists('g:gradle_path') 24 | return g:gradle_path 25 | endif 26 | 27 | let g:gradle_path = '/usr' 28 | return g:gradle_path 29 | 30 | endfunction 31 | 32 | " Tries to determine the location of the Gradle wrapper starting from the 33 | " current buffer location. 34 | function! gradle#wrapper() 35 | let l:path = expand('%:p:h') 36 | 37 | if len(l:path) <= 0 38 | let l:path = getcwd() 39 | endif 40 | 41 | let l:file = 'gradlew' 42 | if gradle#getOS() ==# 'Windows' 43 | let l:file .= '.bat' 44 | endif 45 | 46 | let l:file = findfile(l:file, escape(l:path, ' ') . ';$HOME') 47 | 48 | if len(l:file) == 0 49 | return '' 50 | endif 51 | 52 | return exepath(fnamemodify(l:file, ':p')) 53 | endfunction 54 | 55 | function! gradle#isExecutable(exec) 56 | if type(a:exec) != type('') 57 | return 0 58 | elseif strlen(a:exec) == 0 59 | return 0 60 | else 61 | return executable(a:exec) 62 | endif 63 | endfunction 64 | 65 | " Function that tries to determine the location of the gradle binary. If 66 | " g:gradle_bin is defined then it is used as the gradle binary. If it is not 67 | " defined and the project has a gradle wrapper script, then the wrapper script 68 | " is used. If no wrapper script is found then the binary is searched in the 69 | " gradle home directory if defined. Finally if none of the above works it tries 70 | " to find gradle in the PATH and if that fails too then it is set to a non 71 | " operation. 72 | function! gradle#bin() 73 | 74 | if exists('g:gradle_bin') 75 | return g:gradle_bin 76 | endif 77 | 78 | if gradle#isExecutable(gradle#wrapper()) 79 | let g:gradle_bin = gradle#wrapper() 80 | return g:gradle_bin 81 | endif 82 | 83 | if finddir(escape(gradle#gradleHome(), ' ')) !=# '' && gradle#isExecutable(gradle#gradleHome() . '/bin/gradle') 84 | let g:gradle_bin = gradle#gradleHome() . '/bin/gradle' 85 | return g:gradle_bin 86 | endif 87 | 88 | if executable('gradle') 89 | let g:gradle_bin = 'gradle' 90 | return g:gradle_bin 91 | endif 92 | 93 | return '' 94 | endfunction 95 | 96 | function! s:getGradleVersion() 97 | let l:cmd = join([shellescape(gradle#bin()), ' --version']) 98 | let l:pattern = 'Gradle\s*\(\d\+\)\.\(\d\+\)' 99 | let l:result = system(l:cmd) 100 | let l:version_list = matchlist(l:result, l:pattern) 101 | 102 | if empty(l:version_list) 103 | return 104 | endif 105 | 106 | let l:version_major = l:version_list[1] 107 | let l:version_minor = l:version_list[2] 108 | let l:version = l:version_major . '.' . l:version_minor 109 | let l:cache_key = gradle#key(gradle#findGradleFile()) 110 | call cache#set(l:cache_key, 'version', l:version) 111 | call cache#set(l:cache_key, 'version_major', l:version_major) 112 | call cache#set(l:cache_key, 'version_minor', l:version_minor) 113 | endfunction 114 | 115 | function! gradle#version() 116 | 117 | let l:key = gradle#key(gradle#findGradleFile()) 118 | let l:gradle_version = cache#get(l:key, 'version', '') 119 | 120 | if l:gradle_version ==# '' 121 | call s:getGradleVersion() 122 | endif 123 | 124 | return cache#get(l:key, 'version', 'unknown') 125 | endfunction 126 | 127 | function! gradle#versionMajor() 128 | let l:key = gradle#key(gradle#findGradleFile()) 129 | let l:gradle_version = cache#get(l:key, 'version_major', '') 130 | 131 | if l:gradle_version ==# '' 132 | call s:getGradleVersion() 133 | endif 134 | 135 | return str2nr(cache#get(l:key, 'version_major', '')) 136 | endfunction 137 | 138 | function! gradle#versionMinor() 139 | let l:key = gradle#key(gradle#findGradleFile()) 140 | let l:gradle_version = cache#get(l:key, 'version_minor', '') 141 | 142 | if l:gradle_version ==# '' 143 | call s:getGradleVersion() 144 | endif 145 | 146 | return str2nr(cache#get(l:key, 'version_minor', '')) 147 | endfunction 148 | 149 | function! gradle#versionNumber() 150 | return gradle#versionMajor() * 100 + gradle#versionMinor() 151 | endfunction 152 | 153 | " Verifies if the android sdk is available and if the gradle build and binary 154 | " are present. 155 | function! gradle#isGradleProject() 156 | 157 | let l:gradle_cfg_exists = filereadable(gradle#findGradleFile()) 158 | let l:gradle_bin_exists = gradle#isExecutable(gradle#bin()) 159 | 160 | if( ! l:gradle_cfg_exists ) 161 | return 0 162 | endif 163 | 164 | if( ! l:gradle_bin_exists ) 165 | return 0 166 | endif 167 | 168 | return 1 169 | endfunction 170 | 171 | " Function that compiles and installs the android app into a device. 172 | " a:device is the device or emulator id as displayed by *adb devices* command. 173 | " a:mode can be any of the compile modes supported by the build system (e.g. 174 | " debug or release). 175 | function! gradle#install(device, mode) 176 | let l:old_serial = $ANDROID_SERIAL 177 | let $ANDROID_SERIAL=a:device 178 | let l:result = call('gradle#run', ['install' . android#capitalize(a:mode)]) 179 | let $ANDROID_SERIAL = l:old_serial 180 | endfunction 181 | 182 | function! gradle#build(mode) 183 | let l:result = call('gradle#run', ['assemble' . android#capitalize(a:mode)]) 184 | endfunction 185 | 186 | function! gradle#uninstall(device, mode) 187 | let l:old_serial = $ANDROID_SERIAL 188 | let $ANDROID_SERIAL=a:device 189 | let l:result = call('gradle#run', ['uninstall' . android#capitalize(a:mode)]) 190 | let $ANDROID_SERIAL = l:old_serial 191 | endfunction 192 | 193 | function! gradle#listVariants() abort 194 | let l:key = gradle#key(gradle#findGradleFile()) 195 | let l:gradle_variants = cache#get(l:key, 'variants', '') 196 | 197 | if empty(l:gradle_variants) 198 | let l:result = system(join([shellescape(gradle#bin()), ' -I ', g:gradle_init_file,' variants -q'])) 199 | 200 | if empty(l:result) 201 | return 202 | endif 203 | 204 | call cache#set(l:key, 'variants', l:result) 205 | endif 206 | 207 | return cache#get(l:key, 'variants', '') 208 | endfunction 209 | 210 | " Return a unique key identifier for the gradle project. This key is generated 211 | " based on the gradle file of the project, therefore it changes if the gradle 212 | " file contents is changed. 213 | function! gradle#key(path) abort 214 | return cache#key(a:path) 215 | endfunction 216 | 217 | " Tries to determine the location of the build.gradle file starting from the 218 | " current buffer location. 219 | function! gradle#findGradleFile() 220 | 221 | let l:file = '' 222 | let l:path = expand('%:p:h') 223 | 224 | if len(l:path) <= 0 225 | let l:path = getcwd() 226 | endif 227 | 228 | let l:file = findfile('build.gradle', escape(l:path, ' ') . ';$HOME') 229 | 230 | if len(l:file) == 0 231 | let l:file = findfile('build.gradle.kts', escape(l:path, ' ') . ';$HOME') 232 | endif 233 | 234 | if len(l:file) == 0 235 | return '' 236 | endif 237 | 238 | return copy(fnamemodify(l:file, ':p')) 239 | endfunction 240 | 241 | " Tries to find the root of the android project. It uses the build.gradle file 242 | " location as root. This allows vim-android to work with multi-project 243 | " environments. 244 | function! gradle#findRoot() 245 | return fnamemodify(gradle#findGradleFile(), ':p:h') 246 | endfunction 247 | 248 | function! gradle#isCompilerSet() 249 | if(exists('b:current_compiler') && b:current_compiler ==# 'gradle') 250 | return 1 251 | else 252 | return 0 253 | endif 254 | endfunction 255 | 256 | function! gradle#compile(...) 257 | call gradle#logi('Gradle ' . join(a:000, ' ')) 258 | let l:result = call('gradle#run', a:000) 259 | endfunction 260 | 261 | function! s:BufWinId() abort 262 | return exists('*bufwinid') ? bufwinid(str2nr(bufnr('%'))) : 0 263 | endfunction 264 | 265 | function! gradle#cmd(...) abort 266 | let l:cmd = efm#cmd() 267 | let l:cmd = extend(l:cmd, a:000) 268 | let l:cmd = extend(l:cmd, efm#shellpipe()) 269 | return l:cmd 270 | endfunction 271 | 272 | function! gradle#glyph() 273 | if !exists('g:gradle_glyph_gradle') 274 | let g:gradle_glyph_gradle = 'G' 275 | endif 276 | return g:gradle_glyph_gradle 277 | endfunction 278 | 279 | function! gradle#glyphError() 280 | if !exists('g:gradle_glyph_error') 281 | let g:gradle_glyph_error = 'E' 282 | endif 283 | return g:gradle_glyph_error 284 | endfunction 285 | 286 | function! gradle#glyphWarning() 287 | if !exists('g:gradle_glyph_warning') 288 | let g:gradle_glyph_warning = 'W' 289 | endif 290 | return g:gradle_glyph_warning 291 | endfunction 292 | 293 | function! gradle#glyphBuilding() 294 | if !exists('g:gradle_glyph_building') 295 | let g:gradle_glyph_building = 'B' 296 | endif 297 | return g:gradle_glyph_building 298 | endfunction 299 | 300 | function! gradle#asyncEnable() 301 | let g:gradle_async = 1 302 | endfunction 303 | 304 | function! gradle#asyncDisable() 305 | let g:gradle_async = 0 306 | endfunction 307 | 308 | function! gradle#showSigns() 309 | if !exists('g:gradle_show_signs') 310 | if exists('g:loaded_ale') 311 | let g:gradle_show_signs = 0 312 | else 313 | let g:gradle_show_signs = 1 314 | end 315 | endif 316 | return g:gradle_show_signs 317 | endfunction 318 | 319 | function! gradle#syncOnLoad() 320 | if !exists('g:gradle_sync_on_load') 321 | let g:gradle_sync_on_load = 1 322 | endif 323 | return g:gradle_sync_on_load 324 | endfunction 325 | 326 | function! gradle#isAsyncEnabled() 327 | if !exists('g:gradle_async') 328 | let g:gradle_async = 1 329 | endif 330 | return g:gradle_async 331 | endfunction 332 | 333 | function! gradle#asyncToggle() 334 | if gradle#isAsyncEnabled() 335 | call gradle#asyncDisable() 336 | else 337 | call gradle#asyncEnable() 338 | endif 339 | endfunction 340 | 341 | function! gradle#isDaemonEnabled() 342 | if !exists('g:gradle_daemon') 343 | let g:gradle_daemon = 1 344 | endif 345 | return g:gradle_daemon 346 | endfunction 347 | 348 | function! gradle#glyphProject() 349 | if(android#isAndroidProject()) 350 | return android#glyph() 351 | elseif(gradle#isGradleProject()) 352 | return gradle#glyph() 353 | endif 354 | endfunction 355 | 356 | " Deprecated. 357 | function! gradle#statusLine() 358 | return join([ 359 | \ lightline#gradle#running(), 360 | \ lightline#gradle#errors(), 361 | \ lightline#gradle#warnings(), 362 | \ lightline#gradle#project() 363 | \], ' ') 364 | endfunction 365 | 366 | function! gradle#jobCount() abort 367 | return gradle#running() ? s:isBuilding : 0 368 | endfunction 369 | 370 | function! gradle#running() abort 371 | return exists('s:isBuilding') && s:isBuilding > 0 372 | endfunction 373 | 374 | " This method returns the number of valid errors in the loclist. This 375 | " allows us to check if there are errors after compilation. 376 | function! gradle#getErrorCount() 377 | let l:id = s:BufWinId() 378 | let l:list = deepcopy(getloclist(l:id)) 379 | return len(filter(l:list, "v:val['valid'] > 0 && tolower(v:val['type']) ==# 'e'")) 380 | endfunction 381 | 382 | " This method returns the number of valid warnings in the loclist window. This 383 | " allows us to check if there are errors after compilation. 384 | function! gradle#getWarningCount() 385 | let l:id = s:BufWinId() 386 | let l:list = deepcopy(getloclist(l:id)) 387 | return len(filter(l:list, "v:val['valid'] > 0 && tolower(v:val['type']) ==# 'w'")) 388 | endfunction 389 | 390 | function! gradle#syncCmd() 391 | return [ 392 | \ gradle#bin(), 393 | \ '-b', 394 | \ gradle#findGradleFile(), 395 | \ '-I', 396 | \ g:gradle_init_file, 397 | \ 'vim' 398 | \ ] 399 | endfunction 400 | 401 | function! gradle#run(...) 402 | 403 | let l:cmd = call('gradle#cmd', a:000) 404 | 405 | if gradle#isAsyncEnabled() && has('nvim') && exists('*jobstart') 406 | call s:nvim_job(l:cmd) 407 | elseif gradle#isAsyncEnabled() && exists('*job_start') 408 | call s:vim_job(l:cmd) 409 | else 410 | let l:gradleFile = gradle#findGradleFile() 411 | let l:result = split(system(join(map(l:cmd, {k, v -> shellescape(v)})))), '\n') 412 | let l:id = s:BufWinId() 413 | call setloclist(l:id, [], ' ', s:What(l:result)) 414 | redraw! 415 | call s:showLoclist() 416 | endif 417 | 418 | return [gradle#getErrorCount(), gradle#getWarningCount()] 419 | 420 | endfunction 421 | 422 | 423 | " Sync vim-android environment with build.gradle file. 424 | function! gradle#sync() abort 425 | if gradle#isAsyncEnabled() && has('nvim') && exists('*jobstart') 426 | call s:nvim_job(gradle#syncCmd()) 427 | elseif gradle#isAsyncEnabled() && exists('*job_start') 428 | call s:vim_job(gradle#syncCmd()) 429 | else 430 | let l:gradleFile = gradle#findGradleFile() 431 | call gradle#logi('Gradle sync, please wait...') 432 | let l:result = split(system(join(map(gradle#syncCmd(), {k, v -> shellescape(v)})))), '\n') 433 | call s:parseVimTaskOutput(l:gradleFile, l:result) 434 | let l:id = s:BufWinId() 435 | call setloclist(l:id, [], ' ', s:What(l:result)) 436 | call s:setClassPath() 437 | call classpath#generateClasspathFile() 438 | call gradle#logi('') 439 | call ale_linters#java#NotifyConfigChange() 440 | endif 441 | endfunction 442 | 443 | function! s:parseVimTaskOutput(gradleFile, result) 444 | 445 | for line in a:result 446 | 447 | let mlist = matchlist(line, '^vim-builddir\s\(.*\)$') 448 | if empty(mlist) == 0 && len(mlist[1]) > 0 && isdirectory(mlist[1]) 449 | call add(cache#get(gradle#key(a:gradleFile), 'jars', []), mlist[1]) 450 | endif 451 | 452 | let mlist = matchlist(line, '^vim-src\s\(.*\)$') 453 | if empty(mlist) == 0 && len(mlist[1]) > 0 && isdirectory(mlist[1]) 454 | call add(cache#get(gradle#key(a:gradleFile), 'srcs', []), mlist[1]) 455 | endif 456 | 457 | let mlist = matchlist(line, '^vim-gradle\s\(.*\)$') 458 | if empty(mlist) == 0 && len(mlist[1]) > 0 459 | call add(cache#get(gradle#key(a:gradleFile), 'jars', []), mlist[1]) 460 | endif 461 | 462 | let mlist = matchlist(line, '^vim-project\s\(.*\)$') 463 | if empty(mlist) == 0 && len(mlist[1]) > 0 464 | call cache#set(gradle#key(a:gradleFile), 'name', mlist[1]) 465 | endif 466 | 467 | let mlist = matchlist(line, '^vim-target\s\(.*\)$') 468 | if empty(mlist) == 0 && len(mlist[1]) > 0 469 | call cache#set(gradle#key(a:gradleFile), 'target', mlist[1]) 470 | endif 471 | 472 | endfor 473 | 474 | endfunction 475 | 476 | function! gradle#projectName() abort 477 | return cache#get(gradle#key(gradle#findGradleFile()), 'name', '') 478 | endfunction 479 | 480 | function! gradle#targetVersion() abort 481 | return cache#get(gradle#key(gradle#findGradleFile()), 'target', 'android-28') 482 | endfunction 483 | 484 | "" 485 | " Return the gradle dependencies per project from the cache if available or an 486 | " empty array if not available. 487 | function! gradle#classPaths() abort 488 | return cache#get(gradle#key(gradle#findGradleFile()), 'jars', []) 489 | endfunction 490 | 491 | "" 492 | " Return the gradle source pahts per project from the cache if available or an 493 | " empty array otherwise. 494 | function! gradle#sourcePaths() abort 495 | return cache#get(gradle#key(gradle#findGradleFile()), 'srcs', []) 496 | endfunction 497 | 498 | "" 499 | " Returns 1 if the project jar dependencies are changed or 0 otherwise. 500 | function! gradle#isGradleDepsCached() 501 | return !empty(gradle#classPaths()) 502 | endfunction 503 | 504 | " Compatibility function. 505 | " This gradle#uniq() function will use the built in uniq() function for vim > 506 | " 7.4.218 and a custom implementation of older versions. 507 | " 508 | " NOTE: This method only works on sorted lists. If they are not sorted this will 509 | " not result in a uniq list of elements!! 510 | " 511 | " Stolen from: https://github.com/LaTeX-Box-Team/LaTeX-Box/pull/223 512 | function! gradle#uniq(list) 513 | 514 | if exists('*uniq') 515 | return uniq(a:list) 516 | endif 517 | 518 | if len(a:list) <= 1 519 | return a:list 520 | endif 521 | 522 | let last_element = get(a:list,0) 523 | let uniq_list = [last_element] 524 | 525 | for i in range(1, len(a:list)-1) 526 | let next_element = get(a:list, i) 527 | if last_element == next_element 528 | continue 529 | endif 530 | let last_element = next_element 531 | call add(uniq_list, next_element) 532 | endfor 533 | 534 | return uniq_list 535 | 536 | endfunction 537 | 538 | " Function tries to determine the OS that is running this plugin. 539 | " http://vi.stackexchange.com/a/2577 540 | function! gradle#getOS() 541 | 542 | if !exists('g:gradle_os') 543 | if has('win64') || has('win32') || has('win16') 544 | let g:gradle_os = 'Windows' 545 | else 546 | let g:gradle_os = substitute(system('uname'), '\n', '', '') 547 | endif 548 | endif 549 | 550 | return g:gradle_os 551 | 552 | endfunction 553 | 554 | " Returns the classpath separator depending on the OS. 555 | function! gradle#classPathSep() 556 | 557 | if !exists('g:gradle_sep') 558 | if gradle#getOS() ==# 'Windows' 559 | let g:gradle_sep = ';' 560 | else 561 | let g:gradle_sep = ':' 562 | endif 563 | endif 564 | 565 | return g:gradle_sep 566 | 567 | endfunction 568 | 569 | function! gradle#setupGradleCommands() 570 | if gradle#isExecutable(gradle#bin()) 571 | command! -nargs=+ Gradle call gradle#compile() 572 | command! GradleSync call gradle#sync() 573 | command! GradleInfo call gradle#output() 574 | command! GradleGenClassPathFile call classpath#generateClasspathFile() 575 | else 576 | command! -nargs=? Gradle echoerr 'Gradle binary could not be found, vim-android gradle commands are disabled' 577 | command! GradleSync echoerr 'Gradle binary could not be found, vim-android gradle commands are disabled' 578 | command! GradleInfo echoerr 'Gradle binary could not be found, vim-android gradle commands are disabled' 579 | endif 580 | endfunction 581 | 582 | function! s:showSigns() 583 | 584 | if ! gradle#showSigns() 585 | return 586 | endif 587 | 588 | execute('sign unplace *') 589 | execute('sign define gradleErrorSign text=' . gradle#glyphError() . ' texthl=Error') 590 | execute('sign define gradleWarningSign text=' . gradle#glyphWarning() . ' texthl=Warning') 591 | let l:id = s:BufWinId() 592 | for item in getloclist(l:id) 593 | if item.valid && item.bufnr != 0 && item.lnum > 0 594 | let l:signId = s:lpad(item.bufnr) . s:lpad(item.lnum) 595 | let l:sign = 'sign place ' . l:signId . ' line=' . item.lnum 596 | if item.type ==# 'e' 597 | let l:sign = l:sign . ' name=gradleErrorSign' 598 | else 599 | let l:sign = l:sign . ' name=gradleWarningSign' 600 | endif 601 | let l:sign = l:sign . ' buffer=' . item.bufnr 602 | execute(l:sign) 603 | endif 604 | endfor 605 | endfunction 606 | 607 | function! s:showLoclist() 608 | 609 | " Backward compatibility 610 | if !exists('g:gradle_quickfix_show') 611 | let g:gradle_quickfix_show = 0 612 | endif 613 | 614 | if !exists('g:gradle_loclist_show') 615 | let g:gradle_loclist_show = g:gradle_quickfix_show 616 | endif 617 | 618 | call s:showSigns() 619 | 620 | if !g:gradle_loclist_show 621 | return 622 | end 623 | 624 | if gradle#getErrorCount() > 0 625 | execute('botright lopen | wincmd p') 626 | else 627 | execute('lclose') 628 | " Work around bug that causes file to loose syntax after the quick fix 629 | " window is closed. 630 | if exists('g:syntax_on') 631 | execute('syntax enable') 632 | endif 633 | endif 634 | endfunction 635 | 636 | " Add left zero padding to input number. 637 | " call s:lpad(20) -> 00020 638 | function! s:lpad(s) 639 | return repeat('0', 5 - len(a:s)) . a:s 640 | endfunction 641 | 642 | function! s:What(result) abort 643 | return { 644 | \ 'nr': '$', 645 | \ 'efm': efm#escape(efm#efm()), 646 | \ 'lines': a:result, 647 | \ 'title': 'gradle' 648 | \} 649 | endfunction 650 | 651 | function! s:updateLightline() abort 652 | if exists('*lightline#update') 653 | call lightline#update() 654 | endif 655 | endfunction 656 | 657 | function! s:startBuilding() 658 | let s:isBuilding = s:isBuilding + 1 659 | call s:updateLightline() 660 | endfunction 661 | 662 | function! s:finishBuilding() 663 | let s:isBuilding = s:isBuilding - 1 664 | call s:updateLightline() 665 | endfunction 666 | 667 | function! s:out_cb(chid, id, data) abort 668 | call s:job_cb(a:chid, split(a:data, "\n", 1), 'stdout') 669 | endfunction 670 | 671 | function! s:err_cb(chid, id, data) abort 672 | call s:job_cb(a:chid, split(a:data, "\n", 1), 'stderr') 673 | endfunction 674 | 675 | function! s:exit_cb(chid, id, status) abort 676 | call s:job_cb(a:chid, a:status, 'exit') 677 | endfunction 678 | 679 | function! gradle#output() 680 | if gradle#running() 681 | echom 'Gradle still running' 682 | else 683 | for l:line in s:lastOutput 684 | echom l:line 685 | endfor 686 | endif 687 | endfunction 688 | 689 | " Callback invoked when the gradle#sync() method finishes processing. Used when 690 | " using nvim async functionality. 691 | function! s:job_cb(id, data, event) abort 692 | 693 | if (a:event ==# 'stdout' || a:event ==# 'stderr') && !empty(a:data) 694 | let s:chunks[a:id][-1] .= a:data[0] 695 | call extend(s:chunks[a:id], a:data[1:]) 696 | elseif a:event ==# 'exit' 697 | call s:parseVimTaskOutput(s:files[a:id], s:chunks[a:id]) 698 | let l:id = s:BufWinId() 699 | call setloclist(l:id, [], ' ', s:What(s:chunks[a:id])) 700 | let s:lastOutput = deepcopy(s:chunks[a:id]) 701 | call remove(s:chunks, a:id) 702 | call s:showLoclist() 703 | call s:setClassPath() 704 | call classpath#generateClasspathFile() 705 | call s:finishBuilding() 706 | call ale_linters#java#NotifyConfigChange() 707 | endif 708 | endfunction 709 | 710 | function! s:nvim_job(cmd) abort 711 | 712 | let l:gradleFile = gradle#findGradleFile() 713 | 714 | let l:options = { 715 | \ 'on_stdout': function('s:job_cb'), 716 | \ 'on_stderr': function('s:job_cb'), 717 | \ 'on_exit': function('s:job_cb') 718 | \ } 719 | 720 | call s:startBuilding() 721 | 722 | let l:ch = jobstart(join(map(a:cmd, {k, v -> shellescape(v)})), l:options) 723 | let s:chunks[l:ch] = [''] 724 | let s:files[l:ch] = l:gradleFile 725 | endfunction 726 | 727 | function! s:vim_job(cmd) abort 728 | 729 | let l:gradleFile = gradle#findGradleFile() 730 | let s:jobidseq = s:jobidseq + 1 731 | let l:ch = s:jobidseq 732 | 733 | let l:options = { 734 | \ 'out_cb': function('s:out_cb', [l:ch]), 735 | \ 'err_cb': function('s:err_cb', [l:ch]), 736 | \ 'exit_cb': function('s:exit_cb', [l:ch]), 737 | \ 'mode': 'raw' 738 | \ } 739 | 740 | if has('patch-8.1.889') 741 | let l:options['noblock'] = 1 742 | endif 743 | 744 | let s:chunks[l:ch] = [''] 745 | let s:files[l:ch] = l:gradleFile 746 | call s:startBuilding() 747 | call job_start(a:cmd, l:options) 748 | endfunction 749 | 750 | " Helper method to setup all gradle/android environments. This task must be 751 | " called only after the gradle#sync() method finishes and the dependencies are 752 | " already cached. 753 | function! s:setClassPath() abort 754 | 755 | if !exists('g:gradle_set_classpath') 756 | let g:gradle_set_classpath = 1 757 | endif 758 | 759 | if g:gradle_set_classpath != 1 760 | return 761 | endif 762 | 763 | let l:deps = gradle#classPaths() 764 | let l:srcs = extend(gradle#sourcePaths(), android#sourcePaths()) 765 | let $CLASSPATH = join(gradle#uniq(sort(l:deps, 's:compareJars')), gradle#classPathSep()) 766 | let $SRCPATH = join(gradle#uniq(sort(l:srcs)), gradle#classPathSep()) 767 | exec 'set path=' . escape(join(gradle#uniq(sort(l:srcs)), gradle#classPathSep()), ' ') 768 | 769 | " [LEGACY] Is recommended to use ALE plugin with javalsp linter instead of 770 | " javacomplete plugin. 771 | if exists('*javacomplete#SetClassPath') 772 | call javacomplete#SetClassPath($CLASSPATH) 773 | endif 774 | 775 | " [LEGACY] Is recommended to use ALE plugin with javalsp linter instead of 776 | " javacomplete plugin. 777 | if exists('*javacomplete#SetSourcePath') 778 | call javacomplete#SetSourcePath($SRCPATH) 779 | endif 780 | 781 | " [LEGACY] Is recommended to use ALE plugin with javalsp linter instead of 782 | " syntastic plugin. 783 | let g:syntastic_java_javac_classpath = $CLASSPATH . ':' . $SRCPATH 784 | 785 | endfunction 786 | 787 | " Parses a SemVer version string. 788 | " 789 | " Returns "v:null" if the string doesn't contain a SemVer, otherwise an 790 | " object, like { 791 | " 'match': '1.0.1-rc01', 792 | " 'major': 1, 793 | " 'minor': 0, 794 | " 'patch': 1, 795 | " 'prerelease': '-rc01' 796 | " } 797 | " 798 | " From (adapted): https://github.com/noahfrederick/vim-composer/blob/7ad79/autoload/composer/semver.vim#L7 799 | function! s:parseSemVer(str) 800 | let l:semver = {} 801 | let l:match = matchlist(a:str, '\v(\d+)%(.(\d+)%(.(\d+))?)?(.*)') 802 | 803 | if empty(l:match) 804 | return v:null 805 | endif 806 | 807 | let l:semver.match = get(l:match, 0, '') 808 | let l:semver.major = str2nr(get(l:match, 1, '')) 809 | let l:semver.minor = str2nr(get(l:match, 2, '')) 810 | let l:semver.patch = str2nr(get(l:match, 3, '')) 811 | let l:semver.prerelease = trim(get(l:match, 4, '')) 812 | 813 | return l:semver 814 | endfunction 815 | 816 | " Compares two parsed SemVer objects returned by s:parseSemVer(), and returns 817 | " one of "-1", "0", or "1". 818 | function! s:compareSemVer(v1, v2) 819 | if a:v1.major == a:v2.major && a:v1.minor == a:v2.minor && a:v1.patch == a:v2.patch 820 | if !empty(a:v1.prerelease) && empty(a:v2.prerelease) 821 | return -1 822 | elseif empty(a:v1.prerelease) && !empty(a:v2.prerelease) 823 | return 1 824 | elseif empty(a:v1.prerelease) && empty(a:v2.prerelease) 825 | return 0 826 | endif 827 | 828 | " Compare both pre-releases using ASCII codes if labels are different, for 829 | " example "-beta.1" vs. "-alpha.2" 830 | if substitute(a:v1.prerelease, '\H', '', 'g') !=? substitute(a:v2.prerelease, '\H', '', 'g') 831 | return a:v1.prerelease jar2". 858 | " 859 | " NOTE: This function expects the input JAR files to follow the traditional 860 | " naming convention of artifactId, version (SemVer), and extension (e.g, 861 | " "artifactId-1.0.0.jar"), otherwise the comparison will default to using 862 | " ASCII codes. The files can optionally include a relative/absolute paths. 863 | " 864 | " Comparison example: 865 | " jar1 = 'lib-2.5.0.jar' 866 | " jar2 = 'lib-1.0.0.jar' 867 | " output = -1 868 | " 869 | " jar1 = 'lib-1.0.0.jar' 870 | " jar2 = 'lib-1.0.0.jar' 871 | " output = 0 872 | " 873 | " jar1 = 'lib-1.0.0-alpha.jar' 874 | " jar2 = 'lib-1.0.0.jar' 875 | " output = 1 876 | function! s:compareJars(jar1, jar2) 877 | if a:jar1 ==? a:jar2 878 | return 0 879 | endif 880 | 881 | " Extract only the file name (with no extension), such as 'artifactId-1.0.0' 882 | let l:j1 = fnamemodify(a:jar1, ':t:r') 883 | let l:j2 = fnamemodify(a:jar2, ':t:r') 884 | 885 | let l:v1 = s:parseSemVer(l:j1) 886 | let l:v2 = s:parseSemVer(l:j2) 887 | 888 | " Non-SemVer artifacts should be compared using ASCII codes 889 | if l:v1 is v:null || l:v2 is v:null 890 | return l:j1 expected 54 | || e: privte static Context sContext; 55 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/BindingBaseActivity.java|39 error| cannot find symbol 56 | || e: protected Settings_ mSettings; 57 | || e: symbol: class Settings_ 58 | || e: location: class BindingBaseActivity 59 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/tracker/CaseDetailFragment.java|140 error| cannot find symbol 60 | || e: protected Settings_ mSettings; 61 | || e: symbol: class Settings_ 62 | || e: location: class CaseDetailFragment 63 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/base/JoinBasePickImageActivity.java|70 error| cannot find symbol 64 | || e: protected Settings_ mSettings; 65 | || e: symbol: class Settings_ 66 | || e: location: class JoinBasePickImageActivity 67 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/LauncherActivity.java|104 error| cannot find symbol 68 | || e: @Pref protected PasscodePreferences_ mPasscodePref; 69 | || e: symbol: class PasscodePreferences_ 70 | || e: location: class LauncherActivity 71 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/image/ChooseImageSizeFragment.java|44 error| cannot find symbol 72 | || e: protected Settings_ mSettings; 73 | || e: symbol: class Settings_ 74 | || e: location: class ChooseImageSizeFragment 75 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/settings/SettingsNotificationFragment.java|26 error| cannot find symbol 76 | || e: protected Settings_ mSettings; 77 | || e: symbol: class Settings_ 78 | || e: location: class SettingsNotificationFragment 79 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/settings/SettingsTrackingFragment.java|30 error| cannot find symbol 80 | || e: protected Settings_ mSettings; 81 | || e: symbol: class Settings_ 82 | || e: location: class SettingsTrackingFragment 83 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/ProfileActivity.java|119 error| cannot find symbol 84 | || e: protected Settings_ mSettings; 85 | || e: symbol: class Settings_ 86 | || e: location: class ProfileActivity 87 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/VideoViewerActivity.java|88 error| cannot find symbol 88 | || e: protected Settings_ mSettings; 89 | || e: symbol: class Settings_ 90 | || e: location: class VideoViewerActivity 91 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/application/JoinApplication.java|23 error| cannot find symbol 92 | || e: privte static Context sContext; 93 | || e: symbol: class privte 94 | || e: location: class JoinApplication 95 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/login/StartActivity.kt|1 col 1 error| Some error(s) occurred while processing annotations. Please see the error messages above. 96 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/login/StartActivity.kt|106 col 59 error| Unresolved reference: JoinMainActivity_ 97 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/login/StartActivity.kt|159 col 58 error| Unresolved reference: TermActivity_ 98 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/adapters/SearchUsersBinderAdapter.kt|9 col 32 error| Unresolved reference: databinding 99 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/adapters/SearchUsersBinderAdapter.kt|17 col 56 error| Unresolved reference: ViewItemAddContactBinding 100 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/adapters/SearchUsersBinderAdapter.kt|32 col 13 error| Unresolved reference: ViewItemAddContactBinding 101 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/adapters/UserBinderAdapter.kt|14 col 32 error| Unresolved reference: databinding 102 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/adapters/UserBinderAdapter.kt|23 col 49 error| Unresolved reference: ViewItemContactBinding 103 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/adapters/UserBinderAdapter.kt|29 col 77 error| Unresolved reference: ViewItemContactBinding 104 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/AccessCodeFragment.kt|10 col 32 error| Unresolved reference: databinding 105 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/AccessCodeFragment.kt|27 col 26 error| Unresolved reference: FragmentAccessCodeBinding 106 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/LoginFragment.kt|12 col 32 error| Unresolved reference: databinding 107 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/LoginFragment.kt|26 col 26 error| Unresolved reference: FragmentLoginBinding 108 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/PasscodeFragment.kt|12 col 32 error| Unresolved reference: databinding 109 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/PasscodeFragment.kt|32 col 26 error| Unresolved reference: FragmentPasscodeBinding 110 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/PasswordResetFragment.kt|13 col 32 error| Unresolved reference: databinding 111 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/PasswordResetFragment.kt|32 col 26 error| Unresolved reference: FragmentPasswordResetBinding 112 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/PhoneFragment.kt|38 col 32 error| Unresolved reference: databinding 113 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/PhoneFragment.kt|64 col 26 error| Unresolved reference: FragmentPhoneBinding 114 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/TenantFragment.kt|11 col 32 error| Unresolved reference: databinding 115 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/fragments/start/TenantFragment.kt|28 col 26 error| Unresolved reference: FragmentTenantBinding 116 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/base/JoinBasePickImageActivity.java|70 error| cannot find symbol 117 | || protected Settings_ mSettings; 118 | || symbol: class Settings_ 119 | || location: class JoinBasePickImageActivity 120 | || Build failed with an exception. 121 | || Execution failed for task ':Join:kaptDebugKotlin'. 122 | || Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 123 | Execute (Test Javac Warning): 124 | call efm#test("test03.efm") 125 | echomsg string(getloclist(0)) 126 | 127 | Expect (Test Javac Warning): 128 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/activities/BindingBaseActivity.java|31 warning| The component BindingBaseActivity_ is not registered in the AndroidManifest.xml file. 129 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/utils/webrtc/WebRtcExpiredConnections.java|40 warning| Element SubscribeHandler unvalidated by 130 | || public void onEvent(WebRtcContent content) { 131 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/utils/UsersCacheUtils.java|92 warning| Element SubscribeHandler unvalidated by 132 | || public void onEvent(UserUpdateEvent event) { 133 | /home/ryujin/Projects/Join/android-client/Join/src/main/java/jp/co/skillupjapan/join/views/JoinToolBar.java|114 warning| Element SubscribeHandler unvalidated by 134 | || public void onEvent(JoinTrackerManager.LocationMangerEvent event) { 135 | /home/ryujin/Projects/Join/android-client/Join/build/tmp/kapt3/stubs/debug/jp/co/skillupjapan/join/utils/UsersCacheUtility.java|36 warning| Element SubscribeHandler unvalidated by 136 | || public final void onEvent(@org.jetbrains.annotations.NotNull() 137 | /home/ryujin/Projects/Join/android-client/Join/build/tmp/kapt3/stubs/debug/jp/co/skillupjapan/join/utils/UsersCacheUtility.java|41 warning| Element SubscribeHandler unvalidated by 138 | || public final void onEvent(@org.jetbrains.annotations.NotNull() 139 | /home/ryujin/Projects/Join/android-client/Join/build/tmp/kapt3/stubs/debug/jp/co/skillupjapan/join/binderadapters/TextChangedKt.java|6 warning| Application namespace for attribute bind:addTextChangedListener will be ignored. 140 | || public static final void textChanged(@org.jetbrains.annotations.NotNull() 141 | || Supported source version 'RELEASE_7' from annotation processor 'android.arch.lifecycle.LifecycleProcessor' less than -source '1.8' 142 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/chat/ChatActivity_.java|407 warning| Element SubscribeHandler unvalidated by 143 | || public void onChatUpdate(final ChatUpdateEvent event) { 144 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/chat/ChatActivity_.java|413 warning| Element SubscribeHandler unvalidated by 145 | || public void onMessagesUpdate(final MessagesUpdateEvent event) { 146 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/chat/ChatActivity_.java|419 warning| Element SubscribeHandler unvalidated by 147 | || public void onReadMessagUpdate(final ReadMessageUpdate event) { 148 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/chat/ChatActivity_.java|425 warning| Element SubscribeHandler unvalidated by 149 | || public void onReadMessagesUpdate(final ReadMessagesUpdate event) { 150 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/chat/ChatActivity_.java|431 warning| Element SubscribeHandler unvalidated by 151 | || public void onStampsUpdate(final StampsUpdateEvent event) { 152 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/chat/ChatActivity_.java|437 warning| Element SubscribeHandler unvalidated by 153 | || public void onMessageUpdate(final MessageUpdateEvent event) { 154 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/groups/GroupParticipantsFragment_.java|100 warning| Element SubscribeHandler unvalidated by 155 | || public void onMembersUpdate(final MembersUpdateEvent event) { 156 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/tracker/CaseDetailFragment_.java|214 warning| Element SubscribeHandler unvalidated by 157 | || public void onEvent(final LocationMangerEvent event) { 158 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/tracker/CasesFragment_.java|109 warning| Element SubscribeHandler unvalidated by 159 | || public void onCasesUpdate(final EmgCasesUpdateEvent event) { 160 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/tracker/CasesFragment_.java|115 warning| Element SubscribeHandler unvalidated by 161 | || public void onCaseUpdate(final EmgCaseUpdateEvent event) { 162 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/utils/webrtc/WebRtcSignalingClientImpl_.java|45 warning| Element SubscribeHandler unvalidated by 163 | || public void onEvent(final WebRtcContent content) { 164 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ChatsFragment_.java|94 warning| Element SubscribeHandler unvalidated by 165 | || public void onMessagesUpdate(final MessagesUpdateEvent event) { 166 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ChatsFragment_.java|100 warning| Element SubscribeHandler unvalidated by 167 | || public void onChatDelete(final ChatDeleteEvent event) { 168 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ChatsFragment_.java|106 warning| Element SubscribeHandler unvalidated by 169 | || public void onChatUpdate(final ChatUpdateEvent event) { 170 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ChatsFragment_.java|112 warning| Element SubscribeHandler unvalidated by 171 | || public void onMessageUpdate(final MessageUpdateEvent event) { 172 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ChatsFragment_.java|118 warning| Element SubscribeHandler unvalidated by 173 | || public void onChatsRefresh(final ChatsRefreshEvent event) { 174 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ContactPickerFragment_.java|102 warning| Element SubscribeHandler unvalidated by 175 | || public void onChatDelete(final ChatDeleteEvent event) { 176 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ContactPickerFragment_.java|108 warning| Element SubscribeHandler unvalidated by 177 | || public void onUserUpdate(final UserUpdateEvent event) { 178 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/ContactPickerFragment_.java|114 warning| Element SubscribeHandler unvalidated by 179 | || public void onChatUpdate(final ChatUpdateEvent event) { 180 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/FriendsFragment_.java|96 warning| Element SubscribeHandler unvalidated by 181 | || public void onChatDelete(final ChatDeleteEvent event) { 182 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/FriendsFragment_.java|102 warning| Element SubscribeHandler unvalidated by 183 | || public void onUsersRefresh(final UsersRefreshEvent event) { 184 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/FriendsFragment_.java|108 warning| Element SubscribeHandler unvalidated by 185 | || public void onUserUpdate(final UserUpdateEvent event) { 186 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/FriendsFragment_.java|114 warning| Element SubscribeHandler unvalidated by 187 | || public void onChatUpdate(final ChatUpdateEvent event) { 188 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/fragments/FriendsFragment_.java|120 warning| Element SubscribeHandler unvalidated by 189 | || public void onChatsRefresh(final ChatsRefreshEvent event) { 190 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/utils/UsersCache_.java|48 warning| Element SubscribeHandler unvalidated by 191 | || public void onEvent(final UserUpdateEvent event) { 192 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/GroupDetailInfoActivity_.java|227 warning| Element SubscribeHandler unvalidated by 193 | || public void onChatDelete(final ChatDeleteEvent event) { 194 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/GroupDetailInfoActivity_.java|233 warning| Element SubscribeHandler unvalidated by 195 | || public void onChatUpdate(final ChatUpdateEvent event) { 196 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/JoinMainActivity_.java|167 warning| Element SubscribeHandler unvalidated by 197 | || public void onTenants(final TenantsUpdateEvent event) { 198 | /home/ryujin/Projects/Join/android-client/Join/build/generated/source/kapt/debug/jp/co/skillupjapan/join/activities/ProfileActivity_.java|145 warning| Element SubscribeHandler unvalidated by 199 | || public void onUserUpdate(final UserUpdateEvent event) { 200 | || The following options were not recognized by any processor: '[kapt.kotlin.generated]' 201 | || 202 | 203 | Execute (Test AAPT Errorformat): 204 | call efm#test("test04.efm") 205 | echomsg string(getloclist(0)) 206 | 207 | Expect (Test AAPT Errorformat): 208 | /home/ryujin/Projects/Join/android-client/Join/src/main/res/values-ja/strings.xml|7 col 39 error| The element type "sring" must be terminated by the matching end-tag "". 209 | || Build failed with an exception. 210 | || Execution failed for task ':Join:mergeDebugResources'. 211 | || Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 212 | 213 | Execute (Test Lint Errorformat): 214 | call efm#test("test05.efm") 215 | echomsg string(getloclist(0)) 216 | 217 | Expect (Test Lint Errorformat): 218 | || Build failed with an exception. 219 | || Execution failed for task ':lint'. 220 | || Fix the issues identified by lint, or add the following to your build script to proceed with errors: 221 | || ... 222 | || android { 223 | || lintOptions { 224 | || abortOnError false 225 | || } 226 | || } 227 | || ... 228 | || Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. 229 | /home/ryujin/Projects/Manabook/manabook-sdk/build.gradle|46 col 5 warning| Not targeting the latest versions of Android; compatibility modes apply. Consider testing and updating this version. Consult the android.os.Build.VERSION_CODES javadoc for details. 230 | || When your application runs on a version of Android that is more recent 231 | || than your `targetSdkVersion` specifies that it has been tested with, 232 | || various compatibility modes kick in. This ensures that your applicatio 233 | || n continues to work, but it may look out of place. For example, if the 234 | || `targetSdkVersion` is less than 14, your app may get an option button 235 | || in the UI. To fix this issue, set the `targetSdkVersion` to the high 236 | || est available value. Then test your app to make sure everything works 237 | || correctly. You may want to consult the compatibility notes to see what 238 | || changes apply to each version you are adding support for: http://deve 239 | || loper.android.com/reference/android/os/Build.VERSION_CODES.html 240 | /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/BookModelTest.java|27 col 19 warning| To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 241 | || Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 242 | || e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 243 | || eFormat suitable for the user's locale. The main reason you'd create a 244 | || n instance this class directly is because you need to format/parse a s 245 | || pecific machine-readable format, in which case you almost certainly wa 246 | || nt to explicitly ask for US to ensure that you get ASCII digits (rathe 247 | || r than, say, Arabic digits). Therefore, you should either use the for 248 | || m of the SimpleDateFormat constructor where you pass in an explicit lo 249 | || cale, such as Locale.US, or use one of the get instance methods, or su 250 | || ppress this error if really know what you are doing. 251 | /home/ryujin/Projects/Manabook/manabook-sdk/src/main/java/jp/co/skillupjapan/manabook/api/models/ManabookDate.java|16 col 14 warning| To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 252 | || Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 253 | || e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 254 | || eFormat suitable for the user's locale. The main reason you'd create a 255 | || n instance this class directly is because you need to format/parse a s 256 | || pecific machine-readable format, in which case you almost certainly wa 257 | || nt to explicitly ask for US to ensure that you get ASCII digits (rathe 258 | || r than, say, Arabic digits). Therefore, you should either use the for 259 | || m of the SimpleDateFormat constructor where you pass in an explicit lo 260 | || cale, such as Locale.US, or use one of the get instance methods, or su 261 | || ppress this error if really know what you are doing. 262 | /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/PaymentApiTest.java|67 col 25 warning| To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 263 | || Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 264 | || e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 265 | || eFormat suitable for the user's locale. The main reason you'd create a 266 | || n instance this class directly is because you need to format/parse a s 267 | || pecific machine-readable format, in which case you almost certainly wa 268 | || nt to explicitly ask for US to ensure that you get ASCII digits (rathe 269 | || r than, say, Arabic digits). Therefore, you should either use the for 270 | || m of the SimpleDateFormat constructor where you pass in an explicit lo 271 | || cale, such as Locale.US, or use one of the get instance methods, or su 272 | || ppress this error if really know what you are doing. 273 | /home/ryujin/Projects/Manabook/manabook-sdk/src/androidTest/java/jp/co/skillupjapan/manabook/api/test/PaymentApiTest.java|78 col 25 warning| To get local formatting use `getDateInstance()`, `getDateTimeInstance()`, or `getTimeInstance()`, or use `new SimpleDateFormat(String template, Locale locale)` with for example `Locale.US` for ASCII dates. 274 | || Almost all callers should use `getDateInstance()`, `getDateTimeInstanc 275 | || e()`, or `getTimeInstance()` to get a ready-made instance of SimpleDat 276 | || eFormat suitable for the user's locale. The main reason you'd create a 277 | || n instance this class directly is because you need to format/parse a s 278 | || pecific machine-readable format, in which case you almost certainly wa 279 | || nt to explicitly ask for US to ensure that you get ASCII digits (rathe 280 | || r than, say, Arabic digits). Therefore, you should either use the for 281 | || m of the SimpleDateFormat constructor where you pass in an explicit lo 282 | || cale, such as Locale.US, or use one of the get instance methods, or su 283 | || ppress this error if really know what you are doing. 284 | /home/ryujin/Projects/Manabook/manabook-sdk/build.gradle|110 col 3 warning| A newer version of com.android.support:support-annotations than 25.3.1 is available: 26.0.0-alpha1 285 | || This detector looks for usages of libraries where the version you are 286 | || using is not the current stable release. Using older versions is fine, 287 | || and there are cases where you deliberately want to stick with an olde 288 | || r version. However, you may simply not be aware that a more recent ver 289 | || sion is available, and that is what this lint check helps find. 290 | || Ensures that when parameter in a method only allows a specific set of 291 | || constants, calls obey those rules. 292 | || Ensures that when parameter in a method only allows a specific set of 293 | || constants, calls obey those rules. 294 | || Ensures that when parameter in a method only allows a specific set of 295 | || constants, calls obey those rules. 296 | || Ensures that when parameter in a method only allows a specific set of 297 | || constants, calls obey those rules. 298 | || Ensures that when parameter in a method only allows a specific set of 299 | || constants, calls obey those rules. 300 | || Ensures that when parameter in a method only allows a specific set of 301 | || constants, calls obey those rules. 302 | || Ensures that when parameter in a method only allows a specific set of 303 | || constants, calls obey those rules. 304 | || Ensures that when parameter in a method only allows a specific set of 305 | || constants, calls obey those rules. 306 | || Ensures that when parameter in a method only allows a specific set of 307 | || constants, calls obey those rules. 308 | || Ensures that when parameter in a method only allows a specific set of 309 | || constants, calls obey those rules. 310 | || Ensures that when parameter in a method only allows a specific set of 311 | || constants, calls obey those rules. 312 | || Ensures that when parameter in a method only allows a specific set of 313 | || constants, calls obey those rules. 314 | --------------------------------------------------------------------------------