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


Java MethodDefinition.isConstructor方法代码示例

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


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

示例1: checkMethod

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
@AstVisitor(nodes=AstNodes.ROOT)
public void checkMethod(Block root, MethodDefinition md, MethodStats ms, MethodContext mc) {
    if(md.getReturnType().isVoid()) {
        MethodData stats = ms.getStats(md);
        if (stats != null && !stats.mayHaveSideEffect(true) && !stats.testAny(MethodStats.METHOD_MAY_THROW, true)) {
            List<Node> body = root.getBody();
            if(body.isEmpty())
                return;
            if(md.isConstructor() && body.size() == 1 && Nodes.isOp(body.get(0), AstCode.InvokeSpecial))
                return;
            int codeSize = Nodes.estimateCodeSize(root);
            int priority = codeSize < 10 ? 20 : codeSize < 20 ? 10 : codeSize < 30 ? 5 : 0;
            mc.report("UselessVoidMethod", priority);
        }
    }
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:17,代码来源:UselessVoidMethod.java

示例2: selfCall

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
private boolean selfCall(Expression expr, MethodDefinition md) {
    if (!(expr.getOperand() instanceof MethodReference))
        return false;
    MethodReference mr = (MethodReference) expr.getOperand();
    if (!mr.isEquivalentTo(md))
        return false;
    switch (expr.getCode()) {
    case InvokeStatic:
        return md.isStatic();
    case InitObject:
    case InvokeSpecial:
        return md.isConstructor();
    case InvokeVirtual:
    case InvokeInterface:
        return !md.isStatic() && Exprs.isThis(expr.getArguments().get(0));
    default:
        return false;
    }
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:20,代码来源:InfiniteRecursion.java

示例3: link

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
void link(MethodDefinition src, FieldReference fr, boolean isStatic, boolean write, boolean hadNull) {
    if(fieldRecords == null)
        return;
    int prevStatus = fieldRecords.getOrDefault(fr.getName(), 0);
    int curStatus = prevStatus;
    if(src.getDeclaringType().isEquivalentTo(fr.getDeclaringType())) {
        if(write && (src.isConstructor() && !isStatic || src.isTypeInitializer() && isStatic)) {
            curStatus |= WRITE_CONSTRUCTOR;
        } else {
            curStatus |= write ? WRITE_CLASS : READ_CLASS;
        }
    } else if(src.getDeclaringType().getPackageName().equals(fr.getDeclaringType().getPackageName())) {
        curStatus |= write ? WRITE_PACKAGE : READ_PACKAGE;
    } else {
        curStatus |= write ? WRITE_OUTSIDE : READ_OUTSIDE;
    }
    if(write && !hadNull) {
        curStatus |= WRITE_NONNULL;
    }
    if(prevStatus != curStatus) {
        fieldRecords.put(fr.getName(), curStatus);
    }
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:24,代码来源:FieldStats.java

示例4: getBehaviorEntry

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
public static BehaviorEntry getBehaviorEntry(MethodDefinition def) {
	if (def.isConstructor() || def.isTypeInitializer()) {
		return getConstructorEntry(def);
	} else {
		return getMethodEntry(def);
	}
}
 
开发者ID:cccssw,项目名称:enigma-vk,代码行数:8,代码来源:ProcyonEntryFactory.java

示例5: visit

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
@AstVisitor(nodes=AstNodes.EXPRESSIONS)
public void visit(Expression expr, NodeChain nc, MethodContext mc, MethodDefinition md, TypeDefinition td) {
    if(expr.getCode() == AstCode.PutStatic) {
        FieldReference fr = (FieldReference) expr.getOperand();
        FieldDefinition fd = fr.resolve();
        if(fd != null && fd.isSynthetic())
            return;
        int priority = 0;
        if(md.isPrivate() || td.isPrivate())
            priority += 20;
        else if(!md.isPublic() || !td.isPublic())
            priority += 10;
        else if(md.isConstructor())
            priority += 5;
        if(nc.isSynchronized() || Flags.testAny(md.getFlags(), Flags.SYNCHRONIZED))
            priority += 15;
        if(Exprs.getChild(expr, 0).getCode() == AstCode.AConstNull)
            priority += 5;
        
        String name = fr.getName().toLowerCase(Locale.ENGLISH);
        if (fr.getFieldType().getSimpleType() == JvmType.Boolean) {
            priority += 10;
            if (name.contains("verbose"))
                priority += 5;
        }
        if (name.contains("debug"))
            priority += 15;
        if ((md.getName().equals("start") || md.getName().equals("stop")) && md.getErasedSignature().equals(
            "(Lorg/osgi/framework/BundleContext;)V") && Types.isInstance(td,
                "org/osgi/framework/BundleActivator")) {
            priority += 30;
        }
        mc.report("StaticFieldFromInstanceMethod", priority, expr);
    }
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:36,代码来源:StaticFieldFromInstanceMethod.java

示例6: getBehaviorEntry

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
public static BehaviorEntry getBehaviorEntry(MethodDefinition def) {
    if (def.isConstructor() || def.isTypeInitializer()) {
        return getConstructorEntry(def);
    } else {
        return getMethodEntry(def);
    }
}
 
开发者ID:OpenModLoader,项目名称:Enigma,代码行数:8,代码来源:ProcyonEntryFactory.java

示例7: getBehaviorEntry

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
public static BehaviorEntry getBehaviorEntry(MethodDefinition def)
{
	if(def.isConstructor() || def.isTypeInitializer())
		return getConstructorEntry(def);
	else
		return getMethodEntry(def);
}
 
开发者ID:Wurst-Imperium,项目名称:Wurst-Enigma,代码行数:8,代码来源:ProcyonEntryFactory.java

示例8: visit

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
@AstVisitor
public void visit(Node node, NodeChain nc, MethodDefinition md, MethodContext mc) {
    if(node instanceof Block) {
        List<Node> body = ((Block) node).getBody();
        for(int i=0; i<body.size()-1; i++) {
            Node n = body.get(i);
            if(!(n instanceof Expression))
                continue;
            Expression e = (Expression) n;
            if(e.getCode() == AstCode.PutField) {
                Expression receiver = Exprs.getChildNoSpecial(e, 0);
                FieldReference fr = (FieldReference) e.getOperand();
                for(int j=i+1; j<body.size(); j++) {
                    Node n2 = body.get(j);
                    if(!(n2 instanceof Expression))
                        break;
                    Expression e2 = (Expression) n2;
                    if(e2.getCode() == AstCode.Store || e2.getCode() == AstCode.StoreElement) {
                        if(Exprs.findExpression(e2, e1 -> !Nodes.isSideEffectFree(e1)) != null)
                            break;
                        continue;
                    }
                    if(e2.getCode() != AstCode.PutField)
                        break;
                    if(!Nodes.isSideEffectFree(e2.getArguments().get(1)))
                        break;
                    if (Exprs.findExpression(Exprs.getChild(e2, 1),
                        ex -> ex.getCode() == AstCode.GetField
                            && fr.isEquivalentTo((FieldReference) ex.getOperand())
                            && Nodes.isEquivalent(Exprs.getChildNoSpecial(ex, 0), receiver)) != null)
                        break;
                    Expression receiver2 = Exprs.getChildNoSpecial(e2, 0);
                    FieldReference fr2 = (FieldReference) e2.getOperand();
                    if(fr.isEquivalentTo(fr2) && Nodes.isEquivalent(receiver, receiver2)) {
                        int priority = 0;
                        if(md.isConstructor() && nc == null && Exprs.isThis(receiver2))
                            continue;
                        mc.report("FieldDoubleAssignment", priority, e, DUPLICATE_ASSIGNMENT_AT.create(mc
                                .getLocation(e2)));
                    }
                }
            }
        }
    }
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:46,代码来源:DuplicateAssignment.java

示例9: checkMethod

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
@MethodVisitor
public boolean checkMethod(MethodDefinition md) {
    return !md.isConstructor() && !md.getName().equals("init") && !md.getName().equals("destroy") && !Flags.testAny(md.getFlags(), Flags.SYNCHRONIZED);
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:5,代码来源:MutableServletField.java


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