Avoid conflict with new ASTNode.HasTypeAnnotations (Bit21).
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
index 803b328..3534f85 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ASTNode.java
@@ -194,9 +194,8 @@
 
 	public static final int HasBeenTransformed = Bit3; // by TransformStatementsVisitor while enhancing signatures (MessageSend / AbstractMethodDeclaration)
 
-	public static final int IsGenerated = Bit21; // currently: supertype references, AllocationExpression in a creationMethod
 	public boolean isGenerated() {
-		return (this.bits & IsGenerated) != 0;
+		return false; // subclasses to override
 	}
 // SH}
 
@@ -610,7 +609,7 @@
 	}
 	
 	private boolean isGeneratedBaseTypeReference() {
-		if ((this.bits & IsGenerated) == 0)
+		if (!isGenerated())
 			return false;
 		if (!(this instanceof Expression))
 			return false;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
index 742a466..0f0f3f6 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/AllocationExpression.java
@@ -94,6 +94,11 @@
 //{ObjectTeams: alternate AST in case the creation needs to be redirected through a creator call:
 	private MessageSend roleCreatorCall = null;
 	private NameReference valueParam; 						// if allocation type has value parameter: synthesized argument for ctor call
+	public boolean isGenerated;
+	@Override
+	public boolean isGenerated() {
+		return this.isGenerated;
+	}
 // SH}
 
 public FlowInfo analyseCode(BlockScope currentScope, FlowContext flowContext, FlowInfo flowInfo) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
index b82b864..ee61562 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/EqualExpression.java
@@ -29,6 +29,14 @@
 
 public class EqualExpression extends BinaryExpression {
 
+//{ObjectTeams:
+	public boolean isGenerated;
+	@Override
+	public boolean isGenerated() {
+		return this.isGenerated;
+	}
+//SH}
+
 	public EqualExpression(Expression left, Expression right,int operator) {
 		super(left,right,operator);
 	}
@@ -190,7 +198,7 @@
 			// TODO (maxime) check, reintroduced copy
 		}
 //{ObjectTeams: no warnings/errors for generated (null-)checks:
-	  if ((this.bits & IsGenerated) == 0)
+	  if (!this.isGenerated)
 // SH}
 		checkNullComparison(currentScope, flowContext, result, result.initsWhenTrue(), result.initsWhenFalse());
 		return result;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FalseLiteral.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FalseLiteral.java
index 3f59227..f8c021c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FalseLiteral.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/FalseLiteral.java
@@ -67,7 +67,7 @@
 }
 public void traverse(ASTVisitor visitor, BlockScope scope) {
 //{ObjectTeams: hide synthetic nodes from visitors (e.g., inserted into a base call)	
-	if ((this.bits & ASTNode.IsGenerated) != 0) return;
+	if (this.isGenerated) return;
 // SH}
 	visitor.visit(this, scope);
 	visitor.endVisit(this, scope);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MagicLiteral.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MagicLiteral.java
index 7eb9111..61a8b6f 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MagicLiteral.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MagicLiteral.java
@@ -12,6 +12,10 @@
 
 public abstract class  MagicLiteral extends Literal {
 
+//{ObjectTeams:
+	public boolean isGenerated;
+//SH}
+
 	public MagicLiteral(int start , int end) {
 
 		super(start,end);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/NameReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/NameReference.java
index 2b6d7c1..5dfa8d1 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/NameReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/NameReference.java
@@ -63,6 +63,12 @@
 		}
 		return false;
 	}
+
+	public boolean isGenerated;
+	@Override
+	public boolean isGenerated() {
+		return this.isGenerated;
+	}
 // SH}
 
 
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java
index b8677b5..5baefe0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/QualifiedTypeReference.java
@@ -197,7 +197,7 @@
 				reportDeprecatedType(this.resolvedType, scope, i);
 			}
 //{ObjectTeams: statically qualified use of role?
-			if (i > 0 && (this.bits & ASTNode.IsGenerated) == 0 && shouldAnalyzeRoleReference()) { // generated (and copied) methods are allowed to use MyTeam.R
+			if (i > 0 && !this.isGenerated && shouldAnalyzeRoleReference()) { // generated (and copied) methods are allowed to use MyTeam.R
 				if (isIllegalQualifiedUseOfProtectedRole(scope)) {
 					// already reported
 				} else {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java
index 8e4673e..3e8132d 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ReturnStatement.java
@@ -57,6 +57,14 @@
 	public LocalVariableBinding saveValueVariable;
 	public int initStateIndex = -1;
 	private boolean implicitReturn;
+//{ObjectTeams:
+	public boolean isGenerated;
+	@Override
+	public boolean isGenerated() {
+		return this.isGenerated;
+	}
+//SH}
+
 
 public ReturnStatement(Expression expression, int sourceStart, int sourceEnd) {
 	this(expression, sourceStart, sourceEnd, false);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TrueLiteral.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TrueLiteral.java
index 9928685..c754a61 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TrueLiteral.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TrueLiteral.java
@@ -68,7 +68,7 @@
 }
 public void traverse(ASTVisitor visitor, BlockScope scope) {
 //{ObjectTeams: hide synthetic nodes from visitors (e.g., inserted into a base call)	
-	if ((this.bits & ASTNode.IsGenerated) != 0) return;
+	if (this.isGenerated) return;
 // SH}
 	visitor.visit(this, scope);
 	visitor.endVisit(this, scope);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
index 4214bf6..7ed3ef2 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/TypeReference.java
@@ -280,7 +280,12 @@
 	setBaseclassDecapsulation(DecapsulationState.REPORTED);
 }
 public int deprecationProblemId = IProblem.UsingDeprecatedType;
-// SH}
+
+public boolean isGenerated;
+public boolean isGenerated() {
+	return this.isGenerated;
+}
+//SH}
 
 /*
  * Answer a base type reference (can be an array of base type).
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java
index a2f090a..ad90d4b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/CopyInheritance.java
@@ -1604,7 +1604,7 @@
 		    	}
 				returnExpr = gen.allocation(createRoleTypeRef(typeName, typeVars, gen),
 		        							expressions);
-		        returnExpr.bits |= ASTNode.IsGenerated;
+		        ((AllocationExpression)returnExpr).isGenerated = true;
 		    } else {
 		        returnExpr = gen.nullLiteral();
 		    }
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/TypeLevel.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/TypeLevel.java
index 5843a2f..7b69e70 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/TypeLevel.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/statemachine/copyinheritance/TypeLevel.java
@@ -19,7 +19,6 @@
 import java.util.HashSet;
 
 import org.eclipse.jdt.core.compiler.CharOperation;
-import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.TypeDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.TypeReference;
 import org.eclipse.jdt.internal.compiler.ast.Expression.DecapsulationState;
@@ -168,7 +167,7 @@
 				// create a special type reference that uses the original scope for resolving:
 				destRoleDecl.baseclass= new AstGenerator(pos).alienScopeTypeReference(srcDecl.baseclass, srcDecl.scope.parent);
 				destRoleDecl.baseclass.setBaseclassDecapsulation(DecapsulationState.REPORTED);
-				destRoleDecl.baseclass.bits |= ASTNode.IsGenerated;
+				destRoleDecl.baseclass.isGenerated = true;
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java
index 8fa523b..add6889 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstClone.java
@@ -23,7 +23,6 @@
 import java.util.Arrays;
 
 import org.eclipse.jdt.core.compiler.CharOperation;
-import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration;
 import org.eclipse.jdt.internal.compiler.ast.Argument;
 import org.eclipse.jdt.internal.compiler.ast.ArrayQualifiedTypeReference;
@@ -114,7 +113,7 @@
 	                qualifiedResult = gen.qualifiedArrayTypeReference(typeName, dims);
 	            else
 	                qualifiedResult = gen.qualifiedTypeReference(typeName);
-	            qualifiedResult.bits |= (qualifiedTypeReference.bits & ASTNode.IsGenerated);
+	            qualifiedResult.isGenerated = qualifiedTypeReference.isGenerated;
 	            result = qualifiedResult;
             }
         }
@@ -213,7 +212,8 @@
         }
         if (result != null) {
         	result.setBaseclassDecapsulation(typeReference.getBaseclassDecapsulation());
-        	result.bits = typeReference.bits | ASTNode.IsGenerated;
+        	result.bits = typeReference.bits;
+        	result.isGenerated = true;
         	return result;
         }
         throw new InternalCompilerError("Unexpected kind of type reference: " + typeReference.getClass().getName()); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstEdit.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstEdit.java
index 354f67a..80382d0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstEdit.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstEdit.java
@@ -506,11 +506,11 @@
 	    	TypeReference[] args =new TypeReference[len];
 	    	for (int i = 0; i < len; i++) {
 				args[i] = gen.singleTypeReference(roleClassDecl.typeParameters[i].name);
-				args[i].bits |= ASTNode.IsGenerated;
+				args[i].isGenerated = true;
 			}
 	    	implementsRef = new ParameterizedSingleTypeReference(interfaceName, args, 0, pos);
 	    }
-	    implementsRef.bits |= ASTNode.IsGenerated;
+	    implementsRef.isGenerated = true;
 	    addImplementsReference(roleClassDecl, implementsRef);
 	}
 
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
index 985fb32..6f1dd87 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/AstGenerator.java
@@ -140,7 +140,7 @@
 
 	public SingleNameReference singleNameReference(char[] name) {
 		SingleNameReference ref = new SingleNameReference(name, this.pos);
-		ref.bits |= ASTNode.IsGenerated;
+		ref.isGenerated = true;
 		return ref;
 	}
 	public QualifiedNameReference qualifiedNameReference(char[][] tokens) {
@@ -270,14 +270,14 @@
 		return result;
 	}
 	public Expression nullCheck(Expression value) {
-		Expression result = new EqualExpression(
+		EqualExpression result = new EqualExpression(
 				value,
 				nullLiteral(),
 				OperatorIds.EQUAL_EQUAL);
 		result.sourceStart = this.sourceStart;
 		result.sourceEnd = this.sourceEnd;
 		result.constant = Constant.NotAConstant;
-		result.bits |= ASTNode.IsGenerated;
+		result.isGenerated = true;
 		return result;
 	}
 	public IntLiteral intLiteral(int val) {
@@ -285,10 +285,10 @@
 		return result;
 	}
 	public Literal booleanLiteral(boolean val) {
-		Literal result = val
+		MagicLiteral result = val
 			? new TrueLiteral(this.sourceStart, this.sourceEnd)
 			: new FalseLiteral(this.sourceStart, this.sourceEnd);
-		result.bits |= ASTNode.IsGenerated;
+		result.isGenerated = true;
 		return result;
 	}
 	public StringLiteral stringLiteral(char[] cs) {
@@ -306,7 +306,8 @@
 		long[] poss = new long[compoundName.length];
 		Arrays.fill(poss, this.pos);
 		QualifiedTypeReference reference = new QualifiedTypeReference(compoundName, poss);
-		reference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
+		reference.bits |= ASTNode.IgnoreRawTypeCheck;
+		reference.isGenerated = true;
 		return reference;
 	}
 
@@ -314,7 +315,8 @@
 		long[] poss = new long[compoundName.length];
 		Arrays.fill(poss, this.pos);
 		ArrayQualifiedTypeReference reference = new ArrayQualifiedTypeReference(compoundName, dims, poss);
-		reference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
+		reference.bits |= ASTNode.IgnoreRawTypeCheck;
+		reference.isGenerated = true;
 		return reference;
 	}
 
@@ -374,7 +376,8 @@
             elementType = ab.leafComponentType;
         }
         TypeReference typeReference = createArrayTypeReference(elementType, dims, makeGeneric);
-        typeReference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
+        typeReference.bits |= ASTNode.IgnoreRawTypeCheck;
+        typeReference.isGenerated = true;
         typeReference.deprecationProblemId = 0;
         if (!type.isValidBinding())
         	typeReference.bits |= ASTNode.IsGeneratedWithProblem;
@@ -423,7 +426,8 @@
     {
     	TypeReference typeReference = createArrayTypeReference(elementType, dims, true);
     	typeReference.deprecationProblemId = 0;
-    	typeReference.bits |= ASTNode.IsGenerated | ASTNode.IgnoreRawTypeCheck;
+    	typeReference.bits |= ASTNode.IgnoreRawTypeCheck;
+    	typeReference.isGenerated = true;
 		return typeReference;
     }
 
@@ -957,7 +961,7 @@
 	public ReturnStatement returnStatement(Expression expression, boolean synthetic) {
 		ReturnStatement returnStatement = new ReturnStatement(expression, this.sourceStart, this.sourceEnd);
 		if (synthetic)
-			returnStatement.bits |= ASTNode.IsGenerated;
+			returnStatement.isGenerated = true;
 		return returnStatement;
 	}
 	public IfStatement ifStatement(Expression condition, Statement thenStatement) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java
index 87a7d07..56d91f4 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/IAlienScopeTypeReference.java
@@ -17,7 +17,6 @@
 package org.eclipse.objectteams.otdt.internal.core.compiler.util;
 
 import org.eclipse.jdt.internal.compiler.CompilationResult.CheckPoint;
-import org.eclipse.jdt.internal.compiler.ast.ASTNode;
 import org.eclipse.jdt.internal.compiler.ast.ArrayQualifiedTypeReference;
 import org.eclipse.jdt.internal.compiler.ast.ArrayTypeReference;
 import org.eclipse.jdt.internal.compiler.ast.ParameterizedSingleTypeReference;
@@ -165,7 +164,7 @@
 		public AlienScopeQualifiedTypeReference(char[][] sources, long[] poss, Scope alienScope) {
 			super(sources, poss);
 			this.alienScope = alienScope;
-			this.bits |= ASTNode.IsGenerated; // allow qualified reference to role
+			this.isGenerated = true; // allow qualified reference to role
 		}
 		public Scope getAlienScope() { return this.alienScope; }
 		@Override
@@ -205,7 +204,7 @@
 		public AlienScopeArrayQualifiedTypeReference(char[][] sources, long[] poss, int dim, Scope alienScope) {
 			super(sources, dim, poss);
 			this.alienScope = alienScope;
-			this.bits |= ASTNode.IsGenerated; // allow qualified reference to role
+			this.isGenerated = true; // allow qualified reference to role
 		}
 		public Scope getAlienScope() { return this.alienScope; }
 		@Override
diff --git a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java
index 47f03d9..41fc3f7 100644
--- a/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java
+++ b/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/CodeFormatterVisitor.java
@@ -2066,7 +2066,7 @@
 								}
 							}
 //   OT:
-						  previousIsHidden = ((arguments[i].bits & ASTNode.IsGenerated) != 0);
+						  previousIsHidden = arguments[i].isGenerated();
 						  if (!previousIsHidden)
 // SH}
 							arguments[i].traverse(this, scope);