Summary: | recompile doesn't happen | ||||||
---|---|---|---|---|---|---|---|
Product: | [Eclipse Project] JDT | Reporter: | Lee Breisacher <lbreisacher> | ||||
Component: | Core | Assignee: | Kent Johnson <kent_johnson> | ||||
Status: | VERIFIED FIXED | QA Contact: | |||||
Severity: | normal | ||||||
Priority: | P3 | CC: | vladgri | ||||
Version: | 2.0 | ||||||
Target Milestone: | 2.1 M1 | ||||||
Hardware: | PC | ||||||
OS: | Windows 2000 | ||||||
Whiteboard: | |||||||
Attachments: |
|
Description
Lee Breisacher
2002-08-21 09:58:29 EDT
Created attachment 1868 [details]
a small eclipse project
We are not detecting a structural difference in a class when a default abstract method is replaced by a real implementation of the method. There is no signature change so we could handle this case differently if we knew the subtype hierarchy... but we don't currently. Ignore the previous post... the actual problem is in the MethodVerifier. Using this simple example: public interface I{ void a(); } class X implements I {} class Y extends X implements I {} class Z extends X {} X is correctly tagged with an error since it does not implement I.a()... but so was the Y, which is wrong. Y inherits from X and should inherit an implementation of I.a() from X even though Y says that it also implements I. By simply adding a space to the type Y and recompiling, its error disappeared because the binary type X (picked up from the class file) included a default implementation of the method a()... but the source copy of X did not. Updated the MethodVerifier to only tag the uppermost non-abstract class with the error. Verified. |