Skip to content

Commit 2e4c003

Browse files
authored
Support java17 lambda runtime (#3611)
* Support java17 lambda runtime * Few tests changed to java17 * Added minSam versions for Java17 * Reverted localLambdaRunConfigurationTest file * Added changeLog * reverted sam test files * moved to offfical sdk
1 parent e5d69c8 commit 2e4c003

File tree

18 files changed

+195
-19
lines changed

18 files changed

+195
-19
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type" : "feature",
3+
"description" : "Add support for Lambda Runtime Java17"
4+
}

core/src/software/aws/toolkits/core/lambda/LambdaRuntime.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ enum class LambdaRuntime(
2525
JAVA8(Runtime.JAVA8),
2626
JAVA8_AL2(Runtime.JAVA8_AL2, minSamDebugging = "1.2.0", architectures = ARM_COMPATIBLE),
2727
JAVA11(Runtime.JAVA11, architectures = ARM_COMPATIBLE),
28+
JAVA17(Runtime.JAVA17, minSamDebugging = "1.81.0", minSamInit = "1.81.0", architectures = ARM_COMPATIBLE),
2829
PYTHON3_7(Runtime.PYTHON3_7),
2930
PYTHON3_8(Runtime.PYTHON3_8, architectures = ARM_COMPATIBLE),
3031
PYTHON3_9(Runtime.PYTHON3_9, minSamDebugging = "1.28.0", minSamInit = "1.28.0", architectures = ARM_COMPATIBLE),

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
apacheCommons = "2.8.0"
33
assertJ = "3.20.2" # Upgrading leads to SAM errors: https://youtrack.jetbrains.com/issue/KT-17765
44
# match with <root>/settings.gradle.kts
5-
awsSdk = "2.20.48"
5+
awsSdk = "2.20.55"
66
commonmark = "0.17.1"
77
detekt = "1.21.0"
88
intellijGradle = "1.13.2"

jetbrains-core/it/software/aws/toolkits/jetbrains/services/lambda/java/JavaLocalLambdaRunConfigurationIntegrationTest.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ class JavaLocalLambdaRunConfigurationIntegrationTest(private val runtime: Lambda
3939
fun data() = listOf(
4040
arrayOf(LambdaRuntime.JAVA8),
4141
arrayOf(LambdaRuntime.JAVA8_AL2),
42-
arrayOf(LambdaRuntime.JAVA11)
42+
arrayOf(LambdaRuntime.JAVA11),
43+
arrayOf(LambdaRuntime.JAVA17)
4344
)
4445
}
4546

@@ -73,6 +74,7 @@ class JavaLocalLambdaRunConfigurationIntegrationTest(private val runtime: Lambda
7374
val compatibility = when (runtime) {
7475
LambdaRuntime.JAVA8, LambdaRuntime.JAVA8_AL2 -> "1.8"
7576
LambdaRuntime.JAVA11 -> "11"
77+
LambdaRuntime.JAVA17 -> "17"
7678
else -> throw NotImplementedError()
7779
}
7880

jetbrains-core/resources/META-INF/ext-java.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.java.Java8ImageDebugSupport"/>
2020
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.java.Java8Al2ImageDebugSupport"/>
2121
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.java.Java11ImageDebugSupport"/>
22+
<sam.imageDebuggerSupport implementation="software.aws.toolkits.jetbrains.services.lambda.java.Java17ImageDebugSupport"/>
2223
<handlerResolver id="JAVA" implementationClass="software.aws.toolkits.jetbrains.services.lambda.java.JavaLambdaHandlerResolver"/>
2324
<sam.projectWizard id="JAVA" implementationClass="software.aws.toolkits.jetbrains.services.lambda.java.JavaSamProjectWizard"/>
2425
</extensions>

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/java/JavaDebugSupport.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,16 @@ open class Java11ImageDebugSupport : JavaImageDebugSupport() {
7474
)
7575
}
7676

77+
open class Java17ImageDebugSupport : JavaImageDebugSupport() {
78+
override val id: String = LambdaRuntime.JAVA17.toString()
79+
override fun displayName() = LambdaRuntime.JAVA17.toString().capitalize()
80+
override fun containerEnvVars(debugPorts: List<Int>): Map<String, String> = mapOf(
81+
"_JAVA_OPTIONS" to "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,quiet=y,address=*:${debugPorts.first()} " +
82+
"-XX:MaxHeapSize=2834432k -XX:MaxMetaspaceSize=163840k -XX:ReservedCodeCacheSize=81920k -XX:+UseSerialGC " +
83+
"-XX:-TieredCompilation -Djava.net.preferIPv4Stack=true"
84+
)
85+
}
86+
7787
private val edtContext = getCoroutineUiContext()
7888

7989
private suspend fun createDebugProcess(

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/java/JavaRuntimeGroup.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ class JavaRuntimeGroup : SdkBasedRuntimeGroup() {
2323
override val supportedRuntimes: List<LambdaRuntime> = listOf(
2424
LambdaRuntime.JAVA8,
2525
LambdaRuntime.JAVA8_AL2,
26-
LambdaRuntime.JAVA11
26+
LambdaRuntime.JAVA11,
27+
LambdaRuntime.JAVA17
2728
)
2829

2930
override fun runtimeForSdk(sdk: Sdk): LambdaRuntime? {
@@ -35,8 +36,10 @@ class JavaRuntimeGroup : SdkBasedRuntimeGroup() {
3536
}
3637

3738
private fun determineRuntimeForSdk(sdk: JavaSdkVersion) = when {
39+
// TODO: is this actually the right logic?
3840
sdk <= JavaSdkVersion.JDK_1_8 -> LambdaRuntime.JAVA8_AL2
3941
sdk <= JavaSdkVersion.JDK_11 -> LambdaRuntime.JAVA11
42+
sdk <= JavaSdkVersion.JDK_17 -> LambdaRuntime.JAVA17
4043
else -> null
4144
}
4245

jetbrains-core/src/software/aws/toolkits/jetbrains/services/lambda/java/JavaSamProjectWizard.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,8 @@ class JavaSamProjectWizard : SamProjectWizard {
4141
}
4242

4343
abstract class JavaSamProjectTemplate : SamAppTemplateBased() {
44-
override fun supportedZipRuntimes() = setOf(LambdaRuntime.JAVA8, LambdaRuntime.JAVA8_AL2, LambdaRuntime.JAVA11)
45-
override fun supportedImageRuntimes() = setOf(LambdaRuntime.JAVA8, LambdaRuntime.JAVA8_AL2, LambdaRuntime.JAVA11)
44+
override fun supportedZipRuntimes() = setOf(LambdaRuntime.JAVA8, LambdaRuntime.JAVA8_AL2, LambdaRuntime.JAVA11, LambdaRuntime.JAVA17)
45+
override fun supportedImageRuntimes() = setOf(LambdaRuntime.JAVA8, LambdaRuntime.JAVA8_AL2, LambdaRuntime.JAVA11, LambdaRuntime.JAVA17)
4646

4747
// Helper method to locate the build file, such as pom.xml in the project content root.
4848
protected fun locateBuildFile(contentRoot: VirtualFile, buildFileName: String): VirtualFile? {

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/lambda/java/JavaHandlerCompletionProviderTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,10 @@ class JavaHandlerCompletionProviderTest {
2727
val provider = HandlerCompletionProvider(projectRule.project, LambdaRuntime.JAVA11)
2828
assertFalse(provider.isCompletionSupported)
2929
}
30+
31+
@Test
32+
fun completionIsNotSupportedJava17() {
33+
val provider = HandlerCompletionProvider(projectRule.project, LambdaRuntime.JAVA17)
34+
assertFalse(provider.isCompletionSupported)
35+
}
3036
}

jetbrains-core/tst/software/aws/toolkits/jetbrains/services/lambda/java/JavaLambdaHandlerResolverTest.kt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ class JavaLambdaHandlerResolverTest {
8484
runInEdtAndWait {
8585
val elements = Lambda.findPsiElementsForHandler(
8686
fixture.project,
87-
Runtime.JAVA8,
87+
Runtime.JAVA17,
8888
"com.example.LambdaHandler"
8989
)
9090
assertThat(elements).hasSize(1)
@@ -116,7 +116,7 @@ class JavaLambdaHandlerResolverTest {
116116
runInEdtAndWait {
117117
val elements = Lambda.findPsiElementsForHandler(
118118
fixture.project,
119-
Runtime.JAVA8,
119+
Runtime.JAVA17,
120120
"com.example.LambdaHandler::handleRequest"
121121
)
122122
assertThat(elements).hasSize(1)
@@ -148,7 +148,7 @@ class JavaLambdaHandlerResolverTest {
148148
runInEdtAndWait {
149149
val elements = Lambda.findPsiElementsForHandler(
150150
fixture.project,
151-
Runtime.JAVA8,
151+
Runtime.JAVA17,
152152
"com.example.LambdaHandler::handleRequest"
153153
)
154154
assertThat(elements).hasSize(1)
@@ -166,7 +166,7 @@ class JavaLambdaHandlerResolverTest {
166166
runInEdtAndWait {
167167
val elements = Lambda.findPsiElementsForHandler(
168168
fixture.project,
169-
Runtime.JAVA8,
169+
Runtime.JAVA17,
170170
"com.example.LambdaHandler"
171171
)
172172
assertThat(elements).isEmpty()
@@ -194,7 +194,7 @@ class JavaLambdaHandlerResolverTest {
194194
runInEdtAndWait {
195195
val elements = Lambda.findPsiElementsForHandler(
196196
fixture.project,
197-
Runtime.JAVA8,
197+
Runtime.JAVA17,
198198
"com.example.LambdaHandler::someMethod"
199199
)
200200
assertThat(elements).isEmpty()
@@ -237,7 +237,7 @@ class JavaLambdaHandlerResolverTest {
237237
runInEdtAndWait {
238238
val elements = Lambda.findPsiElementsForHandler(
239239
fixture.project,
240-
Runtime.JAVA8,
240+
Runtime.JAVA17,
241241
"com.example.ConcreteHandler::handleRequest"
242242
)
243243
assertThat(elements).hasSize(1)
@@ -273,7 +273,7 @@ class JavaLambdaHandlerResolverTest {
273273
)
274274

275275
runInEdtAndWait {
276-
val isHandlerValid: (String) -> Boolean = { handler -> Lambda.isHandlerValid(fixture.project, Runtime.JAVA11, handler) }
276+
val isHandlerValid: (String) -> Boolean = { handler -> Lambda.isHandlerValid(fixture.project, Runtime.JAVA17, handler) }
277277

278278
assertThat(isHandlerValid("com.example.LambdaHandler::streamsOnly")).isTrue
279279
assertThat(isHandlerValid("com.example.LambdaHandler::contextAndAnything")).isTrue
@@ -304,7 +304,7 @@ class JavaLambdaHandlerResolverTest {
304304
)
305305

306306
runInEdtAndWait {
307-
val isHandlerValid: (String) -> Boolean = { handler -> Lambda.isHandlerValid(fixture.project, Runtime.JAVA11, handler) }
307+
val isHandlerValid: (String) -> Boolean = { handler -> Lambda.isHandlerValid(fixture.project, Runtime.JAVA17, handler) }
308308

309309
assertThat(isHandlerValid("com.example.LambdaHandler::works")).isTrue
310310
assertThat(isHandlerValid("com.example.LambdaHandler::alsoWorks")).isTrue
@@ -337,7 +337,7 @@ class JavaLambdaHandlerResolverTest {
337337
)
338338

339339
runInEdtAndWait {
340-
val isHandlerValid: (String) -> Boolean = { handler -> Lambda.isHandlerValid(fixture.project, Runtime.JAVA11, handler) }
340+
val isHandlerValid: (String) -> Boolean = { handler -> Lambda.isHandlerValid(fixture.project, Runtime.JAVA17, handler) }
341341

342342
assertThat(isHandlerValid("com.example.LambdaHandler::works")).isTrue
343343
assertThat(isHandlerValid("com.example.LambdaHandler::doesntWork")).isFalse
@@ -368,7 +368,7 @@ class JavaLambdaHandlerResolverTest {
368368
runInEdtAndWait {
369369
val elements = Lambda.findPsiElementsForHandler(
370370
fixture.project,
371-
Runtime.JAVA8,
371+
Runtime.JAVA17,
372372
"com.example.LambdaHandler::handleRequest"
373373
)
374374
assertThat(elements[0]).isInstanceOfSatisfying(PsiMethod::class.java) {
@@ -401,7 +401,7 @@ class JavaLambdaHandlerResolverTest {
401401
runInEdtAndWait {
402402
val elements = Lambda.findPsiElementsForHandler(
403403
fixture.project,
404-
Runtime.JAVA8,
404+
Runtime.JAVA17,
405405
"com.example.LambdaHandler::handleRequest"
406406
)
407407
assertThat(elements[0]).isInstanceOfSatisfying(PsiMethod::class.java) {
@@ -434,7 +434,7 @@ class JavaLambdaHandlerResolverTest {
434434
runInEdtAndWait {
435435
val elements = Lambda.findPsiElementsForHandler(
436436
fixture.project,
437-
Runtime.JAVA8,
437+
Runtime.JAVA17,
438438
"com.example.LambdaHandler::handleRequest"
439439
)
440440
assertThat(elements).isEmpty()
@@ -462,7 +462,7 @@ class JavaLambdaHandlerResolverTest {
462462
runInEdtAndWait {
463463
val elements = Lambda.findPsiElementsForHandler(
464464
projectRule.project,
465-
Runtime.JAVA8,
465+
Runtime.JAVA17,
466466
"com.example.LambdaHandler::handleRequest"
467467
)
468468
assertThat(elements).isEmpty()

0 commit comments

Comments
 (0)