JDK-8132776 : Redundant generic bridges are generated in some cases
  • Type: Bug
  • Component: tools
  • Sub-Component: javac
  • Affected Version: 7u85,8,9
  • Priority: P4
  • Status: Open
  • Resolution: Unresolved
  • Submitted: 2015-07-31
  • Updated: 2016-08-08
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
Other
tbd_majorUnresolved
Related Reports
Relates :  
Description
A and B are symmetric: A's nested class extends B, B's nested class extends A. Depending on the order of compilation a bridge method is generated in A$Nested or B$Nested, but not both.

$ cat I.java
interface I<T> {
  void f(T t);
}
$ cat A.java
class A implements I<Number> {
  public void f(Number x) {}
  static class Nested extends B {
  }
}
$ cat B.java
class B implements I<Number> {
  public void f(Number x) {}
  static class Nested extends A {
  }
}

# pass A.java to javac first, A$Nested has a bridge method

$ rm -f *.class
$ javac I.java A.java B.java
$ javap -private 'A$Nested'
Compiled from "A.java"
class A$Nested extends B {
  A$Nested();
  public void f(java.lang.Object);
}
$ javap -private 'B$Nested'
Compiled from "B.java"
class B$Nested extends A {
  B$Nested();
}

# pass B.java to javac first, B$Nested has a bridge method

$ rm -f *.class
$ javac I.java B.java A.java
$ javap -private 'A$Nested'
Compiled from "A.java"
class A$Nested extends B {
  A$Nested();
}
$ javap -private 'B$Nested'
Compiled from "B.java"
class B$Nested extends A {
  B$Nested();
  public void f(java.lang.Object);
}