[
https://issues.apache.org/jira/browse/GROOVY-8250?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16773175#comment-16773175
]
Eric Milles commented on GROOVY-8250:
-------------------------------------
I believe this got included in a recent release. Could the appropriate release
notes be updated and this ticket be closed?
> VariableScopeVisitor does not set declaring class on property nodes
> -------------------------------------------------------------------
>
> Key: GROOVY-8250
> URL: https://issues.apache.org/jira/browse/GROOVY-8250
> Project: Groovy
> Issue Type: Bug
> Reporter: Eric Milles
> Priority: Major
>
> VariableScopeVisitor.findClassMember creates PropertyNode instances for
> methods (ex: foo.bar will have a property node created if getBar() is
> implemented). This is done inside the MethodNode for loop circa line 165.
> The nodes created by this visitor lack a declaring class setting as well as
> having an improper type. Without these values, type inferencing is more
> difficult for anyone that processes the AST. These are reasonable simple to
> remedy:
> {code}
> private Variable findClassMember(ClassNode cn, String name) {
> if (cn == null) return null;
> if (cn.isScript()) {
> return new DynamicVariable(name, false);
> }
> for (FieldNode fn : cn.getFields()) {
> if (fn.getName().equals(name)) return fn;
> }
> for (MethodNode mn : cn.getMethods()) {
> String pName = getPropertyName(mn);
> // GRECLIPSE edit
> //if (pName != null && pName.equals(name))
> // return new PropertyNode(pName, mn.getModifiers(),
> ClassHelper.OBJECT_TYPE, cn, null, null, null);
> if (pName != null && pName.equals(name)) {
> PropertyNode property = new PropertyNode(pName,
> mn.getModifiers(), getPropertyType(mn), cn, null, null, null);
> property.getField().setDeclaringClass(cn);
> property.setDeclaringClass(cn);
> return property;
> }
> // GRECLIPSE end
> }
> ...
> // GRECLIPSE add
> private ClassNode getPropertyType(MethodNode m) {
> if (m.getReturnType() != ClassHelper.VOID_TYPE) {
> return m.getReturnType();
> }
> return m.getParameters()[0].getType();
> }
> // GRECLIPSE end
> {code}
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)