mirror of
https://github.com/sigmasternchen/xtext-core
synced 2025-03-16 00:38:56 +00:00
Merge pull request #564 from eclipse/cd_core_issue359
[tracing] NPE thrown when a file is generated without traces
This commit is contained in:
commit
3b8e4e7b99
6 changed files with 51 additions and 21 deletions
|
@ -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) {
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -205,7 +205,11 @@ public abstract class AbstractTraceForURIProvider<SomeFile, Trace extends Abstra
|
|||
|
||||
@Override
|
||||
public AbstractTraceRegion getTraceRegion() {
|
||||
return cachedTraces.getTraceRegion(persistedTrace);
|
||||
AbstractTraceRegion traceRegion = cachedTraces.getTraceRegion(persistedTrace);
|
||||
if (traceRegion == null) {
|
||||
throw new TraceNotFoundException();
|
||||
}
|
||||
return traceRegion;
|
||||
}
|
||||
});
|
||||
return result;
|
||||
|
|
|
@ -31,6 +31,9 @@ class GeneratorNodeProcessor {
|
|||
AbstractTraceRegion traceRegion
|
||||
|
||||
override getTraceRegion() throws TraceNotFoundException {
|
||||
if (traceRegion === null) {
|
||||
throw new TraceNotFoundException()
|
||||
}
|
||||
return traceRegion
|
||||
}
|
||||
|
||||
|
|
|
@ -24,6 +24,7 @@ import org.eclipse.xtext.generator.IFilePostProcessor;
|
|||
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.util.RuntimeIOException;
|
||||
|
@ -130,13 +131,21 @@ public class URIBasedFileSystemAccess extends AbstractFileSystemAccess2 {
|
|||
protected void generateTrace(final String generatedFile, final String outputConfigName, final CharSequence contents) {
|
||||
try {
|
||||
if ((this.isGenerateTraces() && (contents instanceof ITraceRegionProvider))) {
|
||||
String traceFileName = this.traceFileNameProvider.getTraceFromJava(generatedFile);
|
||||
final ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
AbstractTraceRegion traceRegion = ((ITraceRegionProvider) contents).getTraceRegion();
|
||||
this.traceRegionSerializer.writeTraceRegionTo(traceRegion, out);
|
||||
byte[] _byteArray = out.toByteArray();
|
||||
ByteArrayInputStream _byteArrayInputStream = new ByteArrayInputStream(_byteArray);
|
||||
this.generateFile(traceFileName, outputConfigName, _byteArrayInputStream);
|
||||
try {
|
||||
AbstractTraceRegion traceRegion = ((ITraceRegionProvider) contents).getTraceRegion();
|
||||
String traceFileName = this.traceFileNameProvider.getTraceFromJava(generatedFile);
|
||||
final ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||
this.traceRegionSerializer.writeTraceRegionTo(traceRegion, out);
|
||||
byte[] _byteArray = out.toByteArray();
|
||||
ByteArrayInputStream _byteArrayInputStream = new ByteArrayInputStream(_byteArray);
|
||||
this.generateFile(traceFileName, outputConfigName, _byteArrayInputStream);
|
||||
} catch (final Throwable _t) {
|
||||
if (_t instanceof TraceNotFoundException) {
|
||||
final TraceNotFoundException e = (TraceNotFoundException)_t;
|
||||
} else {
|
||||
throw Exceptions.sneakyThrow(_t);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Throwable _e) {
|
||||
throw Exceptions.sneakyThrow(_e);
|
||||
|
|
|
@ -51,6 +51,9 @@ public class GeneratorNodeProcessor {
|
|||
|
||||
@Override
|
||||
public AbstractTraceRegion getTraceRegion() throws TraceNotFoundException {
|
||||
if ((this.traceRegion == null)) {
|
||||
throw new TraceNotFoundException();
|
||||
}
|
||||
return this.traceRegion;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue