public static String hashMethodSignature(String signature) { SignatureParser parser = new SignatureParser(signature); StringBuilder buf = new StringBuilder("("); for (Iterator<String> i = parser.parameterSignatureIterator(); i.hasNext();) { String param = i.next(); buf.append(hashSignature(param)); } buf.append(")"); buf.append(hashSignature(parser.getReturnTypeSignature())); return buf.toString(); }
/** * Rewrite a method signature. * * @param classNameRewriter * a ClassNameRewriter * @param methodSignature * a method signature * @return the rewritten method signature */ public static String rewriteMethodSignature(ClassNameRewriter classNameRewriter, String methodSignature) { if (classNameRewriter != IdentityClassNameRewriter.instance()) { SignatureParser parser = new SignatureParser(methodSignature); StringBuilder buf = new StringBuilder(); buf.append('('); for (Iterator<String> i = parser.parameterSignatureIterator(); i.hasNext();) { buf.append(rewriteSignature(classNameRewriter, i.next())); } buf.append(')'); buf.append(rewriteSignature(classNameRewriter, parser.getReturnTypeSignature())); methodSignature = buf.toString(); } return methodSignature; }
@Override public boolean isReturnTypeReferenceType() { SignatureParser parser = new SignatureParser(getSignature()); String returnTypeSig = parser.getReturnTypeSignature(); return SignatureParser.isReferenceType(returnTypeSig); }
@Override public boolean isReturnTypeReferenceType() { SignatureParser parser = new SignatureParser(getSignature()); String returnTypeSig = parser.getReturnTypeSignature(); return SignatureParser.isReferenceType(returnTypeSig); }
static boolean compatibleParameters(String signature, String superSignature) { SignatureParser sig = new SignatureParser(signature); SignatureParser superSig = new SignatureParser(superSignature); if (sig.getNumParameters() == superSig.getNumParameters()) { Iterator<String> params = sig.parameterSignatureIterator(); Iterator<String> superParams = superSig.parameterSignatureIterator(); while (params.hasNext()) { String param = params.next(); String superParam = superParams.next(); if (areRelated(param, superParam)) { continue; } return false; } String retSig = sig.getReturnTypeSignature(); String superRetSig = superSig.getReturnTypeSignature(); if (areRelated(retSig, superRetSig)) { // it is compatible return true; } } return false; }
private void processInvokeDynamic(DismantleBytecode dbc) { String signature = dbc.getSigConstantOperand(); int numberArguments = PreorderVisitor.getNumberArguments(signature); pop(numberArguments); pushBySignature(new SignatureParser(signature).getReturnTypeSignature(), dbc); }
@Override public void visit(Code code) { SignatureParser sp = new SignatureParser(getMethodSig()); // Check to see if the method has expected return type String returnSignature = sp.getReturnTypeSignature(); if (!matchesReturnSignature(returnSignature)){ return; } if (isExplicitlyNullable()){ return; } super.visit(code); // make callbacks to sawOpcode for all opcodes bugAccumulator.reportAccumulatedBugs(); }
MethodDescriptor m = entry.getKey(); if (entry.getValue() == SideEffectStatus.NO_SIDE_EFFECT) { String returnType = new SignatureParser(m.getSignature()).getReturnTypeSignature(); if (!returnType.equals("V") || m.getName().equals(Const.CONSTRUCTOR_NAME)) { if(m.equals(GET_CLASS)) {
return; if ((argTypes.length == 2) && !argTypes[1].getSignature().equals(new SignatureParser(methodSig).getReturnTypeSignature())) { return;
String className = obj.getClassName(cpg); String returnValueSignature = new SignatureParser(signature).getReturnTypeSignature(); if ("V".equals(returnValueSignature)) { consumeStack(obj); String rv = p.getReturnTypeSignature();
private void pushByInvoke(DismantleBytecode dbc, boolean popThis) { String signature = dbc.getSigConstantOperand(); if (Const.CONSTRUCTOR_NAME.equals(dbc.getNameConstantOperand()) && signature.endsWith(")V") && popThis) { pop(PreorderVisitor.getNumberArguments(signature)); Item constructed = pop(); if (getStackDepth() > 0) { Item next = getStackItem(0); if (constructed.equals(next)) { next = new Item(next); next.source = XFactory.createReferencedXMethod(dbc); next.pc = dbc.getPC(); replace(0, next); } } return; } pop(PreorderVisitor.getNumberArguments(signature) + (popThis ? 1 : 0)); pushBySignature(new SignatureParser(signature).getReturnTypeSignature(), dbc); }
SignatureParser parser = new SignatureParser(signature); String returnType = parser.getReturnTypeSignature(); @SlashedClassName String r = ClassName.fromFieldSignature(returnType);
String newSignature = new SignatureParser(signature).getReturnTypeSignature(); Item newValue = new Item(value, newSignature); if (newValue.source == null) {
if(getXMethod().bridgeFrom() == null) { pattern = "CAA_COVARIANT_ARRAY_RETURN"; arraySignature = new SignatureParser(getMethodSig()).getReturnTypeSignature(); if (!arraySignature.equals("[Ljava/lang/Object;") && (getXMethod().isPublic() || getXMethod().isProtected()) && getXClass().isPublic()) {
String signature; if (rvo != null) { signature = new SignatureParser(rvo.getSignature()).getReturnTypeSignature(); } else if (field != null) { signature = field.getSignature();
public static String hashMethodSignature(String signature) { SignatureParser parser = new SignatureParser(signature); StringBuilder buf = new StringBuilder("("); for (Iterator<String> i = parser.parameterSignatureIterator(); i.hasNext();) { String param = i.next(); buf.append(hashSignature(param)); } buf.append(")"); buf.append(hashSignature(parser.getReturnTypeSignature())); return buf.toString(); }
@Override public boolean isReturnTypeReferenceType() { SignatureParser parser = new SignatureParser(getSignature()); String returnTypeSig = parser.getReturnTypeSignature(); return SignatureParser.isReferenceType(returnTypeSig); }
@Override public boolean isReturnTypeReferenceType() { SignatureParser parser = new SignatureParser(getSignature()); String returnTypeSig = parser.getReturnTypeSignature(); return SignatureParser.isReferenceType(returnTypeSig); }
private void processInvokeDynamic(DismantleBytecode dbc) { String signature = dbc.getSigConstantOperand(); int numberArguments = PreorderVisitor.getNumberArguments(signature); pop(numberArguments); pushBySignature(new SignatureParser(signature).getReturnTypeSignature(), dbc); }
@Override public void visit(Code code) { SignatureParser sp = new SignatureParser(getMethodSig()); // Check to see if the method has expected return type String returnSignature = sp.getReturnTypeSignature(); if (!matchesReturnSignature(returnSignature)){ return; } if (isExplicitlyNullable()){ return; } super.visit(code); // make callbacks to sawOpcode for all opcodes bugAccumulator.reportAccumulatedBugs(); }