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