Error analyzing NaBL1 program that is not in a file
Using Spoofax Core (version 2.1), you can:
- Use the
ISpoofaxInputUnitService
to create anISpoofaxInputUnit
from a string (i.e. withoutFileObject
as source).- Use the
ISpoofaxSyntaxService
to parse theISpoofaxInputUnit
and get anISpoofaxParseUnit
.- Use the
ISpoofaxParseUnit
to analyze and get aISpoofaxAnalyzeResult
.If there are messages (e.g. errors), then Spoofax uses the
TracingService
, which in turn uses theSourceAttachment
, to determine the filename that contains the error. Since there is no file to begin with (remember: we created the parse from a string, not a file), this throws a big nasty exception:java.lang.IllegalArgumentException at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:793) at org.apache.commons.vfs2.impl.DefaultFileSystemManager.resolveFile(DefaultFileSystemManager.java:726) at org.metaborg.core.resource.ResourceService.resolve(ResourceService.java:75) at org.metaborg.spoofax.core.syntax.SourceAttachment.getResource(SourceAttachment.java:60) at org.metaborg.spoofax.core.tracing.TracingService.tokenLocation(TracingService.java:52) at org.metaborg.spoofax.core.tracing.TracingService.location(TracingService.java:42) at org.metaborg.spoofax.core.tracing.TracingService.location(TracingService.java:1) at org.metaborg.spoofax.core.analysis.AnalysisCommon.messages(AnalysisCommon.java:52) at org.metaborg.spoofax.core.analysis.taskengine.TaskEngineAnalyzer.result(TaskEngineAnalyzer.java:213) at org.metaborg.spoofax.core.analysis.taskengine.TaskEngineAnalyzer.analyzeAll(TaskEngineAnalyzer.java:164) at org.metaborg.spoofax.core.analysis.taskengine.TaskEngineAnalyzer.analyzeAll(TaskEngineAnalyzer.java:112) at org.metaborg.spoofax.core.analysis.taskengine.TaskEngineAnalyzer.analyze(TaskEngineAnalyzer.java:88) at org.metaborg.spoofax.core.analysis.taskengine.TaskEngineAnalyzer.analyze(TaskEngineAnalyzer.java:1) at org.metaborg.core.analysis.AnalysisService.analyze(AnalysisService.java:27) at org.metaborg.spoofax.core.analysis.SpoofaxAnalysisService.analyze(SpoofaxAnalysisService.java:17)
I worked around this issue by storing the program in a file on the VFS, but it might be worth fixing this issue (or mentioning in the docs that analysis with NaBL1 does not work on programs that do not originate from a file). With NaBL2 being the future (and NaBL1 being deprecated), it’s not a pressing issue anyway.
Submitted by Martijn on 11 May 2017 at 18:45
Log in to post comments