688 } |
688 } |
689 } |
689 } |
690 |
690 |
691 public void visitSelect(JCFieldAccess tree) { |
691 public void visitSelect(JCFieldAccess tree) { |
692 Type t = tree.selected.type; |
692 Type t = tree.selected.type; |
693 if (t.isCompound() || (t.tag == TYPEVAR && t.getUpperBound().isCompound())) { |
693 while (t.tag == TYPEVAR) |
|
694 t = t.getUpperBound(); |
|
695 if (t.isCompound()) { |
694 if ((tree.sym.flags() & IPROXY) != 0) { |
696 if ((tree.sym.flags() & IPROXY) != 0) { |
695 tree.sym = ((MethodSymbol)tree.sym). |
697 tree.sym = ((MethodSymbol)tree.sym). |
696 implemented((TypeSymbol)tree.sym.owner, types); |
698 implemented((TypeSymbol)tree.sym.owner, types); |
697 } |
699 } |
698 tree.selected = cast( |
700 tree.selected = cast( |
699 translate(tree.selected, erasure(t)), |
701 translate(tree.selected, erasure(tree.selected.type)), |
700 erasure(tree.sym.owner.type)); |
702 erasure(tree.sym.owner.type)); |
701 } else |
703 } else |
702 tree.selected = translate(tree.selected, erasure(t)); |
704 tree.selected = translate(tree.selected, erasure(t)); |
703 |
705 |
704 // Map constants expressions to themselves. |
706 // Map constants expressions to themselves. |