@Override public void checkClass(@NonNull ClassContext context, @NonNull ClassNode classNode) { // Abstract classes do not need to be registered if ((classNode.access & Opcodes.ACC_ABSTRACT) != 0) { return; } String curr = classNode.name; int lastIndex = curr.lastIndexOf('$'); if (lastIndex != -1 && lastIndex < curr.length() - 1) { if (Character.isDigit(curr.charAt(lastIndex+1))) { // Anonymous inner class, doesn't need to be registered return; } } while (curr != null) { for (String s : sClasses) { if (curr.equals(s)) { Collection<String> registered = mManifestRegistrations != null ? mManifestRegistrations.get(curr) : null; if (registered == null || !registered.contains(classNode.name)) { report(context, classNode, curr); } } } curr = context.getDriver().getSuperClass(curr); } }
/** * Returns true if the given class is a subclass of the given super class. * * @param classNode the class to check whether it is a subclass of the given * super class name * @param superClassName the fully qualified super class name (in VM format, * e.g. java/lang/Integer, not java.lang.Integer. * @return true if the given class is a subclass of the given super class */ public boolean isSubclassOf(@NonNull ClassNode classNode, @NonNull String superClassName) { if (superClassName.equals(classNode.superName)) { return true; } if (currentProject != null) { Boolean isSub = client.isSubclassOf(currentProject, classNode.name, superClassName); if (isSub != null) { return isSub; } } String className = classNode.name; while (className != null) { if (className.equals(superClassName)) { return true; } className = getSuperClass(className); } return false; } @Nullable
for (String owner : classes) { Set<String> methods = mPackagePrivateMethods.get(owner); String superClass = driver.getSuperClass(owner); int packageIndex = owner.lastIndexOf('/'); while (superClass != null) { superClass = driver.getSuperClass(superClass);
for (String owner : classes) { Set<String> methods = mPackagePrivateMethods.get(owner); String superClass = driver.getSuperClass(owner); int packageIndex = owner.lastIndexOf('/'); while (superClass != null) { superClass = driver.getSuperClass(superClass);
owner = null; } else if (node.getOpcode() == Opcodes.INVOKEVIRTUAL) { owner = context.getDriver().getSuperClass(owner); } else if (node.getOpcode() == Opcodes.INVOKESTATIC) { owner = context.getDriver().getSuperClass(owner); } else { owner = null;
owner = null; } else if (node.getOpcode() == Opcodes.INVOKEVIRTUAL) { owner = context.getDriver().getSuperClass(owner); } else if (node.getOpcode() == Opcodes.INVOKESTATIC) { owner = context.getDriver().getSuperClass(owner); } else { owner = null;
parent = driver.getSuperClass(internalName);
break; owner = driver.getSuperClass(owner); owner = context.getDriver().getSuperClass(owner); } else { owner = null; owner = context.getDriver().getSuperClass(owner); } else if (node.getOpcode() == Opcodes.INVOKESTATIC && api == -1) { owner = context.getDriver().getSuperClass(owner); } else { owner = null;
break; owner = driver.getSuperClass(owner); owner = context.getDriver().getSuperClass(owner); } else { owner = null; owner = context.getDriver().getSuperClass(owner); } else if (node.getOpcode() == Opcodes.INVOKESTATIC && api == -1) { owner = context.getDriver().getSuperClass(owner); } else { owner = null;