List of usage examples for org.eclipse.jdt.core.dom QualifiedName resolveConstantExpressionValue
public final Object resolveConstantExpressionValue()
From source file:com.motorolamobility.preflighting.core.internal.utils.ProjectUtils.java
License:Apache License
private static void analizeBody(final CompilationUnit javaCompilationUnit, final Method method, Block body) { body.accept(new ASTVisitor() { @Override/*from ww w.j a v a 2 s . com*/ public boolean visit(VariableDeclarationFragment node) { String varName = node.getName().getIdentifier(); ITypeBinding typeBinding = node.resolveBinding().getType(); String typeQualifiedName = typeBinding.getQualifiedName(); int modifiers = typeBinding.getModifiers(); boolean isFinal = isFinal(modifiers); boolean isStatic = isStatic(modifiers); String value = null; Expression initializer = node.getInitializer(); if (initializer != null) { value = initializer.toString(); } int lineNumber = javaCompilationUnit.getLineNumber(node.getStartPosition()); Variable variable = new Variable(); variable.setName(varName); variable.setType(typeQualifiedName); variable.setFinal(isFinal); variable.setStatic(isStatic); variable.setValue(value); variable.setLineNumber(lineNumber); method.addVariable(variable); return super.visit(node); } @Override public boolean visit(MethodInvocation node) { // Fill invoked method model. MethodInvocation invoked = node; IMethodBinding methodBinding = invoked.resolveMethodBinding(); if (methodBinding != null) { IMethodBinding methodDeclaration = methodBinding.getMethodDeclaration(); ITypeBinding declaringClass = methodDeclaration.getDeclaringClass(); String declaringClassName = ""; if (declaringClass != null) { declaringClassName = declaringClass.getQualifiedName(); } String methodSimpleName = methodBinding.getName(); int lineNumber = javaCompilationUnit.getLineNumber(invoked.getStartPosition()); String returnType = methodBinding.getReturnType().getQualifiedName(); int methodModifiers = methodBinding.getModifiers(); boolean isVirtual = isMethodVirtual(methodModifiers); String sourceFileFullPath = ((File) javaCompilationUnit.getProperty(JAVA_FILE_PROPERTY)) .getAbsolutePath(); // Retrieve parameter types and look for R constants used // within method arguments List arguments = invoked.arguments(); List<String> parameterTypes = new ArrayList<String>(arguments.size()); List<String> parameterNames = new ArrayList<String>(arguments.size()); for (Object argument : arguments) { Expression argumentExpression = (Expression) argument; ITypeBinding typeBinding = argumentExpression.resolveTypeBinding(); String parameterType = ""; String parameterName = ""; if (typeBinding != null) { parameterType = typeBinding.getName(); parameterName = argumentExpression.toString(); } else { continue; } parameterTypes.add(parameterType); parameterNames.add(parameterName); if (argumentExpression instanceof QualifiedName) /* * Can * be a * constant * access */ { QualifiedName qualifiedName = (QualifiedName) argumentExpression; String fullQualifiedName = qualifiedName.getQualifier().getFullyQualifiedName(); if (fullQualifiedName.startsWith("R.")) /* * Accessing * a R * constant */ { Constant constant = new Constant(); constant.setSourceFileFullPath(sourceFileFullPath); constant.setLine(lineNumber); constant.setType(parameterType); Object constantExpressionValue = qualifiedName.resolveConstantExpressionValue(); if (constantExpressionValue != null) { String constantValueHex = constantExpressionValue.toString(); if (constantExpressionValue instanceof Integer) { Integer integerValue = (Integer) constantExpressionValue; constantValueHex = Integer.toHexString(integerValue); } constant.setValue(constantValueHex); method.getInstructions().add(constant); } } } } // Get the name of the object who owns the method being // called. Expression expression = invoked.getExpression(); String objectName = null; if ((expression != null) && (expression instanceof SimpleName)) { SimpleName simpleName = (SimpleName) expression; objectName = simpleName.getIdentifier(); } // Get the variable, if any, that received the method // returned value ASTNode parent = invoked.getParent(); String assignedVariable = null; if (parent instanceof VariableDeclarationFragment) { VariableDeclarationFragment variableDeclarationFragment = (VariableDeclarationFragment) parent; assignedVariable = variableDeclarationFragment.getName().getIdentifier(); } else if (parent instanceof Assignment) { Assignment assignment = (Assignment) parent; Expression leftHandSide = assignment.getLeftHandSide(); if (leftHandSide instanceof SimpleName) { SimpleName name = (SimpleName) leftHandSide; assignedVariable = name.getIdentifier(); } } // Fill Invoke object and add to the method model. Invoke invoke = new Invoke(); invoke.setLine(lineNumber); invoke.setMethodName(methodSimpleName); invoke.setObjectName(objectName); invoke.setType(getMethodTypeString(isVirtual)); invoke.setReturnType(returnType); invoke.setClassCalled(declaringClassName); invoke.setParameterTypes(parameterTypes); invoke.setParameterNames(parameterNames); invoke.setSourceFileFullPath(sourceFileFullPath); invoke.setAssignedVariable(assignedVariable); method.getInstructions().add(invoke); } return super.visit(node); } @Override public boolean visit(VariableDeclarationExpression node) { return super.visit(node); } @Override public boolean visit(Assignment node) { Expression lhs = node.getLeftHandSide(); String name = ""; if (lhs instanceof SimpleName) { SimpleName simpleName = (SimpleName) lhs; name = simpleName.getIdentifier(); } ITypeBinding typeBinding = lhs.resolveTypeBinding(); String type = typeBinding.getName(); // method.addAssigment(assignment); // TODO Auto-generated method stub return super.visit(node); } }); }
From source file:net.sf.j2s.core.astvisitors.DependencyASTVisitor.java
License:Open Source License
public boolean visit(QualifiedName node) { Object constValue = node.resolveConstantExpressionValue(); if (constValue != null && (constValue instanceof Number || constValue instanceof Character || constValue instanceof String || constValue instanceof Boolean) && isSimpleQualified(node)) { //buffer.append(constValue); return false; }//from w ww .j a va2s.c o m return super.visit(node); }
From source file:org.ofbiz.plugin.analysis.Analysis.java
License:Apache License
private void analyzeOutMap(final AnalysisContext ctx, ControlFlowGraph cfg) throws FinderException { //TODO: if the in-map also serves as out-map then the initial keys should be available // get mandatory keys for out-map final List<String> mandatoryKeys = new ArrayList<String>(); List<Attribute> attributes = new AttributeFinder(ctx.service).getAttributes(); for (Attribute attr : attributes) { if (!attr.isOptional() && (attr.getMode().getLiteral().equals("OUT") || attr.getMode().getLiteral().equals("INOUT"))) { mandatoryKeys.add(attr.getName()); }/* ww w . java2 s.c om*/ } if (mandatoryKeys.isEmpty()) return; // skip analysis AvailableMapKeys amk = new AvailableMapKeys(cfg); amk.computeFixPoint(); // find all relevant return statements in methodbody final List<ReturnStatement> returns = new ArrayList<ReturnStatement>(); ctx.method.accept(new ASTVisitor() { @Override public boolean visit(ReturnStatement returnStmt) { Expression expr = returnStmt.getExpression(); // basic case, e.g., return out; if (expr instanceof SimpleName) { returns.add(returnStmt); return false; } // special cases if (expr instanceof MethodInvocation) { MethodInvocation mi = (MethodInvocation) expr; IMethodBinding binding = mi.resolveMethodBinding(); // ignore ServiceUtil.java methods if (binding.getDeclaringClass().getQualifiedName().equals("org.ofbiz.service.ServiceUtil")) { return false; } // handle the toMap methods if (binding.getDeclaringClass().getQualifiedName().equals("org.ofbiz.base.util.UtilMisc") && binding.getName().equals("toMap")) { Set<String> keys = new HashSet<String>(); //TODO: handle toMap(String[]) for (int i = 0; i < mi.arguments().size(); i += 2) { // collect keys from toMap(..)-call if (mi.arguments().get(i) instanceof StringLiteral) { keys.add(((StringLiteral) mi.arguments().get(i)).getLiteralValue()); } // handle special case of service execution errors (ModelService-class) if (mi.arguments().get(i) instanceof QualifiedName && mi.arguments().get(i + 1) instanceof QualifiedName) { QualifiedName keyQN = (QualifiedName) mi.arguments().get(i); QualifiedName valueQN = (QualifiedName) mi.arguments().get(i + 1); String key = keyQN.resolveConstantExpressionValue().toString(); String value = valueQN.resolveConstantExpressionValue().toString(); // service execution errors are ignored if (key.equals("responseMessage") && (value.equals("error") || value.equals("fail"))) { return false; } else { keys.add(key); } } } for (String key : mandatoryKeys) { if (!keys.contains(key)) { ctx.error(returnStmt, "Missing mandatory output-parameter: " + key); } } return false; } } ctx.warn(returnStmt, "Unable to analyze complex returns: " + Util.getFirstLine(returnStmt)); return false; } }); // check key usage for each return statement for (ReturnStatement stmt : returns) { String variable = ((SimpleName) stmt.getExpression()).getIdentifier(); // is there a statement on this path in the control flow which // uses the out-map as a parameter? e.g., doSomething( out ); if (amk.isNameUsedInInterproceduralCall(variable)) { for (Statement s : amk.getInterproceduralCalls(variable)) { ctx.warn(s, "Unable to analyze interprocedural calls"); } } else { // regular analysis Set<Pair<String, String>> outSet = amk.getOutSet(stmt); for (String key : mandatoryKeys) { if (!outSet.contains(new Pair<String, String>(variable, key))) { if (outSet.contains(new Pair<String, String>(variable, "responseMessage")) || outSet.contains(new Pair<String, String>(variable, "errorMessage"))) { // might be the special case of service execution error (ModelService-class) ctx.warn(stmt, "Might be missing mandatory output parameter: " + key); } else { ctx.error(stmt, "Missing mandatory output-parameter: " + key); } } } } } }
From source file:org.ofbiz.plugin.analysis.AvailableMapKeys.java
License:Apache License
/** returns a pair (map x key) from a java.util.Map.put()-operation */ private Pair<String, String> getPutOperation(MethodInvocation mi) { Expression expr = mi.getExpression(); if (expr == null) return null; ITypeBinding binding = expr.resolveTypeBinding(); if ("java.util.Map".equals(binding.getQualifiedName()) && "put".equals(mi.getName().getIdentifier())) { if (!(expr instanceof SimpleName)) { // special case, screensAtt.getContext().put("formStringRenderer", foFormRenderer); return null; }/*from www . j a v a 2 s.c om*/ SimpleName variable = (SimpleName) expr; Object key = mi.arguments().get(0); // ordinary strings if (key instanceof StringLiteral) { String keyContent = key.toString().replace("\"", ""); return new Pair<String, String>(variable.getIdentifier(), keyContent); // constants } else if (key instanceof QualifiedName) { QualifiedName name = (QualifiedName) key; Object obj = name.resolveConstantExpressionValue(); if (obj != null && obj instanceof String) { return new Pair<String, String>(variable.getIdentifier(), obj.toString()); } } } return null; }