diff --git a/codegen/apt/src/main/java/io/helidon/codegen/apt/AptContextImpl.java b/codegen/apt/src/main/java/io/helidon/codegen/apt/AptContextImpl.java index b5247ed926c..db808af3cbf 100644 --- a/codegen/apt/src/main/java/io/helidon/codegen/apt/AptContextImpl.java +++ b/codegen/apt/src/main/java/io/helidon/codegen/apt/AptContextImpl.java @@ -145,7 +145,7 @@ private static Optional findModule(Filer filer) { try (InputStream in = resource.openInputStream()) { return Optional.of(ModuleInfoSourceParser.parse(in)); } - } catch (IOException ignored) { + } catch (Exception ignored) { // it is not in sources, let's see if it got generated } // generated diff --git a/codegen/apt/src/main/java/io/helidon/codegen/apt/AptTypeInfoFactory.java b/codegen/apt/src/main/java/io/helidon/codegen/apt/AptTypeInfoFactory.java index 70146921928..7d447a70d19 100644 --- a/codegen/apt/src/main/java/io/helidon/codegen/apt/AptTypeInfoFactory.java +++ b/codegen/apt/src/main/java/io/helidon/codegen/apt/AptTypeInfoFactory.java @@ -255,7 +255,13 @@ public static Optional createTypedElementInfoFromElement(AptCo .throwsChecked(thrownChecked) .parameterArguments(params) .originatingElement(v); - AptTypeFactory.createTypeName(v.getEnclosingElement()).ifPresent(builder::enclosingType); + + // To be failure-tolerant, as the ECJ may not provide an enclosing element for a VariableElement. + Element enclosingElement = v.getEnclosingElement(); + if (enclosingElement != null) { + AptTypeFactory.createTypeName(enclosingElement).ifPresent(builder::enclosingType); + } + Optional.ofNullable(defaultValue).ifPresent(builder::defaultValue); return mapElement(ctx, builder.build()); diff --git a/codegen/apt/src/main/java/io/helidon/codegen/apt/FilerTextResourceImpl.java b/codegen/apt/src/main/java/io/helidon/codegen/apt/FilerTextResourceImpl.java index f0cfb8ed4f6..c694c4674f1 100644 --- a/codegen/apt/src/main/java/io/helidon/codegen/apt/FilerTextResourceImpl.java +++ b/codegen/apt/src/main/java/io/helidon/codegen/apt/FilerTextResourceImpl.java @@ -76,7 +76,11 @@ public void lines(List newLines) { public void write() { if (modified) { if (originalResource != null) { - originalResource.delete(); + try { + originalResource.delete(); + } catch (Exception ignored) { + // The resource cannot be deleted, e.g. because ECJ has not implemented this method. + } } try { FileObject newResource = filer.createResource(StandardLocation.CLASS_OUTPUT, diff --git a/config/metadata/processor/src/main/java/io/helidon/config/metadata/processor/ConfigMetadataHandler.java b/config/metadata/processor/src/main/java/io/helidon/config/metadata/processor/ConfigMetadataHandler.java index 746f4154bf1..86b5733af80 100644 --- a/config/metadata/processor/src/main/java/io/helidon/config/metadata/processor/ConfigMetadataHandler.java +++ b/config/metadata/processor/src/main/java/io/helidon/config/metadata/processor/ConfigMetadataHandler.java @@ -18,6 +18,9 @@ import java.io.IOException; import java.io.PrintWriter; +import java.io.StringWriter; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashSet; @@ -49,7 +52,7 @@ /* * This class is separated so javac correctly reports possible errors. */ -class ConfigMetadataHandler { +class ConfigMetadataHandler { /* * Configuration metadata file location. */ @@ -94,8 +97,7 @@ boolean process(RoundEnvironment roundEnv) { return doProcess(roundEnv); } catch (Exception e) { messager.printMessage(Diagnostic.Kind.ERROR, "Failed to process config metadata annotation processor. " - + toMessage(e)); - e.printStackTrace(); + + stackTraceAsString(e)); return false; } } @@ -210,7 +212,21 @@ private void storeMetadata() { } } - private String toMessage(Exception e) { - return e.getClass().getName() + ": " + e.getMessage(); + @Retention(RetentionPolicy.CLASS) + private @interface SuppressFBWarnings { + + String[] value() default {}; + + String justification() default ""; + } + + @SuppressFBWarnings( + value = "INFORMATION_EXPOSURE_THROUGH_AN_ERROR_MESSAGE", + justification = "During compile time this isn't a problem.") + private static String stackTraceAsString(Throwable e) { + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + return sw.toString(); } }