本文整理汇总了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);
}
}
示例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())
);
}
}
示例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);
}
}
示例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));
}
}
}
示例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()));
}
}
}
}
}
示例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()));
}
}
示例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);
}
}
示例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()));
}
示例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);
}