public static @CheckForNull JavaClassAndMethod findInvocationLeastUpperBound(JavaClass jClass, String methodName, String methodSig, JavaClassAndMethodChooser methodChooser, boolean invokeInterface) throws ClassNotFoundException { JavaClassAndMethod result = findMethod(jClass, methodName, methodSig, methodChooser); if (result != null) { return result; } if (invokeInterface) { for (JavaClass i : jClass.getInterfaces()) { result = findInvocationLeastUpperBound(i, methodName, methodSig, methodChooser, invokeInterface); if (result != null) { return null; } } } else { JavaClass sClass = jClass.getSuperClass(); if (sClass != null) { return findInvocationLeastUpperBound(sClass, methodName, methodSig, methodChooser, invokeInterface); } } return null; }
private boolean find(JavaClass target, String name, String signature) throws ClassNotFoundException { if (target == null) { return false; } String ref = getMemberName(target.getClassName(), name, signature); if (defined.contains(ref)) { return true; } if (find(target.getSuperClass(), name, signature)) { return true; } for (JavaClass i : target.getInterfaces()) { if (find(i, name, signature)) { return true; } } return false; }
boolean definedInSuperClassOrInterface(JavaClass clazz, String method) throws ClassNotFoundException { if (clazz == null) { return false; } JavaClass superClass = clazz.getSuperClass(); if (superClass == null) { return false; } try { XClass xClass = Global.getAnalysisCache().getClassAnalysis(XClass.class, DescriptorFactory.createClassDescriptorFromDottedClassName(superClass.getClassName())); if (xClass.hasStubs()) { return true; } } catch (CheckedAnalysisException e) { return true; } if (definedInThisClassOrSuper(superClass, method)) { return true; } for (JavaClass i : clazz.getInterfaces()) { if (definedInThisClassOrSuper(i, method)) { return true; } } return false; }
JavaClass interfaces[] = getThisClass().getInterfaces(); if (interfaces.length == 1) { superclassName = interfaces[0].getClassName();
JavaClass[] superInfs = inf.getInterfaces(); for (JavaClass superInf : superInfs) { if (cls.implementationOf(superInf)) {
JavaClass[] superInfs = inf.getInterfaces(); for (JavaClass superInf : superInfs) { if (cls.implementationOf(superInf)) {
public static @CheckForNull JavaClassAndMethod findInvocationLeastUpperBound(JavaClass jClass, String methodName, String methodSig, JavaClassAndMethodChooser methodChooser, boolean invokeInterface) throws ClassNotFoundException { JavaClassAndMethod result = findMethod(jClass, methodName, methodSig, methodChooser); if (result != null) { return result; } if (invokeInterface) { for (JavaClass i : jClass.getInterfaces()) { result = findInvocationLeastUpperBound(i, methodName, methodSig, methodChooser, invokeInterface); if (result != null) { return null; } } } else { JavaClass sClass = jClass.getSuperClass(); if (sClass != null) { return findInvocationLeastUpperBound(sClass, methodName, methodSig, methodChooser, invokeInterface); } } return null; }
private boolean find(JavaClass target, String name, String signature) throws ClassNotFoundException { if (target == null) { return false; } String ref = getMemberName(target.getClassName(), name, signature); if (defined.contains(ref)) { return true; } if (find(target.getSuperClass(), name, signature)) { return true; } for (JavaClass i : target.getInterfaces()) { if (find(i, name, signature)) { return true; } } return false; }
/** * Get all interfaces implemented by this JavaClass (transitively). */ public JavaClass[] getAllInterfaces() throws ClassNotFoundException { final ClassQueue queue = new ClassQueue(); final Set<JavaClass> allInterfaces = new TreeSet<>(); queue.enqueue(this); while (!queue.empty()) { final JavaClass clazz = queue.dequeue(); final JavaClass souper = clazz.getSuperClass(); final JavaClass[] _interfaces = clazz.getInterfaces(); if (clazz.isInterface()) { allInterfaces.add(clazz); } else { if (souper != null) { queue.enqueue(souper); } } for (final JavaClass _interface : _interfaces) { queue.enqueue(_interface); } } return allInterfaces.toArray(new JavaClass[allInterfaces.size()]); }
/** * returns whether the item at the stackPos location on the stack is an enum, and doesn't implement any interfaces * * @param stackPos * the position on the opstack to check * * @return whether the class is an enum * @throws ClassNotFoundException * if the class can not be loaded */ private boolean isEnum(int stackPos) throws ClassNotFoundException { if (stack.getStackDepth() <= stackPos) { return false; } OpcodeStack.Item item = stack.getStackItem(stackPos); if (!item.getSignature().startsWith(Values.SIG_QUALIFIED_CLASS_PREFIX)) { return false; } JavaClass cls = item.getJavaClass(); if ((cls == null) || !cls.isEnum()) { return false; } // If the cls implements any interface, it's possible the collection // is based on that interface, so ignore return cls.getInterfaces().length == 0; }
/** * returns whether the item at the stackPos location on the stack is an enum, and doesn't implement any interfaces * * @param stackPos * the position on the opstack to check * * @return whether the class is an enum * @throws ClassNotFoundException * if the class can not be loaded */ private boolean isEnum(int stackPos) throws ClassNotFoundException { if (stack.getStackDepth() <= stackPos) { return false; } OpcodeStack.Item item = stack.getStackItem(stackPos); if (!item.getSignature().startsWith(Values.SIG_QUALIFIED_CLASS_PREFIX)) { return false; } JavaClass cls = item.getJavaClass(); if ((cls == null) || !cls.isEnum()) { return false; } // If the cls implements any interface, it's possible the collection // is based on that interface, so ignore return cls.getInterfaces().length == 0; }
for (final JavaClass superclass : jc.getInterfaces()) { m = getMethod(superclass, invoke); if(m != null) {
JavaClass[] infClasses = cls.getInterfaces();
JavaClass[] infClasses = cls.getInterfaces();
boolean definedInSuperClassOrInterface(JavaClass clazz, String method) throws ClassNotFoundException { if (clazz == null) { return false; } JavaClass superClass = clazz.getSuperClass(); if (superClass == null) { return false; } try { XClass xClass = Global.getAnalysisCache().getClassAnalysis(XClass.class, DescriptorFactory.createClassDescriptorFromDottedClassName(superClass.getClassName())); if (xClass.hasStubs()) { return true; } } catch (CheckedAnalysisException e) { return true; } if (definedInThisClassOrSuper(superClass, method)) { return true; } for (JavaClass i : clazz.getInterfaces()) { if (definedInThisClassOrSuper(i, method)) { return true; } } return false; }
JavaClass[] infs = cls.getInterfaces(); if (infs.length > 0) { Set<QMethod> clsMethods = buildMethodSet(cls);
JavaClass[] infs = cls.getInterfaces(); if (infs.length > 0) { Set<QMethod> clsMethods = buildMethodSet(cls);
for (JavaClass infCls : fqCls.getInterfaces()) { for (Method infMethod : infCls.getMethods()) { if (key.getMethodName().equals(infMethod.getName())) {
for (JavaClass infCls : fqCls.getInterfaces()) { for (Method infMethod : infCls.getMethods()) { if (key.getMethodName().equals(infMethod.getName())) {
JavaClass[] interfaces = clazz.getInterfaces();