How to extend OpenGeneratedFileHandler to position the cursor in the right region [message #1777077] |
Fri, 24 November 2017 05:37  |
Eclipse User |
|
|
|
Hello all,
from one DSL file, I generate several .java files. The problem is that by default OpenGeneratedFileHandler opens a dialog to choose the right generated file.
I would like to use the ._trace to automatically choose the right file and position th cursor in the region of the generated file (and vice versa)
Any pointers that could me achieve that? I guess I must extend OpenGeneratedFileHandler but have no idea to start
|
|
|
|
|
|
|
|
Re: How to extend OpenGeneratedFileHandler to position the cursor in the right region [message #1777103 is a reply to message #1777102] |
Fri, 24 November 2017 08:01   |
Eclipse User |
|
|
|
I think I got it this is probably the reason:
!STACK 0
java.lang.IllegalArgumentException: Produced region is inconsistent with parent, this: TraceRegion [myOffset=318, myLength=142] associations={
LocationData [TextRegionWithLineInformation [107:54][lineNumber=8, endLineNumber=10]][path=Forex-1.0.0.wkfs]
}, parent: TraceRegion [myOffset=0, myLength=457] associations={
LocationData [TextRegionWithLineInformation [107:54][lineNumber=8, endLineNumber=10]][path=Forex-1.0.0.wkfs]
} nestedRegions={
TraceRegion [myOffset=177, myLength=140] associations={
LocationData [TextRegionWithLineInformation [107:54][lineNumber=8, endLineNumber=10]][path=Forex-1.0.0.wkfs]
}
TraceRegion [myOffset=318, myLength=142] associations={
LocationData [TextRegionWithLineInformation [107:54][lineNumber=8, endLineNumber=10]][path=Forex-1.0.0.wkfs]
}
}
at org.eclipse.xtext.generator.trace.AbstractStatefulTraceRegion.<init>(AbstractStatefulTraceRegion.java:36)
at org.eclipse.xtext.generator.trace.TraceRegion.<init>(TraceRegion.java:58)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer$IdentityStrategy.createRegion(TraceRegionSerializer.java:63)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer$IdentityStrategy.createRegion(TraceRegionSerializer.java:53)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.doReadFrom(TraceRegionSerializer.java:334)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.doReadFrom(TraceRegionSerializer.java:337)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.doReadFrom(TraceRegionSerializer.java:285)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.readTraceRegionFrom(TraceRegionSerializer.java:169)
at org.eclipse.xtext.generator.trace.internal.AbstractTraceForURIProvider$CachedTraces.getTraceRegion(AbstractTraceForURIProvider.java:125)
at org.eclipse.xtext.generator.trace.internal.AbstractTraceForURIProvider$1.getTraceRegion(AbstractTraceForURIProvider.java:208)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace.doGetRootTraceRegion(AbstractTrace.java:126)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace.getRootTraceRegion(AbstractTrace.java:102)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace.hasTraceData(AbstractTrace.java:109)
at org.eclipse.xtext.ui.generator.trace.TraceBasedOpenerContributor.collectSourceFileOpeners(TraceBasedOpenerContributor.java:75)
at org.eclipse.xtext.ui.generator.trace.TraceOrMarkerBasedOpenerContributor.collectSourceFileOpeners(TraceOrMarkerBasedOpenerContributor.java:35)
at org.eclipse.xtext.ui.shared.internal.OpenSourceFilePropertyTester.canOpenSourceFile(OpenSourceFilePropertyTester.java:43)
at org.eclipse.xtext.ui.shared.internal.OpenSourceFilePropertyTester.test(OpenSourceFilePropertyTester.java:59)
at org.eclipse.core.internal.expressions.Property.test(Property.java:58)
at org.eclipse.core.internal.expressions.TestExpression.evaluate(TestExpression.java:100)
at org.eclipse.core.internal.expressions.CompositeExpression.evaluateAnd(CompositeExpression.java:51)
at org.eclipse.core.internal.expressions.WithExpression.evaluate(WithExpression.java:75)
at org.eclipse.e4.ui.internal.workbench.ContributionsAnalyzer.isCoreExpressionVisible(ContributionsAnalyzer.java:285)
at org.eclipse.e4.ui.internal.workbench.ContributionsAnalyzer.isVisible(ContributionsAnalyzer.java:259)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributionRecord.computeVisibility(ContributionRecord.java:167)
at org.eclipse.e4.ui.workbench.renderers.swt.ContributionRecord.updateVisibility(ContributionRecord.java:98)
at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRendererFilter.updateElementVisibility(MenuManagerRendererFilter.java:191)
at org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRendererFilter.updateElementVisibility(MenuManagerRendererFilter.java:202)
at org.eclipse.ui.internal.WorkbenchWindow$8.run(WorkbenchWindow.java:704)
at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:37)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4213)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3820)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1044)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
at org.eclipse.equinox.launcher.Main.main(Main.java:1472)
So now the question is how did I end up generated bad traces.
Thanks so much for your help
|
|
|
|
|
|
|
|
|
Re: How to extend OpenGeneratedFileHandler to position the cursor in the right region [message #1777141 is a reply to message #1777123] |
Fri, 24 November 2017 17:27   |
Eclipse User |
|
|
|
Hello,
I did add both
def Class<? extends LineSeparatorHarmonizer> bindLineSeparatorHarmonizer() {
TraceAwarePostProcessor
}
in the RuntimeModule and
def Class<? extends EclipseSourceFolderProvider> bindEclipseSourceFolderProvider() {
JDTAwareSourceFolderProvider
}
in the UIModule but the problem remains.
I also reduced the DSL file to the bare miinimum and I still have that error
!STACK 0
java.lang.IllegalArgumentException: Produced region is inconsistent with parent, this: TraceRegion [myOffset=318, myLength=142] associations={
LocationData [TextRegionWithLineInformation [72:54][lineNumber=5, endLineNumber=7]][path=Forex-1.0.0.wkfs]
}, parent: TraceRegion [myOffset=0, myLength=457] associations={
LocationData [TextRegionWithLineInformation [72:54][lineNumber=5, endLineNumber=7]][path=Forex-1.0.0.wkfs]
} nestedRegions={
TraceRegion [myOffset=177, myLength=140] associations={
LocationData [TextRegionWithLineInformation [72:54][lineNumber=5, endLineNumber=7]][path=Forex-1.0.0.wkfs]
}
TraceRegion [myOffset=318, myLength=142] associations={
LocationData [TextRegionWithLineInformation [72:54][lineNumber=5, endLineNumber=7]][path=Forex-1.0.0.wkfs]
}
}
at org.eclipse.xtext.generator.trace.AbstractStatefulTraceRegion.<init>(AbstractStatefulTraceRegion.java:36)
at org.eclipse.xtext.generator.trace.TraceRegion.<init>(TraceRegion.java:58)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer$IdentityStrategy.createRegion(TraceRegionSerializer.java:63)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer$IdentityStrategy.createRegion(TraceRegionSerializer.java:53)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.doReadFrom(TraceRegionSerializer.java:334)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.doReadFrom(TraceRegionSerializer.java:337)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.doReadFrom(TraceRegionSerializer.java:285)
at org.eclipse.xtext.generator.trace.TraceRegionSerializer.readTraceRegionFrom(TraceRegionSerializer.java:169)
at org.eclipse.xtext.generator.trace.internal.AbstractTraceForURIProvider$CachedTraces.getTraceRegion(AbstractTraceForURIProvider.java:125)
at org.eclipse.xtext.generator.trace.internal.AbstractTraceForURIProvider$1.getTraceRegion(AbstractTraceForURIProvider.java:208)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace.doGetRootTraceRegion(AbstractTrace.java:126)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace.getRootTraceRegion(AbstractTrace.java:102)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace$3.iterator(AbstractTrace.java:460)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace$1$1.<init>(AbstractTrace.java:368)
at org.eclipse.xtext.generator.trace.internal.AbstractTrace$1.iterator(AbstractTrace.java:366)
at org.eclipse.xtext.common.types.shared.jdt38.OriginalEditorSelector.getXtextEditor(OriginalEditorSelector.java:162)
at org.eclipse.xtext.common.types.shared.jdt38.OriginalEditorSelector.findXbaseEditor(OriginalEditorSelector.java:154)
at org.eclipse.xtext.common.types.shared.jdt38.OriginalEditorSelector.overrideEditors(OriginalEditorSelector.java:71)
at org.eclipse.ui.ide.IDE.overrideEditorAssociations(IDE.java:937)
I enabled the traces just by replacing
fsa.generateFile(
function.
toClassFileName, getFunctionStructure(function, context))
by
fsa.generateTracedFile(
function.
toClassFileName, function, getFunctionStructure(function, context))
|
|
|
|
|
|
|
Re: How to extend OpenGeneratedFileHandler to position the cursor in the right region [message #1777790 is a reply to message #1777162] |
Mon, 04 December 2017 11:18   |
Eclipse User |
|
|
|
Hello,
sorry for the late answer but I was not able to work on this project for a solid week.
So I reduced the code generation to the bare mimimum and it did work.
Now I am re-emabling step by step code generation.
I get a lot of "Type mismatch: cannot convert from IGeneratorNode to StringConcatenationClient"
What I do not get is that I explicit set the return type:
@Traced def dispatch StringConcatenationClient generatePath(ValueExpression root, Column target, Key key, GeneratorContext context) {
if (root instanceof LookupExpression) {
generatePathForLookup(root as LookupExpression, target, key, context)
}
@Traced def StringConcatenationClient generatePathForLookup(LookupExpression root, Column target, Key key, GeneratorContext context) {
val targetType = DatamodelTypeProvider.typeFor(target)
switch (targetType.class) {
Any idea?
|
|
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.31462 seconds