Hi there,

well, another thing I need to tweak in the compiler is to change the way the 
errors and warnings are reported.

I actually have a trick which so far seems to work and which I bumped into 
years ago. It looks like this (again removed the self-evident parts); as you 
can see, it is far from elegant:

===
@GroovyASTTransformation(phase = CompilePhase.INITIALIZATION)
class ErrorReporterOverrideAST extends ASTT {
    void visitNodes(ASTNode[] nodes, SourceUnit su) {
        ErrorCollectorProxy 
ecproxy=ErrorCollectorProxy.newInstance(su.configuration)
        ecproxy.su=su
        su.errorCollector=ecproxy
   }
}
@InheritConstructors class ErrorCollectorProxy extends ErrorCollector {
    SourceUnit su
    void _processSyntaxException(SyntaxException exc,SourceUnit ovrdsu=nil) { 
... own processing and report ... }
    void _processMessage(Message message) {
        if (message in SyntaxErrorMessage) 
_processSyntaxException(message.cause)
        else { ... own processing and report ... }
    }
    void addError(Message message) {  _processMessage(message) }
    void addError(Message message, boolean fatal) { _processMessage(message) }
    void addErrorAndContinue(Message message) { _processMessage(message) }
    void addErrorAndContinue(SyntaxException error, SourceUnit source) { 
_processSyntaxException(error,source) }
    void addException(java.lang.Exception cause, SourceUnit source)  { ... own 
processing and report ... }
    void addFatalError(Message message) { _processMessage(message) }
    void addWarning(WarningMessage message) { ... own processing and report ... 
}
}
===

The question is, can't it be done in some more elegant and robust way? E.g., 
not through and ASTT but simply using a compilation customizer (I have checked, 
found none, alas). Or at least, with just one override point general enough to 
be sure I won't miss errors in future Groovy releases, or something like that?

Sufficient if it works Groovy 3+ only -- I won't change the ASTTs in my old 
projects anymore, but would like to clean up the newly refactored ones far as 
reasonably possible.

Thanks!
OC

Reply via email to