public String getInternalName() { if (_internalName == null) { _internalName = super.getInternalName(); } return _internalName; }
@Override public String getInternalName() { if (_baseType != null) { return _baseType.getInternalName(); } return _interfaces.get(0).getInternalName(); }
/** * @param type * @return true if all methods of given type are known not to produce * side-effects */ public static boolean isSideEffectFreeType(TypeReference type) { return SIDE_EFFECT_FREE_TYPES.contains(type.getInternalName()) || type.getInternalName().startsWith("java/time/"); }
public static boolean isRandomClass(TypeReference type) { String typeName = type.getInternalName(); return typeName.equals("java/util/Random") || typeName.equals("java/security/SecureRandom") || typeName.equals("java/util/concurrent/ThreadLocalRandom") || typeName.equals("java/util/SplittableRandom") || typeName.startsWith("cern/jet/random/engine/"); }
/** * @param type * @return true if type is known to be mutable */ public static boolean isMutable(TypeReference type) { if (type.isArray()) return true; return MUTABLE_TYPES.contains(type.getInternalName()); }
/** * @param type * @return true if type is known to be immutable */ public static boolean isImmutable(TypeReference type) { if (type == null) return false; if(BOXED_TYPES.contains(type.getInternalName()) || isString(type)) return true; return false; }
private static boolean eraseNotNeeded(final TypeReference type) { return type == null || type instanceof RawType || type.isPrimitive() || StringUtilities.equals(type.getInternalName(), CommonTypeReferences.String.getInternalName()); }
@ClassVisitor public boolean checkClass(TypeDefinition td) { for(CustomAnnotation ca : td.getAnnotations()) { String name = ca.getAnnotationType().getInternalName(); if(name.equals("net/jcip/annotations/Immutable") || name.equals("javax/annotation/concurrent/Immutable")) return true; } return false; }
public static MethodHandle getMethodHandle(DynamicCallSite dcs) { MethodHandle mh = dcs.getBootstrapMethodHandle(); if (mh.getMethod().getDeclaringType().getInternalName().equals("java/lang/invoke/LambdaMetafactory")) { List<Object> args = dcs.getBootstrapArguments(); if (args.size() > 1 && args.get(1) instanceof MethodHandle) { MethodHandle actualHandle = (MethodHandle) args.get(1); return actualHandle; } } return null; }
@Override protected TypeDefinition resolveCore(final TypeReference type) { VerifyArgument.notNull(type, "type"); return resolveType(type.getInternalName(), false); }
private boolean isMutableCollectionFactory(Expression value, MethodReference mr) { if (mr.getName().equals("asList") && mr.getDeclaringType().getInternalName().equals("java/util/Arrays") && value.getArguments().size() == 1 && !isEmptyArray(Exprs.getChild(value, 0))) return true; if ((mr.getName().equals("newArrayList") || mr.getName().equals("newLinkedList")) && mr.getDeclaringType().getInternalName().equals("com/google/common/collect/Lists")) return true; if ((mr.getName().equals("newHashSet") || mr.getName().equals("newTreeSet")) && mr.getDeclaringType().getInternalName().equals("com/google/common/collect/Sets")) return true; return false; }
@Deprecated public boolean test(final Annotation a) { final TypeReference t = a.getType().getUserData(Keys.TYPE_REFERENCE); return t != null && StringUtilities.equals(t.getInternalName(), DEPRECATED_ANNOTATION_NAME); } };
@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; }
private static boolean isBufferedStream(Expression expr) { if (expr.getCode() == AstCode.InitObject) { MethodReference ctor = (MethodReference) expr.getOperand(); if (ctor.getDeclaringType().getInternalName().equals("java/io/BufferedOutputStream") && ctor.getSignature().equals("(Ljava/io/OutputStream;)V")) { return true; } } return false; }
private static boolean isByte(Expression expr) { if (expr.getCode() == AstCode.I2L) return isByte(Exprs.getChild(expr, 0)); TypeReference type = expr.getInferredType(); return type != null && type.getInternalName().equals("B"); }
private static int getTypeRank(@NotNull final TypeReference type) { final TypeReference unboxedType = MetadataHelper.getUnderlyingPrimitiveTypeOrSelf(type); final Integer rank = TYPE_TO_RANK_MAP.get(unboxedType.getSimpleType()); if (rank != null) { return rank; } if (StringUtilities.equals(type.getInternalName(), STRING_DESCRIPTOR)) { return STRING_RANK; } return Integer.MAX_VALUE; }
private void check(MethodHandle handle, TypeReference functionalInterface, MethodContext mc, Expression expr) { if(functionalInterface.getInternalName().equals("java/util/Comparator") && handle.getHandleType() == MethodHandleType.InvokeStatic) { MethodReference mr = handle.getMethod(); if((mr.getName().equals("min") || mr.getName().equals("max")) && mr.getDeclaringType().getPackageName().equals("java.lang")) { mc.report("MaxMinMethodReferenceForComparator", 0, expr, Roles.METHOD_REFERENCE.create(mr)); } } } }
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; }
public MemberInfo(MemberReference mr) { this.type = new TypeInfo(mr.getDeclaringType().getInternalName()); this.name = mr.getName(); this.signature = mr.getErasedSignature(); }
@Override public Boolean visitRawType(final RawType t, final TypeReference s) { return s.getSimpleType() == JvmType.Object && !s.isGenericType() && StringUtilities.equals(t.getInternalName(), s.getInternalName()); }