use of org.eclipse.xtext.generator.trace.ITraceRegionProvider in project xtext-core by eclipse.
the class AbstractTraceForURIProvider method getTraceToSource.
public Trace getTraceToSource(final SomeFile generatedFile) {
final PersistedTrace persistedTrace = findPersistedTrace(generatedFile);
if (persistedTrace == null || !persistedTrace.exists()) {
return null;
}
Trace result = newAbstractTrace(generatedFile);
result.setTraceToSource(true);
result.setTraceRegionProvider(new ITraceRegionProvider() {
@Override
public AbstractTraceRegion getTraceRegion() {
AbstractTraceRegion traceRegion = cachedTraces.getTraceRegion(persistedTrace);
if (traceRegion == null) {
throw new TraceNotFoundException();
}
return traceRegion;
}
});
return result;
}
use of org.eclipse.xtext.generator.trace.ITraceRegionProvider in project xtext-xtend by eclipse.
the class CompilerTraceTest method tracesTo.
public void tracesTo(final CharSequence xtend, final CharSequence java) {
try {
final String xtendWithSpaces = ((" " + xtend) + " ");
final Matcher xtendMatcher = this.p.matcher(xtendWithSpaces);
Assert.assertTrue("xtendMatcher.matches", xtendMatcher.matches());
final String xtendGroup1 = xtendMatcher.group(1);
final String xtendGroup2 = xtendMatcher.group(2);
final String xtendGroup3 = xtendMatcher.group(3);
final String actualXtendCode = ((xtendGroup1 + xtendGroup2) + xtendGroup3);
final XtendFile file = this.file(actualXtendCode, true);
XtendTypeDeclaration _head = IterableExtensions.<XtendTypeDeclaration>head(file.getXtendTypes());
final JvmGenericType inferredType = this._iXtendJvmAssociations.getInferredType(((XtendClass) _head));
CharSequence compiledCode = this.generator.generateType(inferredType, this.generatorConfigProvider.get(inferredType));
compiledCode = this.postProcessor.postProcess(null, compiledCode);
final Matcher javaMatcher = this.p.matcher(java.toString());
Assert.assertTrue("javaMatcher.matches", javaMatcher.matches());
final String javaGroup1 = javaMatcher.group(1);
final String javaGroup2 = javaMatcher.group(2);
final String javaGroup3 = javaMatcher.group(3);
final String actualJavaExpectation = ((javaGroup1 + javaGroup2) + javaGroup3);
Assert.assertEquals(actualJavaExpectation, compiledCode.toString());
AbstractTraceRegion _traceRegion = ((ITraceRegionProvider) compiledCode).getTraceRegion();
URI _createURI = URI.createURI(file.eResource().getURI().path());
SourceRelativeURI _sourceRelativeURI = new SourceRelativeURI(_createURI);
URI _createURI_1 = URI.createURI(file.eResource().getURI().path());
SourceRelativeURI _sourceRelativeURI_1 = new SourceRelativeURI(_createURI_1);
AbstractTraceRegion _merge = this.merge(_traceRegion.invertFor(_sourceRelativeURI, _sourceRelativeURI_1));
final SimpleTrace trace = new SimpleTrace(_merge);
int _length = xtendGroup1.length();
int _length_1 = xtendGroup2.length();
TextRegion _textRegion = new TextRegion(_length, _length_1);
final Iterable<? extends ILocationInResource> locations = trace.getAllAssociatedLocations(_textRegion);
int _length_2 = javaGroup1.length();
int _length_3 = javaGroup2.length();
final TextRegion expectedRegion = new TextRegion(_length_2, _length_3);
Assert.assertFalse(IterableExtensions.isEmpty(locations));
for (final ILocationInResource location : locations) {
ITextRegionWithLineInformation _textRegion_1 = location.getTextRegion();
boolean _equals = Objects.equal(_textRegion_1, expectedRegion);
if (_equals) {
return;
}
}
Assert.fail(((("locations did not match expectation: " + locations) + " / ") + expectedRegion));
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
use of org.eclipse.xtext.generator.trace.ITraceRegionProvider in project xtext-core by eclipse.
the class AbstractTraceForURIProvider method getTraceToTarget.
public Trace getTraceToTarget(final SomeFile sourceFile, final AbsoluteURI absoluteSourceResource, final IProjectConfig projectConfig) {
final List<PersistedTrace> traceFiles = findInverseTraceFiles(sourceFile);
if (traceFiles.isEmpty() || projectConfig == null) {
return null;
}
Trace result = newAbstractTrace(sourceFile);
result.setTraceToSource(false);
final IResourceServiceProvider serviceProvider = getServiceProvider(absoluteSourceResource);
final ITraceURIConverter traceURIConverter = serviceProvider.get(ITraceURIConverter.class);
result.setTraceRegionProvider(new ITraceRegionProvider() {
@Override
public AbstractTraceRegion getTraceRegion() {
List<AbstractTraceRegion> result = newArrayList();
SourceRelativeURI sourceUriForTrace = traceURIConverter.getURIForTrace(projectConfig, absoluteSourceResource);
for (PersistedTrace traceFile : traceFiles) {
AbsoluteURI generatedFileURI = getGeneratedLocation(traceFile);
if (generatedFileURI == null) {
throw new TraceNotFoundException();
}
AbstractTraceRegion traceRegion = cachedTraces.getTraceRegion(traceFile);
SourceRelativeURI generatedUriForTrace = getGeneratedUriForTrace(projectConfig, absoluteSourceResource, generatedFileURI, traceURIConverter);
if (sourceUriForTrace != null && generatedUriForTrace != null) {
result.addAll(traceRegion.invertFor(sourceUriForTrace, generatedUriForTrace));
}
}
if (result.isEmpty())
throw new TraceNotFoundException();
return AbstractTraceRegion.mergedFrom(result);
}
});
return result;
}
use of org.eclipse.xtext.generator.trace.ITraceRegionProvider in project xtext-core by eclipse.
the class TracingSugarTest method testCodeGenerationWithDebug_02.
@Test
public void testCodeGenerationWithDebug_02() {
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 __generateTypeWithDebugging02 = TracingSugarTest.this._generateTypeWithDebugging02(t);
_builder.append(__generateTypeWithDebugging02);
_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=false] 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=false] 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=true] 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=true] 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);
}
}
use of org.eclipse.xtext.generator.trace.ITraceRegionProvider in project xtext-core by eclipse.
the class URIBasedFileSystemAccess method generateTrace.
protected void generateTrace(final String generatedFile, final String outputConfigName, final CharSequence contents) {
try {
if ((this.isGenerateTraces() && (contents instanceof ITraceRegionProvider))) {
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) {
} else {
throw Exceptions.sneakyThrow(_t);
}
}
}
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
Aggregations