Skip to content

Commit ceea40f

Browse files
committed
Minor tweak: ignore abstract methods when running doFindClassMember
1 parent af7f9a3 commit ceea40f

File tree

2 files changed

+29
-0
lines changed

2 files changed

+29
-0
lines changed

src/main/java/org/codehaus/groovy/classgen/VariableScopeVisitor.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,9 @@ private Variable doFindClassMember(final ClassNode cn, final String name) {
189189
}
190190

191191
for (MethodNode mn : cn.getMethods()) {
192+
if (mn.isAbstract()) {
193+
continue;
194+
}
192195
if (name.equals(getPropertyName(mn))) {
193196
PropertyNode property = new PropertyNode(name, mn.getModifiers(), ClassHelper.OBJECT_TYPE, cn, null, null, null);
194197
final FieldNode field = property.getField();

src/test/groovy/PropertyTest.groovy

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,6 +235,31 @@ class PropertyTest extends GroovyTestCase {
235235
'''
236236
}
237237

238+
void testPropertyWithOverrideGetterAndSetter() {
239+
assertScript '''
240+
abstract class Base {
241+
abstract String getName()
242+
abstract void setName(String name)
243+
}
244+
class A extends Base {
245+
private String name = 'AA'
246+
247+
@Override
248+
String getName() {
249+
this.name
250+
}
251+
@Override
252+
void setName(String name) {
253+
this.name = name
254+
}
255+
}
256+
Base a = new A()
257+
assert 'AA' == a.name
258+
a.name = 'BB'
259+
assert 'BB' == a.name
260+
'''
261+
}
262+
238263
void testOverrideMultiSetterThroughMetaClass() {
239264
assertScript '''
240265
class A {
@@ -250,6 +275,7 @@ class PropertyTest extends GroovyTestCase {
250275
assert a.field == '100100'
251276
'''
252277
}
278+
253279
}
254280

255281
class Base {

0 commit comments

Comments
 (0)