Merge branch 'master' into OI2JIRO

Change-Id: I25e79eb9a832fafc47d9c7c3a6dae11fdb6f6fa0
diff --git a/org.eclipse.jdt.core/.settings/.api_filters b/org.eclipse.jdt.core/.settings/.api_filters
index 1c0e761..e866117 100644
--- a/org.eclipse.jdt.core/.settings/.api_filters
+++ b/org.eclipse.jdt.core/.settings/.api_filters
@@ -36,6 +36,67 @@
             </message_arguments>
         </filter>
     </resource>
+    <resource path="compiler/org/eclipse/objectteams/otdt/core/compiler/IOTConstants.java" type="org.eclipse.objectteams.otdt.core.compiler.IOTConstants">
+        <filter comment="cleanup constants to avoid near-term conflict with JDT" id="388194388">
+            <message_arguments>
+                <message_argument value="org.eclipse.objectteams.otdt.core.compiler.IOTConstants"/>
+                <message_argument value="T_OrgObjectTeamsIBoundBase"/>
+                <message_argument value="102"/>
+            </message_arguments>
+        </filter>
+        <filter comment="cleanup constants to avoid near-term conflict with JDT" id="388194388">
+            <message_arguments>
+                <message_argument value="org.eclipse.objectteams.otdt.core.compiler.IOTConstants"/>
+                <message_argument value="T_OrgObjectTeamsIBoundBase2"/>
+                <message_argument value="104"/>
+            </message_arguments>
+        </filter>
+        <filter comment="cleanup constants to avoid near-term conflict with JDT" id="388194388">
+            <message_arguments>
+                <message_argument value="org.eclipse.objectteams.otdt.core.compiler.IOTConstants"/>
+                <message_argument value="T_OrgObjectTeamsITeam"/>
+                <message_argument value="100"/>
+            </message_arguments>
+        </filter>
+        <filter comment="cleanup constants to avoid near-term conflict with JDT" id="388194388">
+            <message_arguments>
+                <message_argument value="org.eclipse.objectteams.otdt.core.compiler.IOTConstants"/>
+                <message_argument value="T_OrgObjectTeamsInstantiation"/>
+                <message_argument value="103"/>
+            </message_arguments>
+        </filter>
+        <filter comment="cleanup constants to avoid near-term conflict with JDT" id="388194388">
+            <message_arguments>
+                <message_argument value="org.eclipse.objectteams.otdt.core.compiler.IOTConstants"/>
+                <message_argument value="T_OrgObjectTeamsTeam"/>
+                <message_argument value="101"/>
+            </message_arguments>
+        </filter>
+        <filter comment="constant name was corrected" id="405864542">
+            <message_arguments>
+                <message_argument value="org.eclipse.objectteams.otdt.core.compiler.IOTConstants"/>
+                <message_argument value="TEAM_ICONFINED"/>
+            </message_arguments>
+        </filter>
+        <filter comment="name corrected" id="1211105284">
+            <message_arguments>
+                <message_argument value="ITEAM_ICONFINED"/>
+            </message_arguments>
+        </filter>
+    </resource>
+    <resource path="compiler/org/eclipse/objectteams/otdt/core/compiler/OTNameUtils.java" type="org.eclipse.objectteams.otdt.core.compiler.OTNameUtils">
+        <filter comment="method signature was improved" id="338792546">
+            <message_arguments>
+                <message_argument value="org.eclipse.objectteams.otdt.core.compiler.OTNameUtils"/>
+                <message_argument value="isPredefinedConfined(char[][])"/>
+            </message_arguments>
+        </filter>
+        <filter comment="method signature was improved" id="1143996420">
+            <message_arguments>
+                <message_argument value="isPredefinedConfined(ReferenceBinding)"/>
+            </message_arguments>
+        </filter>
+    </resource>
     <resource path="dom/org/eclipse/jdt/core/dom/ASTNode.java" type="org.eclipse.jdt.core.dom.ASTNode">
         <filter comment="necessary constant change after new constants in JDT" id="388194388">
             <message_arguments>
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
index 83587b3..288bff7 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ExplicitConstructorCall.java
@@ -37,7 +37,6 @@
 
 import static org.eclipse.jdt.internal.compiler.ast.ExpressionContext.INVOCATION_CONTEXT;
 
-import org.eclipse.jdt.core.compiler.CharOperation;
 import org.eclipse.jdt.internal.compiler.ASTVisitor;
 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants;
 import org.eclipse.jdt.internal.compiler.codegen.*;
@@ -440,8 +439,7 @@
 			}
 //{ObjectTeams: compiling org.objectteams.Team$__OT__Confined ?
 			if (receiverType == null) {
-				if (CharOperation.equals(scope.enclosingSourceType().compoundName,
-							IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED))
+				if (scope.enclosingSourceType().id == IOTConstants.T_OrgObjectteamsTeamOTConfined)
 					receiverType = scope.getJavaLangObject(); // use this supertype only this one time!
 				else // testharness for checking a hypothesis:
 					scope.problemReporter().missingImplementation(this, "Detected null receiverType"); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
index b403006..83f68c0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MessageSend.java
@@ -1533,7 +1533,7 @@
 {
 	// tweak methods of predefined confined types:
 	if (   this.binding.isValidBinding()
-		&& CharOperation.equals(this.binding.declaringClass.compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED)
+		&& this.binding.declaringClass.id == IOTConstants.T_OrgObjectteamsTeamOTConfined
 		&& !CharOperation.equals(this.selector, IOTConstants._OT_GETTEAM))
 	{
 		// methods found in a predefined confined type are actually methods of Object
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
index ad6380a..f355226 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/MethodDeclaration.java
@@ -109,7 +109,7 @@
 //{ObjectTeams: some reasons why there might be nothing to analyze:
 			// still waiting for statements to be generated?
 			if (   this.isGenerated && this.statements == null
-				&& !this.scope.isOrgObjectteamsTeam(this.binding.declaringClass)) // o.o.T. methods are special
+				&& this.binding.declaringClass.id != IOTConstants.T_OrgObjectTeamsTeam) // o.o.T. methods are special
 				return;
 // SH}
 
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
index d2108df..e2c0a18 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/BinaryTypeBinding.java
@@ -687,7 +687,7 @@
 			char[] superclassName = binaryType.getSuperclassName();
 //{ObjectTeams: predefined confined types require special treatment
 		  // 1. add the synthetic flag which is missing from the class file:
-		  if (CharOperation.equals(this.compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_CONFINED))
+		  if (this.id == IOTConstants.T_OrgObjectteamsTeamConfined)
 			this.modifiers |= ClassFileConstants.AccSynthetic;
 		  if (TypeAnalyzer.isTopConfined(this)) {
 			// 2. don't search a superclass, have none (ie., skip the else part)
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java
index e04b4bc..43f8fd4 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ClassScope.java
@@ -1834,7 +1834,7 @@
 				sourceType.tagBits |= TagBits.HierarchyHasProblems; // propagate if missing supertype
 				return superclassRef.resolvedType.isValidBinding(); // reported some error against the source type ?
 //{ObjectTeams: team super class only allowed for teams
-            } else if ((isOrgObjectteamsTeam(superclass) || superclass.isTeam())
+            } else if ((superclass.id == IOTConstants.T_OrgObjectTeamsTeam || superclass.isTeam())
                         && !sourceType.isTeam())
             {
             	problemReporter().regularExtendsTeam(sourceType, this.referenceContext.superclass, superclass);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java
index 290fd68..15fb1b3 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/MethodVerifier.java
@@ -1198,7 +1198,7 @@
 //{ObjectTeams: some methods don't need to be implemented:
 boolean mustImplementThisAbstractMethod(MethodBinding abstractMethod) {
 	// no need to implement methods from predefined Confined types
-	if (OTNameUtils.isPredefinedConfined(abstractMethod.declaringClass.compoundName))
+	if (OTNameUtils.isPredefinedConfined(abstractMethod.declaringClass))
 		return false;
 
 	// faked enhanced callins will be implemented by the OTRE:
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
index d0806fe..3adef04 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ReferenceBinding.java
@@ -662,6 +662,14 @@
 					this.id = IOTConstants.T_OrgObjectTeamsIBoundBase2;
 				else if(CharOperation.equals(IOTConstants.INSTANTIATION, this.compoundName[2]))
 					this.id = IOTConstants.T_OrgObjectTeamsInstantiation;
+				else if(CharOperation.equals(IOTConstants.ICONFINED, this.compoundName[2]))
+					this.id = IOTConstants.T_OrgObjectteamsIConfined;
+				else if(CharOperation.equals(IOTConstants.ITEAM_ICONFINED, this.compoundName[2]))
+					this.id = IOTConstants.T_OrgObjectteamsITeamIConfined;
+				else if(CharOperation.equals(IOTConstants.TEAM_CONFINED, this.compoundName[2]))
+					this.id = IOTConstants.T_OrgObjectteamsTeamConfined;
+				else if(CharOperation.equals(IOTConstants.TEAM_OTCONFINED, this.compoundName[2]))
+					this.id = IOTConstants.T_OrgObjectteamsTeamOTConfined;
 				return;
 			}
 // SH}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java
index ff8f335..dba7e38 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeIds.java
@@ -149,6 +149,9 @@
 	// Java 14 preview
 	final int T_JavaLangRecord = 93;
 
+//{ObjectTeams:
+	// see also ud constants in IOTConstants (119 - 127)
+// SH}
 	// If you add new type id, make sure to bump up T_LastWellKnownTypeId if there is a cross over.
 	final int T_LastWellKnownTypeId = 128;
 
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/IOTConstants.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/IOTConstants.java
index cd1ea31..79eb9c0 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/IOTConstants.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/IOTConstants.java
@@ -200,8 +200,8 @@
 	public static final char[] ICONFINED = "IConfined".toCharArray();
 	public static final char[][] ORG_OBJECTTEAMS_ICONFINED = {ORG, OBJECTTEAMS, ICONFINED};
 
-	public static final char[] TEAM_ICONFINED = "ITeam$IConfined".toCharArray();
-	public static final char[][] ORG_OBJECTTEAMS_ITEAM_ICONFINED = {ORG, OBJECTTEAMS, TEAM_ICONFINED};
+	public static final char[] ITEAM_ICONFINED = "ITeam$IConfined".toCharArray();
+	public static final char[][] ORG_OBJECTTEAMS_ITEAM_ICONFINED = {ORG, OBJECTTEAMS, ITEAM_ICONFINED};
 
 	public static final char[] OTCONFINED = "__OT__Confined".toCharArray();
 	public static final char[] CONFINED = "Confined".toCharArray();
@@ -264,18 +264,25 @@
 
 
 	// Type IDs (cf. type TypeIds)
-	public static final int T_OrgObjectTeamsITeam      = 100;
-	public static final int T_OrgObjectTeamsTeam       = 101;
-	public static final int T_OrgObjectTeamsIBoundBase = 102;
+	public static final int T_OrgObjectTeamsITeam      = 127;
+	public static final int T_OrgObjectTeamsTeam       = 126;
+	public static final int T_OrgObjectTeamsIBoundBase = 125;
 	/**
 	 * @since 3.7 (OT 2.0)
 	 */
-	public static final int T_OrgObjectTeamsInstantiation = 103;
+	public static final int T_OrgObjectTeamsInstantiation = 124;
 	/**
 	 * @since 3.10 (OT 2.3)
 	 */
-	public static final int T_OrgObjectTeamsIBoundBase2 = 104;
-
+	public static final int T_OrgObjectTeamsIBoundBase2 = 123;
+	/** @since 3.25 (OT 2.8.2) */
+	public static final int T_OrgObjectteamsIConfined = 122;
+	/** @since 3.25 (OT 2.8.2) */
+	public static final int T_OrgObjectteamsITeamIConfined = 121;
+	/** @since 3.25 (OT 2.8.2) */
+	public static final int T_OrgObjectteamsTeamConfined = 120;
+	/** @since 3.25 (OT 2.8.2) */
+	public static final int T_OrgObjectteamsTeamOTConfined = 119;
     // special identifiers:
 	public static final char[] RESULT = "result".toCharArray();
 	public static final char[] OT_RESULT = (OT_DOLLAR+"result").toCharArray();
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/OTNameUtils.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/OTNameUtils.java
index 4b774a0..9da4291 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/OTNameUtils.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/core/compiler/OTNameUtils.java
@@ -25,9 +25,8 @@
 import static org.eclipse.objectteams.otdt.core.compiler.IOTConstants.PREDICATE_METHOD_NAME;
 import static org.eclipse.objectteams.otdt.core.compiler.IOTConstants.TSUPER_OT_NAME;
 
-
-
 import org.eclipse.jdt.core.compiler.CharOperation;
+import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
 
 /**
  * API class providing various operations for special names in generated OT/J code.
@@ -120,16 +119,17 @@
 	}
 
 	/**
-	 * does compoundName denote a predefined confined type?
+	 * does 'type' denote a predefined confined type?
+	 * @noreference This method is not intended to be referenced by clients.
 	 */
-	public static boolean isPredefinedConfined(char[][] compoundName)
+	public static boolean isPredefinedConfined(ReferenceBinding type)
 	{
-		if (compoundName.length == 3) {
-			return
-				   CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_ICONFINED)
-				|| CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_ITEAM_ICONFINED)
-				|| CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED)
-				|| CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_CONFINED);
+		switch (type.id) {
+			case IOTConstants.T_OrgObjectteamsIConfined:
+			case IOTConstants.T_OrgObjectteamsITeamIConfined:
+			case IOTConstants.T_OrgObjectteamsTeamOTConfined:
+			case IOTConstants.T_OrgObjectteamsTeamConfined:
+				return true;
 		}
 		return false;
 	}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/ConstantPoolObjectMapper.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/ConstantPoolObjectMapper.java
index ffb1a2e..c2b7f33 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/ConstantPoolObjectMapper.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/ConstantPoolObjectMapper.java
@@ -384,15 +384,13 @@
 		if (!refMethodBinding.isConstructor())
 			return false;
 		// of class __OT__Confined?
-		if (!CharOperation.equals(refMethodBinding.declaringClass.compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED))
+		if (refMethodBinding.declaringClass.id != IOTConstants.T_OrgObjectteamsTeamOTConfined)
 			return false;
 		// is it the superclass of the current src class?
 		if (TypeBinding.equalsEquals(refMethodBinding.declaringClass, srcMethod.declaringClass.superclass()))
 			return true;
 		// current src class may have no super class which is OK if it is Team.__OT__Confined
-		return
-			   srcMethod.declaringClass.superclass() == null
-			&& CharOperation.equals(IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED, refMethodBinding.declaringClass.compoundName);
+		return srcMethod.declaringClass.superclass() == null;
 	}
 
 	private static MethodBinding getConfinedSuperCtor(MethodBinding dstMethod) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/RoleTypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/RoleTypeBinding.java
index 997e521..e76be43 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/RoleTypeBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/RoleTypeBinding.java
@@ -191,7 +191,7 @@
         }
 
         // compute the team:
-        if (CharOperation.equals(roleType.compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED))
+        if (roleType.id == IOTConstants.T_OrgObjectteamsTeamOTConfined)
         	// the following is needed in order to break the circularity
         	// of roles extending the predefined Team.__OT__Confined (see class comment)
         	this._staticallyKnownTeam = roleType.enclosingType();
@@ -665,7 +665,7 @@
 	        if ((superClass != null) && (superClass.isDirectRole()))
 	        {
 	        	// 1.a: a confined type "as-is": don't instantiate/strengthen
-	        	if (   OTNameUtils.isPredefinedConfined(superClass.compoundName)
+	        	if (   OTNameUtils.isPredefinedConfined(superClass)
 	        		|| CharOperation.equals(IOTConstants.OTCONFINED, superClass.sourceName))
 	        		return this._superClass = superClass;
 
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 7f27be0..7928f6d 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
@@ -1003,7 +1003,7 @@
 	            tgtTeam, targetRoleDecl);
 
 	    if (method.isConstructor()) {
-	    	if (CharOperation.equals(srcRole.compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED))
+	    	if (srcRole.id == IOTConstants.T_OrgObjectteamsTeamOTConfined)
 	        {
 	        	// must add default constructor explicitly,
 	        	// since if we would copy the one from Team.__OT__Confined,
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 18c5df4..a3ee7c3 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
@@ -371,7 +371,7 @@
 		if (   newExtends == null	 // no source-level "extends" -> investige implicit (binding-level) extends:
 			&& newSuperclass != null // either implicit super (j.l.Object or o.o.Team) or inherited from other tsuper
 			&& !refineToTeam	     // an implicit extends to org.objectteams.Team is NOT dropped if the tsuper was not a team
-			&& ((newSuperclass.id == TypeIds.T_JavaLangObject) || destScope.isOrgObjectteamsTeam(newSuperclass))) // otherwise it was copied from a tsuper role
+			&& ((newSuperclass.id == TypeIds.T_JavaLangObject) || newSuperclass.id == IOTConstants.T_OrgObjectTeamsTeam)) // otherwise it was copied from a tsuper role
 		{
 			newSuperclass = null; // drop default 'extends java.lang.Object' or o.o.Team
 		}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/TypeAnalyzer.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/TypeAnalyzer.java
index dae4504..6ee3afd 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/TypeAnalyzer.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/TypeAnalyzer.java
@@ -57,6 +57,7 @@
 import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
 import org.eclipse.jdt.internal.compiler.lookup.UnresolvedReferenceBinding;
 import org.eclipse.objectteams.otdt.core.compiler.IOTConstants;
+import org.eclipse.objectteams.otdt.core.compiler.OTNameUtils;
 import org.eclipse.objectteams.otdt.core.exceptions.InternalCompilerError;
 import org.eclipse.objectteams.otdt.internal.core.compiler.ast.TypeAnchorReference;
 import org.eclipse.objectteams.otdt.internal.core.compiler.control.Config;
@@ -775,15 +776,8 @@
 	 */
 
 	public static boolean isTopConfined(ReferenceBinding type) {
-		char[][] compoundName= type.compoundName;
-		if (    compoundName.length == 3
-			&& (   CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_ICONFINED)
-				|| CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_ITEAM_ICONFINED)
-				|| CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_CONFINED)
-				|| CharOperation.equals(compoundName, IOTConstants.ORG_OBJECTTEAMS_TEAM_OTCONFINED)))
-		{
+		if (OTNameUtils.isPredefinedConfined(type))
 			return true;
-		}
 		char[] name= type.internalName();
 		return type.isRole()
 		    && (   CharOperation.equals(name, IOTConstants.ICONFINED)
diff --git a/plugins/org.eclipse.objectteams.otdt/about.ini b/plugins/org.eclipse.objectteams.otdt/about.ini
index d016fac..2a76f1d 100644
--- a/plugins/org.eclipse.objectteams.otdt/about.ini
+++ b/plugins/org.eclipse.objectteams.otdt/about.ini
@@ -2,9 +2,9 @@
 \n\
 Version: 2.8.2\n\
 \n\
-Corresponding to Eclipse SimRel 2020-12\n\
+Corresponding to Eclipse SimRel 2021-03\n\
 \n\
-(c) Copyright TU Berlin, Fraunhofer FIRST and others, 2005, 2020\n\
+(c) Copyright TU Berlin, Fraunhofer FIRST and others, 2005, 2021\n\
 Visit http://www.eclipse.org/objectteams
 
 featureImage=OTDT_32x32.png
diff --git a/plugins/org.eclipse.objectteams.otequinox/about.ini b/plugins/org.eclipse.objectteams.otequinox/about.ini
index 20b3795..0494126 100644
--- a/plugins/org.eclipse.objectteams.otequinox/about.ini
+++ b/plugins/org.eclipse.objectteams.otequinox/about.ini
@@ -2,9 +2,9 @@
 \n\
 Version: 2.8.2\n\
 \n\
-Corresponding to Eclipse SimRel 2020-12\n\
+Corresponding to Eclipse SimRel 2021-03\n\
 \n\
-(c) Copyright Technical University Berlin and others, 2005, 2020\n\
+(c) Copyright Technical University Berlin and others, 2005, 2021\n\
 Visit http://www.eclipse.org/objectteams\n\
 \n\