当前位置: 首页>>代码示例>>Java>>正文


Java Hierarchy2.resolveVirtualMethodCallTargets方法代码示例

本文整理汇总了Java中edu.umd.cs.findbugs.ba.Hierarchy2.resolveVirtualMethodCallTargets方法的典型用法代码示例。如果您正苦于以下问题:Java Hierarchy2.resolveVirtualMethodCallTargets方法的具体用法?Java Hierarchy2.resolveVirtualMethodCallTargets怎么用?Java Hierarchy2.resolveVirtualMethodCallTargets使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在edu.umd.cs.findbugs.ba.Hierarchy2的用法示例。


在下文中一共展示了Hierarchy2.resolveVirtualMethodCallTargets方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: addEqualsMethodUsed

import edu.umd.cs.findbugs.ba.Hierarchy2; //导入方法依赖的package包/类
@Nonnull
public BugInstance addEqualsMethodUsed(ClassDescriptor expectedClass) {
    try {
        Set<XMethod> targets = Hierarchy2.resolveVirtualMethodCallTargets(expectedClass, "equals", "(Ljava/lang/Object;)Z",
                false, false);
        addEqualsMethodUsed(targets);

    } catch (ClassNotFoundException e) {
        AnalysisContext.reportMissingClass(e);
    }

    return this;
}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:14,代码来源:BugInstance.java

示例2: sawOpcode

import edu.umd.cs.findbugs.ba.Hierarchy2; //导入方法依赖的package包/类
@Override
public void sawOpcode(int seen) {
    if (getMethodName().equals("<init>") && seen == INVOKEVIRTUAL) {
        XMethod m = getXMethodOperand();
        if (m != null && !m.isPrivate() && !m.isFinal()) {
            int args = PreorderVisitor.getNumberArguments(m.getSignature());
            OpcodeStack.Item item = stack.getStackItem(args);
            if (item.getRegisterNumber() == 0) {
                try {
                    Set<XMethod> targets = Hierarchy2.resolveVirtualMethodCallTargets(m, false, false);
                    Subtypes2 subtypes2 = AnalysisContext.currentAnalysisContext().getSubtypes2();

                    for (XMethod called : targets) {
                        if (!called.isAbstract() && !called.equals(m)
                                && subtypes2.isSubtype(called.getClassDescriptor(), getClassDescriptor()))
                            fieldSummary.setCalledFromSuperConstructor(new ProgramPoint(this), called);
                    }
                } catch (ClassNotFoundException e) {
                    AnalysisContext.reportMissingClass(e);
                }

            }

        }

    }

    if (seen == INVOKESPECIAL && getMethodName().equals("<init>") && getNameConstantOperand().equals("<init>")) {

        String classOperand = getClassConstantOperand();
        OpcodeStack.Item invokedOn = stack.getItemMethodInvokedOn(this);
        if (invokedOn.getRegisterNumber() == 0 && !classOperand.equals(getClassName())) {
            sawInitializeSuper = true;
            XMethod invoked = getXMethodOperand();
            if (invoked != null)
                fieldSummary.sawSuperCall(getXMethod(), invoked);
        }

    }

    if (seen == PUTFIELD || seen == PUTSTATIC) {
        XField fieldOperand = getXFieldOperand();
        if (fieldOperand == null)
            return;
        touched.add(fieldOperand);
        if (!fieldOperand.getClassDescriptor().getClassName().equals(getClassName()))
            fieldSummary.addWrittenOutsideOfConstructor(fieldOperand);
        else if (seen == PUTFIELD) {
            OpcodeStack.Item addr = stack.getStackItem(1);
            {
                if (addr.getRegisterNumber() != 0 || !getMethodName().equals("<init>"))
                    fieldSummary.addWrittenOutsideOfConstructor(fieldOperand);
            }
        } else if (seen == PUTSTATIC && !getMethodName().equals("<clinit>"))
            fieldSummary.addWrittenOutsideOfConstructor(fieldOperand);
        OpcodeStack.Item top = stack.getStackItem(0);
        fieldSummary.mergeSummary(fieldOperand, top);
    }

}
 
开发者ID:ytus,项目名称:findbugs-all-the-bugs,代码行数:61,代码来源:FieldItemSummary.java


注:本文中的edu.umd.cs.findbugs.ba.Hierarchy2.resolveVirtualMethodCallTargets方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。