diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/generator/JavaIoFileSystemAccess.java b/org.eclipse.xtext/src/org/eclipse/xtext/generator/JavaIoFileSystemAccess.java index 871a23d24..aec9e4944 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/generator/JavaIoFileSystemAccess.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/generator/JavaIoFileSystemAccess.java @@ -23,6 +23,7 @@ import org.eclipse.emf.common.util.URI; import org.eclipse.xtext.generator.trace.AbstractTraceRegion; import org.eclipse.xtext.generator.trace.ITraceRegionProvider; import org.eclipse.xtext.generator.trace.TraceFileNameProvider; +import org.eclipse.xtext.generator.trace.TraceNotFoundException; import org.eclipse.xtext.generator.trace.TraceRegionSerializer; import org.eclipse.xtext.parser.IEncodingProvider; import org.eclipse.xtext.resource.IResourceServiceProvider; @@ -121,16 +122,21 @@ public class JavaIoFileSystemAccess extends AbstractFileSystemAccess2 { protected void generateTrace(String generatedFile, String outputConfigName, CharSequence contents) { try { if (contents instanceof ITraceRegionProvider) { - String traceFileName = traceFileNameProvider.getTraceFromJava(generatedFile); - File traceFile = getFile(traceFileName, outputConfigName); - OutputStream out = new BufferedOutputStream(new FileOutputStream(traceFile)); + OutputStream out = null; try { AbstractTraceRegion traceRegion = ((ITraceRegionProvider) contents).getTraceRegion(); + String traceFileName = traceFileNameProvider.getTraceFromJava(generatedFile); + File traceFile = getFile(traceFileName, outputConfigName); + out = new BufferedOutputStream(new FileOutputStream(traceFile)); traceSerializer.writeTraceRegionTo(traceRegion, out); if(callBack != null) callBack.fileAdded(traceFile); - } finally { - out.close(); + } catch (TraceNotFoundException e) { + // ok + }finally { + if (out != null) { + out.close(); + } } } } catch (FileNotFoundException e) { diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/generator/URIBasedFileSystemAccess.xtend b/org.eclipse.xtext/src/org/eclipse/xtext/generator/URIBasedFileSystemAccess.xtend index 1ad075fd4..e8b0d6466 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/generator/URIBasedFileSystemAccess.xtend +++ b/org.eclipse.xtext/src/org/eclipse/xtext/generator/URIBasedFileSystemAccess.xtend @@ -10,6 +10,9 @@ package org.eclipse.xtext.generator import com.google.common.io.ByteStreams import com.google.common.io.CharStreams import java.io.ByteArrayInputStream +import java.io.ByteArrayOutputStream +import java.io.File +import java.io.FileNotFoundException import java.io.InputStream import java.io.InputStreamReader import org.eclipse.emf.common.util.URI @@ -21,9 +24,7 @@ import org.eclipse.xtext.generator.trace.TraceFileNameProvider import org.eclipse.xtext.generator.trace.TraceRegionSerializer import org.eclipse.xtext.parser.IEncodingProvider import org.eclipse.xtext.util.RuntimeIOException -import java.io.ByteArrayOutputStream -import java.io.File -import java.io.FileNotFoundException +import org.eclipse.xtext.generator.trace.TraceNotFoundException /** * A file system access implementation that is based on EMF URIs and URIConverter @@ -91,11 +92,15 @@ class URIBasedFileSystemAccess extends AbstractFileSystemAccess2 { protected def void generateTrace(String generatedFile, String outputConfigName, CharSequence contents) { if (isGenerateTraces && contents instanceof ITraceRegionProvider) { - var String traceFileName = traceFileNameProvider.getTraceFromJava(generatedFile) - val out = new ByteArrayOutputStream() - var AbstractTraceRegion traceRegion = (contents as ITraceRegionProvider).getTraceRegion() - traceRegionSerializer.writeTraceRegionTo(traceRegion, out) - generateFile(traceFileName, outputConfigName, new ByteArrayInputStream(out.toByteArray)) + try { + var AbstractTraceRegion traceRegion = (contents as ITraceRegionProvider).getTraceRegion() + var String traceFileName = traceFileNameProvider.getTraceFromJava(generatedFile) + val out = new ByteArrayOutputStream() + traceRegionSerializer.writeTraceRegionTo(traceRegion, out) + generateFile(traceFileName, outputConfigName, new ByteArrayInputStream(out.toByteArray)) + } catch (TraceNotFoundException e) { + // ok + } } } diff --git a/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/internal/AbstractTraceForURIProvider.java b/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/internal/AbstractTraceForURIProvider.java index 54123d27a..68fda3603 100644 --- a/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/internal/AbstractTraceForURIProvider.java +++ b/org.eclipse.xtext/src/org/eclipse/xtext/generator/trace/internal/AbstractTraceForURIProvider.java @@ -205,7 +205,11 @@ public abstract class AbstractTraceForURIProvider