+++ /dev/null
-public class Bean implements LongIdentifiable {
-
- public Long getId() {
- return null;
- }
-
- public void setId(Long t) {
- }
-
-}
+++ /dev/null
-public interface Identifiable<T> {
- T getId();
-
- void setId(T t);
-}
+++ /dev/null
-public aspect IdentifiableAspect {
- declare parents: Bean implements LongIdentifiable;
-
- private Long LongIdentifiable.m_id;
-
- public Long LongIdentifiable.getId() {
- return m_id;
- }
-
- public void LongIdentifiable.setId(Long id) {
- m_id= id;
- }
-
- public static void main(String []argv) {
- new Bean();
- }
-}
+++ /dev/null
-public interface LongIdentifiable extends Identifiable<Long> {
-}
--- /dev/null
+public class Bean implements LongIdentifiable {
+
+ public Long getId() {
+ return null;
+ }
+
+ public void setId(Long t) {
+ }
+
+}
--- /dev/null
+public interface Identifiable<T> {
+ T getId();
+
+ void setId(T t);
+}
--- /dev/null
+public aspect IdentifiableAspect {
+ declare parents: Bean implements LongIdentifiable;
+
+ private Long LongIdentifiable.m_id;
+
+ public Long LongIdentifiable.getId() {
+ return m_id;
+ }
+
+ public void LongIdentifiable.setId(Long id) {
+ m_id= id;
+ }
+
+ public static void main(String []argv) {
+ new Bean();
+ }
+}
--- /dev/null
+public interface LongIdentifiable extends Identifiable<Long> {
+}
--- /dev/null
+public class Bean implements LongIdentifiable {
+
+}
--- /dev/null
+public interface Identifiable<T> {
+ T getId();
+
+ void setId(T t);
+}
--- /dev/null
+public aspect IdentifiableAspect {
+ declare parents: Bean implements LongIdentifiable;
+
+ private Long LongIdentifiable.m_id;
+
+ public Long LongIdentifiable.getId() {
+ return m_id;
+ }
+
+ public void LongIdentifiable.setId(Long id) {
+ m_id= id;
+ }
+
+ public static void main(String []argv) {
+ Bean b = new Bean();
+ b.setId(37L);
+ long l = b.getId();
+ if (l!=37L) throw new RuntimeException("id should be 37");
+ }
+}
--- /dev/null
+public interface LongIdentifiable extends Identifiable<Long> {
+}
runTest("Compilation error on generic member introduction");
}
- public void testGenericsOverrides() {
- runTest("generics and ITD overrides");
- }
+ public void testGenericsOverrides_1() { runTest("generics and ITD overrides - 1"); }
+ public void testGenericsOverrides_2() { runTest("generics and ITD overrides - 2"); }
public void testPR88606() {
runTest("Parameterized types on introduced fields not correctly recognized");
</compile>
</ajc-test>
- <ajc-test dir="java5/generics/bugs/lists" title="generics and ITD overrides">
+ <ajc-test dir="java5/generics/bugs/lists/case1" title="generics and ITD overrides - 1">
+ <compile files="Identifiable.java,Bean.java,LongIdentifiable.java,IdentifiableAspect.java" options="-1.5">
+ </compile>
+ <run class="IdentifiableAspect"/>
+ </ajc-test>
+
+ <ajc-test dir="java5/generics/bugs/lists/case2" title="generics and ITD overrides - 2">
<compile files="Identifiable.java,Bean.java,LongIdentifiable.java,IdentifiableAspect.java" options="-1.5">
</compile>
<run class="IdentifiableAspect"/>
private boolean compareToExistingMembers(ConcreteTypeMunger munger, Iterator existingMembers) {
ResolvedMember sig = munger.getSignature();
while (existingMembers.hasNext()) {
+
ResolvedMember existingMember = (ResolvedMember)existingMembers.next();
+ // don't worry about clashing with bridge methods
+ if (existingMember.isBridgeMethod()) continue;
//System.err.println("Comparing munger: "+sig+" with member "+existingMember);
if (conflictingSignature(existingMember, munger.getSignature())) {
//System.err.println("conflict: existingMember=" + existingMember + " typeMunger=" + munger);
}
boolean incompatibleReturnTypes = false;
-
// In 1.5 mode, allow for covariance on return type
if (world.isInJava5Mode() && parent.getKind()==Member.METHOD) {