Merge pull request #564 from eclipse/cd_core_issue359

[tracing] NPE thrown when a file is generated without traces
This commit is contained in:
Christian Dietrich 2017-12-01 12:16:07 +01:00 committed by GitHub
commit 3b8e4e7b99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 51 additions and 21 deletions

View file

@ -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) {

View file

@ -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
}
}
}

View file

@ -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;

View file

@ -31,6 +31,9 @@ class GeneratorNodeProcessor {
AbstractTraceRegion traceRegion
override getTraceRegion() throws TraceNotFoundException {
if (traceRegion === null) {
throw new TraceNotFoundException()
}
return traceRegion
}

View file

@ -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);

View file

@ -51,6 +51,9 @@ public class GeneratorNodeProcessor {
@Override
public AbstractTraceRegion getTraceRegion() throws TraceNotFoundException {
if ((this.traceRegion == null)) {
throw new TraceNotFoundException();
}
return this.traceRegion;
}