Scope getScope(String name) { Scope s = children.get(name); if (s != null) return s; s = new Scope(Access.UNKNOWN, Kind.UNKNOWN, name); children.put(name, s); s.declaring = this; return s; }
public void enclosingMethod(String cName, String mName, String mDescriptor) { enclosing = root.getScope(Scope.classIdentity(cName)); if (mName != null) { enclosing = enclosing.getScope(Scope.methodIdentity(mName, mDescriptor)); } }
public void innerClass(String innerClass, String outerClass, String innerName, int innerClassAccessFlags) { if (outerClass != null && innerClass != null && innerClass.equals(s.name)) declaring = root.getScope(Scope.classIdentity(outerClass)); } });
@Override public void enclosingMethod(TypeRef cName, String mName, String mDescriptor) { enclosing = root.getScope(cName.getBinary()); if (mName != null) { enclosing = enclosing.getScope(Scope.methodIdentity(mName, mDescriptor)); } }
private Scope add(Scope declaring, Scope enclosing, int modifiers, TypeVariable<?>[] typeVariables, Kind kind, String id, Type mainType, Type[] parameterTypes, Type exceptionTypes[]) { Scope scope = declaring.getScope(id); assert scope.access == Access.UNKNOWN; scope.setAccess(Access.modifier(modifiers)); scope.setKind(kind); scope.setGenericParameter(convert(typeVariables)); scope.setBase(convert(scope, mainType)); scope.setParameterTypes(convert(parameterTypes)); scope.setExceptionTypes(convert(exceptionTypes)); scope.setDeclaring(declaring); scope.setEnclosing(enclosing); return scope; }
private Scope getGlobalScope(Class<?> c) { if (c == null) return null; String id = identity(c); return root.getScope(id); }
public void setEnclosing(Scope enclosing) { this.enclosing = enclosing; if (this.enclosing != null) { this.enclosing.add(this); } }
public void prune(EnumSet<Access> level) { Iterator<Map.Entry<String,Scope>> i = children.entrySet().iterator(); while (i.hasNext()) { Map.Entry<String,Scope> entry = i.next(); if (!level.contains(entry.getValue().access)) i.remove(); else entry.getValue().prune(level); } }
public void cleanRoot() { children.entrySet() .removeIf(entry -> !entry.getValue() .isTop()); }
static public String identity(Method m) { return Scope.methodIdentity(m.getName(), getDescriptor(m.getReturnType(), m .getParameterTypes())); }
static public String identity(Class< ? > c) { return Scope.classIdentity(c.getName()); }
static public String identity(Field m) { return Scope.fieldIdentity(m.getName(), getDescriptor(m.getType(), null)); }
static public String identity(Constructor<?> m) { return Scope.constructorIdentity(getDescriptor(void.class, m.getParameterTypes())); }
private Scope add(Scope declaring, Scope enclosing, int modifiers, TypeVariable<?>[] typeVariables, Kind kind, String id, Type mainType, Type[] parameterTypes, Type exceptionTypes[]) { Scope scope = declaring.getScope(id); assert scope.access == Access.UNKNOWN; scope.setAccess(Access.modifier(modifiers)); scope.setKind(kind); scope.setGenericParameter(convert(typeVariables)); scope.setBase(convert(scope, mainType)); scope.setParameterTypes(convert(parameterTypes)); scope.setExceptionTypes(convert(exceptionTypes)); scope.setDeclaring(declaring); scope.setEnclosing(enclosing); return scope; }
@Override public void enclosingMethod(TypeRef cName, String mName, String mDescriptor) { enclosing = root.getScope(cName.getBinary()); if (mName != null) { enclosing = enclosing.getScope(Scope.methodIdentity(mName, mDescriptor)); } }
private Scope getGlobalScope(Class< ? > c) { if (c == null) return null; String id = identity(c); return root.getScope(id); }
public void classBegin(int access, String name) { s = root.getScope(Scope.classIdentity(name)); s.access = Access.modifier(access); s.kind = Kind.CLASS; }