public void parse(String signature) { int parenthesisCloseIndex = signature.indexOf(')'); if (parenthesisCloseIndex > -1) { parseParameters(signature, parenthesisCloseIndex); parseReturnValue(signature, parenthesisCloseIndex); } }
private void parseReturnValue(String signature, int parenthesisCloseIndex) { String retValPart = signature.substring(parenthesisCloseIndex + 1); List<String> retValTypes = parseTypes(retValPart); returnType = retValTypes.get(0); }
private Optional<CtMethod> findMatchingMethod(CtMethod method, List<CtMethod> candidates) { Optional<CtMethod> found = Optional.absent(); SignatureParser methodSignatureParser = new SignatureParser(); methodSignatureParser.parse(method.getSignature()); List<CtMethod> methodsWithSameParameters = new ArrayList<>(); for (CtMethod candidate : candidates) { boolean parameterListsEqual = true; List<String> probeParameters = methodSignatureParser.getParameters(); SignatureParser candidateSignatureParser = new SignatureParser(); candidateSignatureParser.parse(candidate.getSignature()); List<String> candidateParameters = candidateSignatureParser.getParameters(); if (probeParameters.size() != candidateParameters.size()) { parameterListsEqual = false; } else if (methodsWithSameParameters.size() > 1) { CtMethod methodWithSameReturnType = null; String probeReturnType = methodSignatureParser.getReturnType(); for (CtMethod candidate : methodsWithSameParameters) { SignatureParser candidateSignatureParser = new SignatureParser(); candidateSignatureParser.parse(candidate.getSignature()); String candidateReturnType = candidateSignatureParser.getReturnType(); if (probeReturnType.equals(candidateReturnType)) { methodWithSameReturnType = candidate;
@Override public boolean matches(CtBehavior ctBehavior) { boolean classMatches = true; boolean methodMatches = true; boolean parameterMatches = true; CtClass declaringClass = ctBehavior.getDeclaringClass(); String name = declaringClass.getName(); if (!classPattern.matcher(name).matches()) { classMatches = false; } String methodName = ctBehavior.getName(); if (!methodPattern.matcher(methodName).matches()) { methodMatches = false; } SignatureParser signatureParser = new SignatureParser(); signatureParser.parse(ctBehavior.getSignature()); List<String> parameters = signatureParser.getParameters(); if (parameters.size() != parameterPatterns.size()) { parameterMatches = false; } else { for (int i = 0; i < parameters.size(); i++) { Pattern pattern = parameterPatterns.get(i); if (!pattern.matcher(parameters.get(i)).matches()) { parameterMatches = false; } } } return (classMatches && methodMatches && parameterMatches); }
private Optional<CtMethod> findMatchingMethod(CtMethod method, List<CtMethod> candidates) { Optional<CtMethod> found = Optional.absent(); SignatureParser methodSignatureParser = new SignatureParser(); methodSignatureParser.parse(method.getSignature()); List<CtMethod> methodsWithSameParameters = new ArrayList<>(); for (CtMethod candidate : candidates) { boolean parameterListsEqual = true; List<String> probeParameters = methodSignatureParser.getParameters(); SignatureParser candidateSignatureParser = new SignatureParser(); candidateSignatureParser.parse(candidate.getSignature()); List<String> candidateParameters = candidateSignatureParser.getParameters(); if (probeParameters.size() != candidateParameters.size()) { parameterListsEqual = false; } else if (methodsWithSameParameters.size() > 1) { CtMethod methodWithSameReturnType = null; String probeReturnType = methodSignatureParser.getReturnType(); for (CtMethod candidate : methodsWithSameParameters) { SignatureParser candidateSignatureParser = new SignatureParser(); candidateSignatureParser.parse(candidate.getSignature()); String candidateReturnType = candidateSignatureParser.getReturnType(); if (probeReturnType.equals(candidateReturnType)) { methodWithSameReturnType = candidate;
@Override public boolean matches(CtBehavior ctBehavior) { boolean classMatches = true; boolean methodMatches = true; boolean parameterMatches = true; CtClass declaringClass = ctBehavior.getDeclaringClass(); String name = declaringClass.getName(); if (!classPattern.matcher(name).matches()) { classMatches = false; } String methodName = ctBehavior.getName(); if (!methodPattern.matcher(methodName).matches()) { methodMatches = false; } SignatureParser signatureParser = new SignatureParser(); signatureParser.parse(ctBehavior.getSignature()); List<String> parameters = signatureParser.getParameters(); if (parameters.size() != parameterPatterns.size()) { parameterMatches = false; } else { for (int i = 0; i < parameters.size(); i++) { Pattern pattern = parameterPatterns.get(i); if (!pattern.matcher(parameters.get(i)).matches()) { parameterMatches = false; } } } return (classMatches && methodMatches && parameterMatches); }
public void parse(String signature) { int parenthesisCloseIndex = signature.indexOf(')'); if (parenthesisCloseIndex > -1) { parseParameters(signature, parenthesisCloseIndex); parseReturnValue(signature, parenthesisCloseIndex); } }
private void parseReturnValue(String signature, int parenthesisCloseIndex) { String retValPart = signature.substring(parenthesisCloseIndex + 1); List<String> retValTypes = parseTypes(retValPart); returnType = retValTypes.get(0); }
private void parseParameters(String signature, int parenthesisCloseIndex) { int parenthesisOpenIndex = signature.indexOf('('); if (parenthesisOpenIndex < 0) { throw new JApiCmpException(JApiCmpException.Reason.IllegalState, "Signature does not contain '('."); } if (parenthesisCloseIndex - parenthesisOpenIndex < 1) { throw new JApiCmpException(JApiCmpException.Reason.IllegalState, "Signature must contain the char '(' before the char ')'."); } String paramPart = signature.substring(parenthesisOpenIndex + 1, parenthesisCloseIndex); List<String> paramTypes = parseTypes(paramPart); parameters.clear(); parameters.addAll(paramTypes); }
private void parseParameters(String signature, int parenthesisCloseIndex) { int parenthesisOpenIndex = signature.indexOf('('); if (parenthesisOpenIndex < 0) { throw new JApiCmpException(JApiCmpException.Reason.IllegalState, "Signature does not contain '('."); } if (parenthesisCloseIndex - parenthesisOpenIndex < 1) { throw new JApiCmpException(JApiCmpException.Reason.IllegalState, "Signature must contain the char '(' before the char ')'."); } String paramPart = signature.substring(parenthesisOpenIndex + 1, parenthesisCloseIndex); List<String> paramTypes = parseTypes(paramPart); parameters.clear(); parameters.addAll(paramTypes); }