diff options
author | Jay Arthanareeswaran | 2018-05-17 15:18:31 +0000 |
---|---|---|
committer | Jay Arthanareeswaran | 2018-05-23 04:18:05 +0000 |
commit | 7a7103893293ccaa08503110334998347e22f2e4 (patch) | |
tree | d3f6dd98cdb273282e72d90e5e114e54d9b48f90 | |
parent | 95dc2d8aefb5a76afa0aa18c2377113a9ae06fd5 (diff) | |
download | eclipse.jdt.core-7a7103893293ccaa08503110334998347e22f2e4.tar.gz eclipse.jdt.core-7a7103893293ccaa08503110334998347e22f2e4.tar.xz eclipse.jdt.core-7a7103893293ccaa08503110334998347e22f2e4.zip |
Bug 530665: Filer.getResource must not flag output file as written forS4_8_0_RC2I20180528-0800I20180527-2250I20180527-2000I20180527-0800I20180526-1500I20180526-0800I20180525-2000I20180524-0900I20180523-2000I20180523-0800
spring-boot-configuration-processor compatibility
Change-Id: I8eb3026d6fe97f7cc0a1e2b2cf46e287f08d1c8e
Signed-off-by: Jay Arthanareeswaran <jarthana@in.ibm.com>
5 files changed, 115 insertions, 2 deletions
diff --git a/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors.jar b/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors.jar Binary files differindex 69a7439122..00ae9b850d 100644 --- a/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors.jar +++ b/org.eclipse.jdt.compiler.apt.tests/lib/apttestprocessors.jar diff --git a/org.eclipse.jdt.compiler.apt.tests/processors/org/eclipse/jdt/compiler/apt/tests/processors/AnnotationProcessorTests/Bug530665Proc.java b/org.eclipse.jdt.compiler.apt.tests/processors/org/eclipse/jdt/compiler/apt/tests/processors/AnnotationProcessorTests/Bug530665Proc.java new file mode 100644 index 0000000000..01c79e22a3 --- /dev/null +++ b/org.eclipse.jdt.compiler.apt.tests/processors/org/eclipse/jdt/compiler/apt/tests/processors/AnnotationProcessorTests/Bug530665Proc.java @@ -0,0 +1,87 @@ +package org.eclipse.jdt.compiler.apt.tests.processors.AnnotationProcessorTests; + +import java.io.IOException; +import java.io.Writer; +import java.util.Set; + +import javax.annotation.processing.Filer; +import javax.annotation.processing.ProcessingEnvironment; +import javax.annotation.processing.RoundEnvironment; +import javax.annotation.processing.SupportedAnnotationTypes; +import javax.annotation.processing.SupportedSourceVersion; +import javax.lang.model.SourceVersion; +import javax.lang.model.element.TypeElement; +import javax.tools.FileObject; +import javax.tools.StandardLocation; + +import org.eclipse.jdt.compiler.apt.tests.processors.base.BaseProcessor; + +@SupportedAnnotationTypes("*") +@SupportedSourceVersion(SourceVersion.RELEASE_6) +public class Bug530665Proc extends BaseProcessor { + + private Filer filer; + + @Override + public synchronized void init(ProcessingEnvironment processingEnv) { + super.init(processingEnv); + filer = processingEnv.getFiler(); + } + + @Override + public void reportError(String value) { + super.reportError(value); + throw new RuntimeException(value); + } + + @Override + public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { + if (roundEnv.errorRaised()) { + return false; + } + + try { + filer.getResource(StandardLocation.CLASS_OUTPUT, "targets/AnnotationProcessorTests/bug530665", "nonexists.txt"); + reportError("Filer.getResource(nonexists.txt) did NOT throw!"); + } catch (IOException e) { + // ignored + } + try { + // can be done multiple times... + filer.getResource(StandardLocation.CLASS_OUTPUT, "targets/AnnotationProcessorTests/bug530665", "preexists.txt"); + filer.getResource(StandardLocation.CLASS_OUTPUT, "targets/AnnotationProcessorTests/bug530665", "preexists.txt"); + } catch (IOException e) { + reportError("Filer.getResource(preexists.txt) threw: " + e); + } + + if (roundEnv.processingOver()) { + try { + FileObject fo = filer.createResource(StandardLocation.CLASS_OUTPUT, "targets/AnnotationProcessorTests/bug530665", "nonexists.txt"); + try(Writer writer = fo.openWriter()) { + writer.append("Test"); + } + } catch(IOException e) { + reportError("Filer.createResource(nonexists.txt) threw: " + e); + } + try { + filer.createResource(StandardLocation.CLASS_OUTPUT, "targets/AnnotationProcessorTests/bug530665", "nonexists.txt"); + reportError("Filer.createResource(nonexists.txt) second attempt did NOT throw!"); + } catch(IOException e) { + // ignored + } + + try { + FileObject fo = filer.createResource(StandardLocation.CLASS_OUTPUT, "targets/AnnotationProcessorTests/bug530665", "preexists.txt"); + if (!fo.delete()) { + reportError("FileObject.delete() failed!"); + } + } catch(IOException e) { + reportError("Filer.createResource(preexists.txt) threw: " + e); + } + + reportSuccess(); + } + return false; + } + +} diff --git a/org.eclipse.jdt.compiler.apt.tests/resources/targets/AnnotationProcessorTests/bug530665/A.java b/org.eclipse.jdt.compiler.apt.tests/resources/targets/AnnotationProcessorTests/bug530665/A.java new file mode 100644 index 0000000000..132e1e2eb0 --- /dev/null +++ b/org.eclipse.jdt.compiler.apt.tests/resources/targets/AnnotationProcessorTests/bug530665/A.java @@ -0,0 +1,3 @@ +package targets.AnnotationProcessorTests.bug530665; + +public class A {} diff --git a/org.eclipse.jdt.compiler.apt.tests/src/org/eclipse/jdt/compiler/apt/tests/AnnotationProcessorTests.java b/org.eclipse.jdt.compiler.apt.tests/src/org/eclipse/jdt/compiler/apt/tests/AnnotationProcessorTests.java index ae091acea5..7be23b6eba 100644 --- a/org.eclipse.jdt.compiler.apt.tests/src/org/eclipse/jdt/compiler/apt/tests/AnnotationProcessorTests.java +++ b/org.eclipse.jdt.compiler.apt.tests/src/org/eclipse/jdt/compiler/apt/tests/AnnotationProcessorTests.java @@ -175,4 +175,29 @@ public class AnnotationProcessorTests extends TestCase { assertEquals("incorrect number of messages", 0, diagnosticListener.count); assertNull(System.getProperty(PROC)); } + + public void testBug530665() throws IOException { + JavaCompiler compiler = BatchTestUtils.getEclipseCompiler(); + File srcFolder = TestUtils.concatPath(BatchTestUtils.getSrcFolderName(), "targets", "AnnotationProcessorTests", "bug317216"); + BatchTestUtils.copyResources("targets/AnnotationProcessorTests/bug530665", srcFolder); + File binFolder = TestUtils.concatPath(BatchTestUtils.getBinFolderName(), "targets", "AnnotationProcessorTests", "bug530665"); + binFolder.mkdirs(); + File preexistsFile = new File(binFolder, "preexists.txt"); + assertTrue(preexistsFile.createNewFile()); + File nonexistsFile = new File(binFolder, "nonexists.txt"); + assertTrue(!nonexistsFile.exists()); + + List<String> options = new ArrayList<String>(); + final String PROC = "org.eclipse.jdt.compiler.apt.tests.processors.AnnotationProcessorTests.Bug530665Proc"; + options.add("-processorpath"); + options.add(" "); + options.add("-processor"); + options.add(PROC); + DiagnosticReport<JavaFileObject> diagnosticListener = new DiagnosticReport<JavaFileObject>(); + BatchTestUtils.compileTree(compiler, options, srcFolder, false, diagnosticListener); + assertEquals("succeeded", System.getProperty(PROC)); + + assertTrue(!preexistsFile.exists()); // deleted + assertTrue(nonexistsFile.exists()); // rewritten + } } diff --git a/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java b/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java index c7a784e07b..31a29eadf7 100644 --- a/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java +++ b/org.eclipse.jdt.compiler.apt/src/org/eclipse/jdt/internal/compiler/apt/dispatch/BatchFilerImpl.java @@ -161,8 +161,6 @@ public class BatchFilerImpl implements Filer { if (_createdFiles.contains(uri)) { throw new FilerException("Resource already created : " + location + '/' + pkg + '/' + relativeName); //$NON-NLS-1$ } - - _createdFiles.add(uri); return fo; } |