diff --git a/gestalt-di/src/main/java/org/terasology/gestalt/di/DefaultBeanContext.java b/gestalt-di/src/main/java/org/terasology/gestalt/di/DefaultBeanContext.java index 8adba7e7..0aeefef1 100644 --- a/gestalt-di/src/main/java/org/terasology/gestalt/di/DefaultBeanContext.java +++ b/gestalt-di/src/main/java/org/terasology/gestalt/di/DefaultBeanContext.java @@ -358,7 +358,7 @@ public BeanEnvironment getEnvironment() { @Override public void close() throws Exception { for (Object o : this.boundObjects.values()) { - if (o instanceof AutoCloseable) { + if (o instanceof AutoCloseable && o != this) { try { ((AutoCloseable) o).close(); } catch (Exception e) { diff --git a/gestalt-inject-java/build.gradle.kts b/gestalt-inject-java/build.gradle.kts index d43d8917..ca907c97 100644 --- a/gestalt-inject-java/build.gradle.kts +++ b/gestalt-inject-java/build.gradle.kts @@ -20,7 +20,7 @@ dependencies { testImplementation(libs.logback) testImplementation(libs.mockito) - implementation("com.squareup:javapoet:1.12.0") + implementation("com.squareup:javapoet:1.13.0") implementation("javax.inject:javax.inject:1") implementation(project(":gestalt-inject")) } diff --git a/gestalt-inject-java/src/main/java/org/terasology/gestalt/annotation/processing/BeanDefinitionProcessor.java b/gestalt-inject-java/src/main/java/org/terasology/gestalt/annotation/processing/BeanDefinitionProcessor.java index b562618e..799564fb 100644 --- a/gestalt-inject-java/src/main/java/org/terasology/gestalt/annotation/processing/BeanDefinitionProcessor.java +++ b/gestalt-inject-java/src/main/java/org/terasology/gestalt/annotation/processing/BeanDefinitionProcessor.java @@ -205,15 +205,22 @@ public Object visitType(TypeElement e, String className) { return super.visitType(e, className); } - private Object getValue(Object target) { + private Object getValue(TypeMirror type, Object target) { Object result; if (target instanceof String) { result = String.format("\"%s\"", target); + } else if (target instanceof List) { + if (((List) target).isEmpty()) { + result = "new " + type + "{}"; + } else { + result = target; + } + } else if (type.getKind() == TypeKind.DECLARED && ((DeclaredType) type).asElement().getKind() == ElementKind.ENUM) { + result = type + "." + target; } else { result = target; } return result; - } private List buildAnnotationValues(List mirrors) { @@ -228,7 +235,7 @@ private List buildAnnotationValues(List m ExecutableElement executableElement = (ExecutableElement) element; AnnotationValue value = executableElement.getDefaultValue(); if (value != null) { - defaults.add(CodeBlock.of("$S,$L", executableElement.getSimpleName(), getValue(value.getValue()))); + defaults.add(CodeBlock.of("$S,$L", executableElement.getSimpleName(), getValue(executableElement.getReturnType(), value.getValue()))); } } } @@ -237,7 +244,7 @@ private List buildAnnotationValues(List m ExecutableElement executableElement = entry.getKey(); AnnotationValue value = entry.getValue(); if (value != null) { - values.add(CodeBlock.of("$S,$L", executableElement.getSimpleName(), getValue(value.getValue()))); + values.add(CodeBlock.of("$S,$L", executableElement.getSimpleName(), getValue(executableElement.getReturnType(), value.getValue()))); } } diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/module/resources/ClasspathFileSource.java b/gestalt-module/src/main/java/org/terasology/gestalt/module/resources/ClasspathFileSource.java index 92bfd47a..1946e896 100644 --- a/gestalt-module/src/main/java/org/terasology/gestalt/module/resources/ClasspathFileSource.java +++ b/gestalt-module/src/main/java/org/terasology/gestalt/module/resources/ClasspathFileSource.java @@ -110,7 +110,7 @@ public Optional getFile(List filepath) { if (filepath.stream().anyMatch(s -> s.equals(".."))) { return Optional.empty(); } - String fullpath = buildPathString(filepath); + String fullpath = buildPathString(filepath, false); if (classLoader.getResource(fullpath) != null) { return Optional.of(new ClasspathSourceFileReference(fullpath, extractSubpath(basePath, fullpath), classLoader)); } else { @@ -120,7 +120,7 @@ public Optional getFile(List filepath) { @Override public Collection getFilesInPath(boolean recursive, List path) { - String fullPath = buildPathString(path); + String fullPath = buildPathString(path, true); Stream candidates = files .stream() .filter(file -> file.startsWith(fullPath)) @@ -137,7 +137,7 @@ public Collection getFilesInPath(boolean recursive, List @Override public Set getSubpaths(List path) { - String fullPath = buildPathString(path); + String fullPath = buildPathString(path, true); return files .stream() .filter(file -> file.startsWith(fullPath)) @@ -149,12 +149,15 @@ public Set getSubpaths(List path) { .collect(Collectors.toSet()); } - private String buildPathString(List path) { + private String buildPathString(List path, boolean isDirectory) { String fullPath; if (path.isEmpty() || (path.size() == 1 && path.get(0).isEmpty())) { fullPath = basePath; } else { - fullPath = basePath + CLASS_PATH_JOINER.join(path) + CLASS_PATH_SEPARATOR; + fullPath = basePath + CLASS_PATH_JOINER.join(path); + if (isDirectory) { + fullPath += CLASS_PATH_SEPARATOR; + } } return fullPath; } diff --git a/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java b/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java index ef416c54..23f57a6c 100644 --- a/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java +++ b/gestalt-module/src/main/java/org/terasology/gestalt/naming/Version.java @@ -116,7 +116,7 @@ public int getPatch() { * @return true if this version is a snapshot */ public boolean isSnapshot() { - return !semver.preReleaseVersion().isEmpty(); + return semver.preReleaseVersion().isPresent(); } /**