/** * @param className * @param methodName * @param methodSignature * @param methodSourceSignature * @param isUnsupported * @param usesConcurrency TODO * @param isStub TODO * @param methodCallCount TODO * @param accessMethodFor TODO * @param isStatic */ MethodInfo( @SlashedClassName String className, String methodName, String methodSignature, String methodSourceSignature, int accessFlags, boolean isUnconditionalThrower, boolean isUnsupported, boolean usesConcurrency, boolean hasBackBranch, boolean isStub, boolean isIdentity, int methodCallCount, @CheckForNull String[] exceptions, @CheckForNull MethodDescriptor accessMethodFor, Map<ClassDescriptor, AnnotationValue> methodAnnotations, Map<Integer, Map<ClassDescriptor, AnnotationValue>> methodParameterAnnotations) { super(className, methodName, methodSignature, (accessFlags & Constants.ACC_STATIC) != 0); this.accessFlags = accessFlags; this.exceptions = exceptions; if (exceptions != null) for (int i = 0; i < exceptions.length; i++) exceptions[i] = DescriptorFactory.canonicalizeString(exceptions[i]); this.methodSourceSignature = DescriptorFactory.canonicalizeString(methodSourceSignature); this.methodAnnotations = Util.immutableMap(methodAnnotations); this.methodParameterAnnotations = Util.immutableMap(methodParameterAnnotations); if (isUnconditionalThrower) unconditionalThrowers.put(this, null); if (isUnsupported) unsupportedMethods.put(this, null); if (accessMethodFor != null) MethodInfo.accessMethodFor.put(this, accessMethodFor); if (isIdentity) { MethodInfo.identifyMethods.put(this, null); } this.usesConcurrency = usesConcurrency; this.hasBackBranch = hasBackBranch; this.isStub = isStub; this.methodCallCount = methodCallCount; }