### Eclipse Workspace Patch 1.0 #P org.codehaus.groovy Index: src/org/codehaus/groovy/classgen/Verifier.java =================================================================== --- src/org/codehaus/groovy/classgen/Verifier.java (revision 19344) +++ src/org/codehaus/groovy/classgen/Verifier.java (working copy) @@ -17,24 +17,55 @@ import groovy.lang.GroovyClassLoader; import groovy.lang.GroovyObject; -import groovy.lang.MetaClass; import groovy.lang.GroovyObjectSupport; -import org.codehaus.groovy.ast.*; -import org.codehaus.groovy.ast.expr.*; -import org.codehaus.groovy.ast.stmt.*; +import groovy.lang.MetaClass; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.codehaus.groovy.ast.ClassHelper; +import org.codehaus.groovy.ast.ClassNode; +import org.codehaus.groovy.ast.CodeVisitorSupport; +import org.codehaus.groovy.ast.ConstructorNode; +import org.codehaus.groovy.ast.FieldNode; +import org.codehaus.groovy.ast.GenericsType; +import org.codehaus.groovy.ast.GroovyClassVisitor; +import org.codehaus.groovy.ast.InnerClassNode; +import org.codehaus.groovy.ast.MethodNode; +import org.codehaus.groovy.ast.Parameter; +import org.codehaus.groovy.ast.PropertyNode; +import org.codehaus.groovy.ast.VariableScope; +import org.codehaus.groovy.ast.expr.ArgumentListExpression; +import org.codehaus.groovy.ast.expr.BinaryExpression; +import org.codehaus.groovy.ast.expr.CastExpression; +import org.codehaus.groovy.ast.expr.ConstantExpression; +import org.codehaus.groovy.ast.expr.ConstructorCallExpression; +import org.codehaus.groovy.ast.expr.Expression; +import org.codehaus.groovy.ast.expr.FieldExpression; +import org.codehaus.groovy.ast.expr.MethodCallExpression; +import org.codehaus.groovy.ast.expr.VariableExpression; +import org.codehaus.groovy.ast.stmt.BlockStatement; +import org.codehaus.groovy.ast.stmt.ExpressionStatement; +import org.codehaus.groovy.ast.stmt.ReturnStatement; +import org.codehaus.groovy.ast.stmt.Statement; +import org.codehaus.groovy.reflection.ClassInfo; import org.codehaus.groovy.runtime.MetaClassHelper; import org.codehaus.groovy.syntax.RuntimeParserException; import org.codehaus.groovy.syntax.Token; import org.codehaus.groovy.syntax.Types; -import org.codehaus.groovy.reflection.ClassInfo; import org.objectweb.asm.Label; import org.objectweb.asm.MethodVisitor; import org.objectweb.asm.Opcodes; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.util.*; - /** * Verifies the AST node and adds any defaulted AST code before * bytecode generation occurs. @@ -375,27 +406,27 @@ protected void addTimeStamp(ClassNode node) { if(node.getDeclaredField(Verifier.__TIMESTAMP) == null) { // in case if verifier visited the call already - FieldNode timeTagField = new FieldNode( - Verifier.__TIMESTAMP, - ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC, - ClassHelper.Long_TYPE, - //"", - node, - new ConstantExpression(System.currentTimeMillis())); - // alternatively , FieldNode timeTagField = SourceUnit.createFieldNode("public static final long __timeStamp = " + System.currentTimeMillis() + "L"); - timeTagField.setSynthetic(true); - node.addField(timeTagField); - - timeTagField = new FieldNode( - Verifier.__TIMESTAMP__ + String.valueOf(System.currentTimeMillis()), - ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC, - ClassHelper.Long_TYPE, - //"", - node, - new ConstantExpression((long) 0)); - // alternatively , FieldNode timeTagField = SourceUnit.createFieldNode("public static final long __timeStamp = " + System.currentTimeMillis() + "L"); - timeTagField.setSynthetic(true); - node.addField(timeTagField); +// FieldNode timeTagField = new FieldNode( +// Verifier.__TIMESTAMP, +// ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC, +// ClassHelper.Long_TYPE, +// //"", +// node, +// new ConstantExpression(System.currentTimeMillis())); +// // alternatively , FieldNode timeTagField = SourceUnit.createFieldNode("public static final long __timeStamp = " + System.currentTimeMillis() + "L"); +// timeTagField.setSynthetic(true); +// node.addField(timeTagField); +// +// timeTagField = new FieldNode( +// Verifier.__TIMESTAMP__ + String.valueOf(System.currentTimeMillis()), +// ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC, +// ClassHelper.Long_TYPE, +// //"", +// node, +// new ConstantExpression((long) 0)); +// // alternatively , FieldNode timeTagField = SourceUnit.createFieldNode("public static final long __timeStamp = " + System.currentTimeMillis() + "L"); +// timeTagField.setSynthetic(true); +// node.addField(timeTagField); } } #P org.eclipse.jdt.core Index: dom/org/eclipse/jdt/core/dom/ASTConverter.java =================================================================== --- dom/org/eclipse/jdt/core/dom/ASTConverter.java (revision 18719) +++ dom/org/eclipse/jdt/core/dom/ASTConverter.java (working copy) @@ -1291,7 +1291,15 @@ this.compilationUnitSource = source; this.compilationUnitSourceLength = source.length; this.scanner.setSource(source, unit.compilationResult); + // GROOVY start + /* old code: CompilationUnit compilationUnit = new CompilationUnit(this.ast); + * new code: */ + CompilationUnit compilationUnit = unit.buildDomCompilationUnit(this.ast); + if (compilationUnit==null ) { + compilationUnit = new CompilationUnit(this.ast); + } + // GROOVY end compilationUnit.setStatementsRecoveryData(unit.compilationResult.recoveryScannerData); // Parse comments Index: dom/org/eclipse/jdt/core/dom/CompilationUnit.java =================================================================== --- dom/org/eclipse/jdt/core/dom/CompilationUnit.java (revision 18719) +++ dom/org/eclipse/jdt/core/dom/CompilationUnit.java (working copy) @@ -203,6 +203,9 @@ * * @param ast the AST that is to own this node */ + // GROOVY start: made protected from default + protected + // GROOVY end CompilationUnit(AST ast) { super(ast); } @@ -210,6 +213,9 @@ /* (omit javadoc for this method) * Method declared on ASTNode. */ + // GROOVY start: make protected (from default) + protected + // GROOVY end void accept0(ASTVisitor visitor) { boolean visitChildren = visitor.visit(this); if (visitChildren) { Index: compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java =================================================================== --- compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java (revision 18719) +++ compiler/org/eclipse/jdt/internal/compiler/ast/CompilationUnitDeclaration.java (working copy) @@ -16,6 +16,7 @@ import org.eclipse.jdt.core.compiler.CategorizedProblem; import org.eclipse.jdt.core.compiler.CharOperation; import org.eclipse.jdt.core.compiler.IProblem; +import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.internal.compiler.ASTVisitor; import org.eclipse.jdt.internal.compiler.ClassFile; import org.eclipse.jdt.internal.compiler.CompilationResult; @@ -692,5 +693,9 @@ public CompilationUnitScope buildCompilationUnitScope(LookupEnvironment lookupEnvironment) { return new CompilationUnitScope(this,lookupEnvironment); } + public org.eclipse.jdt.core.dom.CompilationUnit buildDomCompilationUnit(AST ast) { + return null; + } // GROOVY end + } #P org.eclipse.jdt.groovy.core Index: src/org/codehaus/jdt/groovy/internal/compiler/ast/GroovyCompilationUnitDeclaration.java =================================================================== --- src/org/codehaus/jdt/groovy/internal/compiler/ast/GroovyCompilationUnitDeclaration.java (revision 19600) +++ src/org/codehaus/jdt/groovy/internal/compiler/ast/GroovyCompilationUnitDeclaration.java (working copy) @@ -56,6 +56,7 @@ import org.codehaus.groovy.tools.GroovyClass; import org.eclipse.jdt.core.compiler.CategorizedProblem; import org.eclipse.jdt.core.compiler.CharOperation; +import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.internal.compiler.ast.SingleMemberAnnotation; import org.eclipse.jdt.internal.compiler.ast.MarkerAnnotation; import org.eclipse.jdt.internal.compiler.ASTVisitor; @@ -1458,6 +1459,11 @@ return groovySourceUnit; } + @Override + public org.eclipse.jdt.core.dom.CompilationUnit buildDomCompilationUnit(AST ast) { + return new org.codehaus.jdt.groovy.core.dom.GroovyCompilationUnit(ast); + } + /** * Try to get the source locations for type declarations to be as correct as possible */ Index: src/org/codehaus/jdt/groovy/core/dom/GroovyCompilationUnit.java =================================================================== --- src/org/codehaus/jdt/groovy/core/dom/GroovyCompilationUnit.java (revision 0) +++ src/org/codehaus/jdt/groovy/core/dom/GroovyCompilationUnit.java (revision 0) @@ -0,0 +1,23 @@ +package org.codehaus.jdt.groovy.core.dom; + +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.ASTVisitor; +import org.eclipse.jdt.core.dom.CompilationUnit; + +public class GroovyCompilationUnit extends CompilationUnit { + + public GroovyCompilationUnit(AST ast) { + super(ast); + } + + @Override + protected void accept0(ASTVisitor visitor) { + String visitorName = visitor.getClass().getName(); + if (visitorName.equals("org.eclipse.jdt.internal.debug.core.hcr.MethodSearchVisitor")) { + // throw new CoreException(IStatus.CANCEL); + String message = "Cannot correctly answer the findMethod() call for Groovy code whilst debugging, the method AST will be empty"; + return;// throw new CoreException(new Status(IStatus.CANCEL, Activator.PLUGIN_ID, IStatus.OK, message, null)); + } + super.accept0(visitor); + } +}