public boolean checkMethod(MethodDefinition md) { if(!md.getReturnType().isArray() && !TYPE_TO_WARNING.containsKey(md.getReturnType().getInternalName())) return false; if(md.getName().equals("getName") && md.getReturnType().getSignature().equals("[B") && md.getParameters().size() == 1 && Types.isInstance(md.getDeclaringType(), "java/sql/ResultSet")) return false; return true; }
@MethodVisitor public boolean check(MethodDefinition md, TypeDefinition td) { // Skip some autogenerated methods if(md.getName().equals("yyparse") && md.getReturnType().getInternalName().equals("java/lang/Object")) return false; if(md.getName().startsWith("jj") && td.getName().endsWith("TokenManager")) return false; if(md.getName().equals("getNextToken") && md.getSignature().equals("()I")) return false; return true; }
@MethodVisitor public boolean check(MethodDefinition md, TypeDefinition td) { if(md.isSynthetic()) return false; if(md.getName().equals("compare") && md.getParameters().size() == 2 && md.getReturnType().getSimpleType() == JvmType.Integer && Types.isInstance(td, "java/util/Comparator")) return true; if(md.getName().equals("compareTo") && md.getParameters().size() == 1 && md.getReturnType().getSimpleType() == JvmType.Integer && Types.isInstance(td, "java/lang/Comparable")) return true; return false; }
@MethodVisitor public void visit(MethodContext mc, MethodDefinition md, TypeDefinition td) { TypeReference returnType = md.getReturnType(); if (Types.isCollection(returnType)) { mc.report("SampleCustomDetector", 5); } } }
public StringBuilder appendErasedDescription(final StringBuilder sb) { if (hasGenericParameters() && !isGenericDefinition()) { final MethodDefinition definition = resolve(); if (definition != null) { return definition.appendErasedDescription(sb); } } for (final javax.lang.model.element.Modifier modifier : Flags.asModifierSet(getModifiers() & ~Flags.ACC_VARARGS)) { sb.append(modifier.toString()); sb.append(' '); } final List<ParameterDefinition> parameterTypes = getParameters(); StringBuilder s = getReturnType().appendErasedDescription(sb); s.append(' '); s.append(getName()); s.append('('); for (int i = 0, n = parameterTypes.size(); i < n; ++i) { if (i != 0) { s.append(", "); } s = parameterTypes.get(i).getParameterType().appendErasedDescription(s); } s.append(')'); return s; }
static boolean isClassMethodCandidate(final MethodDefinition m) { return m != null && m.isSynthetic() && m.isStatic() && m.isPackagePrivate() && m.getParameters().size() == 1 && CommonTypeReferences.Class.isEquivalentTo(m.getReturnType()) && CommonTypeReferences.String.isEquivalentTo(m.getParameters().get(0).getParameterType()); }
public StringBuilder appendErasedDescription(final StringBuilder sb) { if (hasGenericParameters() && !isGenericDefinition()) { final MethodDefinition definition = resolve(); if (definition != null) { return definition.appendErasedDescription(sb); } } for (final javax.lang.model.element.Modifier modifier : Flags.asModifierSet(getModifiers() & ~Flags.ACC_VARARGS)) { sb.append(modifier.toString()); sb.append(' '); } final List<ParameterDefinition> parameterTypes = getParameters(); StringBuilder s = getReturnType().appendErasedDescription(sb); s.append(' '); s.append(getName()); s.append('('); for (int i = 0, n = parameterTypes.size(); i < n; ++i) { if (i != 0) { s.append(", "); } s = parameterTypes.get(i).getParameterType().appendErasedDescription(s); } s.append(')'); return s; }
public StringBuilder appendErasedDescription(final StringBuilder sb) { if (hasGenericParameters() && !isGenericDefinition()) { final MethodDefinition definition = resolve(); if (definition != null) { return definition.appendErasedDescription(sb); } } for (final javax.lang.model.element.Modifier modifier : Flags.asModifierSet(getModifiers() & ~Flags.ACC_VARARGS)) { sb.append(modifier.toString()); sb.append(' '); } final List<ParameterDefinition> parameterTypes = getParameters(); StringBuilder s = getReturnType().appendErasedDescription(sb); s.append(' '); s.append(getName()); s.append('('); for (int i = 0, n = parameterTypes.size(); i < n; ++i) { if (i != 0) { s.append(", "); } s = parameterTypes.get(i).getParameterType().appendErasedDescription(s); } s.append(')'); return s; }
@AstVisitor(nodes = AstNodes.ROOT) public void checkSameAsConstructor(Block root, MethodDefinition md, TypeDefinition td, MethodContext mc) { if (md.getName().equals(td.getSimpleName()) && md.getReturnType().isVoid() && !md.isDeprecated()) { int priority = 0; if (root.getBody().isEmpty()) { priority += 20; } else if (root.getBody().size() == 1 && Nodes.isOp(root.getBody().get(0), AstCode.AThrow)) { priority += 40; } if (td.getDeclaredMethods().stream().anyMatch( m -> m.isConstructor() && m.getErasedSignature().equals(md.getErasedSignature()))) { priority += 10; } mc.report("BadNameOfMethodSameAsConstructor", priority); } }
public StringBuilder appendBriefDescription(final StringBuilder sb) { StringBuilder s = sb; TypeReference returnType = getReturnType();
public StringBuilder appendBriefDescription(final StringBuilder sb) { StringBuilder s = sb; TypeReference returnType = getReturnType();
public StringBuilder appendBriefDescription(final StringBuilder sb) { StringBuilder s = sb; TypeReference returnType = getReturnType();
@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); } } } }
@AstVisitor(nodes = AstNodes.EXPRESSIONS) public void visit(Expression expr, NodeChain nc, MethodContext mc, MethodDefinition md, TypeDefinition td) { if (expr.getCode() == AstCode.Return && !expr.getArguments().isEmpty()) { Expression child = Exprs.getChild(expr, 0); if (child.getCode() == AstCode.AConstNull) { MethodDefinition curMethod = nc.getLambdaMethod(); if (curMethod == null) curMethod = md; String warningType = curMethod.getReturnType().isArray() ? "ArrayReturnNull" : TYPE_TO_WARNING .get(curMethod.getReturnType().getInternalName()); if (warningType != null) { int priority = 0; if (!td.isPublic() || md.isPrivate() || md.isPackagePrivate()) priority = 20; else if (md.isProtected() || md != curMethod) priority = 10; // Method which simply contains "return null": probably stub or something if(nc.getParent() == null && nc.isOnlyChild(expr)) priority += 10; mc.report(warningType, priority, expr.getArguments().get(0), RETURN_TYPE.create(md .getReturnType())); } } } } }
private static boolean isSwitchMapMethod(final MethodReference method) { if (method == null) { return false; } final MethodDefinition definition = method instanceof MethodDefinition ? (MethodDefinition) method : method.resolve(); return definition != null && definition.isSynthetic() && definition.isStatic() && definition.isPackagePrivate() && StringUtilities.startsWith(definition.getName(), "$SWITCH_TABLE$") && MetadataResolver.areEquivalent(BuiltinTypes.Integer.makeArrayType(), definition.getReturnType()); }
private static boolean isSwitchMapMethod(final MethodReference method) { if (method == null) { return false; } final MethodDefinition definition = method instanceof MethodDefinition ? (MethodDefinition) method : method.resolve(); return definition != null && definition.isSynthetic() && definition.isStatic() && definition.isPackagePrivate() && StringUtilities.startsWith(definition.getName(), "$SWITCH_TABLE$") && MetadataResolver.areEquivalent(BuiltinTypes.Integer.makeArrayType(), definition.getReturnType()); }
case "values": { if (method.getParameters().isEmpty() && MetadataResolver.areEquivalent(currentType.makeArrayType(), method.getReturnType())) { if (currentType.equals(method.getReturnType().resolve()) && method.getParameters().size() == 1) {
private static boolean isSwitchMapMethod(final MethodReference method) { if (method == null) { return false; } final MethodDefinition definition = method instanceof MethodDefinition ? (MethodDefinition) method : method.resolve(); return definition != null && definition.isSynthetic() && definition.isStatic() && definition.isPackagePrivate() && StringUtilities.startsWith(definition.getName(), "$SWITCH_TABLE$") && MetadataResolver.areEquivalent(BuiltinTypes.Integer.makeArrayType(), definition.getReturnType()); }
DecompilerHelpers.writeType(output, method.getReturnType(), NameSyntax.TYPE_NAME); output.write(' ');
DecompilerHelpers.writeType(output, method.getReturnType(), NameSyntax.TYPE_NAME); output.write(' ');