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


Java MethodDefinition.isTypeInitializer方法代码示例

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


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

示例1: 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

示例2: getConstructorEntry

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
public static ConstructorEntry getConstructorEntry(MethodDefinition def) {
	if (def.isTypeInitializer()) {
		return new ConstructorEntry(
			new ClassEntry(def.getDeclaringType().getInternalName())
		);
	} else {
		return new ConstructorEntry(
			new ClassEntry(def.getDeclaringType().getInternalName()),
			new Signature(def.getErasedSignature())
		);
	}
}
 
开发者ID:cccssw,项目名称:enigma-vk,代码行数:13,代码来源:ProcyonEntryFactory.java

示例3: 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

示例4: visitCall

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
@AstVisitor(nodes=AstNodes.EXPRESSIONS)
public void visitCall(MethodContext mc, Expression expr, MethodDefinition md, NodeChain nc, TypeDefinition td) {
    if(expr.getCode() == AstCode.InvokeVirtual) {
        Expression target = expr.getArguments().get(0);
        if(target.getCode() != AstCode.GetStatic) {
            target = Exprs.getChild(expr, 0);
        }
        if(target.getCode() == AstCode.GetStatic) {
            FieldReference fr = (FieldReference) target.getOperand();
            if(md.isTypeInitializer() && td.isEquivalentTo(fr.getDeclaringType()))
                return;
            MethodReference mr = (MethodReference) expr.getOperand();
            String methodName = mr.getName();
            if(methodName.startsWith("get"))
                return;
            if(nc.isSynchronized() || Flags.testAny(md.getFlags(), Flags.SYNCHRONIZED))
                return;
            if(!isNotThreadSafe(mr.getDeclaringType()))
                return;
            int priority = 0;
            if(Methods.isMain(md))
                priority += 30;
            if(!methodName.startsWith("set") && !DANGEROUS_METHODS.contains(methodName))
                priority += 20;
            mc.report("StaticNotThreadSafeFieldInvoke", priority, expr, Roles.FIELD.create(fr));
        }
    }
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:29,代码来源:StaticFieldNonThreadSafe.java

示例5: visit

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
@AstVisitor(nodes = AstNodes.EXPRESSIONS)
public void visit(Expression expr, MethodContext ctx, MethodDefinition md) {
    if (expr.getCode() == AstCode.InitObject && expr.getArguments().size() == 1) {
        MethodReference ctor = (MethodReference) expr.getOperand();
        if (ctor.getDeclaringType().getPackageName().equals("java.lang")) {
            String simpleName = ctor.getDeclaringType().getSimpleName();
            WarningAnnotation<MemberInfo> replacement = Roles.REPLACEMENT_METHOD.create(ctor.getDeclaringType()
                    .getInternalName(), "valueOf", ctor.getSignature().replaceFirst("V$", "L" + ctor
                            .getDeclaringType().getInternalName() + ";"));
            int priority = 0;
            if(md.isTypeInitializer()) {
                // Static field initializer: only one object is created
                // not a big performance problem and probably intended
                Set<Expression> usages = Inf.BACKLINK.findUsages(expr);
                if(usages.size() == 1 && usages.iterator().next().getCode() == AstCode.PutStatic) {
                    priority = 15;
                }
            }
            if (simpleName.equals("Boolean")) {
                ctx.report("BooleanConstructor", priority, expr, replacement);
            } else if (simpleName.equals("Integer") || simpleName.equals("Long") || simpleName.equals("Short")
                || simpleName.equals("Byte") || simpleName.equals("Character")) {
                Object val = Nodes.getConstant(expr.getArguments().get(0));
                if (val instanceof Number) {
                    long value = ((Number) val).longValue();
                    if (value < -128 || value > 127)
                        priority += simpleName.equals("Integer") ? 15 : 30;
                    ctx.report("NumberConstructor", priority, expr, Roles.NUMBER.create((Number) val), replacement,
                        Roles.TARGET_TYPE.create(ctor.getDeclaringType()));
                } else {
                    ctx.report("NumberConstructor", 5, expr, replacement, Roles.TARGET_TYPE.create(ctor
                            .getDeclaringType()));
                }
            }
        }
    }
}
 
开发者ID:amaembo,项目名称:huntbugs,代码行数:38,代码来源:NumberConstructor.java

示例6: getConstructorEntry

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
public static ConstructorEntry getConstructorEntry(MethodDefinition def) {
    if (def.isTypeInitializer()) {
        return new ConstructorEntry(new ClassEntry(def.getDeclaringType().getInternalName()));
    } else {
        return new ConstructorEntry(new ClassEntry(def.getDeclaringType().getInternalName()), new Signature(def.getErasedSignature()));
    }
}
 
开发者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:OpenModLoader,项目名称:Enigma,代码行数:8,代码来源:ProcyonEntryFactory.java

示例8: getConstructorEntry

import com.strobel.assembler.metadata.MethodDefinition; //导入方法依赖的package包/类
public static ConstructorEntry getConstructorEntry(MethodDefinition def)
{
	if(def.isTypeInitializer())
		return new ConstructorEntry(new ClassEntry(def.getDeclaringType()
			.getInternalName()));
	else
		return new ConstructorEntry(new ClassEntry(def.getDeclaringType()
			.getInternalName()), new Signature(def.getErasedSignature()));
}
 
开发者ID:Wurst-Imperium,项目名称:Wurst-Enigma,代码行数:10,代码来源:ProcyonEntryFactory.java

示例9: 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


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