|
|
|
|
@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
|
|
|
|
|
/* |
|
|
|
|
* Copyright 2002-2023 the original author or authors. |
|
|
|
|
* Copyright 2002-2024 the original author or authors. |
|
|
|
|
* |
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
|
|
|
|
* you may not use this file except in compliance with the License. |
|
|
|
|
@ -16,7 +16,10 @@
@@ -16,7 +16,10 @@
|
|
|
|
|
|
|
|
|
|
package org.springframework.core.test.tools; |
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.io.InputStream; |
|
|
|
|
import java.io.OutputStream; |
|
|
|
|
import java.io.UncheckedIOException; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.Set; |
|
|
|
|
@ -27,6 +30,8 @@ import javax.annotation.processing.Processor;
@@ -27,6 +30,8 @@ import javax.annotation.processing.Processor;
|
|
|
|
|
import javax.annotation.processing.RoundEnvironment; |
|
|
|
|
import javax.annotation.processing.SupportedAnnotationTypes; |
|
|
|
|
import javax.lang.model.element.TypeElement; |
|
|
|
|
import javax.tools.FileObject; |
|
|
|
|
import javax.tools.StandardLocation; |
|
|
|
|
|
|
|
|
|
import com.example.PublicInterface; |
|
|
|
|
import org.junit.jupiter.api.Test; |
|
|
|
|
@ -367,6 +372,14 @@ class TestCompilerTests {
@@ -367,6 +372,14 @@ class TestCompilerTests {
|
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Test |
|
|
|
|
void getUpdatedResourceAsStream() { |
|
|
|
|
SourceFile sourceFile = SourceFile.of(HELLO_WORLD); |
|
|
|
|
TestCompiler.forSystem().withResources(ResourceFile.of("com/example/resource", new byte[] { 'a' })) |
|
|
|
|
.withProcessors(new ResourceModifyingProcessor()).compile(sourceFile, compiled -> assertThat( |
|
|
|
|
compiled.getClassLoader().getResourceAsStream("com/example/resource")).hasContent("b")); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void assertSuppliesHelloWorld(Compiled compiled) { |
|
|
|
|
assertThat(compiled.getInstance(Supplier.class).get()).isEqualTo("Hello World!"); |
|
|
|
|
} |
|
|
|
|
@ -392,4 +405,26 @@ class TestCompilerTests {
@@ -392,4 +405,26 @@ class TestCompilerTests {
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@SupportedAnnotationTypes("java.lang.Deprecated") |
|
|
|
|
static class ResourceModifyingProcessor extends AbstractProcessor { |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { |
|
|
|
|
if (roundEnv.processingOver()) { |
|
|
|
|
try { |
|
|
|
|
FileObject resource = this.processingEnv.getFiler() |
|
|
|
|
.createResource(StandardLocation.CLASS_OUTPUT, "", "com/example/resource"); |
|
|
|
|
try (OutputStream output = resource.openOutputStream()) { |
|
|
|
|
output.write('b'); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
catch (IOException ex) { |
|
|
|
|
throw new UncheckedIOException(ex); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|