@Override public boolean enterTernaryNode(TernaryNode ternaryNode) { if (ternaryNode.getTest() instanceof IdentNode) { addOccurence((IdentNode)ternaryNode.getTest(), false); } if (ternaryNode.getTrueExpression().getExpression() instanceof IdentNode) { addOccurence((IdentNode)ternaryNode.getTrueExpression().getExpression(), false); } if (ternaryNode.getFalseExpression().getExpression() instanceof IdentNode) { addOccurence((IdentNode)ternaryNode.getFalseExpression().getExpression(), false); } return super.enterTernaryNode(ternaryNode); }
@Override public boolean enterForNode(ForNode forNode) { if (forNode.getInit() instanceof IdentNode) { JsObject parent = modelBuilder.getCurrentObject(); while (parent instanceof JsWith) { parent = parent.getParent(); } IdentNode name = (IdentNode)forNode.getInit(); JsObjectImpl variable = (JsObjectImpl)parent.getProperty(name.getName()); if (variable != null) { Collection<TypeUsage> types = ModelUtils.resolveSemiTypeOfExpression(modelBuilder, forNode.getModify()); for (TypeUsage type : types) { if (type.getType().contains(SemiTypeResolverVisitor.ST_VAR)) { int index = type.getType().lastIndexOf(SemiTypeResolverVisitor.ST_VAR); String newType = type.getType().substring(0, index) + SemiTypeResolverVisitor.ST_ARR + type.getType().substring(index + SemiTypeResolverVisitor.ST_VAR.length()); type = new TypeUsage(newType, type.getOffset(), false); } else if (type.getType().contains(SemiTypeResolverVisitor.ST_PRO)) { int index = type.getType().lastIndexOf(SemiTypeResolverVisitor.ST_PRO); String newType = type.getType().substring(0, index) + SemiTypeResolverVisitor.ST_ARR + type.getType().substring(index + SemiTypeResolverVisitor.ST_PRO.length()); type = new TypeUsage(newType, type.getOffset(), false); } variable.addAssignment(type, forNode.getModify().getStart()); } } } return super.enterForNode(forNode); }
@Override public boolean enterTernaryNode(TernaryNode ternaryNode) { ternaryNode.getTrueExpression().accept(this); add(exp, offsetVisitor.findOffset(ternaryNode.getTrueExpression()), false); reset(); Node third = ternaryNode.getFalseExpression(); third.accept(this); int typeStart = offsetVisitor.findOffset(third); add(exp, typeStart, false); reset(); return false; }
private boolean isResultString(BinaryNode binaryNode) { boolean bResult = false; TokenType tokenType = binaryNode.tokenType(); Node lhs = binaryNode.lhs(); Node rhs = binaryNode.rhs(); if (tokenType == TokenType.ADD && ((lhs instanceof LiteralNode && ((LiteralNode) lhs).isString()) || (rhs instanceof LiteralNode && ((LiteralNode) rhs).isString()))) { bResult = true; } else { if (lhs instanceof JoinPredecessorExpression) { lhs = ((JoinPredecessorExpression)lhs).getExpression(); } if (rhs instanceof JoinPredecessorExpression) { rhs = ((JoinPredecessorExpression)rhs).getExpression(); } if (lhs instanceof BinaryNode) { bResult = isResultString((BinaryNode) lhs); } else if (rhs instanceof BinaryNode) { bResult = isResultString((BinaryNode) rhs); } } return bResult; }
JoinPredecessorExpression trueExpression = tNode.getTrueExpression(); JoinPredecessorExpression falseExpression = tNode.getFalseExpression(); if (trueExpression.getExpression().equals(objectNode) || falseExpression.getExpression().equals(objectNode)) {
BinaryNode bNode = (BinaryNode) init; if (bNode.isLogical() && ((bNode.rhs() instanceof JoinPredecessorExpression && ((JoinPredecessorExpression) bNode.rhs()).getExpression() instanceof FunctionNode) || (bNode.lhs() instanceof JoinPredecessorExpression && ((JoinPredecessorExpression) bNode.lhs()).getExpression() instanceof FunctionNode))) {