@Override public void visit(Method obj) { int flags = obj.getAccessFlags(); synchronizedMethod = (flags & Const.ACC_SYNCHRONIZED) != 0; }
/** * Methods marked with the "Synthetic" attribute do not appear in the source * code */ private boolean isSynthetic(Method m) { if ((m.getAccessFlags() & Const.ACC_SYNTHETIC) != 0) { return true; } Attribute[] attrs = m.getAttributes(); for (Attribute attr : attrs) { if (attr instanceof Synthetic) { return true; } } return false; }
@Override public void visit(Method obj) { check = publicClass && (obj.getAccessFlags() & (Const.ACC_PUBLIC)) != 0; if (!check) { return; } staticMethod = (obj.getAccessFlags() & (Const.ACC_STATIC)) != 0; // variableNames = obj.getLocalVariableTable(); parameterCount = getNumberMethodArguments(); if (!staticMethod) { parameterCount++; } thisOnTOS = false; fieldOnTOS = false; super.visit(obj); thisOnTOS = false; fieldOnTOS = false; }
@Override public boolean choose(JavaClassAndMethod javaClassAndMethod) { Method method = javaClassAndMethod.getMethod(); int accessFlags = method.getAccessFlags(); return accessFlagsAreConcrete(accessFlags); }
@Override public void visit(Method obj) { int flags = obj.getAccessFlags(); if ((flags & doNotConsider) != 0) { return; } String name = obj.getName(); boolean isSynchronized = (flags & Const.ACC_SYNCHRONIZED) != 0; /* * String sig = obj.getSignature(); char firstArg = sig.charAt(1); char * returnValue = sig.charAt(1 + sig.indexOf(')')); boolean firstArgIsRef * = (firstArg == 'L') || (firstArg == '['); boolean returnValueIsRef = * (returnValue == 'L') || (returnValue == '['); * * System.out.println(className + "." + name + " " + firstArgIsRef + " " * + returnValueIsRef + " " + isSynchronized + " " + isNative ); */ if (name.startsWith("get") && !isSynchronized // && returnValueIsRef ) { getMethods.put(name.substring(3), MethodAnnotation.fromVisitedMethod(this)); } else if (name.startsWith("set") && isSynchronized // && firstArgIsRef ) { setMethods.put(name.substring(3), MethodAnnotation.fromVisitedMethod(this)); } } }
private boolean differentAttributes(Method m1, Method m2) { if (m1.getAnnotationEntries().length > 0 || m2.getAnnotationEntries().length > 0) { return true; } int access1 = m1.getAccessFlags() & (Const.ACC_PRIVATE | Const.ACC_PROTECTED | Const.ACC_PUBLIC | Const.ACC_FINAL); int access2 = m2.getAccessFlags() & (Const.ACC_PRIVATE | Const.ACC_PROTECTED | Const.ACC_PUBLIC | Const.ACC_FINAL); m1.getAnnotationEntries(); if (access1 != access2) { return true; } if (!thrownExceptions(m1).equals(thrownExceptions(m2))) { return false; } return false; } }
@Override public void visit(Method obj) { if (DEBUG) { System.out.println("FFI: visiting " + getFullyQualifiedMethodName()); } if ("finalize".equals(getMethodName()) && "()V".equals(getMethodSig()) && (obj.getAccessFlags() & (Const.ACC_PUBLIC)) != 0) { bugReporter .reportBug(new BugInstance(this, "FI_PUBLIC_SHOULD_BE_PROTECTED", NORMAL_PRIORITY).addClassAndMethod(this)); } }
private boolean isPotentialCapture(OpcodeStack.Item top) { if (!top.isInitialParameter()) { return false; } if ((getMethod().getAccessFlags() & Const.ACC_VARARGS) == 0) { return true; } if (top.getRegisterNumber() == parameterCount - 1) { return false; // var-arg parameter } return true; } }
/** * Create an XMethod object from a BCEL Method. * * @param className * the class to which the Method belongs * @param method * the Method * @return an XMethod representing the Method */ public static XMethod createXMethod(String className, Method method) { String methodName = method.getName(); String methodSig = method.getSignature(); int accessFlags = method.getAccessFlags(); return createXMethod(className, methodName, methodSig, accessFlags); }
for (Method method : methodList) { if (method.getName().equals(methodName) && method.getSignature().equals(methodSig) && accessFlagsAreConcrete(method.getAccessFlags())) { JavaClassAndMethod m = new JavaClassAndMethod(javaClass, method);
@Override public void visit(Method obj) { if (DEBUG) { System.out.println("Checking " + getClassName() + "." + obj.getName()); } if (Const.CONSTRUCTOR_NAME.equals(getMethodName()) && (obj.isPublic() || obj.isProtected())) { publicOrProtectedConstructor = true; } pendingGetField = null; saState = 0; super.visit(obj); int flags = obj.getAccessFlags(); if ((flags & Const.ACC_NATIVE) != 0) { hasNativeMethods = true; } }
/** * Look up the Method represented by given MethodGen. * * @param methodGen * a MethodGen * @return the Method represented by the MethodGen */ public Method getMethod(MethodGen methodGen) { Method[] methodList = jclass.getMethods(); for (Method method : methodList) { if (method.getName().equals(methodGen.getName()) && method.getSignature().equals(methodGen.getSignature()) && method.getAccessFlags() == methodGen.getAccessFlags()) { return method; } } return null; }
@Override public void visitMethod(Method obj) { if ((interfaceMethods != null) && ((obj.getAccessFlags() & Const.ACC_ABSTRACT) != 0)) { String curDetail = obj.getName() + obj.getSignature(); for (String infMethodDetail : interfaceMethods) { if (curDetail.equals(infMethodDetail)) { bugReporter.reportBug(new BugInstance(this, "USM_USELESS_ABSTRACT_METHOD", LOW_PRIORITY).addClassAndMethod( getClassContext().getJavaClass(), obj)); } } } super.visitMethod(obj); }
if ((method.getAccessFlags() & Const.ACC_BRIDGE) != 0) { return;
&& ((getMethod().getAccessFlags() & (Const.ACC_STATIC | Const.ACC_SYNTHETIC)) == 0)) {
@Override public void visit(Method obj) { int accessFlags = obj.getAccessFlags(); if ((accessFlags & Const.ACC_STATIC) != 0) { return;
private void analyzeMethod(ClassContext classContext, Method method) throws CFGBuilderException, DataflowAnalysisException { if (BCELUtil.isSynthetic(method) || (method.getAccessFlags() & Const.ACC_BRIDGE) == Const.ACC_BRIDGE) { return;
@Override public void visit(Method obj) { int accessFlags = obj.getAccessFlags(); boolean isSynchronized = (accessFlags & Const.ACC_SYNCHRONIZED) != 0; if (Const.CONSTRUCTOR_NAME.equals(getMethodName()) && "()V".equals(getMethodSig()) && (accessFlags & Const.ACC_PUBLIC) != 0) {
if (BCELUtil.isSynthetic(method)|| (method.getAccessFlags() & Const.ACC_BRIDGE) == Const.ACC_BRIDGE) { return;
private void analyzeMethod(ClassContext classContext, Method method) throws DataflowAnalysisException, CFGBuilderException { if (BCELUtil.isSynthetic(method) || (method.getAccessFlags() & Const.ACC_BRIDGE) == Const.ACC_BRIDGE) { return;