From 0949cc2c6f558a63bc1a6735cea44c3f3972d1be Mon Sep 17 00:00:00 2001 From: Gayan Perera Date: Tue, 3 Sep 2024 22:06:33 +0200 Subject: [PATCH] Consider token to limit the chains that are searched (#2835) - Simplify code by reusing CompletionProposalRequestor to create items - Add support for javadoc for chain completions - Improve chain completion considered token so more relevant proposals are shown. - Add subword match on edge and start - Improve text computation and properly wait and timeout for chain completions --- .../ChainCompletionProposalComputer.java | 257 +++++++----------- ...CompletionProposalDescriptionProvider.java | 8 + ...CompletionProposalReplacementProvider.java | 45 ++- .../CompletionProposalRequestor.java | 4 + .../internal/handlers/CompletionHandler.java | 9 +- .../handlers/CompletionResolveHandler.java | 16 +- .../org.eclipse.jdt.ls.tp.target | 2 + .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle/apt/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle/apt/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle-11/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle-11/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle/kradle/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle/kradle/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../metadata/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../metadata/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../multi-module/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../multi-module/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle1/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle1/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle2/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle2/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle3/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle3/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../null-analysis/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../null-analysis/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle/sample/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle/sample/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../simple-gradle/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../simple-gradle/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../subprojects/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../subprojects/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../simple-gradle/.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../simple-gradle/.gradle/vcs-1/gc.properties | 0 .../.gradle/7.3.3/checksums/checksums.lock | Bin 0 -> 17 bytes .../dependencies-accessors.lock | Bin 0 -> 17 bytes .../dependencies-accessors/gc.properties | 0 .../.gradle/7.3.3/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/7.3.3/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../.gradle/7.3.3/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../.gradle/vcs-1/gc.properties | 0 .../handlers/CompletionHandlerChainTest.java | 150 +++++++++- 143 files changed, 351 insertions(+), 170 deletions(-) create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/vcs-1/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/7.3.3/checksums/checksums.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/7.3.3/dependencies-accessors/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/7.3.3/fileChanges/last-build.bin create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/7.3.3/fileHashes/fileHashes.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/7.3.3/gc.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/buildOutputCleanup/cache.properties create mode 100644 org.eclipse.jdt.ls.tests/projects/multi-buildtools/.gradle/vcs-1/gc.properties diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/ChainCompletionProposalComputer.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/ChainCompletionProposalComputer.java index 645f074e29..9e01f18570 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/ChainCompletionProposalComputer.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/ChainCompletionProposalComputer.java @@ -14,7 +14,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedList; @@ -25,15 +24,13 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.core.CompletionContext; import org.eclipse.jdt.core.CompletionProposal; import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.IField; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IMethod; @@ -45,12 +42,8 @@ import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.ITypeBinding; -import org.eclipse.jdt.core.dom.rewrite.ImportRewrite; -import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext; import org.eclipse.jdt.core.manipulation.JavaManipulation; import org.eclipse.jdt.core.manipulation.SharedASTProviderCore; -import org.eclipse.jdt.internal.core.manipulation.StubUtility; -import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext; import org.eclipse.jdt.internal.corext.dom.IASTSharedValues; import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser; import org.eclipse.jdt.internal.corext.template.java.SignatureUtil; @@ -62,12 +55,6 @@ import org.eclipse.jdt.internal.ui.text.ChainFinder; import org.eclipse.jdt.internal.ui.text.ChainType; import org.eclipse.jdt.ls.core.internal.JDTUtils; -import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; -import org.eclipse.jdt.ls.core.internal.TextEditConverter; -import org.eclipse.lsp4j.CompletionItem; -import org.eclipse.lsp4j.CompletionItemKind; -import org.eclipse.lsp4j.CompletionItemLabelDetails; -import org.eclipse.lsp4j.InsertTextFormat; import org.eclipse.lsp4j.TextEdit; public class ChainCompletionProposalComputer { @@ -92,14 +79,13 @@ public ChainCompletionProposalComputer(ICompilationUnit cu, CompletionProposalRe this.snippetStringSupported = snippetStringSupported; } - public List computeCompletionProposals() { - if (!shouldPerformCompletionOnExpectedType()) { - return Collections.emptyList(); + public void computeCompletionProposals() { + if (shouldPerformCompletionOnExpectedType()) { + executeCallChainSearch(); } - return executeCallChainSearch(); } - private List executeCallChainSearch() { + private void executeCallChainSearch() { final int maxChains = Integer.parseInt(JavaManipulation.getPreference("recommenders.chain.max_chains", cu.getJavaProject())); final int minDepth = Integer.parseInt(JavaManipulation.getPreference("recommenders.chain.min_chain_length", cu.getJavaProject())); final int maxDepth = Integer.parseInt(JavaManipulation.getPreference("recommenders.chain.max_chain_length", cu.getJavaProject())); @@ -111,9 +97,10 @@ private List executeCallChainSearch() { final IType invocationType = cu.findPrimaryType(); + final String token = (coll.getContext().getToken() != null && coll.getContext().getToken().length > 0) ? String.valueOf(coll.getContext().getToken()) : null; final List expectedTypes = resolveBindingsForExpectedTypes(cu.getJavaProject(), coll.getContext()); - final ChainFinder mainFinder = new ChainFinder(expectedTypes, Arrays.asList(excludedTypes), invocationType); - final ChainFinder contextFinder = new ChainFinder(expectedTypes, Arrays.asList(excludedTypes), invocationType); + final ChainFinder mainFinder = new ChainFinder(expectedTypes, Arrays.asList(excludedTypes), invocationType, token); + final ChainFinder contextFinder = new ChainFinder(expectedTypes, Arrays.asList(excludedTypes), invocationType, token); final ExecutorService executor = Executors.newFixedThreadPool(2); try { CompletableFuture mainChains = CompletableFuture.runAsync(() -> { @@ -132,8 +119,8 @@ private List executeCallChainSearch() { // ignore } }, executor); - CompletableFuture future = CompletableFuture.anyOf(mainChains, contextChains); + CompletableFuture future = CompletableFuture.allOf(mainChains, contextChains); long timeout = Long.parseLong(JavaManipulation.getPreference("recommenders.chain.timeout", cu.getJavaProject())); future.get(timeout, TimeUnit.SECONDS); } catch (final Exception e) { @@ -144,20 +131,20 @@ private List executeCallChainSearch() { List found = new ArrayList<>(); found.addAll(mainFinder.getChains()); found.addAll(contextFinder.getChains()); - return buildCompletionProposals(found); + buildCompletionProposals(found); } - private List buildCompletionProposals(final List chains) { - final List proposals = new LinkedList<>(); - + private void buildCompletionProposals(final List chains) { for (final Chain chain : chains) { try { - proposals.add(create(chain)); + var completionProposal = createCompletionProposal(chain); + if (completionProposal != null) { + coll.accept(completionProposal); + } } catch (JavaModelException e) { // ignore } } - return proposals; } private boolean findEntrypoints(List expectedTypes, IJavaProject project) { @@ -263,111 +250,102 @@ private boolean matchesExpectedPrefix(final IJavaElement element) { return String.valueOf(element.getElementName()).startsWith(prefix); } - private CompletionItem create(final Chain chain) throws JavaModelException { - final String insert = createInsertText(chain, chain.getExpectedDimensions()); - final CompletionItem ci = new CompletionItem(); - - ci.setTextEditText(insert); - ci.setInsertText(getQualifiedMethodName(insert)); - ci.setInsertTextFormat(snippetStringSupported ? InsertTextFormat.Snippet : InsertTextFormat.PlainText); - ci.setKind(CompletionItemKind.Method); - setLabelDetails(chain, ci); + private CompletionProposal createCompletionProposal(final Chain chain) throws JavaModelException { + final var edge = chain.getElements().get(chain.getElements().size() - 1); + final var chainText = createChainText(chain, chain.getExpectedDimensions()); + final var root = chain.getElements().get(0); + CompletionProposal cp = null; + + switch (edge.getElementType()) { + case FIELD: { + cp = CompletionProposal.create(CompletionProposal.FIELD_REF, coll.getContext().getOffset()); + var field = ((IField) edge.getElement()); + cp.setName(chainText.displayText().toCharArray()); + cp.setSignature(field.getTypeSignature().toCharArray()); + cp.setDeclarationSignature(Signature.createTypeSignature(field.getDeclaringType().getFullyQualifiedName(), true).toCharArray()); + cp.setCompletion(chainText.insertText().toCharArray()); + cp.setReplaceRange(coll.getContext().getOffset(), coll.getContext().getOffset() + chainText.length()); + if(coll.getContext().getToken() != null && coll.getContext().getToken().length > 0) { + cp.setTokenRange(coll.getContext().getTokenStart(), coll.getContext().getTokenEnd()); + } + break; + } + case METHOD: { + cp = CompletionProposal.create(CompletionProposal.METHOD_REF, coll.getContext().getOffset()); + var method = ((IMethod) edge.getElement()); + cp.setName(chainText.displayText().toCharArray()); + cp.setSignature(toGenericSignature(method)); + cp.setDeclarationSignature(Signature.createTypeSignature(method.getDeclaringType().getFullyQualifiedName(), true).toCharArray()); + cp.setCompletion(chainText.insertText().toCharArray()); + cp.setReplaceRange(coll.getContext().getOffset(), coll.getContext().getOffset() + chainText.length()); + cp.setParameterNames(toCharArray(method.getParameterNames())); + if(coll.getContext().getToken() != null && coll.getContext().getToken().length > 0) { + cp.setTokenRange(coll.getContext().getTokenStart(), coll.getContext().getTokenEnd()); + } + break; + } + default: + } - ChainElement root = chain.getElements().get(0); - if (root.getElementType() == ElementType.TYPE) { - ci.setAdditionalTextEdits(addImport(((IType) root.getElement()).getFullyQualifiedName())); + if (cp != null) { + // set replace rage if applicable + if (coll.getContext().getToken() != null && coll.getContext().getToken().length > 0) { + cp.setReplaceRange(coll.getContext().getTokenStart(), coll.getContext().getTokenEnd()); + } + if (root.getElementType() == ElementType.TYPE) { + var type = ((IType) root.getElement()); + var importCompletion = CompletionProposal.create(CompletionProposal.TYPE_REF, coll.getContext().getOffset()); + importCompletion.setSignature(Signature.createTypeSignature(type.getFullyQualifiedName(), true).toCharArray()); + importCompletion.setCompletion(type.getFullyQualifiedName().toCharArray()); + var sourceStart = cu.getTypes()[0].getSourceRange().getOffset(); + importCompletion.setReplaceRange(sourceStart, sourceStart); + + cp.setRequiredProposals(new CompletionProposal[] { importCompletion }); + } } - return ci; + return cp; } - // given Collection.emptyList() - // return Collection.emptyList - private String getQualifiedMethodName(String name) { - int index = name.indexOf('('); - if (index > 0) { - return name.substring(0, index); + private char[] toGenericSignature(IMethod method) throws JavaModelException { + return Signature.createMethodSignature(method.getParameterTypes(), method.getReturnType()).toCharArray(); + } + private char[][] toCharArray(String[] parameterNames) { + var result = new char[parameterNames.length][]; + for (int i = 0; i < parameterNames.length; i++) { + result[i] = parameterNames[i].toCharArray(); } - return name; + return result; } - private String createInsertText(final Chain chain, final int expectedDimension) throws JavaModelException { - final AtomicInteger counter = new AtomicInteger(1); - StringBuilder sb = new StringBuilder(64); + private ChainText createChainText(final Chain chain, final int expectedDimension) throws JavaModelException { + StringBuilder insertText = new StringBuilder(64); + StringBuilder displayText = new StringBuilder(64); for (final ChainElement edge : chain.getElements()) { switch (edge.getElementType()) { case FIELD: case TYPE: case LOCAL_VARIABLE: - appendVariableString(edge, sb); + appendVariableString(edge, insertText); + appendVariableString(edge, displayText); break; case METHOD: final IMethod method = (IMethod) edge.getElement(); - sb.append(method.getElementName()); - appendParameters(sb, method, counter); - break; - default: - } - appendArrayDimensions(sb, edge.getReturnTypeDimension(), expectedDimension, snippetStringSupported, counter); - sb.append("."); - } - deleteLastChar(sb); - return sb.toString(); - } - - private void setLabelDetails(final Chain chain, final CompletionItem item) throws JavaModelException { - final CompletionItemLabelDetails details = new CompletionItemLabelDetails(); - - ChainElement last = chain.getElements().get(chain.getElements().size() - 1); - String lastDetails = ""; - switch (last.getElementType()) { - case FIELD: - case TYPE: - case LOCAL_VARIABLE: - item.setLabel(last.getElement().getElementName()); - details.setDescription(last.getReturnType().toString()); - break; - case METHOD: - final IMethod method = (IMethod) last.getElement(); - final String returnTypeSig = method.getReturnType(); - final String signatureQualifier = Signature.getSignatureQualifier(returnTypeSig); - String[] signatureComps = null; - if (signatureQualifier != null && !signatureQualifier.isBlank()) { - signatureComps = new String[2]; - signatureComps[0] = signatureQualifier; - signatureComps[1] = Signature.getSignatureSimpleName(returnTypeSig); - } else { - signatureComps = new String[1]; - signatureComps[0] = Signature.getSignatureSimpleName(returnTypeSig); - } - - details.setDescription(Signature.toQualifiedName(signatureComps)); - lastDetails = "(%s)".formatted(Stream.of(method.getParameterNames()).collect(Collectors.joining(","))); - break; - default: - } + insertText.append(method.getElementName()); + appendParameters(insertText, method); - List receivers = chain.getElements().subList(0, chain.getElements().size() - 1); - StringBuilder receiversString = new StringBuilder(64); - receiversString.append(" - "); - for (final ChainElement edge : receivers) { - switch (edge.getElementType()) { - case FIELD: - case TYPE: - case LOCAL_VARIABLE: - appendVariableString(edge, receiversString); - break; - case METHOD: - final IMethod method = (IMethod) edge.getElement(); - receiversString.append(method.getElementName()); - receiversString.append("(%s)".formatted(Stream.of(method.getParameterNames()).collect(Collectors.joining(",")))); + displayText.append(method.getElementName()); break; default: } - receiversString.append("."); + appendArrayDimensions(insertText, edge.getReturnTypeDimension(), expectedDimension, snippetStringSupported); + insertText.append("."); + + appendArrayDimensions(displayText, edge.getReturnTypeDimension(), expectedDimension, false); + displayText.append("."); } - details.setDetail(receiversString.append(last.getElement().getElementName()).append(lastDetails).toString()); - item.setLabelDetails(details); - item.setLabel(last.getElement().getElementName().concat(lastDetails)); + deleteLastChar(insertText); + deleteLastChar(displayText); + return new ChainText(insertText.toString(), displayText.toString()); } private static void appendVariableString(final ChainElement edge, final StringBuilder sb) { @@ -377,7 +355,7 @@ private static void appendVariableString(final ChainElement edge, final StringBu sb.append((edge.getElement()).getElementName()); } - private void appendParameters(final StringBuilder sb, final IMethod method, final AtomicInteger counter) throws JavaModelException { + private void appendParameters(final StringBuilder sb, final IMethod method) throws JavaModelException { sb.append("("); if (snippetStringSupported) { String[] parameterNames = method.getParameterNames(); @@ -387,16 +365,16 @@ private void appendParameters(final StringBuilder sb, final IMethod method, fina return (index > -1) ? n.substring(0, index) : n; }).toArray(String[]::new); } - sb.append(Stream.of(parameterNames).map(n -> "${%s:%s}".formatted(counter.getAndIncrement(), n)).collect(Collectors.joining(", "))); + sb.append(Stream.of(parameterNames).collect(Collectors.joining(", "))); } sb.append(")"); } - private void appendArrayDimensions(final StringBuilder sb, final int dimension, final int expectedDimension, final boolean appendVariables, final AtomicInteger counter) { + private void appendArrayDimensions(final StringBuilder sb, final int dimension, final int expectedDimension, final boolean snippetStringSupported) { for (int i = dimension; i-- > expectedDimension;) { sb.append("["); - if (appendVariables) { - sb.append("${%s:%s}".formatted(counter.getAndIncrement(), "i")); + if (snippetStringSupported) { + sb.append("${").append(dimension).append(":i}"); } sb.append("]"); } @@ -432,43 +410,6 @@ private List computeContextEntrypoint(List expectedType return results; } - private List addImport(String type) { - if (additionalEdits.containsKey(type)) { - return additionalEdits.get(type); - } - - try { - boolean qualified = type.indexOf('.') != -1; - if (!qualified) { - return Collections.emptyList(); - } - - CompilationUnit root = getASTRoot(); - ImportRewrite importRewrite; - if (root == null) { - importRewrite = StubUtility.createImportRewrite(cu, true); - } else { - importRewrite = StubUtility.createImportRewrite(root, true); - } - - ImportRewriteContext context; - if (root == null) { - context = null; - } else { - context = new ContextSensitiveImportRewriteContext(root, coll.getContext().getOffset(), importRewrite); - } - - importRewrite.addImport(type, context); - List edits = this.additionalEdits.getOrDefault(type, new ArrayList<>()); - TextEditConverter converter = new TextEditConverter(cu, importRewrite.rewriteImports(new NullProgressMonitor())); - edits.addAll(converter.convert()); - this.additionalEdits.put(type, edits); - return edits; - } catch (CoreException e) { - JavaLanguageServerPlugin.log(e); - return Collections.emptyList(); - } - } // The following needs to move to jdt ui core manipulation public static List resolveBindingsForExpectedTypes(final IJavaProject proj, final CompletionContext ctx) { @@ -528,4 +469,10 @@ public static String[] getExpectedFullyQualifiedTypeNames(final CompletionContex return fqExpectedTypes; } + private record ChainText(String insertText, String displayText) { + + public int length() { + return insertText().length(); + } + } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalDescriptionProvider.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalDescriptionProvider.java index b293e68d01..e59ed106cb 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalDescriptionProvider.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalDescriptionProvider.java @@ -23,6 +23,7 @@ import org.eclipse.jdt.core.Flags; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.Signature; +import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.internal.codeassist.CompletionEngine; import org.eclipse.jdt.internal.corext.template.java.SignatureUtil; import org.eclipse.jdt.ls.core.internal.JavaLanguageServerPlugin; @@ -397,6 +398,13 @@ private void createMethodProposalLabel(CompletionProposal methodProposal, Comple } catch (Exception e) { JavaLanguageServerPlugin.logException(e.getMessage(), e); } + } else { + // if this is a chain completion proposal, we need to set the filter text to the method name instead of the full completion text. + var chainName = methodProposal.getName(); + var index = CharOperation.lastIndexOf('.', chainName); + if(index > -1) { + item.setFilterText(String.valueOf(CharOperation.subarray(chainName, index + 1, chainName.length))); + } } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java index 4fd04ddfa4..fa3913e051 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalReplacementProvider.java @@ -89,6 +89,7 @@ public class CompletionProposalReplacementProvider { private static final char COMMA = ','; private static final char LESS = '<'; private static final char GREATER = '>'; + private static final char[] CHARS_DOT = new char[] { '.' }; private final ICompilationUnit compilationUnit; private final int offset; private final CompletionContext context; @@ -148,7 +149,10 @@ public void updateReplacement(CompletionProposal proposal, CompletionItem item, completionBuffer.append(edit.getNewText()); setInsertReplaceRange(requiredProposal, insertReplaceEdit); } else { - additionalTextEdits.add(edit); + // skip if its chain completions since qualifier is already in completion. + if(!isChainCompletion(proposal)) { + additionalTextEdits.add(edit); + } } break; default: @@ -209,7 +213,6 @@ private String getTextEditText(CompletionProposal proposal, CompletionItem item, if (!completionBuffer.isEmpty()) { return completionBuffer.toString(); } - String defaultText = getDefaultTextEditText(item); int start = proposal.getReplaceStart(); int end = proposal.getReplaceEnd(); @@ -615,7 +618,19 @@ private void appendMethodNameReplacement(StringBuilder buffer, CompletionProposa if (proposal.getKind() != CompletionProposal.CONSTRUCTOR_INVOCATION) { String str = new String(proposal.getName()); if (client.isCompletionSnippetsSupported()) { - str = CompletionUtils.sanitizeCompletion(str); + var coreCompletion = new String(proposal.getCompletion()); + if(isChainCompletion(proposal)) { + // add support for chain completion's chain arguments such as array index's or method arguments + // so we add the completion's substring before the last '(' as the name replacement. + int lparenIndex = coreCompletion.lastIndexOf('('); + if(lparenIndex > -1) { + str = coreCompletion.substring(0, lparenIndex); + } else { + str = coreCompletion; + } + } else { + str = CompletionUtils.sanitizeCompletion(str); + } } buffer.append(str); } @@ -657,6 +672,7 @@ private void appendGuessingCompletion(StringBuilder buffer, CompletionProposal p JavaLanguageServerPlugin.logException(e.getMessage(), e); } } + final var placeholderOffset = placeholderOffset(buffer); for (int i= 0; i < count; i++) { if (i != 0) { buffer.append(COMMA); @@ -674,13 +690,23 @@ private void appendGuessingCompletion(StringBuilder buffer, CompletionProposal p argument = replace.toCharArray(); } buffer.append("${"); - buffer.append(Integer.toString(i+1)); + buffer.append(Integer.toString(i + placeholderOffset)); buffer.append(":"); buffer.append(argument); buffer.append("}"); } } + private int placeholderOffset(StringBuilder buffer) { + int count = 1; // start with offset 1 + int index = 0; + while ((index = buffer.indexOf("${", index)) != -1) { + count++; + index++; + } + return count; + } + private String[] guessParameters(char[][] parameterNames, CompletionProposal proposal) throws JavaModelException { int count = parameterNames.length; String[] result = new String[count]; @@ -1162,4 +1188,15 @@ private String computeJavaTypeReplacementString(CompletionProposal proposal) { return qualifiedTypeName; } + /** + * Return if the given proposal is an chain completion proposal. A chain completion proposal is a proposal that is + * either a METHOD_REF or FIELD_REF and contains a dot in the completion string. + */ + private boolean isChainCompletion(CompletionProposal proposal) { + if(proposal.getKind() == CompletionProposal.FIELD_REF || proposal.getKind() == CompletionProposal.METHOD_REF) { + char[] completion = proposal.getCompletion(); + return CharOperation.contains(completion, CHARS_DOT); + } + return false; + } } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalRequestor.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalRequestor.java index e58aa72277..bd4966dc9c 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalRequestor.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/contentassist/CompletionProposalRequestor.java @@ -592,6 +592,10 @@ public List getProposals() { return proposals; } + public void addAdditionalProposal(CompletionProposal proposals) { + this.proposals.add(proposals); + } + /** * copied from * org.eclipse.jdt.ui.text.java.CompletionProposalCollector.isFiltered(CompletionProposal) diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java index 9cdcc08b09..2610ec8abc 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionHandler.java @@ -288,15 +288,16 @@ public boolean isCanceled() { } else { ModelBasedCompletionEngine.codeComplete(unit, offset, collector, DefaultWorkingCopyOwner.PRIMARY, subMonitor); } + // chain completions are added into collector while computing, so we need me compute before adding completion items to proposals. + if (manager.getPreferences().isChainCompletionEnabled() && params.getContext().getTriggerKind() != CompletionTriggerKind.TriggerCharacter) { + ChainCompletionProposalComputer chain = new ChainCompletionProposalComputer(unit, collector, this.isSnippetStringSupported()); + chain.computeCompletionProposals(); + } proposals.addAll(collector.getCompletionItems()); if (isSnippetStringSupported() && !UNSUPPORTED_RESOURCES.contains(unit.getResource().getName())) { proposals.addAll(SnippetCompletionProposal.getSnippets(unit, collector, subMonitor)); } proposals.addAll(new JavadocCompletionProposal().getProposals(unit, offset, collector, subMonitor)); - if (manager.getPreferences().isChainCompletionEnabled() && params.getContext().getTriggerKind() != CompletionTriggerKind.TriggerCharacter) { - ChainCompletionProposalComputer chain = new ChainCompletionProposalComputer(unit, collector, this.isSnippetStringSupported()); - proposals.addAll(chain.computeCompletionProposals()); - } } catch (OperationCanceledException e) { monitor.setCanceled(true); } diff --git a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java index 9f379eb8b2..b78bddd0a1 100644 --- a/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java +++ b/org.eclipse.jdt.ls.core/src/org/eclipse/jdt/ls/core/internal/handlers/CompletionResolveHandler.java @@ -216,6 +216,7 @@ public CompletionItem resolve(CompletionItem param, IProgressMonitor monitor) { try { IType type = unit.getJavaProject().findType(typeName); if (type != null && proposal.getName() != null) { + String name = String.valueOf(proposal.getName()); String[] paramSigs = CharOperation.NO_STRINGS; if (proposal instanceof InternalCompletionProposal internalProposal) { Binding binding = internalProposal.getBinding(); @@ -232,9 +233,22 @@ public CompletionItem resolve(CompletionItem param, IProgressMonitor monitor) { parameters[i] = getLowerBound(parameters[i]); } paramSigs = parameters; + } else if(proposal.getKind() == CompletionProposal.METHOD_REF || + proposal.getKind() == CompletionProposal.FIELD_REF) { + // this is mainly for chain completion handling + int dotIndex = name.lastIndexOf('.'); + if(dotIndex > -1) { + name = name.substring(dotIndex + 1); + if(proposal.getKind() == CompletionProposal.METHOD_REF) { + String[] parameters = Signature.getParameterTypes(String.valueOf(fix83600(proposal.getSignature()))); + for (int i = 0; i < parameters.length; i++) { + parameters[i] = getLowerBound(parameters[i]); + } + paramSigs = parameters; + } + } } } - String name = String.valueOf(proposal.getName()); IMethod method = type.getMethod(name, paramSigs); IMethod[] methods = type.findMethods(method); if (methods != null && methods.length > 0) { diff --git a/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target b/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target index dd3717fcc5..eba3ff8f64 100644 --- a/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target +++ b/org.eclipse.jdt.ls.target/org.eclipse.jdt.ls.tp.target @@ -25,6 +25,8 @@ + + diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..38e4bc4f0e39feb34e588899cb8a5ed836841f42 GIT binary patch literal 17 TcmZS1Yi56WkSk;b0~7!NEwTfw literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..3f284b09a784481812736efbcd8f017103072af3 GIT binary patch literal 17 ScmZQ>4U}4~nSaiK0SW*pYXe09 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..9aebd2861753869a27a3d817fd07d476439e2f2c GIT binary patch literal 17 ScmZP$h>|!WtJvzs00jUbJpz*e literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..9543334f2b378d587c2bc2a6426bfd179436a20e GIT binary patch literal 17 TcmZRU=MXb}TPW_&00E2u8a4tu literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..9257d1f3cd --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:52 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/apt/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..05e8f039ea046891fbe1689868020d985b39dd52 GIT binary patch literal 17 TcmZS9cX@U2ipvxw1}FdkF`onQ literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..c80d47ed3a1e4307dbfa09f4021addd7f0da7454 GIT binary patch literal 17 ScmZQ}Hoxr0Z0NX;0SW*jqyo|a literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..0343f023ee8507d67290797b2784e5bebf9c828e GIT binary patch literal 17 TcmZRcv~ZQ=RSor53{U_7GS~zN literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..6168338e2ed2fd4d82382495af05e98810b04e08 GIT binary patch literal 17 UcmZQxzI@d;A&FEL1_)pT05CoSh5!Hn literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..cfc8a6e5cc --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:51 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-11/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..5f81048315f90fbe3837475dd43fbd8cc490c6f3 GIT binary patch literal 17 TcmZSnTHVAoeN);D1}FdkHgyC? literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..27f3fd5efd45051ba685adf84dfe72e15f7d6872 GIT binary patch literal 17 TcmZR6d;PFcB9EdQ0~7!NF|h-Y literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..bf0851dc6752549eb76b913989ac9baed6742dbe GIT binary patch literal 17 TcmZQ(UurC;IOBT(0~7!NBv}I? literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/gradle-withoutjava/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..dc388ed90a6609eead16a21123937abb3c6dd72b GIT binary patch literal 17 TcmZP;_7r&=>Z;u36 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..a5191af43c9a9997dbeb3a023023fae7dac87d6e GIT binary patch literal 17 ScmZR6q8_MwBwt^V0SW*pcmogs literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..b412c122afb615d183209d6e4f120272610c8a69 GIT binary patch literal 17 TcmZS1^D64oWnCJ}00E2uB=-XG literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..9257d1f3cd --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:52 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/kradle/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..b965324e35c22a3f4e5ea838e7939e0f74eda27f GIT binary patch literal 17 TcmZS1JiIYj!cFxY0~7!NEcgS3 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..ed5c68dc3a2dd19da18b33ae2cccc7d704b53ca8 GIT binary patch literal 17 TcmZSn+MQ>k68?8L0~7!NHmd|- literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..9321dfbfef9d05cd8903d1a896f4cfee218ecf1f GIT binary patch literal 17 TcmZSHy2t#S!D;nv3{U_7HuVHj literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..5c07616de40c0284056de5f78321bbba0320f438 GIT binary patch literal 17 TcmZQBbgkB|ugi>KfB;4SCjA2= literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..cfc8a6e5cc --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:51 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/metadata/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..fee0fcda5f45983946b092415d32195473037500 GIT binary patch literal 17 TcmZSHw%f(6`_JAS1}FdkI%Nc} literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/multi-module/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..783f3e21f7c1f8318a56fb540e652bfae535cc8e GIT binary patch literal 17 TcmZR6_Hs+qnYXLom1}FdkEnx$_ literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..02370021909651ce4e15955e04499a6224768b53 GIT binary patch literal 17 UcmZRUG&vpmdHN+e1_)pT055L?>;M1& literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..cfc8a6e5cc --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:51 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle1/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..151b3e1101c97cb9ce4afa138625b33a78018507 GIT binary patch literal 17 TcmZSHXgi;8X-MX01}FdkFiZpV literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..35ddd3404f8b3c5e1abc9fa8fb2da2c3758e968a GIT binary patch literal 17 TcmZSHyxaI)_kZz=3{U_7KLG^= literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle2/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..84764d682eb31a3bb485ef8054520ec70790cae4 GIT binary patch literal 17 TcmZQxWq5o2pCkAFGC%T00jUW&jMQj literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..5e6adcfa447dabe6420b7df41e9d7dc165653c03 GIT binary patch literal 17 TcmZQh3F)4(>Hn@L3{U_7Jy!)T literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..df0ae581199cad2df4019c7308f996e40dd6f8b0 GIT binary patch literal 17 ScmZP$I+WO9lb2A<00jUnl>>$V literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..5661fd674e6360c9a32750693b4143d483e06b75 GIT binary patch literal 17 TcmZQ>wob0n4Q9H)00E2uB$op6 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..9e85095cb9 --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:50 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/nested/gradle3/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..94f7c4649d2785609567c9fed84960b745fdd1d8 GIT binary patch literal 17 ScmZP;c)qzcfTfU=0SW*o{{sO4 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..aa18e75a5399762497bf293ff3fa5f7abcfe8362 GIT binary patch literal 17 TcmZQBx}WCw=fY!c1}FdkJa+`v literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..32821b425dc7a682bd5de27e865f8caad5feda93 GIT binary patch literal 17 ScmZSXYY31um>Ip10SW*p;{#9t literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..e13db21ba82b3612e7d0d1dac4daf418936307fa GIT binary patch literal 17 TcmZSPlQpjFjde_BfB;4S9A^S* literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..cfc8a6e5cc --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:51 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/null-analysis/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..3c4134c96ba2ba5f4187658fdd01aea55f666535 GIT binary patch literal 17 ScmZRUV-|YF($eyc0SW*j*#jd0 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..8094fd253dcafac8b9c63659f28ad7fb16829129 GIT binary patch literal 17 TcmZSPf6Q*&9J2H+0~7!NDggtT literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..8d28dd8b1928108597c2e5c9a126b22f768e9740 GIT binary patch literal 17 ScmZQ()9!m#8`E``0SW*u1OwRs literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..b0a2ac679cb8d2cb879e8913079908b25440ad19 GIT binary patch literal 17 UcmZQxwrY9gS4r8=3=qHw062aGa{vGU literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..cfc8a6e5cc --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:51 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/sample/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..c8109bc6230a11e04bd13ab45fff3ca6f0e7d947 GIT binary patch literal 17 TcmZRcaodV1}FdkHL3(% literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..7ea02ad914167deda9400eccc914c6f03749a31f GIT binary patch literal 17 TcmZSnopNqgRoNt01}FdkJJAG^ literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..b83b6d7ca448f67b5e52a2aca39ccdbb52d51c62 GIT binary patch literal 17 TcmZP$NO^E%Ypbz30~7!NGUNmB literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..908f203ab8e2989c976ee20cf28ad124b97a256e GIT binary patch literal 17 UcmZQxdST!7z6?=81_)pT063onD*ylh literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..90151a3394 --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:53 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/simple-gradle/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..9b87d302c2c26f5514cc1e8a770c482ca141cf46 GIT binary patch literal 17 TcmZQ(JQ&Pqd@b%N0~7!NCy4`Q literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..7b071dc65a6cfd0f57ff0dd4be6fd6d9f760d3d1 GIT binary patch literal 17 TcmZRUy){4S`>T_}3{U_7I;{k` literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..75642a988da243bf5f286b49891897b9c86b1c19 GIT binary patch literal 17 ScmZR6$(v$uGcR3{0SW*slmlG= literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/7.3.3/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..caca2007d47ab9427dd02d09c42855e0a9efe9f6 GIT binary patch literal 17 UcmZSP@cJ~JXVr3f1_)pT04aR~TmS$7 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/buildOutputCleanup/cache.properties b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000000..9257d1f3cd --- /dev/null +++ b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Aug 04 09:16:52 CEST 2024 +gradle.version=7.3.3 diff --git a/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/vcs-1/gc.properties b/org.eclipse.jdt.ls.tests/projects/gradle/subprojects/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/checksums/checksums.lock b/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..c8a812dfff4dad534b0da8852400e412cdb14e39 GIT binary patch literal 17 TcmZSH-Li%y_xSO{3{U_7IhF*m literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock b/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/dependencies-accessors/dependencies-accessors.lock new file mode 100644 index 0000000000000000000000000000000000000000..0b8c19ebde51f093c7f1d430342f020d2a360105 GIT binary patch literal 17 TcmZQxz1@>3?rcyX0~7!NEeQjE literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/dependencies-accessors/gc.properties b/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/dependencies-accessors/gc.properties new file mode 100644 index 0000000000..e69de29bb2 diff --git a/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/fileChanges/last-build.bin b/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/fileHashes/fileHashes.lock b/org.eclipse.jdt.ls.tests/projects/mixed/simple-gradle/.gradle/7.3.3/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..a0a26a8ab4dabfb935763f4013e5763d34b973f3 GIT binary patch literal 17 TcmZQhxFOtl>>", completionItem.getLabelDetails().getDescription()); - assertEquals("Completion detail.detail", " - Collectors.toList()", completionItem.getLabelDetails().getDetail()); + assertEquals("Completion getTextEditText", "Collectors.toList()", completionItem.getTextEdit().getLeft().getNewText()); + assertNotNull(completionItem.getLabel()); + assertEquals("Completion Label", "Collectors.toList() : Collector>", completionItem.getLabel()); + assertEquals("Completion Details", "java.util.stream.Collectors.Collectors.toList() : Collector>", completionItem.getDetail()); assertNotNull(completionItem.getAdditionalTextEdits()); assertEquals("Additional edits count", 1, completionItem.getAdditionalTextEdits().size()); assertNotNull(completionItem.getAdditionalTextEdits().get(0)); assertEquals("Import", "import java.util.stream.Collectors;\n", completionItem.getAdditionalTextEdits().get(0).getNewText()); - assertEquals("Completion Label", "toList()", completionItem.getLabel()); } @Test @@ -139,7 +148,7 @@ public static void main(String[] args) { CompletionItem completionItem = completionItems.get(0); assertNotNull(completionItem); - assertEquals("Completion getTextEditText", "Collections.emptyList()", completionItem.getTextEditText()); + assertEquals("Completion getTextEditText", "Collections.emptyList()", completionItem.getTextEdit().getLeft().getNewText()); assertNotNull(completionItem.getAdditionalTextEdits()); assertEquals("Additional edits count", 1, completionItem.getAdditionalTextEdits().size()); @@ -185,6 +194,70 @@ public static void main(String[] args) { assertEquals("emptyList completion count", 0, completionItems.size()); } + @Test + public void testChainCompletionsOnChainsFromVisibleVariables() throws Exception { + //@formatter:off + ICompilationUnit unit = getWorkingCopy( + "src/java/Foo.java", + """ + import java.util.List; + public class Foo { + public class Stream { + public List toList() { + return null; + } + } + + public static void main(String[] args) { + Stream stream = new Stream(); + Stream[] streams = new Stream[0]; + List names = + } + } + """); + //@formatter:on + CompletionList list = requestCompletions(unit, "names ="); + var item = list.getItems().stream().filter(i -> i.getLabel().startsWith("stream.")).findFirst(); + assertTrue("completion", item.isPresent()); + assertEquals("completion label", "stream.toList() : List", item.get().getLabel()); + assertEquals("completion edit text", "stream.toList()", item.get().getTextEdit().getLeft().getNewText()); + + item = list.getItems().stream().filter(i -> i.getLabel().startsWith("streams[")).findFirst(); + assertTrue("array completion", item.isPresent()); + assertEquals("array completion label", "streams[].toList() : List", item.get().getLabel()); + assertEquals("array completion edit text", "streams[${1:i}].toList()", item.get().getTextEdit().getLeft().getNewText()); + + } + + @Test + public void testChainCompletionsOnChainsCorrectSnippetPlaceholders() throws Exception { + //@formatter:off + ICompilationUnit unit = getWorkingCopy( + "src/java/Foo.java", + """ + import java.util.List; + public class Foo { + public class Stream { + public List toList(int size) { + return null; + } + } + + public static void main(String[] args) { + Stream stream = new Stream(); + Stream[] streams = new Stream[0]; + List names = + } + } + """); + //@formatter:on + CompletionList list = requestCompletions(unit, "names ="); + var item = list.getItems().stream().filter(i -> i.getLabel().startsWith("streams[].")).findFirst(); + assertTrue("completion", item.isPresent()); + assertEquals("completion label", "streams[].toList(int size) : List", item.get().getLabel()); + assertEquals("completion edit text", "streams[${1:i}].toList(${2:size})", item.get().getTextEdit().getLeft().getNewText()); + } + @Test public void testChainCompletionsOnPrimitiveVariableExpectNoCompletions() throws Exception { //@formatter:off @@ -266,4 +339,69 @@ public Object newObject() { completionItems = list.getItems().stream().filter(i -> i.getLabel().contains("newObject")).collect(Collectors.toList()); assertEquals("emptyList completion count [type]", 0, completionItems.size()); } + + @Test + public void testChainCompletionsWithToken_ExpectReplaceToken() throws Exception { + //@formatter:off + ICompilationUnit unit = getWorkingCopy( + "src/java/Foo.java", + """ + import java.util.List; + public class Foo { + public static void main(String[] args) { + List names = empty + } + } + """); + //@formatter:on + CompletionList list = requestCompletions(unit, "names = empty"); + List completionItems = list.getItems().stream().filter(i -> i.getLabel().contains("emptyList")).collect(Collectors.toList()); + assertEquals("emptyList completion count", 1, completionItems.size()); + + CompletionItem completionItem = completionItems.get(0); + assertNotNull(completionItem); + assertEquals("Completion getTextEditText", "Collections.emptyList()", completionItem.getTextEdit().getLeft().getNewText()); + var loc = findCompletionLocation(unit, "names = empty", 0); + var expected = new Position(loc[0], loc[1] - "empty".length()); + assertEquals("Completion TextEdit Range", expected, completionItem.getTextEdit().getLeft().getRange().getStart()); + } + + @Test + public void testChainCompletionsOnVariableWithTokenMatchingEdge() throws Exception { + //@formatter:off + ICompilationUnit unit = getWorkingCopy( + "src/java/Foo.java", + """ + import java.util.List; + public class Foo { + public static void main(String[] args) { + List names = emptyL + } + } + """); + //@formatter:on + CompletionList list = requestCompletions(unit, "names = emptyL"); + assertEquals(2, list.getItems().size()); + assertTrue("emptyList", list.getItems().stream().anyMatch(i -> i.getLabel().matches(".*\\.emptyList().*"))); + assertTrue("EMPTY_LIST", list.getItems().stream().anyMatch(i -> i.getLabel().matches(".*\\.EMPTY_LIST.*"))); + } + + @Test + public void testChainCompletionsOnVariableWithTokenMatchingStart() throws Exception { + //@formatter:off + ICompilationUnit unit = getWorkingCopy( + "src/java/Foo.java", + """ + import java.util.List; + public class Foo { + public static void main(String[] args) { + List names = Coll + } + } + """); + //@formatter:on + CompletionList list = requestCompletions(unit, "names = Coll"); + assertTrue(list.getItems().size() > 0); + assertTrue("All Collections.*", list.getItems().stream().anyMatch(i -> i.getLabel().matches("Collections\\..*"))); + } }