private void invocationHandler(IMethodBinding methodBinding, Expression invocation) { // Obtenho informações da invocação, como nome do metodo, classe e argumentos String methodName = methodBinding.getName(); String className = methodBinding.getDeclaringClass().getQualifiedName(); List<String> params = new ArrayList<String>(methodBinding.getParameterTypes().length); for (int i = 0; i < methodBinding.getParameterTypes().length; i++) { params.add(i, methodBinding.getParameterTypes()[i].getQualifiedName()); } // Busca na base por informações do método ApiMethod apiMethod = new ApiMethodDAO() .find( sourceProjectId, ApiMethod.parseFullName(className, methodName, params), DatabaseType.PRE_PROCESSING); // Se o método esta presente na API analisada, esta invocação é incluída if (apiMethod != null) { this.invocations.addLast(invocation); mapInvocations.put(invocation, apiMethod); } }
// Metodo para tratamento de declarações de métodos private void methodDeclarationHandler(MethodDeclaration methodDeclaration, ApiClass apiClass) { IMethodBinding mb = methodDeclaration.resolveBinding(); if (mb == null) { return; } LinkedList<String> paramsType = new LinkedList<String>(); for (ITypeBinding pt : mb.getParameterTypes()) { paramsType.add(pt.getQualifiedName().toString()); } ApiMethod apiMethod = new ApiMethod(apiClass, mb.getName(), paramsType); this.setModifiers(apiMethod, methodDeclaration); if (mb.isConstructor()) { apiMethod.setConstructor(true); apiMethod.setVoid(false); apiMethod.setFunction(false); apiMethod.setReturnType(null); } else if (mb.getReturnType().getQualifiedName().equalsIgnoreCase("void")) { apiMethod.setVoid(true); apiMethod.setFunction(false); apiMethod.setReturnType(null); } else { apiMethod.setVoid(false); apiMethod.setFunction(true); apiMethod.setReturnType(mb.getReturnType().getQualifiedName()); } apiClass.getApiMethods().add(apiMethod); this.methodMap.put(mb, apiMethod); }