diff --git a/build.gradle b/build.gradle index 8fb15a6566f..7cc8d02763d 100644 --- a/build.gradle +++ b/build.gradle @@ -39,6 +39,16 @@ subprojects { api.extendsFrom(provided) } + compileTestJava { + sourceCompatibility = targetCompatibility = 8 + } + + tasks.withType(Test).all { + javaLauncher = javaToolchains.launcherFor { + languageVersion = JavaLanguageVersion.of(8) + } + } + lombok { version = '1.18.20' } diff --git a/core/build.gradle b/core/build.gradle index 0d704cecd81..78c969df384 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -2,6 +2,15 @@ apply plugin: 'com.github.johnrengelman.shadow' description = "Testcontainers Core" +configure([tasks.compileJava]) { + sourceCompatibility = 16 // for the IDE support + options.release = 8 + + javaCompiler = javaToolchains.compilerFor { + languageVersion = JavaLanguageVersion.of(16) + } + } + sourceSets { jarFileTest } @@ -56,6 +65,9 @@ dependencies { baseline 'org.testcontainers:testcontainers:1.16.3', { exclude group: "*", module: "*" } + + annotationProcessor 'com.github.bsideup.jabel:jabel-javac-plugin:0.4.2' + compileOnly 'com.github.bsideup.jabel:jabel-javac-plugin:0.4.2' api 'junit:junit:4.13.2' api 'org.slf4j:slf4j-api:1.7.35' diff --git a/core/src/main/java/org/testcontainers/containers/ParsedDockerComposeFile.java b/core/src/main/java/org/testcontainers/containers/ParsedDockerComposeFile.java index e9457ba92bd..6334a0bbddb 100644 --- a/core/src/main/java/org/testcontainers/containers/ParsedDockerComposeFile.java +++ b/core/src/main/java/org/testcontainers/containers/ParsedDockerComposeFile.java @@ -80,13 +80,11 @@ private void parseAndValidate() { for (Map.Entry entry : servicesMap.entrySet()) { String serviceName = entry.getKey(); Object serviceDefinition = entry.getValue(); - if (!(serviceDefinition instanceof Map)) { + if (!(serviceDefinition instanceof Map serviceDefinitionMap)) { log.debug("Compose file {} has an unknown format: service '{}' is not Map", composeFileName, serviceName); break; } - final Map serviceDefinitionMap = (Map) serviceDefinition; - validateNoContainerNameSpecified(serviceName, serviceDefinitionMap); findServiceImageName(serviceName, serviceDefinitionMap); findImageNamesInDockerfile(serviceName, serviceDefinitionMap); @@ -104,8 +102,7 @@ private void validateNoContainerNameSpecified(String serviceName, Map serviceDef } private void findServiceImageName(String serviceName, Map serviceDefinitionMap) { - if (serviceDefinitionMap.containsKey("image") && serviceDefinitionMap.get("image") instanceof String) { - final String imageName = (String) serviceDefinitionMap.get("image"); + if (serviceDefinitionMap.get("image") instanceof String imageName) { log.debug("Resolved dependency image for Docker Compose in {}: {}", composeFileName, imageName); serviceNameToImageNames.put(serviceName, Sets.newHashSet(imageName)); } @@ -115,8 +112,7 @@ private void findImageNamesInDockerfile(String serviceName, Map serviceDefinitio final Object buildNode = serviceDefinitionMap.get("build"); Path dockerfilePath = null; - if (buildNode instanceof Map) { - final Map buildElement = (Map) buildNode; + if (buildNode instanceof Map buildElement) { final Object dockerfileRelativePath = buildElement.get("dockerfile"); final Object contextRelativePath = buildElement.get("context"); if (dockerfileRelativePath instanceof String && contextRelativePath instanceof String) { diff --git a/core/src/main/java/org/testcontainers/containers/output/OutputFrame.java b/core/src/main/java/org/testcontainers/containers/output/OutputFrame.java index d5ddcada8c8..2bc1510dd56 100644 --- a/core/src/main/java/org/testcontainers/containers/output/OutputFrame.java +++ b/core/src/main/java/org/testcontainers/containers/output/OutputFrame.java @@ -40,12 +40,11 @@ public enum OutputType { STDOUT, STDERR, END; public static OutputType forStreamType(StreamType streamType) { - switch (streamType) { - case RAW: return STDOUT; - case STDOUT: return STDOUT; - case STDERR: return STDERR; - default: return null; - } + return switch (streamType) { + case RAW, STDOUT -> STDOUT; + case STDERR -> STDERR; + default -> null; + }; } } diff --git a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java index b595ddba6ca..e216796d403 100644 --- a/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java +++ b/core/src/main/java/org/testcontainers/dockerclient/DockerClientProviderStrategy.java @@ -251,25 +251,24 @@ private static Optional loadConfiguredSt } public static DockerClient getClientForConfig(TransportConfig transportConfig) { - final DockerHttpClient dockerHttpClient; - String transportType = TestcontainersConfiguration.getInstance().getTransportType(); - switch (transportType) { - case "okhttp": - dockerHttpClient = new OkDockerHttpClient.Builder() + var dockerHttpClient = switch (transportType) { + case "okhttp" -> { + yield new OkDockerHttpClient.Builder() .dockerHost(transportConfig.getDockerHost()) .sslConfig(transportConfig.getSslConfig()) .build(); - break; - case "httpclient5": - dockerHttpClient = new ZerodepDockerHttpClient.Builder() + } + case "httpclient5" -> { + yield new ZerodepDockerHttpClient.Builder() .dockerHost(transportConfig.getDockerHost()) .sslConfig(transportConfig.getSslConfig()) .build(); - break; - default: + } + default -> { throw new IllegalArgumentException("Unknown transport type '" + transportType + "'"); - } + } + }; DefaultDockerClientConfig.Builder configBuilder = DefaultDockerClientConfig.createDefaultConfigBuilder(); @@ -300,15 +299,11 @@ static String resolveDockerHostIpAddress(DockerClient client, URI dockerHost) { return hostOverride; } - switch (dockerHost.getScheme()) { - case "http": - case "https": - case "tcp": - return dockerHost.getHost(); - case "unix": - case "npipe": + return switch (dockerHost.getScheme()) { + case "http", "https","tcp" -> dockerHost.getHost(); + case "unix", "npipe" -> { if (DockerClientConfigUtils.IN_A_CONTAINER) { - return client.inspectNetworkCmd() + yield client.inspectNetworkCmd() .withNetworkId("bridge") .exec() .getIpam() @@ -321,9 +316,9 @@ static String resolveDockerHostIpAddress(DockerClient client, URI dockerHost) { return DockerClientConfigUtils.getDefaultGateway().orElse("localhost"); }); } - return "localhost"; - default: - return null; - } + yield "localhost"; + } + default -> null; + }; } } diff --git a/core/src/main/java/org/testcontainers/utility/Versioning.java b/core/src/main/java/org/testcontainers/utility/Versioning.java index 4b1da407440..bb5cd7759df 100644 --- a/core/src/main/java/org/testcontainers/utility/Versioning.java +++ b/core/src/main/java/org/testcontainers/utility/Versioning.java @@ -1,5 +1,6 @@ package org.testcontainers.utility; +import com.github.bsideup.jabel.Desugar; import lombok.AccessLevel; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @@ -43,15 +44,10 @@ public int hashCode() { } } - @EqualsAndHashCode - class TagVersioning implements Versioning { + @Desugar + record TagVersioning(String tag) implements Versioning { public static final String TAG_REGEX = "[\\w][\\w.\\-]{0,127}"; static final TagVersioning LATEST = new TagVersioning("latest"); - private final String tag; - - TagVersioning(String tag) { - this.tag = tag; - } @Override public boolean isValid() { @@ -69,14 +65,9 @@ public String toString() { } } - @EqualsAndHashCode - class Sha256Versioning implements Versioning { + @Desugar + record Sha256Versioning(String hash) implements Versioning { public static final String HASH_REGEX = "[0-9a-fA-F]{32,}"; - private final String hash; - - Sha256Versioning(String hash) { - this.hash = hash; - } @Override public boolean isValid() { diff --git a/modules/hivemq/build.gradle b/modules/hivemq/build.gradle index 779ac2ec9d8..a2300e2c2df 100644 --- a/modules/hivemq/build.gradle +++ b/modules/hivemq/build.gradle @@ -31,6 +31,8 @@ test { } compileTestJava { + sourceCompatibility = targetCompatibility = 11 + javaCompiler = javaToolchains.compilerFor { languageVersion = JavaLanguageVersion.of(11) }