⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lookupmethod.jrag

📁 JDK1.4编译器前端
💻 JRAG
📖 第 1 页 / 共 2 页
字号:
    }    return map;  }  public Iterator TypeDecl.localMethodsIterator() {    return new Iterator() {      private Iterator outer = localMethodsSignatureMap().values().iterator();      private Iterator inner = null;      public boolean hasNext() {        if((inner == null || !inner.hasNext()) && outer.hasNext())          inner = ((SimpleSet)outer.next()).iterator();        return inner == null ? false : inner.hasNext();      }      public Object next() {        return inner.next();      }      public void remove() { throw new UnsupportedOperationException(); }    };    //return localMethodsSignatureMap().values().iterator();  }  syn SimpleSet TypeDecl.localMethodsSignature(String signature) {    SimpleSet set = (SimpleSet)localMethodsSignatureMap().get(signature);    if(set != null) return set;    return SimpleSet.emptySet;  }  // signature -> method declaration  syn lazy HashMap TypeDecl.localMethodsSignatureMap() {    HashMap map = new HashMap(getNumBodyDecl());    for(int i = 0; i < getNumBodyDecl(); i++) {      if(getBodyDecl(i) instanceof MethodDecl) {        MethodDecl decl = (MethodDecl)getBodyDecl(i);        map.put(decl.signature(), decl);      }    }    return map;  }  // iterator over all methods in implemented interfaces  public Iterator ClassDecl.interfacesMethodsIterator() {    return new Iterator() {      private Iterator outer = interfacesMethodsSignatureMap().values().iterator();      private Iterator inner = null;      public boolean hasNext() {        if((inner == null || !inner.hasNext()) && outer.hasNext())          inner = ((SimpleSet)outer.next()).iterator();        return inner == null ? false : inner.hasNext();      }      public Object next() {        return inner.next();      }      public void remove() { throw new UnsupportedOperationException(); }    };  }  syn SimpleSet ClassDecl.interfacesMethodsSignature(String signature) {    SimpleSet set = (SimpleSet)interfacesMethodsSignatureMap().get(signature);    if(set != null) return set;    return SimpleSet.emptySet;  }  // signature -> set of method declarations  syn lazy HashMap ClassDecl.interfacesMethodsSignatureMap() {    HashMap map = new HashMap();    for(Iterator iter = interfacesIterator(); iter.hasNext(); ) {      TypeDecl typeDecl = (InterfaceDecl)iter.next();      for(Iterator i2 = typeDecl.methodsIterator(); i2.hasNext(); ) {        MethodDecl m = (MethodDecl)i2.next();        putSimpleSetElement(map, m.signature(), m);      }    }    return map;  }  // iterate over all member methods in this type  public Iterator TypeDecl.methodsIterator() {    return new Iterator() {      private Iterator outer = methodsSignatureMap().values().iterator();      private Iterator inner = null;      public boolean hasNext() {        if((inner == null || !inner.hasNext()) && outer.hasNext())          inner = ((SimpleSet)outer.next()).iterator();        return inner != null ? inner.hasNext() : false;      }      public Object next() {        return inner.next();      }      public void remove() { throw new UnsupportedOperationException(); }    };  }  syn SimpleSet TypeDecl.methodsSignature(String signature) {    SimpleSet set = (SimpleSet)methodsSignatureMap().get(signature);    if(set != null) return set;    return SimpleSet.emptySet;  }  // signature -> SimpleSet  syn lazy HashMap TypeDecl.methodsSignatureMap() = localMethodsSignatureMap();  eq ClassDecl.methodsSignatureMap() {    HashMap map = new HashMap(localMethodsSignatureMap());    if(hasSuperclass()) {      for(Iterator iter = superclass().methodsIterator(); iter.hasNext(); ) {        MethodDecl m = (MethodDecl)iter.next();        if(!m.isPrivate() && m.accessibleFrom(this) && !localMethodsSignatureMap().containsKey(m.signature()))          putSimpleSetElement(map, m.signature(), m);      }    }    for(Iterator outerIter = interfacesIterator(); outerIter.hasNext(); ) {      TypeDecl typeDecl = (TypeDecl)outerIter.next();      for(Iterator iter = typeDecl.methodsIterator(); iter.hasNext(); ) {        MethodDecl m = (MethodDecl)iter.next();        if(!m.isPrivate() && m.accessibleFrom(this) && !localMethodsSignatureMap().containsKey(m.signature()))          if(allMethodsAbstract((SimpleSet)map.get(m.signature())))            putSimpleSetElement(map, m.signature(), m);      }    }    return map;  }  eq InterfaceDecl.methodsSignatureMap() {    HashMap map = new HashMap(localMethodsSignatureMap());    for(Iterator outerIter = superinterfacesIterator(); outerIter.hasNext(); ) {      TypeDecl typeDecl = (TypeDecl)outerIter.next();      for(Iterator iter = typeDecl.methodsIterator(); iter.hasNext(); ) {        MethodDecl m = (MethodDecl)iter.next();        if(!m.isPrivate() && m.accessibleFrom(this) && !localMethodsSignatureMap().containsKey(m.signature()))          putSimpleSetElement(map, m.signature(), m);      }    }    for(Iterator iter = typeObject().methodsIterator(); iter.hasNext(); ) {      MethodDecl m = (MethodDecl)iter.next();      if(m.isPublic() && !map.containsKey(m.signature()))        putSimpleSetElement(map, m.signature(), m);    }    return map;  }  protected static void ASTNode.putSimpleSetElement(HashMap map, Object key, Object value) {    SimpleSet set = (SimpleSet)map.get(key);    if(set == null) set = SimpleSet.emptySet;    map.put(key, set.add(value));  }  protected boolean TypeDecl.allMethodsAbstract(SimpleSet set) {    if(set == null) return true;    for(Iterator iter = set.iterator(); iter.hasNext(); ) {      MethodDecl m = (MethodDecl)iter.next();      if(!m.isAbstract())        return false;    }    return true;  }}aspect AncestorMethods {  // methods with the same signature declared in ancestors  // this is used when checking correct overriding, hiding, and implementation of abstract methods  syn lazy SimpleSet TypeDecl.ancestorMethods(String signature) = SimpleSet.emptySet;  eq ClassDecl.ancestorMethods(String signature) {    SimpleSet set = SimpleSet.emptySet;    if(hasSuperclass()) {      for(Iterator iter = superclass().localMethodsSignature(signature).iterator(); iter.hasNext(); ) {        MethodDecl m = (MethodDecl)iter.next();        if(!m.isPrivate())          set = set.add(m);      }    }    if(set.size() != 1 || ((MethodDecl)set.iterator().next()).isAbstract()) {       for(Iterator iter = interfacesMethodsSignature(signature).iterator(); iter.hasNext(); ) {        MethodDecl m = (MethodDecl)iter.next();        set = set.add(m);      }    }    if(!hasSuperclass()) return set;    if(set.size() == 1) {      MethodDecl m = (MethodDecl)set.iterator().next();      if(!m.isAbstract()) {        boolean done = true;        for(Iterator iter = superclass().ancestorMethods(signature).iterator(); iter.hasNext(); ) {          MethodDecl n = (MethodDecl)iter.next();          if(n.isPrivate() || !n.accessibleFrom(m.hostType()))            done = false;        }        if(done) return set;      }    }    for(Iterator iter = superclass().ancestorMethods(signature).iterator(); iter.hasNext(); ) {      MethodDecl m = (MethodDecl)iter.next();      set = set.add(m);    }    return set;  }  eq InterfaceDecl.ancestorMethods(String signature) {    SimpleSet set = SimpleSet.emptySet;    for(Iterator outerIter = superinterfacesIterator(); outerIter.hasNext(); ) {      TypeDecl typeDecl = (TypeDecl)outerIter.next();      for(Iterator iter = typeDecl.methodsSignature(signature).iterator(); iter.hasNext(); ) {        MethodDecl m = (MethodDecl)iter.next();        set = set.add(m);      }    }    if(!superinterfacesIterator().hasNext()) {      for(Iterator iter = typeObject().methodsSignature(signature).iterator(); iter.hasNext(); ) {        MethodDecl m = (MethodDecl)iter.next();        if(m.isPublic())          set = set.add(m);      }    }    return set;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -