/** * @return true if we are in a script body, where all variables declared are no longer * local variables but are properties */ public boolean isInScriptBody() { if (classNode.isScriptBody()) { return true; } else { return classNode.isScript() && methodNode != null && methodNode.getName().equals("run"); } }
private Variable findClassMember(ClassNode cn, String name) { if (cn == null) return null; if (cn.isScript()) { return new DynamicVariable(name, false); } for (FieldNode fn : cn.getFields()) { if (fn.getName().equals(name)) return fn; } for (MethodNode mn : cn.getMethods()) { String pName = getPropertyName(mn); if (name.equals(pName)) { PropertyNode property = new PropertyNode(name, mn.getModifiers(), ClassHelper.OBJECT_TYPE, cn, null, null, null); property.getField().setHasNoRealSourcePosition(true); property.getField().setSynthetic(true); property.getField().setDeclaringClass(cn); property.setDeclaringClass(cn); return property; } } for (PropertyNode pn : cn.getProperties()) { if (pn.getName().equals(name)) return pn; } Variable ret = findClassMember(cn.getSuperClass(), name); if (ret != null) return ret; return findClassMember(cn.getOuterClass(), name); }
if (!baseScriptType.isScript()) { addError("Declared type " + baseScriptType + " does not extend groovy.lang.Script class!", parent); return;
private void changeBaseScriptTypeFromDeclaration(final SourceUnit source, final DeclarationExpression de, final AnnotationNode node) { if (de.isMultipleAssignmentDeclaration()) { addError("Annotation " + MY_TYPE_NAME + " not supported with multiple assignment notation.", de); return; } ClassNode cNode = de.getDeclaringClass(); ClassNode baseScriptType = de.getVariableExpression().getType().getPlainNodeReference(); if (baseScriptType.isScript()) { if (!(de.getRightExpression() instanceof EmptyExpression)) { addError("Annotation " + MY_TYPE_NAME + " not supported with variable assignment.", de); return; } de.setRightExpression(new VariableExpression("this")); } else { baseScriptType = BASE_SCRIPT_TYPE; } Expression value = node.getMember("value"); if (value != null) { addError("Annotation " + MY_TYPE_NAME + " cannot have member 'value' if used on a declaration.", value); return; } changeBaseScriptType(source, de, cNode, baseScriptType, node); }
if (!baseScriptType.isScript()) { addError("Declared type " + baseScriptType + " does not extend groovy.lang.Script class!", parent); return;
final List<ClassNode> classes = tree.getClasses(); for (ClassNode classNode : classes) { if (classNode.isScript()) { visitClass(classNode);
/** * @return true if we are in a script body, where all variables declared are no longer * local variables but are properties */ public boolean isInScriptBody() { if (classNode.isScriptBody()) { return true; } else { return classNode.isScript() && methodNode != null && methodNode.getName().equals("run"); } }
public void visitModuleNode(ModuleNode moduleNode) { //visit imports like import java.io.File and import java.io.File as MyFile for (ImportNode importNode : moduleNode.getImports()) { visitNode(importNode.getType()); } //visit static imports like import java.lang.Math.* for (ImportNode importNode : moduleNode.getStaticStarImports().values()) { visitNode(importNode.getType()); } //visit static imports like import java.lang.Math.cos for (ImportNode importNode : moduleNode.getStaticImports().values()) { visitNode(importNode.getType()); } for (ClassNode classNode : moduleNode.getClasses()) { if (!classNode.isScript()) { visitClass(classNode); } else { for (MethodNode method : moduleNode.getMethods()) { visitMethod(method); } } } //visit Statements that are not inside a class if (!moduleNode.getStatementBlock().isEmpty()) { visitBlockStatement(moduleNode.getStatementBlock()); } }
/** * @return true if we are in a script body, where all variables declared are no longer * local variables but are properties */ protected boolean isInScriptBody() { if (classNode.isScriptBody()) { return true; } else { return classNode.isScript() && methodNode != null && methodNode.getName().equals("run"); } }
DeclarationExpression de = (DeclarationExpression) parent; ClassNode cNode = de.getDeclaringClass(); if (!cNode.isScript()) { addError("Annotation " + MY_TYPE_NAME + " can only be used within a Script.", parent); return;
/** * @return true if we are in a script body, where all variables declared are no longer * local variables but are properties */ protected boolean isInScriptBody() { if (classNode.isScriptBody()) { return true; } else { return classNode.isScript() && methodNode != null && methodNode.getName().equals("run"); } }
ClassExpression ce = (ClassExpression) left; String error = "you tried to assign a value to the class '" + ce.getType().getName() + "'"; if (ce.getType().isScript()) { error += ". Do you have a script with this name?";
/** * @return true if we are in a script body, where all variables declared are no longer * local variables but are properties */ protected boolean isInScriptBody() { if (classNode.isScriptBody()) { return true; } else { return classNode.isScript() && methodNode != null && methodNode.getName().equals("run"); } }
/** * @return true if the ASTNode was generated (synthetic) rather than from the "real" input source code. */ public static boolean isFromGeneratedSourceCode(ASTNode node) { return node.getLineNumber() < 0 || (node instanceof ClassNode && ((ClassNode)node).isScript()); }
/** * Checks whether the given {@link org.codehaus.groovy.ast.ClassNode} is a candidate * for applying interface contracts. * * @param type the {@link org.codehaus.groovy.ast.ClassNode} to be checked * @return whether the given <tt>type</tt> is a candidate for applying interface contract assertions */ public static boolean isInterfaceContractsCandidate(final ClassNode type) { return type != null && type.isInterface() && !type.isSynthetic() && !type.isEnum() && !type.isGenericsPlaceHolder() && !type.isScript() && !type.isScriptBody() && !isRuntimeClass(type); }
/** * @return true if this method is the run method from a script */ public boolean isScriptBody() { return getDeclaringClass() != null && getDeclaringClass().isScript() && getName().equals("run") && getColumnNumber() == -1; }
public void visitClass(ClassNode node) { pushState(); currentClass = node; boolean dynamicMode = node.isScript(); currentScope.setDynamicResolving(dynamicMode); currentScope.setClassScope(node); super.visitClass(node); popState(); }
public void visitClass(ClassNode node) { pushState(); currentClass = node; boolean dynamicMode = node.isScript(); currentScope.setDynamicResolving(dynamicMode); currentScope.setClassScope(node); super.visitClass(node); popState(); }
public void visit(ASTNode[] nodes, SourceUnit sourceUnit) throws ChromatticASTTransformationException { for (ClassNode classNode : (List<ClassNode>) sourceUnit.getAST().getClasses()) { if (!classNode.isScript() && !classNode.isInterface() && isInChromatticHierarchy(classNode)) { visitClass(classNode); } } }
public void visitClass(ClassNode node) { pushState(); currentClass = node; boolean dynamicMode = node.isScript(); currentScope.setDynamicResolving(dynamicMode); currentScope.setClassScope(node); super.visitClass(node); popState(); }