/** * If at this point there is no owner of current class, then this is a top-level class, * because outer classes always will be completed before inner classes - see {@link #defineOuterClass(String, String, int)}. * Owner of top-level classes - is a package. */ @Override public void visitEnd() { if (classSymbol.owner == null) { String flatName = className.replace('/', '.'); classSymbol.name = flatName.substring(flatName.lastIndexOf('.') + 1); classSymbol.owner = bytecodeCompleter.enterPackage(flatName); JavaSymbol.PackageJavaSymbol owner = (JavaSymbol.PackageJavaSymbol) classSymbol.owner; if (owner.members == null) { // package was without classes so far owner.members = new Scope(owner); } owner.members.enter(classSymbol); } }
/** * If at this point there is no owner of current class, then this is a top-level class, * because outer classes always will be completed before inner classes - see {@link #defineOuterClass(String, String, int)}. * Owner of top-level classes - is a package. */ @Override public void visitEnd() { if (classSymbol.owner == null) { String flatName = className.replace('/', '.'); classSymbol.name = flatName.substring(flatName.lastIndexOf('.') + 1); classSymbol.owner = bytecodeCompleter.enterPackage(flatName); JavaSymbol.PackageJavaSymbol owner = (JavaSymbol.PackageJavaSymbol) classSymbol.owner; if (owner.members == null) { // package was without classes so far owner.members = new Scope(owner); } owner.members.enter(classSymbol); } }
/** * If at this point there is no owner of current class, then this is a top-level class, * because outer classes always will be completed before inner classes - see {@link #defineOuterClass(String, String, int)}. * Owner of top-level classes - is a package. */ @Override public void visitEnd() { if (classSymbol.owner == null) { String flatName = className.replace('/', '.'); classSymbol.name = flatName.substring(flatName.lastIndexOf('.') + 1); classSymbol.owner = bytecodeCompleter.enterPackage(flatName); JavaSymbol.PackageJavaSymbol owner = (JavaSymbol.PackageJavaSymbol) classSymbol.owner; if (owner.members == null) { // package was without classes so far owner.members = new Scope(owner); } owner.members.enter(classSymbol); } }
/** * If at this point there is no owner of current class, then this is a top-level class, * because outer classes always will be completed before inner classes - see {@link #defineOuterClass(String, String, int)}. * Owner of top-level classes - is a package. */ @Override public void visitEnd() { if (classSymbol.owner == null) { String flatName = className.replace('/', '.'); classSymbol.name = flatName.substring(flatName.lastIndexOf('.') + 1); classSymbol.owner = bytecodeCompleter.enterPackage(flatName); JavaSymbol.PackageJavaSymbol owner = (JavaSymbol.PackageJavaSymbol) classSymbol.owner; if (owner.members == null) { // package was without classes so far owner.members = new Scope(owner); } owner.members.enter(classSymbol); } }
/** * @param kind subset of {@link JavaSymbol#TYP}, {@link JavaSymbol#PCK} */ public JavaSymbol findIdentInPackage(JavaSymbol site, String name, int kind) { String fullname = bytecodeCompleter.formFullName(name, site); JavaSymbol bestSoFar = symbolNotFound; //Try to find a type matching the name. if ((kind & JavaSymbol.TYP) != 0) { JavaSymbol sym = bytecodeCompleter.loadClass(fullname); if (sym.kind < bestSoFar.kind) { bestSoFar = sym; } } //We did not find the class so identifier must be a package. if ((kind & JavaSymbol.PCK) != 0 && bestSoFar.kind >= symbolNotFound.kind) { bestSoFar = bytecodeCompleter.enterPackage(fullname); } return bestSoFar; }
/** * @param kind subset of {@link JavaSymbol#TYP}, {@link JavaSymbol#PCK} */ public JavaSymbol findIdentInPackage(JavaSymbol site, String name, int kind) { String fullname = bytecodeCompleter.formFullName(name, site); JavaSymbol bestSoFar = symbolNotFound; //Try to find a type matching the name. if ((kind & JavaSymbol.TYP) != 0) { JavaSymbol sym = bytecodeCompleter.loadClass(fullname); if (sym.kind < bestSoFar.kind) { bestSoFar = sym; } } //We did not find the class so identifier must be a package. if ((kind & JavaSymbol.PCK) != 0 && bestSoFar.kind >= symbolNotFound.kind) { bestSoFar = bytecodeCompleter.enterPackage(fullname); } return bestSoFar; }
/** * @param kind subset of {@link JavaSymbol#TYP}, {@link JavaSymbol#PCK} */ public JavaSymbol findIdentInPackage(JavaSymbol site, String name, int kind) { String fullname = bytecodeCompleter.formFullName(name, site); JavaSymbol bestSoFar = symbolNotFound; //Try to find a type matching the name. if ((kind & JavaSymbol.TYP) != 0) { JavaSymbol sym = bytecodeCompleter.loadClass(fullname); if (sym.kind < bestSoFar.kind) { bestSoFar = sym; } } //We did not find the class so identifier must be a package. if ((kind & JavaSymbol.PCK) != 0 && bestSoFar.kind >= symbolNotFound.kind) { bestSoFar = bytecodeCompleter.enterPackage(fullname); } return bestSoFar; }
/** * @param kind subset of {@link JavaSymbol#TYP}, {@link JavaSymbol#PCK} */ public JavaSymbol findIdentInPackage(JavaSymbol site, String name, int kind) { String fullname = bytecodeCompleter.formFullName(name, site); JavaSymbol bestSoFar = symbolNotFound; //Try to find a type matching the name. if ((kind & JavaSymbol.TYP) != 0) { JavaSymbol sym = bytecodeCompleter.loadClass(fullname); if (sym.kind < bestSoFar.kind) { bestSoFar = sym; } } //We did not find the class so identifier must be a package. if ((kind & JavaSymbol.PCK) != 0 && bestSoFar.kind >= symbolNotFound.kind) { bestSoFar = bytecodeCompleter.enterPackage(fullname); } return bestSoFar; }
JavaSymbol.TypeJavaSymbol getClassSymbol(String bytecodeName, int flags) { String flatName = Convert.flatName(bytecodeName); JavaSymbol.TypeJavaSymbol symbol = classes.get(flatName); if (symbol == null) { String shortName = Convert.shortName(flatName); String packageName = Convert.packagePart(flatName); String enclosingClassName = Convert.enclosingClassName(shortName); if (StringUtils.isNotEmpty(enclosingClassName)) { //handle innerClasses symbol = new JavaSymbol.TypeJavaSymbol(filterBytecodeFlags(flags), Convert.innerClassName(shortName), getClassSymbol(Convert.fullName(packageName, enclosingClassName))); } else { symbol = new JavaSymbol.TypeJavaSymbol(filterBytecodeFlags(flags), shortName, enterPackage(packageName)); } symbol.members = new Scope(symbol); symbol.typeParameters = new Scope(symbol); // (Godin): IOException will happen without this condition in case of missing class: if (getClassLoader().getResource(Convert.bytecodeName(flatName) + ".class") != null) { symbol.completer = this; } else { LOG.error("Class not found: " + bytecodeName); ((JavaType.ClassJavaType) symbol.type).interfaces = ImmutableList.of(); ((JavaType.ClassJavaType) symbol.type).supertype = Symbols.unknownType; } classes.put(flatName, symbol); } return symbol; }
symbol = new JavaSymbol.TypeJavaSymbol(classFlags, name, owner, bytecodeName); } else { symbol = new JavaSymbol.TypeJavaSymbol(classFlags, shortName, enterPackage(packageName));
symbol = new JavaSymbol.TypeJavaSymbol(filterBytecodeFlags(flags), shortName, enterPackage(packageName));
symbol = new JavaSymbol.TypeJavaSymbol(classFlags, name, owner, bytecodeName); } else { symbol = new JavaSymbol.TypeJavaSymbol(classFlags, shortName, enterPackage(packageName));
JavaSymbol.PackageJavaSymbol javalang = bytecodeCompleter.enterPackage("java.lang");
JavaSymbol.PackageJavaSymbol javalang = bytecodeCompleter.enterPackage("java.lang");
JavaSymbol.PackageJavaSymbol javalang = bytecodeCompleter.enterPackage("java.lang");
JavaSymbol.PackageJavaSymbol javalang = bytecodeCompleter.enterPackage("java.lang");
JavaSymbol.PackageJavaSymbol javaLang = bytecodeCompleter.enterPackage("java.lang"); for (JavaSymbol symbol : javaLang.completedMembers().lookup(name)) { if (symbol.kind == JavaSymbol.TYP) {
JavaSymbol.PackageJavaSymbol javaLang = bytecodeCompleter.enterPackage("java.lang"); for (JavaSymbol symbol : javaLang.completedMembers().lookup(name)) { if (symbol.kind == JavaSymbol.TYP) {
JavaSymbol.PackageJavaSymbol javaLang = bytecodeCompleter.enterPackage("java.lang"); for (JavaSymbol symbol : javaLang.completedMembers().lookup(name)) { if (symbol.kind == JavaSymbol.TYP) {
JavaSymbol.PackageJavaSymbol javaLang = bytecodeCompleter.enterPackage("java.lang"); for (JavaSymbol symbol : javaLang.members().lookup(name)) { if (symbol.kind == JavaSymbol.TYP) {