Skip to content
This repository was archived by the owner on May 15, 2025. It is now read-only.

Commit 15c9b52

Browse files
authored
Merge pull request #53 from disneystreaming/main-into-dss-2024-07
Pull upstream changes
2 parents 12794f4 + e285d99 commit 15c9b52

File tree

155 files changed

+10416
-6550
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

155 files changed

+10416
-6550
lines changed

.github/workflows/ci.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@ on:
1010
jobs:
1111
build:
1212
strategy:
13+
fail-fast: false
1314
matrix:
1415
java: [8, 11, 17]
15-
os: [ubuntu-latest, windows-latest, macos-latest]
16+
os: [ubuntu-latest, windows-latest, macos-13]
1617

1718
runs-on: ${{ matrix.os }}
1819
name: Java ${{ matrix.java }} ${{ matrix.os }}

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
0.2.4
1+
0.3.0

build.gradle

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -156,21 +156,25 @@ publishing {
156156

157157

158158
dependencies {
159-
implementation "org.eclipse.lsp4j:org.eclipse.lsp4j:0.14.0"
159+
implementation "org.eclipse.lsp4j:org.eclipse.lsp4j:0.20.0"
160160
implementation "software.amazon.smithy:smithy-build:[smithyVersion, 2.0["
161161
implementation "software.amazon.smithy:smithy-cli:[smithyVersion, 2.0["
162162
implementation "software.amazon.smithy:smithy-model:[smithyVersion, 2.0["
163-
implementation 'com.disneystreaming.smithy:smithytranslate-formatter-jvm-java-api:0.3.10'
163+
implementation "software.amazon.smithy:smithy-syntax:[smithyVersion, 2.0["
164164

165-
// Use JUnit test framework
166-
testImplementation "junit:junit:4.13"
165+
testImplementation "org.junit.jupiter:junit-jupiter:5.10.0"
166+
testImplementation "org.hamcrest:hamcrest:2.1"
167+
168+
testRuntimeOnly "org.junit.platform:junit-platform-launcher"
167169
}
168170

169171
tasks.withType(Javadoc).all {
170172
options.addStringOption('Xdoclint:none', '-quiet')
171173
}
172174

173-
tasks.withType(Test) {
175+
tasks.withType(Test).configureEach {
176+
useJUnitPlatform()
177+
174178
testLogging {
175179
events TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED, TestLogEvent.STANDARD_OUT, TestLogEvent.STANDARD_ERROR
176180
exceptionFormat TestExceptionFormat.FULL
@@ -180,7 +184,8 @@ tasks.withType(Test) {
180184
}
181185
}
182186

183-
task createProperties(dependsOn: processResources) {
187+
tasks.register('createProperties') {
188+
dependsOn processResources
184189
doLast {
185190
new File("$buildDir/resources/main/version.properties").withWriter { w ->
186191
Properties p = new Properties()
@@ -196,13 +201,15 @@ classes {
196201

197202
application {
198203
// Define the main class for the application.
199-
mainClassName = "software.amazon.smithy.lsp.Main"
204+
mainClass = "software.amazon.smithy.lsp.Main"
200205
}
201206

202207
// ==== CheckStyle ====
203208
// https://docs.gradle.org/current/userguide/checkstyle_plugin.html
204209
apply plugin: "checkstyle"
205-
tasks["checkstyleTest"].enabled = false
210+
tasks.named("checkstyleTest") {
211+
enabled = false
212+
}
206213

207214
java {
208215
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -213,6 +220,7 @@ jar {
213220
from (configurations.compileClasspath.collect { entry -> zipTree(entry) }) {
214221
exclude "about.html"
215222
exclude "META-INF/LICENSE"
223+
exclude "META-INF/LICENSE.txt"
216224
exclude "META-INF/NOTICE"
217225
exclude "META-INF/MANIFEST.MF"
218226
exclude "META-INF/*.SF"

build.sc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ object lsp extends MavenModule with PublishModule {
88
def millSourcePath: os.Path = os.pwd
99

1010
def ivyDeps = Agg(
11-
ivy"org.eclipse.lsp4j:org.eclipse.lsp4j:0.14.0",
12-
ivy"software.amazon.smithy:smithy-model:1.45.0",
13-
ivy"software.amazon.smithy:smithy-build:1.45.0",
14-
ivy"software.amazon.smithy:smithy-cli:1.45.0",
15-
ivy"com.disneystreaming.smithy:smithytranslate-formatter-jvm-java-api:0.3.10"
11+
ivy"org.eclipse.lsp4j:org.eclipse.lsp4j:0.20.0",
12+
ivy"software.amazon.smithy:smithy-build:1.46.0",
13+
ivy"software.amazon.smithy:smithy-cli:1.46.0",
14+
ivy"software.amazon.smithy:smithy-model:1.46.0",
15+
ivy"software.amazon.smithy:smithy-syntax:1.46.0"
1616
)
1717

1818
def publishVersion = T { gitVersion() }

config/checkstyle/checkstyle.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@
6868
<!-- Checks for Javadoc comments. -->
6969
<!-- See http://checkstyle.sf.net/config_javadoc.html -->
7070
<module name="JavadocMethod">
71-
<property name="scope" value="public"/>
71+
<property name="accessModifiers" value="public"/>
7272
<property name="allowMissingParamTags" value="true"/>
7373
<property name="allowMissingReturnTag" value="true"/>
7474
<property name="allowedAnnotations" value="Override, Test"/>

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
smithyVersion=1.45.0
1+
smithyVersion=1.46.0

gradle/wrapper/gradle-wrapper.jar

-15.9 KB
Binary file not shown.
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
4+
networkTimeout=10000
5+
validateDistributionUrl=true
46
zipStoreBase=GRADLE_USER_HOME
57
zipStorePath=wrapper/dists

gradlew

Lines changed: 31 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
# See the License for the specific language governing permissions and
1616
# limitations under the License.
1717
#
18+
# SPDX-License-Identifier: Apache-2.0
19+
#
1820

1921
##############################################################################
2022
#
@@ -55,7 +57,7 @@
5557
# Darwin, MinGW, and NonStop.
5658
#
5759
# (3) This script is generated from the Groovy template
58-
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
60+
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
5961
# within the Gradle project.
6062
#
6163
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -80,13 +82,12 @@ do
8082
esac
8183
done
8284

83-
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
84-
85-
APP_NAME="Gradle"
85+
# This is normally unused
86+
# shellcheck disable=SC2034
8687
APP_BASE_NAME=${0##*/}
87-
88-
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
89-
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
88+
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
89+
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
90+
' "$PWD" ) || exit
9091

9192
# Use the maximum available, or set MAX_FD != -1 to use that value.
9293
MAX_FD=maximum
@@ -133,22 +134,29 @@ location of your Java installation."
133134
fi
134135
else
135136
JAVACMD=java
136-
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137+
if ! command -v java >/dev/null 2>&1
138+
then
139+
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
137140
138141
Please set the JAVA_HOME variable in your environment to match the
139142
location of your Java installation."
143+
fi
140144
fi
141145

142146
# Increase the maximum file descriptors if we can.
143147
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
144148
case $MAX_FD in #(
145149
max*)
150+
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
151+
# shellcheck disable=SC2039,SC3045
146152
MAX_FD=$( ulimit -H -n ) ||
147153
warn "Could not query maximum file descriptor limit"
148154
esac
149155
case $MAX_FD in #(
150156
'' | soft) :;; #(
151157
*)
158+
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
159+
# shellcheck disable=SC2039,SC3045
152160
ulimit -n "$MAX_FD" ||
153161
warn "Could not set maximum file descriptor limit to $MAX_FD"
154162
esac
@@ -193,18 +201,28 @@ if "$cygwin" || "$msys" ; then
193201
done
194202
fi
195203

196-
# Collect all arguments for the java command;
197-
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
198-
# shell script including quotes and variable substitutions, so put them in
199-
# double quotes to make sure that they get re-expanded; and
200-
# * put everything else in single quotes, so that it's not re-expanded.
204+
205+
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
206+
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
207+
208+
# Collect all arguments for the java command:
209+
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
210+
# and any embedded shellness will be escaped.
211+
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
212+
# treated as '${Hostname}' itself on the command line.
201213

202214
set -- \
203215
"-Dorg.gradle.appname=$APP_BASE_NAME" \
204216
-classpath "$CLASSPATH" \
205217
org.gradle.wrapper.GradleWrapperMain \
206218
"$@"
207219

220+
# Stop when "xargs" is not available.
221+
if ! command -v xargs >/dev/null 2>&1
222+
then
223+
die "xargs is not available"
224+
fi
225+
208226
# Use "xargs" to parse quoted args.
209227
#
210228
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.

gradlew.bat

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
@rem See the License for the specific language governing permissions and
1414
@rem limitations under the License.
1515
@rem
16+
@rem SPDX-License-Identifier: Apache-2.0
17+
@rem
1618

17-
@if "%DEBUG%" == "" @echo off
19+
@if "%DEBUG%"=="" @echo off
1820
@rem ##########################################################################
1921
@rem
2022
@rem Gradle startup script for Windows
@@ -25,7 +27,8 @@
2527
if "%OS%"=="Windows_NT" setlocal
2628

2729
set DIRNAME=%~dp0
28-
if "%DIRNAME%" == "" set DIRNAME=.
30+
if "%DIRNAME%"=="" set DIRNAME=.
31+
@rem This is normally unused
2932
set APP_BASE_NAME=%~n0
3033
set APP_HOME=%DIRNAME%
3134

@@ -40,13 +43,13 @@ if defined JAVA_HOME goto findJavaFromJavaHome
4043

4144
set JAVA_EXE=java.exe
4245
%JAVA_EXE% -version >NUL 2>&1
43-
if "%ERRORLEVEL%" == "0" goto execute
46+
if %ERRORLEVEL% equ 0 goto execute
4447

45-
echo.
46-
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
47-
echo.
48-
echo Please set the JAVA_HOME variable in your environment to match the
49-
echo location of your Java installation.
48+
echo. 1>&2
49+
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50+
echo. 1>&2
51+
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52+
echo location of your Java installation. 1>&2
5053

5154
goto fail
5255

@@ -56,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe
5659

5760
if exist "%JAVA_EXE%" goto execute
5861

59-
echo.
60-
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
61-
echo.
62-
echo Please set the JAVA_HOME variable in your environment to match the
63-
echo location of your Java installation.
62+
echo. 1>&2
63+
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64+
echo. 1>&2
65+
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66+
echo location of your Java installation. 1>&2
6467

6568
goto fail
6669

@@ -75,13 +78,15 @@ set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
7578

7679
:end
7780
@rem End local scope for the variables with windows NT shell
78-
if "%ERRORLEVEL%"=="0" goto mainEnd
81+
if %ERRORLEVEL% equ 0 goto mainEnd
7982

8083
:fail
8184
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
8285
rem the _cmd.exe /c_ return code!
83-
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
84-
exit /b 1
86+
set EXIT_CODE=%ERRORLEVEL%
87+
if %EXIT_CODE% equ 0 set EXIT_CODE=1
88+
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
89+
exit /b %EXIT_CODE%
8590

8691
:mainEnd
8792
if "%OS%"=="Windows_NT" endlocal
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
* SPDX-License-Identifier: Apache-2.0
4+
*/
5+
6+
package software.amazon.smithy.lsp;
7+
8+
import java.util.HashMap;
9+
import java.util.HashSet;
10+
import java.util.Map;
11+
import java.util.Set;
12+
import java.util.concurrent.CompletableFuture;
13+
import java.util.concurrent.ExecutionException;
14+
import java.util.logging.Logger;
15+
16+
/**
17+
* Tracks asynchronous lifecycle tasks and client-managed documents.
18+
* Allows cancelling of an ongoing task if a new task needs to be started.
19+
*/
20+
final class DocumentLifecycleManager {
21+
private static final Logger LOGGER = Logger.getLogger(DocumentLifecycleManager.class.getName());
22+
private final Map<String, CompletableFuture<Void>> tasks = new HashMap<>();
23+
private final Set<String> managedDocumentUris = new HashSet<>();
24+
25+
Set<String> managedDocuments() {
26+
return managedDocumentUris;
27+
}
28+
29+
boolean isManaged(String uri) {
30+
return managedDocuments().contains(uri);
31+
}
32+
33+
CompletableFuture<Void> getTask(String uri) {
34+
return tasks.get(uri);
35+
}
36+
37+
void cancelTask(String uri) {
38+
if (tasks.containsKey(uri)) {
39+
CompletableFuture<Void> task = tasks.get(uri);
40+
if (!task.isDone()) {
41+
task.cancel(true);
42+
tasks.remove(uri);
43+
}
44+
}
45+
}
46+
47+
void putTask(String uri, CompletableFuture<Void> future) {
48+
tasks.put(uri, future);
49+
}
50+
51+
void putOrComposeTask(String uri, CompletableFuture<Void> future) {
52+
if (tasks.containsKey(uri)) {
53+
tasks.computeIfPresent(uri, (k, v) -> v.thenCompose((unused) -> future));
54+
} else {
55+
tasks.put(uri, future);
56+
}
57+
}
58+
59+
void cancelAllTasks() {
60+
for (CompletableFuture<Void> task : tasks.values()) {
61+
task.cancel(true);
62+
}
63+
tasks.clear();
64+
}
65+
66+
void waitForAllTasks() throws ExecutionException, InterruptedException {
67+
for (CompletableFuture<Void> task : tasks.values()) {
68+
if (!task.isDone()) {
69+
task.get();
70+
}
71+
}
72+
}
73+
}

0 commit comments

Comments
 (0)