forked from phoedos/pmd
Throw on incompatible visitor type
This commit is contained in:
@ -51,7 +51,7 @@
|
||||
value="((${visitor-name}<? super P, ? extends R>) visitor)" />
|
||||
|
||||
<replacefilter token="return visitor.visitChildren(this);"
|
||||
value="return visitor.visitNode(this, data);" />
|
||||
value="return super.acceptVisitor(visitor, data);" />
|
||||
|
||||
</replace>
|
||||
|
||||
|
@ -296,11 +296,18 @@ public interface Node {
|
||||
* @param data Parameter to the visit
|
||||
*
|
||||
* @return What the visitor returned
|
||||
*
|
||||
* @throws IllegalArgumentException If the visitor is incompatible with this node
|
||||
*
|
||||
* @implSpec A typical implementation will check the type of the visitor to
|
||||
* be that of the language specific visitor, then call the most specific
|
||||
* visit method of this Node. This is typically implemented by having
|
||||
* a different override per concrete node class (no shortcuts).
|
||||
*/
|
||||
// TODO remove the default implementation, convert all visitors to be generic
|
||||
default <P, R> R acceptVisitor(AstVisitor<? super P, ? extends R> visitor, P data) {
|
||||
// override me
|
||||
return visitor.visitNode(this, data);
|
||||
throw new IllegalArgumentException("Unsupported visitor" + visitor + " for node " + this);
|
||||
}
|
||||
|
||||
|
||||
|
@ -38,7 +38,7 @@ public abstract class AbstractJavaNode extends AbstractJjtreeNode<AbstractJavaNo
|
||||
if (visitor instanceof JavaVisitor) {
|
||||
return this.acceptVisitor((JavaVisitor<? super P, ? extends R>) visitor, data);
|
||||
}
|
||||
return visitor.visitNode(this, data);
|
||||
return super.acceptVisitor(visitor, data);
|
||||
}
|
||||
|
||||
protected abstract <P, R> R acceptVisitor(JavaVisitor<? super P, ? extends R> visitor, P data);
|
||||
|
@ -18,7 +18,7 @@ abstract class AbstractJspNode extends AbstractJjtreeNode<AbstractJspNode, JspNo
|
||||
if (visitor instanceof JspVisitor) {
|
||||
return this.acceptVisitor((JspVisitor<? super P, ? extends R>) visitor, data);
|
||||
}
|
||||
return visitor.visitNode(this, data);
|
||||
return super.acceptVisitor(visitor, data);
|
||||
}
|
||||
|
||||
protected abstract <P, R> R acceptVisitor(JspVisitor<? super P, ? extends R> visitor, P data);
|
||||
|
@ -38,7 +38,7 @@ abstract class AbstractScalaNode<T extends Tree> extends AbstractNode<AbstractSc
|
||||
if (visitor instanceof ScalaParserVisitor) {
|
||||
return this.acceptVisitor((ScalaParserVisitor<P, R>) visitor, data);
|
||||
}
|
||||
return visitor.visitNode(this, data);
|
||||
return super.acceptVisitor(visitor, data);
|
||||
}
|
||||
|
||||
protected abstract <P, R> R acceptVisitor(ScalaParserVisitor<? super P, ? extends R> visitor, P data);
|
||||
|
Reference in New Issue
Block a user