use of org.eclipse.xtext.generator.trace.AbstractTraceRegion in project applause by applause.
the class ApplauseEclipseResourceFileSystemAccess2 method updateTraceInformation.
/**
* @throws CoreException if something unexpected happens during resource access
* @throws IOException if serialization of the trace data fails
* @since 2.3
*/
protected void updateTraceInformation(IFile traceFile, CharSequence contents, boolean derived) throws CoreException, IOException {
if (contents instanceof ITraceRegionProvider) {
AbstractTraceRegion traceRegion = ((ITraceRegionProvider) contents).getTraceRegion();
if (sourceTraces == null) {
sourceTraces = HashMultimap.create();
}
IPath tracePath = traceFile.getFullPath();
Iterator<AbstractTraceRegion> iterator = traceRegion.treeIterator();
while (iterator.hasNext()) {
AbstractTraceRegion region = iterator.next();
for (ILocationData location : region.getAssociatedLocations()) {
URI path = location.getPath();
if (path != null) {
sourceTraces.put(path, tracePath);
}
}
}
class AccessibleOutputStream extends ByteArrayOutputStream {
byte[] internalBuffer() {
return buf;
}
int internalLength() {
return count;
}
}
AccessibleOutputStream data = new AccessibleOutputStream();
traceSerializer.writeTraceRegionTo(traceRegion, data);
// avoid copying the byte array
InputStream input = new ByteArrayInputStream(data.internalBuffer(), 0, data.internalLength());
if (traceFile.exists()) {
traceFile.setContents(input, false, true, monitor);
} else {
traceFile.create(input, true, monitor);
}
setDerived(traceFile, derived);
return;
}
if (traceFile.exists()) {
traceFile.delete(IResource.KEEP_HISTORY, monitor);
}
}
use of org.eclipse.xtext.generator.trace.AbstractTraceRegion in project xtext-xtend by eclipse.
the class LineNumberMappingTests method getTraceRegion.
public AbstractTraceRegion getTraceRegion(final CharSequence xtendCode) {
try {
final XtendClass clazz = super.clazz(xtendCode.toString());
final AbstractTraceRegionFSA fsa = new AbstractTraceRegionFSA();
this.generator.doGenerate(clazz.eResource(), fsa);
final AbstractTraceRegion result = ((ITraceRegionProvider) fsa.charSequence).getTraceRegion();
this.print(result, fsa.charSequence.toString());
return result;
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
use of org.eclipse.xtext.generator.trace.AbstractTraceRegion in project xtext-xtend by eclipse.
the class CompilerTraceTest method merge.
public AbstractTraceRegion merge(final List<AbstractTraceRegion> regions) {
boolean _isEmpty = regions.isEmpty();
boolean _not = (!_isEmpty);
Assert.assertTrue(_not);
int _size = regions.size();
boolean _greaterThan = (_size > 1);
if (_greaterThan) {
ITextRegionWithLineInformation rootLocation = ITextRegionWithLineInformation.EMPTY_REGION;
ITextRegionWithLineInformation associated = ITextRegionWithLineInformation.EMPTY_REGION;
for (final AbstractTraceRegion child : regions) {
{
int _myOffset = child.getMyOffset();
int _myLength = child.getMyLength();
int _myLineNumber = child.getMyLineNumber();
int _myEndLineNumber = child.getMyEndLineNumber();
TextRegionWithLineInformation _textRegionWithLineInformation = new TextRegionWithLineInformation(_myOffset, _myLength, _myLineNumber, _myEndLineNumber);
rootLocation = rootLocation.merge(_textRegionWithLineInformation);
ILocationData childAssociation = child.getMergedAssociatedLocation();
if ((childAssociation != null)) {
associated = associated.merge(childAssociation);
}
}
}
final RootTraceRegionForTesting root = new RootTraceRegionForTesting(rootLocation, associated);
for (final AbstractTraceRegion child_1 : regions) {
child_1.setParent(root);
}
return root;
} else {
return IterableExtensions.<AbstractTraceRegion>head(regions);
}
}
use of org.eclipse.xtext.generator.trace.AbstractTraceRegion in project xtext-xtend by eclipse.
the class AbstractXtendInstallDebugInfoMojo method installTrace.
protected void installTrace(File traceFile, Collection<File> classFiles) throws FileNotFoundException, IOException {
ITraceToBytecodeInstaller traceToBytecodeInstaller = createTraceToBytecodeInstaller();
InputStream in = new FileInputStream(traceFile);
try {
AbstractTraceRegion traceRegion = traceRegionSerializer.readTraceRegionFrom(in);
traceToBytecodeInstaller.setTrace(traceFileNameProvider.getJavaFromTrace(traceFile.getName()), traceRegion);
if (getLog().isDebugEnabled())
getLog().debug("Installing trace " + traceFile + " into:");
for (File classFile : classFiles) {
if (getLog().isDebugEnabled())
getLog().debug(" " + classFile);
byte[] bytecodeWithTraces = traceToBytecodeInstaller.installTrace(Files.toByteArray(classFile));
if (bytecodeWithTraces != null)
Files.write(bytecodeWithTraces, classFile);
}
} finally {
in.close();
}
}
use of org.eclipse.xtext.generator.trace.AbstractTraceRegion in project xtext-core by eclipse.
the class TracingSugarTest method testCodeGenerationWithDebug.
@Test
public void testCodeGenerationWithDebug() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("type String {}");
_builder.newLine();
_builder.append("type Foo {");
_builder.newLine();
_builder.append("\t");
_builder.append("String name;");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final Model root = this.parseHelper.parse(LineDelimiters.toUnix(_builder.toString()));
final InMemoryFileSystemAccess fsa = new InMemoryFileSystemAccess();
StringConcatenationClient _client = new StringConcatenationClient() {
@Override
protected void appendTo(StringConcatenationClient.TargetStringConcatenation _builder) {
{
EList<Type> _types = root.getTypes();
for (final Type t : _types) {
IGeneratorNode __generateTypeWithDebugging = TracingSugarTest.this._generateTypeWithDebugging(t);
_builder.append(__generateTypeWithDebugging);
_builder.newLineIfNotEmpty();
}
}
}
};
this._myExtensions.generateTracedFile(fsa, "foo/bar.txt", root, _client);
final CharSequence generated = fsa.getTextFiles().get((IFileSystemAccess.DEFAULT_OUTPUT + "foo/bar.txt"));
StringConcatenation _builder_1 = new StringConcatenation();
{
EList<Type> _types = root.getTypes();
for (final Type t : _types) {
CharSequence _generateTypeWithDebugging = this.generateTypeWithDebugging(t);
_builder_1.append(_generateTypeWithDebugging);
_builder_1.newLineIfNotEmpty();
}
}
Assert.assertEquals(LineDelimiters.toUnix(_builder_1.toString()), generated.toString());
final AbstractTraceRegion trace = ((ITraceRegionProvider) generated).getTraceRegion();
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("CompletableTraceRegion [myOffset=0, myLength=55, useForDebugging=false] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [0:41][lineNumber=0, endLineNumber=3]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append("} nestedRegions={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("CompletableTraceRegion [myOffset=0, myLength=17, useForDebugging=true] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [0:14][lineNumber=0, endLineNumber=0]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("} nestedRegions={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("CompletableTraceRegion [myOffset=6, myLength=6, useForDebugging=false] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [5:6][lineNumber=0, endLineNumber=0]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("CompletableTraceRegion [myOffset=17, myLength=38, useForDebugging=true] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [15:26][lineNumber=1, endLineNumber=3]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("} nestedRegions={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("CompletableTraceRegion [myOffset=23, myLength=3, useForDebugging=false] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [20:3][lineNumber=1, endLineNumber=1]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("CompletableTraceRegion [myOffset=30, myLength=24, useForDebugging=false] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [27:12][lineNumber=2, endLineNumber=2]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("} nestedRegions={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("CompletableTraceRegion [myOffset=39, myLength=4, useForDebugging=false] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [34:4][lineNumber=2, endLineNumber=2]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("CompletableTraceRegion [myOffset=46, myLength=6, useForDebugging=false] associations={");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("LocationData [TextRegionWithLineInformation [27:6][lineNumber=2, endLineNumber=2]][path=__synthetic0.lazylinkingtestlanguage]");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append(" ");
_builder_2.append("}");
_builder_2.newLine();
_builder_2.append("}");
Assert.assertEquals(LineDelimiters.toUnix(_builder_2.toString()), trace.toString());
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
Aggregations