src/share/classes/com/sun/tools/javac/code/Types.java

changeset 1678
c635a966ce84
parent 1655
c6728c9addff
child 1695
6dacab087652
     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();

mercurial