Details
Description
Create a Foo.groovy class containing:
abstract class Foo {}
and Bar.java with:
class Bar extends Foo {}.
After that you compile the first file with groovyc (1.6) and the other one
with javac (1.5 or 1.6):
C:\sdks\groovy-1.6-RC-1>set GROOVY_HOME=c:\sdks\groovy-1.6-RC-1\
C:\sdks\groovy-1.6-RC-1\bin>set path=c:\sdks\groovy-1.6-RC-1\bin\;%path%
C:\temp>groovyc Foo.groovy
C:\temp>c:\jdk1.5.0_08\bin\javac.exe -classpath c:\sdks\groovy-1.6-RC-1\embeddable\groovy-all-1.6-RC-1.jar;. Bar.java
Bar.java:1: Bar is not abstract and does not override abstract method setMetaClass(groovy.lang.MetaClass) in groovy.lang.GroovyObject
class Bar extends Foo {}
^
1 error
Foo.jad contains the required setMetaClass method, but it's synthetic. Javac doesn't consider synthetic methods to be the ones already implementing what it wants. The abstractness of Foo is important, otherwise everything works. The same may apply not only to GroovyObject MOP methods, but also to generated property accessors.
Issue Links
- duplicates
-
GROOVY-3877
problem trying to extend an abstract groovy class with a java class
-
Activity
| Field | Original Value | New Value |
|---|---|---|
| Fix Version/s | 1.6.1 [ 14852 ] | |
| Fix Version/s | 1.6.2 [ 15151 ] |
| Fix Version/s | 1.6.3 [ 15251 ] | |
| Fix Version/s | 1.6.2 [ 15151 ] |
| Fix Version/s | 1.6.3 [ 15251 ] | |
| Fix Version/s | 1.7-beta-1 [ 14014 ] |
| Fix Version/s | 1.7-beta-x [ 15538 ] | |
| Fix Version/s | 1.7-beta-1 [ 14014 ] |
| Link |
This issue duplicates |
| Status | Open [ 1 ] | Resolved [ 5 ] |
| Resolution | Duplicate [ 3 ] |
| Fix Version/s | 1.7-rc-1 [ 14666 ] | |
| Fix Version/s | 1.7.X [ 15538 ] | |
| Assignee | Jochen Theodorou [ blackdrag ] | |
| Fix Version/s | 1.6.6 [ 15781 ] |
| Status | Resolved [ 5 ] | Closed [ 6 ] |
we have to either remove the synthetic flag from these methods or do that only for abstract classes. I would do the later.