-
Notifications
You must be signed in to change notification settings - Fork 8
Description
Hello folks,
I am encountering a use case where Diagnostic json objects returned by Diagnostic#collectLeaves method have a "-1" uri fragment.
This is due to this validation method :
org.eclipse.emf.ecore.util.EObjectValidator.validate_DataValueConforms(EObject, EAttribute, DiagnosticChain, Map<Object, Object>)
which creates a Diagnostic hierarchy like :
- root Diagnostic
- child Diagnostic on EObject : "The feature '...' of '...' contains a bad value"
- grand-child Diagnostic on the value (without model element, but with an EDataType instead) : "The value '...' must be one of {'...'}"
The #collectLeaves method, as currently implemented, only returns the grand-child Diagnostic, without the associated model EObject.
Nevertheless the relevant information is actually not the grand-child Diagnostic, but rather the concatenation of child Diagnostic and grand-child Diagnostic.
In Theia, since the Problems view can not display an arborescence of Diagnostics like in RCP, I was wondering which was the best course of action for this issue.
Should we :
- A. Modify the Diagnostics hierarchy directly in the model server to merge such diagnostics and having only relevant leave Diagnostics ? (in org.eclipse.emfcloud.modelserver.emf.common.DefaultModelValidator.validate(String))
- B. Leave the Diagnostics hierarchy as is and modify the Diagnostic#collectLeaves method to merge leave Diangostics information with the information from their relevant parent Diagnostic ?
- C. Seek for another way to display Diagnostics, without the Problems view, or with heavy modifications to the Problems view ?
For the moment, I'll patch my application with the A approach, as it is the more easily overrideable one. But I think the B approach would probably be the one making more sense in a general context...
[Edit : the grand-child Diagnostic actually has an EObject, which is not a model element but the EDatatype which makes things worse]