📄 lookuptype.jrag
字号:
return set; } syn SimpleSet CompilationUnit.importedTypesOnDemand(String name) { SimpleSet set = SimpleSet.emptySet; for(int i = 0; i < getNumImportDecl(); i++) if(getImportDecl(i).isOnDemand()) for(Iterator iter = getImportDecl(i).importedTypes(name).iterator(); iter.hasNext(); ) set = set.add(iter.next()); return set; } syn lazy SimpleSet ImportDecl.importedTypes(String name) = SimpleSet.emptySet; eq SingleTypeImportDecl.importedTypes(String name) { SimpleSet set = SimpleSet.emptySet; if(getAccess().type().name().equals(name)) set = set.add(getAccess().type()); return set; } eq TypeImportOnDemandDecl.importedTypes(String name) { SimpleSet set = SimpleSet.emptySet; if(getAccess() instanceof PackageAccess) { String packageName = ((PackageAccess)getAccess()).getPackage(); TypeDecl typeDecl = lookupType(packageName, name); if(typeDecl != null && typeDecl.accessibleFromPackage(packageName()) && typeDecl.typeName().equals(packageName + "." + name)) // canonical names match set = set.add(typeDecl); } else { for(Iterator iter = getAccess().type().memberTypes(name).iterator(); iter.hasNext(); ) { TypeDecl decl = (TypeDecl)iter.next(); if(decl.accessibleFromPackage(packageName()) && decl.typeName().equals(getAccess().typeName() + "." + name)) // canonical names match set = set.add(decl); } } return set; } inh TypeDecl TypeImportOnDemandDecl.lookupType(String packageName, String typeName); inh String ImportDecl.packageName(); syn boolean ImportDecl.isOnDemand() = false; eq TypeImportOnDemandDecl.isOnDemand() = true; // imports are not themselves affected by imports eq CompilationUnit.getImportDecl().lookupType(String name) = lookupType(name); eq TypeDecl.getBodyDecl().lookupType(String name) { SimpleSet c = memberTypes(name); if(!c.isEmpty()) return c; if(name().equals(name)) return SimpleSet.emptySet.add(this); c = lookupType(name); // 8.5.2 if(isClassDecl() && isStatic() && !isTopLevelType()) { SimpleSet newSet = SimpleSet.emptySet; for(Iterator iter = c.iterator(); iter.hasNext(); ) { TypeDecl d = (TypeDecl)iter.next(); //if(d.isStatic() || d.isTopLevelType() || this.instanceOf(d.enclosingType())) { newSet = newSet.add(d); //} } c = newSet; } return c; } eq Block.getStmt(int index).lookupType(String name) { SimpleSet c = SimpleSet.emptySet; for(int i = index; i >= 0 && !(getStmt(i) instanceof Case); i--) { if(getStmt(i) instanceof LocalClassDeclStmt) { TypeDecl t = ((LocalClassDeclStmt)getStmt(i)).getClassDecl(); if(t.name().equals(name)) { c = c.add(t); } } } if(!c.isEmpty()) return c; return lookupType(name); } eq ClassInstanceExpr.getAccess().lookupType(String name) { SimpleSet c = lookupType(name); if(c.size() == 1) { if(isQualified()) c = keepInnerClasses(c); } return c; } eq ClassInstanceExpr.getTypeDecl().lookupType(String name) { SimpleSet c = localLookupType(name); if(!c.isEmpty()) return c; c = lookupType(name); if(!c.isEmpty()) return c; return unqualifiedScope().lookupType(name); } public SimpleSet ClassInstanceExpr.keepInnerClasses(SimpleSet c) { SimpleSet newSet = SimpleSet.emptySet; for(Iterator iter = c.iterator(); iter.hasNext(); ) { TypeDecl t = (TypeDecl)iter.next(); if(t.isInnerType() && t.isClassDecl()) { newSet = newSet.add(c); } } return newSet; } eq ParseName.qualifiedLookupType(String name) = SimpleSet.emptySet; eq PackageOrTypeAccess.qualifiedLookupType(String name) = SimpleSet.emptySet; eq AmbiguousAccess.qualifiedLookupType(String name) = SimpleSet.emptySet; eq AbstractDot.getRight().lookupType(String name) = getLeft().qualifiedLookupType(name); syn SimpleSet Expr.qualifiedLookupType(String name) = keepAccessibleTypes(type().memberTypes(name)); eq ClassInstanceExpr.qualifiedLookupType(String name) { SimpleSet c = keepAccessibleTypes(type().memberTypes(name)); if(!c.isEmpty()) return c; if(type().name().equals(name)) return SimpleSet.emptySet.add(type()); return SimpleSet.emptySet; } eq PackageAccess.qualifiedLookupType(String name) { SimpleSet c = SimpleSet.emptySet; TypeDecl typeDecl = lookupType(packageName(), name); if(nextAccess() instanceof ClassInstanceExpr) { if(typeDecl != null && typeDecl.accessibleFrom(hostType())) c = c.add(typeDecl); return c; } else { if(typeDecl != null) { if(hostType() != null && typeDecl.accessibleFrom(hostType())) c = c.add(typeDecl); else if(hostType() == null && typeDecl.accessibleFromPackage(hostPackage())) c = c.add(typeDecl); } return c; } } public SimpleSet Expr.keepAccessibleTypes(SimpleSet oldSet) { SimpleSet newSet = SimpleSet.emptySet; TypeDecl hostType = hostType(); for(Iterator iter = oldSet.iterator(); iter.hasNext(); ) { TypeDecl t = (TypeDecl)iter.next(); if((hostType != null && t.accessibleFrom(hostType)) || (hostType == null && t.accessibleFromPackage(hostPackage()))) newSet = newSet.add(t); } return newSet; } syn lazy SimpleSet ClassInstanceExpr.localLookupType(String name) { if(hasTypeDecl() && getTypeDecl().name().equals(name)) return SimpleSet.emptySet.add(getTypeDecl()); return SimpleSet.emptySet; } syn boolean TypeDecl.hasType(String name) = !memberTypes(name).isEmpty(); syn boolean BodyDecl.declaresType(String name) = false; eq MemberTypeDecl.declaresType(String name) = typeDecl().name().equals(name); syn TypeDecl BodyDecl.type(String name) = null; eq MemberTypeDecl.type(String name) = declaresType(name) ? typeDecl() : null; syn TypeDecl MemberTypeDecl.typeDecl(); eq MemberClassDecl.typeDecl() = getClassDecl(); eq MemberInterfaceDecl.typeDecl() = getInterfaceDecl(); syn lazy SimpleSet TypeDecl.localTypeDecls(String name) { SimpleSet set = SimpleSet.emptySet; for(int i = 0; i < getNumBodyDecl(); i++) if(getBodyDecl(i).declaresType(name)) set = set.add(getBodyDecl(i).type(name)); return set; } syn lazy SimpleSet TypeDecl.memberTypes(String name) = SimpleSet.emptySet; eq ClassDecl.memberTypes(String name) { SimpleSet set = localTypeDecls(name); if(!set.isEmpty()) return set; for(Iterator outerIter = interfacesIterator(); outerIter.hasNext(); ) { TypeDecl type = (TypeDecl)outerIter.next(); for(Iterator iter = type.memberTypes(name).iterator(); iter.hasNext(); ) { TypeDecl decl = (TypeDecl)iter.next(); if(!decl.isPrivate() && decl.accessibleFrom(this)) set = set.add(decl); } } if(hasSuperclass()) { for(Iterator iter = superclass().memberTypes(name).iterator(); iter.hasNext(); ) { TypeDecl decl = (TypeDecl)iter.next(); if(!decl.isPrivate() && decl.accessibleFrom(this)) { set = set.add(decl); } } } return set; } eq InterfaceDecl.memberTypes(String name) { SimpleSet set = localTypeDecls(name); if(!set.isEmpty()) return set; for(Iterator outerIter = superinterfacesIterator(); outerIter.hasNext(); ) { TypeDecl typeDecl = (TypeDecl)outerIter.next(); for(Iterator iter = typeDecl.memberTypes(name).iterator(); iter.hasNext(); ) { TypeDecl decl = (TypeDecl)iter.next(); if(!decl.isPrivate()) set = set.add(decl); } } return set; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -