Update.
Turns out that when I previous tried enabling every single module in the
the 'ide' and 'platform' I hadn't done a clean a build. When tried again
and did this, the error highlighting worked. After some laborious trial
and error I found that the module I needed to have enabled was the
'Project UI' module in 'ide'. I didn't have this enabled in my platform
application as I was just loading a file. I'll need the Project UI
eventually, so it's not a drama.
Peter
On 14/01/2024 10:45 pm, Peter Kirkham wrote:
Hello there,
I've not had to reach out to the NetBeans community for a while,
although I've been using NetBeans and the RCP for many years.
Most of the work I've done has involved embedding different
Swing-based JPanels in TopComponents and just leveraging the
platform's windowing system etc. Recently I started to develop an
editor for a custom language, which is the first time I've done this.
I've been following the tutorials, and learning a lot about lexing and
parsing etc. Along the way I've run into a few speed bumps, but I've
been able to resolve everything by reading the copious documentation
on the platform or, on occasion, delving into the source on GitHub to
see how a particular issue was been resolved in the IDE itself.
There is one issue I cannot seem to find an answer for.
*The BACKGROUND*
This relates to error highlighting. As per the error highlighting
tutorial
(https://netbeans.apache.org/tutorial/main/tutorials/nbm-javacc-parser/#_implementing_a_new_feature_error_parsing)
I've create an error highlighting task that extends ParserResultTask
and implemented a factory that extends TaskFactory:
public class EclSyntaxErrorHighlightingTask extends
ParserResultTask {
@Override
public void run(EclParserResult result, SchedulerEvent event) {
LOG.log(Level.INFO, "Running EclSyntaxErrorHighlightingTask: {0}", new
Object[]{event.toString()});
try {
[ omitted ...]
} catch (BadLocationException |
org.netbeans.modules.parsing.spi.ParseException ex) {
Exceptions.printStackTrace(ex);
}
}
@Override
public int getPriority() {
return 100;
}
@Override
public Class getSchedulerClass() {
return Scheduler.EDITOR_SENSITIVE_TASK_SCHEDULER;
}
@Override
public void cancel() {
}
}
and
@MimeRegistration(mimeType = "text/x-eclipse", service = TaskFactory.class)
public class EclSyntaxErrorHighlightingTaskFactory extends TaskFactory {
@Override
public Collection create(Snapshot snapshot) {
EclSyntaxErrorHighlightingTask task = new
EclSyntaxErrorHighlightingTask();
LOG.log(Level.INFO, "Created EclSyntaxErrorHighlightingTask from {0}",
new Object[]{snapshot.toString()});
return Collections.singleton(task);
}
}
Note I've added a couple of logging events so I can see when the
factory is called and creates the highlighting task, and also see when
the task is run. For the eagle-eyed, yes the language is called the
eclipse language, but it is nothing to do with that other IDE. It's a
reservoir simulation language in the oil and gas industry that dates
back to the 1980s...
*The ISSUE*
When I run the custom language model as a module within the IDE
(right-click the module and Run), everything works a charm. Opening a
file generates the following in the log:
INFO
[au.com.newwavegeo.eclipse.editor.EclSyntaxErrorHighlightingTaskFactory]:
Created EclSyntaxErrorHighlightingTask from Snapshot 1894046798:
ECLIPSE_Test_Deck.ecl
INFO
[au.com.newwavegeo.eclipse.editor.EclSyntaxErrorHighlightingTaskFactory]:
Created EclSyntaxErrorHighlightingTask from Snapshot 1894046798:
ECLIPSE_Test_Deck.ecl
INFO
[au.com.newwavegeo.eclipse.editor.EclSyntaxErrorHighlightingTask]:
Running EclSyntaxErrorHighlightingTask: SchedulerEvent
1007833880(source: CurrentDocumentScheduler)
INFO
[au.com.newwavegeo.eclipse.editor.EclSyntaxErrorHighlightingTask]:
Running EclSyntaxErrorHighlightingTask: SchedulerEvent
210858918(source: CurrentDocumentScheduler)
So the task is being created and added to the Scheduler, and is being run.
Now, rather than running as a standalone module, what I really want to
do is to put the module into my platform suite. Adding the module into
the platform suite and then running the application works for
everything except the error highlighting. So far I've done syntax
highlighting, code completion, code reformatting, code folding, match
occurrences. It's all working. But the error highlighting stubbornly
does nothing. Not even having the decency to throw an exception...
When opening my custom language file, the log now shows:
22:09:48 [EclSyntaxErrorHighlightingTaskFactory|INFO]: Created
EclSyntaxErrorHighlightingTask from Snapshot 1437838154:
ECLIPSE_Test_Deck.ecl
So it appears that the highlighting task gets created, but it just
isn't being run. Ever.
*Attempts to RESOLVE*
In my