1.1 --- a/src/share/classes/com/sun/tools/javac/code/Types.java Mon Apr 08 15:57:10 2013 +0100 1.2 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java Mon Apr 08 15:59:29 2013 +0100 1.3 @@ -610,7 +610,7 @@ 1.4 1.5 /** 1.6 * Scope filter used to skip methods that should be ignored (such as methods 1.7 - * overridden by j.l.Object) during function interface conversion/marker interface checks 1.8 + * overridden by j.l.Object) during function interface conversion interface check 1.9 */ 1.10 class DescriptorFilter implements Filter<Symbol> { 1.11 1.12 @@ -629,64 +629,6 @@ 1.13 } 1.14 }; 1.15 1.16 - // <editor-fold defaultstate="collapsed" desc="isMarker"> 1.17 - 1.18 - /** 1.19 - * A cache that keeps track of marker interfaces 1.20 - */ 1.21 - class MarkerCache { 1.22 - 1.23 - private WeakHashMap<TypeSymbol, Entry> _map = new WeakHashMap<TypeSymbol, Entry>(); 1.24 - 1.25 - class Entry { 1.26 - final boolean isMarkerIntf; 1.27 - final int prevMark; 1.28 - 1.29 - public Entry(boolean isMarkerIntf, 1.30 - int prevMark) { 1.31 - this.isMarkerIntf = isMarkerIntf; 1.32 - this.prevMark = prevMark; 1.33 - } 1.34 - 1.35 - boolean matches(int mark) { 1.36 - return this.prevMark == mark; 1.37 - } 1.38 - } 1.39 - 1.40 - boolean get(TypeSymbol origin) throws FunctionDescriptorLookupError { 1.41 - Entry e = _map.get(origin); 1.42 - CompoundScope members = membersClosure(origin.type, false); 1.43 - if (e == null || 1.44 - !e.matches(members.getMark())) { 1.45 - boolean isMarkerIntf = isMarkerInterfaceInternal(origin, members); 1.46 - _map.put(origin, new Entry(isMarkerIntf, members.getMark())); 1.47 - return isMarkerIntf; 1.48 - } 1.49 - else { 1.50 - return e.isMarkerIntf; 1.51 - } 1.52 - } 1.53 - 1.54 - /** 1.55 - * Is given symbol a marker interface 1.56 - */ 1.57 - public boolean isMarkerInterfaceInternal(TypeSymbol origin, CompoundScope membersCache) throws FunctionDescriptorLookupError { 1.58 - return !origin.isInterface() ? 1.59 - false : 1.60 - !membersCache.getElements(new DescriptorFilter(origin)).iterator().hasNext(); 1.61 - } 1.62 - } 1.63 - 1.64 - private MarkerCache markerCache = new MarkerCache(); 1.65 - 1.66 - /** 1.67 - * Is given type a marker interface? 1.68 - */ 1.69 - public boolean isMarkerInterface(Type site) { 1.70 - return markerCache.get(site.tsym); 1.71 - } 1.72 - // </editor-fold> 1.73 - 1.74 // <editor-fold defaultstate="collapsed" desc="isSubtype"> 1.75 /** 1.76 * Is t an unchecked subtype of s? 1.77 @@ -2625,15 +2567,15 @@ 1.78 public List<MethodSymbol> interfaceCandidates(Type site, MethodSymbol ms) { 1.79 Filter<Symbol> filter = new MethodFilter(ms, site); 1.80 List<MethodSymbol> candidates = List.nil(); 1.81 - for (Symbol s : membersClosure(site, false).getElements(filter)) { 1.82 - if (!site.tsym.isInterface() && !s.owner.isInterface()) { 1.83 - return List.of((MethodSymbol)s); 1.84 - } else if (!candidates.contains(s)) { 1.85 - candidates = candidates.prepend((MethodSymbol)s); 1.86 + for (Symbol s : membersClosure(site, false).getElements(filter)) { 1.87 + if (!site.tsym.isInterface() && !s.owner.isInterface()) { 1.88 + return List.of((MethodSymbol)s); 1.89 + } else if (!candidates.contains(s)) { 1.90 + candidates = candidates.prepend((MethodSymbol)s); 1.91 + } 1.92 } 1.93 + return prune(candidates); 1.94 } 1.95 - return prune(candidates); 1.96 - } 1.97 1.98 public List<MethodSymbol> prune(List<MethodSymbol> methods) { 1.99 ListBuffer<MethodSymbol> methodsMin = ListBuffer.lb();