@Override public boolean enterIndexNode(IndexNode indexNode) { indexNode.getBase().accept(this); return false; }
@Override public boolean enterCallNode(CallNode callNode) { callNode.getFunction().accept(this); return false; }
@Override public boolean enterAccessNode(AccessNode accessNode) { if (typeOffset == -1) { typeOffset = accessNode.getFinish() - accessNode.getProperty().length(); } accessNode.getBase().accept(this); exp.add(accessNode.getProperty()); return false; }
@Override public boolean enterIndexNode(IndexNode indexNode) { addToPath(indexNode); indexNode.getBase().accept(this); int size = exp.size(); if (size > 1 && ST_PRO.equals(exp.get(size - 2))) { exp.remove(size - 2); } if (exp.isEmpty()) { exp.add(ST_ARR); } else { boolean propertyAccess = false; if (indexNode.getIndex() instanceof LiteralNode) { LiteralNode lNode = (LiteralNode)indexNode.getIndex(); if (lNode.isString()) { exp.add(ST_PRO); exp.add(lNode.getPropertyName()); propertyAccess = true; } } if (!propertyAccess) { exp.add(exp.size() - 1, ST_ARR); } } //add(exp, indexNode.getStart(), false); //reset(); return false; }
@Override public boolean enterCallNode(CallNode callNode) { addToPath(callNode); if (!(callNode.getFunction() instanceof FunctionNode)) { callNode.getFunction().accept(this); } if (exp.size() == 2 && ST_NEW.equals(exp.get(0))) { return false; } if (callNode.getFunction() instanceof AccessNode) { int size = exp.size(); if (size > 1 && ST_PRO.equals(exp.get(size - 2))) { exp.remove(size - 2); } } else if (callNode.getFunction() instanceof FunctionNode) { FunctionNode function = (FunctionNode) callNode.getFunction(); String name = builder.getFunctionName(function); // String name = function.getIdent().getName(); add(new TypeUsage(ST_CALL + name, function.getStart(), false)); return false; } if (exp.isEmpty()) { exp.add(ST_CALL); } else { exp.add(exp.size() - 1, ST_CALL); } return false; }
expression.accept(this); removeFromPathTheLast();