Providing quick fixes when IMarker are not created using Xtext's API [message #1829410] |
Thu, 02 July 2020 22:13 |
Emmanuel Chebbi Messages: 123 Registered: February 2018 |
Senior Member |
|
|
Hi,
I have a DSL which is validaded through a custom AbstractDeclarativeValidator. The editor shows error markers and I now wish to provide quick fixes.
Currently the markers are not created through the warning and error methods but "manually" through IFile::createMarker (the main reason is basically that the AST is transformed multiple times and we do not have the original EObjects/EStructuralFeature at the end). The issue is that I don't manage to make the editor aware of my quick fixes (i.e. no little bulb on which we could click).
My first try to solve the issue:
- Declare a custom marker type through the org.eclipse.core.resources.markers extension point
- Declare a custom quick fix provider through the org.eclipse.ui.ide.markerResolution extension point
Result: the Problems view shows that quick fixes are available and allows me to select one however the editor only shows the warning/error icons.
Second try:
- Extend DefaultQuickfixProvider to provide the quick fixes
- Create the Marker with some attributes I've found after digging into Xtext's source code:
val marker = file.createMarker(MyMarkers.MY_WARNING) // also tried MarkerTypes.NORMAL_VALIDATION here
marker.setAttribute(IMarker.MESSAGE, "My warning message")
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING)
marker.setAttribute(IMarker.CHAR_START, 0)
marker.setAttribute(IMarker.CHAR_END, 0)
marker.setAttribute(Issue.CODE_KEY, MyMarkers.MY_WARNING)
marker.setAttribute(Issue.COLUMN_KEY, 0)
marker.setAttribute(Issue.URI_KEY, URI.createPlatformResourceURI(file.fullPath.toString, true).toString)
marker.setAttribute(IMarker.LINE_NUMBER, 0)
marker.setAttribute(IMarker.LOCATION, "line: " + 0 + " " + file.fullPath.toString())
marker.setAttribute("FIXABLE_KEY", true);
Result: the quick fix is shown in the editor and can be triggered but only when the editor has just been created. If I type anything the validator is called again and the bare warning/error icons are shown again: quick fixes are not available anymore. If I close the editor then open it again then the quick fix is shown as expected, until I type something.
I can only guess that some internal state is not set up properly and that my quick fixes are somehow discarded on refresh.
Third try:
- An old bug talks about the IResourceUIValidatorExtension interface which looks very promising. This interface is still available in Xtext's source code but I can't make it work. I tried:
- To create a bindIResourceUIValidatorExtension() method in MyDslUiModule
- To make my validator extend the interface
- To add breakpoints everywhere in MarkerUpdaterImpl
- I searched for a relevant extension point but found nothing
Result: nothing happens, the methods/classes don't seem to be used anymore.
I'm running out of new ideas so would anyone have any advise to help me solve the issue?
Many thanks,
Emmanuel
|
|
|
|
Powered by
FUDForum. Page generated in 0.02284 seconds