RFR: JDK-8032188 (remove dead code in TransTypes)
Brian Goetz
brian.goetz at oracle.com
Sat Jun 28 00:02:07 UTC 2014
This is a jdk9 patch to remove some dead code in TransTypes. About 10%
of this file had to do with support for an older bridging strategy
("override bridges"), which we no longer use and have no plans to use in
the future. This patch removes that code.
-------------- next part --------------
# HG changeset patch
# Parent 220bfc92607e48057048e5fe24d3250be43ceac9
diff --git a/src/share/classes/com/sun/tools/javac/comp/TransTypes.java b/src/share/classes/com/sun/tools/javac/comp/TransTypes.java
old mode 100644
new mode 100755
--- a/src/share/classes/com/sun/tools/javac/comp/TransTypes.java
+++ b/src/share/classes/com/sun/tools/javac/comp/TransTypes.java
@@ -866,90 +866,6 @@
return types.erasure(t);
}
- private boolean boundsRestricted(ClassSymbol c) {
- Type st = types.supertype(c.type);
- if (st.isParameterized()) {
- List<Type> actuals = st.allparams();
- List<Type> formals = st.tsym.type.allparams();
- while (!actuals.isEmpty() && !formals.isEmpty()) {
- Type actual = actuals.head;
- Type formal = formals.head;
-
- if (!types.isSameType(types.erasure(actual),
- types.erasure(formal)))
- return true;
-
- actuals = actuals.tail;
- formals = formals.tail;
- }
- }
- return false;
- }
-
- private List<JCTree> addOverrideBridgesIfNeeded(DiagnosticPosition pos,
- final ClassSymbol c) {
- ListBuffer<JCTree> buf = new ListBuffer<>();
- if (c.isInterface() || !boundsRestricted(c))
- return buf.toList();
- Type t = types.supertype(c.type);
- Scope s = t.tsym.members();
- if (s.elems != null) {
- for (Symbol sym : s.getElements(new NeedsOverridBridgeFilter(c))) {
-
- MethodSymbol m = (MethodSymbol)sym;
- MethodSymbol member = (MethodSymbol)m.asMemberOf(c.type, types);
- MethodSymbol impl = m.implementation(c, types, false);
-
- if ((impl == null || impl.owner != c) &&
- !types.isSameType(member.erasure(types), m.erasure(types))) {
- addOverrideBridges(pos, m, member, c, buf);
- }
- }
- }
- return buf.toList();
- }
- // where
- class NeedsOverridBridgeFilter implements Filter<Symbol> {
-
- ClassSymbol c;
-
- NeedsOverridBridgeFilter(ClassSymbol c) {
- this.c = c;
- }
- public boolean accepts(Symbol s) {
- return s.kind == MTH &&
- !s.isConstructor() &&
- s.isInheritedIn(c, types) &&
- (s.flags() & FINAL) == 0 &&
- (s.flags() & (SYNTHETIC | OVERRIDE_BRIDGE)) != SYNTHETIC;
- }
- }
-
- private void addOverrideBridges(DiagnosticPosition pos,
- MethodSymbol impl,
- MethodSymbol member,
- ClassSymbol c,
- ListBuffer<JCTree> bridges) {
- Type implErasure = impl.erasure(types);
- long flags = (impl.flags() & AccessFlags) | SYNTHETIC | BRIDGE | OVERRIDE_BRIDGE;
- member = new MethodSymbol(flags, member.name, member.type, c);
- JCMethodDecl md = make.MethodDef(member, null);
- JCExpression receiver = make.Super(types.supertype(c.type).tsym.erasure(types), c);
- Type calltype = erasure(impl.type.getReturnType());
- JCExpression call =
- make.Apply(null,
- make.Select(receiver, impl).setType(calltype),
- translateArgs(make.Idents(md.params),
- implErasure.getParameterTypes(), null))
- .setType(calltype);
- JCStatement stat = (member.getReturnType().hasTag(VOID))
- ? make.Exec(call)
- : make.Return(coerce(call, member.erasure(types).getReturnType()));
- md.body = make.Block(0, List.of(stat));
- c.members().enter(member);
- bridges.append(md);
- }
-
/**************************************************************************
* main method
*************************************************************************/
@@ -1006,8 +922,8 @@
make.at(tree.pos);
if (addBridges) {
ListBuffer<JCTree> bridges = new ListBuffer<>();
- if (false) //see CR: 6996415
- bridges.appendList(addOverrideBridgesIfNeeded(tree, c));
+ // At some point, there was override bridging here to handle
+ // infinite bridge loops (JDK-6996415); no longer needed
if (allowInterfaceBridges || (tree.sym.flags() & INTERFACE) == 0) {
addBridges(tree.pos(), c, bridges);
}
More information about the compiler-dev
mailing list