diff -r 94a202228ec2 -r c635a966ce84 src/share/classes/com/sun/tools/javac/code/Types.java --- a/src/share/classes/com/sun/tools/javac/code/Types.java Mon Apr 08 15:57:10 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/code/Types.java Mon Apr 08 15:59:29 2013 +0100 @@ -610,7 +610,7 @@ /** * Scope filter used to skip methods that should be ignored (such as methods - * overridden by j.l.Object) during function interface conversion/marker interface checks + * overridden by j.l.Object) during function interface conversion interface check */ class DescriptorFilter implements Filter { @@ -629,64 +629,6 @@ } }; - // - - /** - * A cache that keeps track of marker interfaces - */ - class MarkerCache { - - private WeakHashMap _map = new WeakHashMap(); - - class Entry { - final boolean isMarkerIntf; - final int prevMark; - - public Entry(boolean isMarkerIntf, - int prevMark) { - this.isMarkerIntf = isMarkerIntf; - this.prevMark = prevMark; - } - - boolean matches(int mark) { - return this.prevMark == mark; - } - } - - boolean get(TypeSymbol origin) throws FunctionDescriptorLookupError { - Entry e = _map.get(origin); - CompoundScope members = membersClosure(origin.type, false); - if (e == null || - !e.matches(members.getMark())) { - boolean isMarkerIntf = isMarkerInterfaceInternal(origin, members); - _map.put(origin, new Entry(isMarkerIntf, members.getMark())); - return isMarkerIntf; - } - else { - return e.isMarkerIntf; - } - } - - /** - * Is given symbol a marker interface - */ - public boolean isMarkerInterfaceInternal(TypeSymbol origin, CompoundScope membersCache) throws FunctionDescriptorLookupError { - return !origin.isInterface() ? - false : - !membersCache.getElements(new DescriptorFilter(origin)).iterator().hasNext(); - } - } - - private MarkerCache markerCache = new MarkerCache(); - - /** - * Is given type a marker interface? - */ - public boolean isMarkerInterface(Type site) { - return markerCache.get(site.tsym); - } - // - // /** * Is t an unchecked subtype of s? @@ -2625,15 +2567,15 @@ public List interfaceCandidates(Type site, MethodSymbol ms) { Filter filter = new MethodFilter(ms, site); List candidates = List.nil(); - for (Symbol s : membersClosure(site, false).getElements(filter)) { - if (!site.tsym.isInterface() && !s.owner.isInterface()) { - return List.of((MethodSymbol)s); - } else if (!candidates.contains(s)) { - candidates = candidates.prepend((MethodSymbol)s); + for (Symbol s : membersClosure(site, false).getElements(filter)) { + if (!site.tsym.isInterface() && !s.owner.isInterface()) { + return List.of((MethodSymbol)s); + } else if (!candidates.contains(s)) { + candidates = candidates.prepend((MethodSymbol)s); + } } + return prune(candidates); } - return prune(candidates); - } public List prune(List methods) { ListBuffer methodsMin = ListBuffer.lb();