Bug 416781 - reconcile compiler changes from BETA_JAVA8 with OT/J
- remove conflicting tagBits, replace by new virtual methods
diff --git a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
index 57ad552..c04e382 100644
--- a/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
+++ b/org.eclipse.jdt.core/codeassist/org/eclipse/jdt/internal/codeassist/SelectionEngine.java
@@ -70,7 +70,6 @@
import org.eclipse.objectteams.otdt.internal.core.compiler.control.Dependencies;
import org.eclipse.objectteams.otdt.internal.core.compiler.control.ITranslationStates;
import org.eclipse.objectteams.otdt.internal.core.compiler.control.StateHelper;
-import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.model.RoleModel;
/**
@@ -842,7 +841,7 @@
private boolean isLocal(ReferenceBinding binding) {
if(binding instanceof ParameterizedTypeBinding) {
//{ObjectTeams:
- if (binding instanceof RoleTypeBinding)
+ if (binding.isRoleType())
return false; // prevents infinite recursion below:
// SH}
return isLocal(((ParameterizedTypeBinding)binding).genericType());
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java
index d894149..0460786 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/Assignment.java
@@ -48,7 +48,6 @@
import org.eclipse.objectteams.otdt.internal.core.compiler.control.Config;
import org.eclipse.objectteams.otdt.internal.core.compiler.lifting.Lowering;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.DependentTypeBinding;
-import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.util.RoleTypeCreator;
/**
@@ -265,7 +264,7 @@
}
//{ObjectTeams: additional check and record team anchor equivalence:
- if (Config.getLoweringPossible() && RoleTypeBinding.isRoleType(rhsType))
+ if (Config.getLoweringPossible() && rhsType.isRoleType())
((DependentTypeBinding)rhsType).recheckAmbiguousLowering(lhsType, this, scope, null);
VariableBinding lhsBinding = null;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
index a5a2a5c..3843d9c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/CastExpression.java
@@ -633,7 +633,7 @@
this.resolvedType = RoleTypeCreator.maybeWrapUnqualifiedRoleType(scope, this.resolvedType, this);
// check success:
if ( this.resolvedType == null
- || !RoleTypeBinding.isRoleType(this.resolvedType.leafComponentType()))
+ || !this.resolvedType.leafComponentType().isRoleType())
{
// Although it is a role, wrapping failed. Error is already reported (hopefully).
assert scope.referenceCompilationUnit().compilationResult().hasErrors();
@@ -740,7 +740,7 @@
private boolean shouldUnwrapExpressionType(TypeBinding expressionType) {
if (!this.isGenerated)
return false; // never unwrap for source statements
- if (expressionType == null || !DependentTypeBinding.isDependentType(expressionType))
+ if (!(expressionType instanceof DependentTypeBinding))
return false; // never unwrap null nor non-RTB
if (this.requireRoleClass)
return true; // wrapping would falsely pretend compatibility
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
index ea98b4a..ffa19c7 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/LocalDeclaration.java
@@ -51,7 +51,6 @@
import org.eclipse.jdt.internal.compiler.lookup.*;
import org.eclipse.objectteams.otdt.internal.core.compiler.control.Config;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.DependentTypeBinding;
-import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.util.IAlienScopeTypeReference;
import org.eclipse.objectteams.otdt.internal.core.compiler.util.RoleTypeCreator;
@@ -354,7 +353,7 @@
}
}
//{ObjectTeams: additional re-check:
- if (Config.getLoweringPossible() && RoleTypeBinding.isRoleType(initializationType))
+ if (Config.getLoweringPossible() && initializationType != null && initializationType.isRoleType())
((DependentTypeBinding)initializationType).recheckAmbiguousLowering(variableType, this, scope, null);
// SH}
}
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 20e90f8..18e069a 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
@@ -109,7 +109,6 @@
import org.eclipse.objectteams.otdt.internal.core.compiler.control.ITranslationStates;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.AnchorMapping;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.DependentTypeBinding;
-import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.SyntheticRoleBridgeMethodBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.WeakenedTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.mappings.CallinImplementorDyn;
@@ -602,7 +601,7 @@
} else if (constantPoolDeclaringClass.isInterface()) { // interface or annotation type
:giro */
} else if (constantPoolDeclaringClass.isInterface() // interface or annotation type
- || constantPoolDeclaringClass instanceof RoleTypeBinding)
+ || constantPoolDeclaringClass.isRoleType())
{
// SH}
codeStream.invoke(Opcodes.OPC_invokeinterface, codegenBinding, constantPoolDeclaringClass, this.typeArguments);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
index 9aeb9ec..ee5e343 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/ast/ParameterizedSingleTypeReference.java
@@ -436,7 +436,7 @@
AnnotationBinding[] currentAnnotations = currentType.getAnnotations();
ITeamAnchor anchor = null;
int valParPos = -1;
- if (DependentTypeBinding.isDependentType(currentType)) {
+ if (currentType instanceof DependentTypeBinding) {
anchor = ((DependentTypeBinding)currentType)._teamAnchor;
valParPos = ((DependentTypeBinding)currentType)._valueParamPosition;
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
index 423548b..6ef56b1 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/codegen/CodeStream.java
@@ -65,6 +65,7 @@
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.SyntheticOTMethodBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.SyntheticRoleFieldAccess;
+import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.WeakenedTypeBinding;
/**
* OTDT changes:
@@ -7491,10 +7492,11 @@
* constantPool.literalIndexForType(aTypeBinding)
*/
int idx = this.constantPool.literalIndexForType(aTypeBinding);
- if (aTypeBinding instanceof RoleTypeBinding) {
+ if (RoleTypeBinding.isRoleWithExplicitAnchor(aTypeBinding)) {
+ if (aTypeBinding instanceof WeakenedTypeBinding)
+ aTypeBinding = ((WeakenedTypeBinding) aTypeBinding).getStrongType();
RoleTypeBinding role = (RoleTypeBinding)aTypeBinding;
- if (role.hasExplicitAnchor())
- this.classFile.referenceBinding.model.addTypeAnchor(role._teamAnchor, idx);
+ this.classFile.referenceBinding.model.addTypeAnchor(role._teamAnchor, idx);
}
return idx;
}
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 b8c6309..f19f35f 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
@@ -1752,7 +1752,7 @@
if (baseclass != null) { // is null if a cycle was detected
if ( baseclass.isRole()
- && !(baseclass instanceof RoleTypeBinding))
+ && !baseclass.isRoleType())
{
if (RoleModel.isRoleFromOuterEnclosing(sourceType, baseclass)) {
TeamModel outerTeam = baseclass.enclosingType().getTeamModel();
@@ -2363,7 +2363,7 @@
this.superTypeReference = typeReference;
ReferenceBinding superType = (ReferenceBinding) typeReference.resolveSuperType(this);
//{ObjectTeams: anchor.R is not allowed in this position
- if (superType instanceof RoleTypeBinding)
+ if (superType != null && superType.isRoleType())
{
RoleTypeBinding superRole = (RoleTypeBinding)superType;
if (superRole.hasExplicitAnchor()) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
index bdc1329..2a7f6c7 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedGenericMethodBinding.java
@@ -173,7 +173,7 @@
// TODO: could this be integrated with TypeVariableBinding.boundCheck(Substitution, TypeBinding, ReferenceBinding, Scope)
// which already uses Substitutation.substituteAnchore(ITeamAnchor,int) internally?
for (int i = 0; i < solutions.length; i++) {
- if (DependentTypeBinding.isDependentType(solutions[i])
+ if (solutions[i] instanceof DependentTypeBinding
&& typeVariables[i].anchors != null
&& !AnchorMapping.isLegalInstantiation(typeVariables[i], (DependentTypeBinding) solutions[i]))
return null; // illegal due to mismatching team anchors
@@ -826,7 +826,7 @@
}
public ITeamAnchor substituteAnchor(ITeamAnchor anchor, int rank) {
TypeBinding typeArgument = this.typeArguments[rank];
- if (DependentTypeBinding.isDependentType(typeArgument))
+ if (typeArgument instanceof DependentTypeBinding)
return ((DependentTypeBinding)typeArgument)._teamAnchor;
return null;
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
index 2f130c5..cb4c0ab 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/ParameterizedTypeBinding.java
@@ -841,7 +841,7 @@
// for mixed type and value parameters:
@Override
public DependentTypeBinding asPlainDependentType() {
- if (DependentTypeBinding.isPlainDependentType(this.type))
+ if (this.type != null && this.type.isPlainDependentType())
return (DependentTypeBinding) this.type;
return null;
}
@@ -1145,7 +1145,7 @@
}
// hook for dependent type printing:
public boolean appendReadableValueParameterNames(StringBuffer buf) {
- if (DependentTypeBinding.isDependentType(this.type))
+ if (this.type instanceof DependentTypeBinding)
return ((DependentTypeBinding)this.type).appendReadableValueParameterNames(buf);
return false;
}
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 8a95f615..f4109c5 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
@@ -53,7 +53,6 @@
import org.eclipse.objectteams.otdt.internal.core.compiler.control.Dependencies;
import org.eclipse.objectteams.otdt.internal.core.compiler.control.ITranslationStates;
import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.AbstractOTReferenceBinding;
-import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.model.TypeModel;
import org.eclipse.objectteams.otdt.internal.core.compiler.statemachine.transformer.RoleSplitter;
import org.eclipse.objectteams.otdt.internal.core.compiler.util.TSuperHelper;
@@ -92,7 +91,6 @@
* Note: now sourceName and sourceName() have different semantics.
*
*/
-@SuppressWarnings({"rawtypes", "unchecked"})
//{ObjectTeams: changed superclass in order to separate out OT features:
abstract public class ReferenceBinding extends AbstractOTReferenceBinding {
protected ReferenceBinding _this() { return this; } // used in AbstractOTReferenceBinding to refer to 'this'
@@ -1403,7 +1401,7 @@
//{ObjectTeams: support asymmetric comparison. // FIXME(SH): is this needed or is super-impl smart enough??
@Override
public boolean isProvablyDistinct(TypeBinding otherType) {
- if (RoleTypeBinding.isRoleType(otherType))
+ if (otherType.isRoleType())
return otherType.isProvablyDistinct(this);
else
return super.isProvablyDistinct(otherType);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
index 0200747..116e0ed 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/Scope.java
@@ -570,7 +570,7 @@
}
if (substitutedArguments != originalArguments || substitutedEnclosing != originalEnclosing) { //$IDENTITY-COMPARISON$
//{ObjectTeams: combination role & parameterized:
- if (RoleTypeBinding.isRoleType(originalParameterizedType)) {
+ if (originalParameterizedType.isRoleType()) {
DependentTypeBinding originalRole = (DependentTypeBinding) originalParameterizedType;
return originalParameterizedType.environment.createParameterizedType(
originalParameterizedType.genericType(), substitutedArguments, originalRole._teamAnchor, originalRole._valueParamPosition, substitutedEnclosing, Binding.NO_ANNOTATIONS);
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java
index 7af8c0c..9d37ab4 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TagBits.java
@@ -199,12 +199,6 @@
// set when type binding has a captured wildcard somewhere
long HasCapturedWildcard = ASTNode.Bit62L;
//{ObjectTeams:
-
- // is it a wrapped role type?
- long IsWrappedRole = ASTNode.Bit62L; // for role type bindings
-
- // is it a dependent type?
- long IsDependentType = ASTNode.Bit63L; // for type bindings
// is a _OT$base field faked to compensate for weakening?
long IsFakedField = ASTNode.Bit63L; // for field binding
// have types been wrapped in the signature
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
index 6b53265..b45bd05 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeBinding.java
@@ -685,6 +685,12 @@
public boolean isRole() {
return false;
}
+public boolean isRoleType() {
+ return false;
+}
+public boolean isPlainDependentType() {
+ return false;
+}
// SH}
/**
@@ -914,7 +920,7 @@
//{ObjectTeams: relax if at least one type is a dependent type binding:
boolean distinctRealTypes(TypeBinding one, TypeBinding two) {
if (one instanceof ReferenceBinding && two instanceof ReferenceBinding)
- if (DependentTypeBinding.isDependentType(one) || DependentTypeBinding.isDependentType(two))
+ if (one instanceof DependentTypeBinding || two instanceof DependentTypeBinding)
return notEquals(((ReferenceBinding)one).getRealType(), ((ReferenceBinding)two).getRealType());
return TypeBinding.notEquals(one, two);
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
index faab619..fd8342c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeSystem.java
@@ -441,10 +441,10 @@
if ( valueParamPosition > -1 // position specified, requires dependent type
&& !(cachedType instanceof DependentTypeBinding))
return false;
- if ( (cachedType instanceof DependentTypeBinding) // dependent type specified, positions must match
+ if ( (cachedType instanceof DependentTypeBinding) // dependent type specified, positions must match
&& ((DependentTypeBinding)cachedType)._valueParamPosition != valueParamPosition)
return false;
- if (teamAnchor == null && RoleTypeBinding.isRoleType(cachedType)) // role type found though not requested?
+ if (teamAnchor == null && cachedType.isRoleType()) // role type found though not requested?
return false;
return true;
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
index ae52d98..dea47fd 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/lookup/TypeVariableBinding.java
@@ -239,7 +239,7 @@
if (this.anchors != null) {
ITeamAnchor anchor = substitution.substituteAnchor(this.anchors[0], 0); // TODO(SH): support multiple anchors
if (anchor != null) {
- if (!DependentTypeBinding.isDependentType(argumentType)) {
+ if (!(argumentType instanceof DependentTypeBinding)) {
return TypeConstants.MISMATCH;
} else {
ITeamAnchor argAnchor = ((DependentTypeBinding)argumentType).getAnchor();
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
index ff0aed7..aadded1 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/jdt/internal/compiler/problem/ProblemReporter.java
@@ -8441,8 +8441,8 @@
}
//{ObjectTeams: differentiate for role types:
int problemId = expectingLocation instanceof ReturnStatement ? IProblem.ReturnTypeMismatch : IProblem.TypeMismatch; // default
- if ( RoleTypeBinding.isRoleType(expectedType)
- && RoleTypeBinding.isRoleType(actualType))
+ if ( expectedType.isRoleType()
+ && actualType != null && actualType.isRoleType())
{
DependentTypeBinding resultRole = (DependentTypeBinding)actualType;
DependentTypeBinding expectedRole = (DependentTypeBinding)expectedType;
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/CallinMappingDeclaration.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/CallinMappingDeclaration.java
index d6720ef..6feaa7e 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/CallinMappingDeclaration.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/CallinMappingDeclaration.java
@@ -482,7 +482,7 @@
roleReturnLeaf = RoleModel.getTopmostBoundRole(this.scope, (ReferenceBinding)roleReturnLeaf);
// need the RTB:
- if (!DependentTypeBinding.isDependentType(roleReturnLeaf))
+ if (!(roleReturnLeaf instanceof DependentTypeBinding))
roleReturnLeaf = RoleTypeCreator.maybeWrapUnqualifiedRoleType(roleReturnLeaf,this.scope.enclosingSourceType());
// array?
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/FieldAccessSpec.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/FieldAccessSpec.java
index 2e13ad3..4e79132 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/FieldAccessSpec.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/FieldAccessSpec.java
@@ -217,7 +217,7 @@
* Create a faked method binding representing the access method to be generated by OTRE.
*/
private MethodBinding createMethod(ReferenceBinding baseType, char[] accessorSelector) {
- if (baseType instanceof RoleTypeBinding)
+ if (baseType.isRoleType())
baseType = baseType.getRealClass();
if (this.calloutModifier == TerminalTokens.TokenNameget) {
// Use the actual field type rather than the expected type (role view)
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/PotentialTranslationExpression.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/PotentialTranslationExpression.java
index d2d3594..9e200c9 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/PotentialTranslationExpression.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/ast/PotentialTranslationExpression.java
@@ -37,7 +37,6 @@
import org.eclipse.jdt.internal.compiler.lookup.TypeIds;
import org.eclipse.objectteams.otdt.core.compiler.IOTConstants;
import org.eclipse.objectteams.otdt.internal.core.compiler.control.Config;
-import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
/**
* NEW for OTDT.
@@ -136,8 +135,8 @@
}
private boolean areTypesCompatible(TypeBinding thisType, TypeBinding thatType) {
- if ( RoleTypeBinding.isRoleType(thisType)
- && RoleTypeBinding.isRoleType(thatType))
+ if ( thisType.isRoleType()
+ && thatType.isRoleType())
{
// ignore anchors for now:
thisType = ((ReferenceBinding)thisType).getRealClass();
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/AnchorListAttribute.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/AnchorListAttribute.java
index 0a06d43..3302155 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/AnchorListAttribute.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/AnchorListAttribute.java
@@ -103,7 +103,7 @@
private void writeElement(TypeBinding type) {
if (type.isArrayType())
type = type.leafComponentType();
- if (DependentTypeBinding.isDependentType(type)) {
+ if (type instanceof DependentTypeBinding) {
DependentTypeBinding roleType = (DependentTypeBinding)type;
ITeamAnchor anchor = roleType._teamAnchor;
if (anchor instanceof TThisBinding)
@@ -253,7 +253,7 @@
if (binding.isBaseType())
return false;
ReferenceBinding refBinding = (ReferenceBinding)binding;
- if (!DependentTypeBinding.isDependentType(refBinding))
+ if (!(refBinding instanceof DependentTypeBinding))
return false;
ITeamAnchor anchor = ((DependentTypeBinding)refBinding)._teamAnchor;
return !(anchor instanceof TThisBinding);
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 72ac638..8cff758 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
@@ -100,9 +100,7 @@
declaringClass = src_cpo.getFieldRef().declaringClass;
break;
}
- if ( declaringClass != null
- && declaringClass instanceof RoleTypeBinding
- && ((RoleTypeBinding)declaringClass).hasExplicitAnchor())
+ if (RoleTypeBinding.isRoleWithExplicitAnchor(declaringClass))
{
return src_cpo; // don't map features of externalized roles!
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTSpecialAccessAttribute.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTSpecialAccessAttribute.java
index 0499c44..ba800da 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTSpecialAccessAttribute.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/OTSpecialAccessAttribute.java
@@ -359,7 +359,7 @@
continue; // current role is not relevant (not bound)
if (!CharOperation.equals(newBase.sourceName(), oldBase.sourceName()))
continue; // current role is bound to a different base
- if (RoleTypeBinding.isRoleType(newBase)) {
+ if (newBase.isRoleType()) {
if (newBase instanceof WeakenedTypeBinding)
newBase = ((WeakenedTypeBinding)newBase).getStrongType();
if (((RoleTypeBinding)newBase)._teamAnchor.isBaseAnchor()) {
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/StaticReplaceBindingsAttribute.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/StaticReplaceBindingsAttribute.java
index cae095b..b6dd79b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/StaticReplaceBindingsAttribute.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/bytecode/StaticReplaceBindingsAttribute.java
@@ -192,7 +192,7 @@
ReferenceBinding baseClass = null;
if (roleClass != null)
baseClass = roleClass.baseclass();
- if (baseClass != null && RoleTypeBinding.isRoleType(baseClass))
+ if (baseClass != null && baseClass.isRoleType())
baseClass = ((RoleTypeBinding)baseClass).getRealClass();
this._size += 10; // 5 names: 1 roleclass, 2 selectors, 2 signatures
Mapping currentMapping = new Mapping(
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/AnchorMapping.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/AnchorMapping.java
index f5ef6d7..d344677 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/AnchorMapping.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/AnchorMapping.java
@@ -378,8 +378,9 @@
scope.problemReporter().externalizingNonPublicRole(arguments[i], roleType);
success = false;
}
- } else if ( loweringPossible // if we detected lowering possible before, recheck here
- && RoleTypeBinding.isRoleType(arguments[i].resolvedType))
+ } else if ( loweringPossible // if we detected lowering possible before, recheck here
+ && arguments[i].resolvedType != null
+ && arguments[i].resolvedType.isRoleType())
{
((DependentTypeBinding)arguments[i].resolvedType).recheckAmbiguousLowering(parameters[i], arguments[i], scope, messageSend.binding);
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/DependentTypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/DependentTypeBinding.java
index 59de08a..53dd661 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/DependentTypeBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/DependentTypeBinding.java
@@ -105,7 +105,7 @@
private void initializeFromType(ReferenceBinding givenType) {
this.model = givenType.model; // shared model from type.
this.modifiers = givenType.modifiers;
- this.tagBits = givenType.tagBits | TagBits.IsDependentType;
+ this.tagBits = givenType.tagBits;
this.tagBits &= ~(TagBits.AreMethodsSorted|TagBits.AreMethodsComplete); // in case the generic type was already processed
this.compoundName = givenType.compoundName;
@@ -262,34 +262,29 @@
return true; // could be anchored type variable
return binding.valueParamSynthArgs() != NO_SYNTH_ARGUMENTS;
}
- public static boolean isDependentType(TypeBinding binding) {
- if (binding == null) return false;
- return (binding.tagBits & TagBits.IsDependentType) != 0;
- }
- public static boolean isPlainDependentType(TypeBinding binding) {
- if (binding == null) return false;
- return (binding.tagBits & (TagBits.IsDependentType|TagBits.IsWrappedRole)) == TagBits.IsDependentType;
- }
@Override
public DependentTypeBinding asPlainDependentType() {
- if ((this.tagBits & (TagBits.IsWrappedRole)) == 0)
- return this;
- return null;
+ return this;
}
+ @Override
+ public boolean isPlainDependentType() {
+ return true;
+ }
+
/**
* Is type a dependent type and declaredAnchor the field representing its type value parameter?
*/
public static boolean isDependentTypeOf(TypeBinding type, ITeamAnchor declaredAnchor) {
- if (!isPlainDependentType(type))
+ if (type == null || !type.isPlainDependentType())
return false;
DependentTypeBinding depType = (DependentTypeBinding)type;
return depType._matchingVariable == declaredAnchor;
}
public static boolean isDependentTypeVariable(TypeBinding binding) {
- if ((binding.tagBits & (TagBits.IsDependentType|TagBits.IsWrappedRole)) == 0)
+ if (!(binding instanceof DependentTypeBinding))
return false;
return ((DependentTypeBinding)binding).type.kind() == TYPE_PARAMETER;
}
@@ -316,7 +311,7 @@
@Override
public boolean isProvablyDistinct(TypeBinding otherType) {
- if (DependentTypeBinding.isDependentType(otherType))
+ if (otherType instanceof DependentTypeBinding)
otherType = ((DependentTypeBinding)otherType).getRealType();
// for internal casting purposes type anchors can be ignored:
return getRealType().isProvablyDistinct(otherType);
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 8ea6269..7289081 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
@@ -166,8 +166,6 @@
initializeDependentType(teamAnchor, -1); // role type bindings have no explicit value parameters
- this.tagBits |= TagBits.IsWrappedRole;
-
// infer argument position.
ITeamAnchor firstAnchorSegment = teamAnchor.getBestNamePath()[0];
if ( firstAnchorSegment instanceof LocalVariableBinding
@@ -311,11 +309,11 @@
DependentTypeBinding leftDep= null;
DependentTypeBinding rightDep= null;
// nesting occurs for WeakenedTypeBinding(RoleTypeBinding), e.g.
- while (DependentTypeBinding.isDependentType(left)) {
+ while (left instanceof DependentTypeBinding) {
leftDep= (DependentTypeBinding)left;
left= leftDep.type;
}
- while (DependentTypeBinding.isDependentType(right)) {
+ while (right instanceof DependentTypeBinding) {
rightDep= (DependentTypeBinding)right;
right= rightDep.type;
}
@@ -324,9 +322,14 @@
&& CharOperation.equals(left.internalName(), right.internalName());
}
- public static boolean isRoleType(TypeBinding binding) {
- if (binding == null) return false;
- return (binding.tagBits & TagBits.IsWrappedRole) != 0;
+ @Override
+ public boolean isRoleType() {
+ return true;
+ }
+
+ @Override
+ public boolean isPlainDependentType() {
+ return false;
}
public static boolean isRoleTypeOrArrayOfRole(TypeBinding binding) {
@@ -340,7 +343,8 @@
// if (isRoleTypeOrArrayOfRole(typeArg)) return true;
// return false;
// }
- return (binding.leafComponentType().tagBits & TagBits.IsWrappedRole) != 0;
+ TypeBinding leafType = binding.leafComponentType();
+ return leafType != null && leafType.isRoleType();
}
/**
@@ -352,7 +356,7 @@
public static boolean isRoleWithExplicitAnchor(TypeBinding type) {
if (type == null)
return false;
- if ((type.tagBits & TagBits.IsWrappedRole) == 0)
+ if (!type.isRoleType())
return false;
return ((DependentTypeBinding)type).hasExplicitAnchor();
}
@@ -366,10 +370,15 @@
public static boolean isRoleWithoutExplicitAnchor(TypeBinding type) {
if (type == null)
return false;
- if ((type.tagBits & TagBits.IsWrappedRole) == 0)
+ if (!type.isRoleType())
return false;
return !((DependentTypeBinding)type).hasExplicitAnchor();
}
+
+ @Override
+ public DependentTypeBinding asPlainDependentType() {
+ return null;
+ }
/**
* Answer whether the method has a parameter of a type of a role such that
@@ -771,7 +780,7 @@
return true;
ReferenceBinding referenceBinding = (ReferenceBinding) right;
- if (isRoleType(referenceBinding))
+ if (referenceBinding.isRoleType())
{
RoleTypeBinding rightRole = getRoleTypeBinding(referenceBinding);
ReferenceBinding rightTeam = referenceBinding.enclosingType();
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/TeamAnchor.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/TeamAnchor.java
index b3acabd..2872892 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/TeamAnchor.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/TeamAnchor.java
@@ -291,7 +291,7 @@
if (bind != null && (bind instanceof TeamAnchor))
return (TeamAnchor)bind;
TypeBinding type = expression.resolvedType;
- if (RoleTypeBinding.isRoleType(type))
+ if (type != null && type.isRoleType())
return ((IRoleTypeBinding)type).getAnchor();
else
return null;
@@ -409,9 +409,10 @@
public ITeamAnchor retrieveAnchorFromAnchorRoleTypeFor(ReferenceBinding roleType) {
// TODO (SH) copied and not yet validated!
// in contrast to the above, this method will never return 'this'
- if ((this.type != null) && RoleTypeBinding.isRoleType(leafType()))
+ ReferenceBinding leafType = leafType();
+ if (this.type != null && leafType != null && leafType.isRoleType())
{
- ITeamAnchor anchor = ((IRoleTypeBinding)leafType()).getAnchor();
+ ITeamAnchor anchor = ((IRoleTypeBinding)leafType).getAnchor();
if (anchor.isTeamContainingRole(roleType))
{
return anchor;
@@ -746,7 +747,7 @@
if (strongRoleType != null)
return WeakenedTypeBinding.makeWeakenedTypeBinding(strongRoleType, roleBinding, dimensions);
}
- if (dimensions == roleBinding.dimensions() && DependentTypeBinding.isDependentType(roleBinding))
+ if (dimensions == roleBinding.dimensions() && roleBinding instanceof DependentTypeBinding)
return roleBinding;
}
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/WeakenedTypeBinding.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/WeakenedTypeBinding.java
index ebb87c3..d66ba80 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/WeakenedTypeBinding.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/lookup/WeakenedTypeBinding.java
@@ -122,6 +122,11 @@
return (DependentTypeBinding) this.type; // cast is safe by construction in constructor
}
+ @Override
+ public DependentTypeBinding asPlainDependentType() {
+ return this.type.asPlainDependentType();
+ }
+
public static ReferenceBinding getBytecodeType(TypeBinding returnType) {
if (returnType instanceof WeakenedTypeBinding)
// recursivly unpack all contained WTB, too:
@@ -133,6 +138,16 @@
return TypeBinding.notEquals(this.weakenedType, this.type.getRealType());
}
+ @Override
+ public boolean isRoleType() {
+ return this.type.isRoleType();
+ }
+
+ @Override
+ public boolean isPlainDependentType() {
+ return this.type.isPlainDependentType();
+ }
+
/**
* Weakening implies that the interfaces are used to ensure compatibility,
* so never use the signature of a class part.
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementor.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementor.java
index 7462cf7..406d2b2 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementor.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementor.java
@@ -952,7 +952,7 @@
TypeVariableBinding[] arguments = null;
if (givenType.isParameterizedType())
arguments = ((ParameterizedTypeBinding)givenType).typeVariables();
- if (DependentTypeBinding.isDependentType(baseBinding)) {
+ if (baseBinding instanceof DependentTypeBinding) {
ITeamAnchor anchor = ((DependentTypeBinding)baseBinding).getAnchor();
if (anchor.isTeamContainingRole(givenLeaf)) {
if (TypeBinding.notEquals(anchor.getResolvedType(), givenLeaf.enclosingType()))
@@ -1098,7 +1098,7 @@
// return type adjustments:
TypeBinding expectedType= roleMethodSpec.resolvedType();
- if (DependentTypeBinding.isDependentType(expectedType)) {
+ if (expectedType instanceof DependentTypeBinding) {
DependentTypeBinding roleBinding = (DependentTypeBinding)expectedType;
if (roleBinding.getAnchor() instanceof TThisBinding)
expectedType= roleBinding.baseclass();
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementorDyn.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementorDyn.java
index 79eea38..c4ecf8b 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementorDyn.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/mappings/CalloutImplementorDyn.java
@@ -26,7 +26,6 @@
import org.eclipse.jdt.internal.compiler.parser.TerminalTokens;
import org.eclipse.objectteams.otdt.internal.core.compiler.ast.FieldAccessSpec;
import org.eclipse.objectteams.otdt.internal.core.compiler.ast.MethodSpec;
-import org.eclipse.objectteams.otdt.internal.core.compiler.lookup.RoleTypeBinding;
import org.eclipse.objectteams.otdt.internal.core.compiler.model.RoleModel;
import org.eclipse.objectteams.otdt.internal.core.compiler.model.TeamModel;
import org.eclipse.objectteams.otdt.internal.core.compiler.util.AstGenerator;
@@ -68,7 +67,7 @@
}
private static char[] ensureAccessor(Scope scope, ReferenceBinding baseType, boolean isStatic) {
- if (baseType instanceof RoleTypeBinding)
+ if (baseType.isRoleType())
baseType = baseType.getRealClass();
char[] selector = isStatic ? ACCESS_STATIC : ACCESS;
MethodBinding[] methods = baseType.getMethods(selector);
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 f7c6a52..2ea5570 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
@@ -2144,7 +2144,7 @@
// true weakening (with weakened type binding) avoids bridge methods
- if (TypeBinding.notEquals(method.binding.returnType, template.returnType) && DependentTypeBinding.isDependentType(method.binding.returnType))
+ if (TypeBinding.notEquals(method.binding.returnType, template.returnType) && method.binding.returnType instanceof DependentTypeBinding)
method.binding.returnType = WeakenedTypeBinding.makeWeakenedTypeBinding((DependentTypeBinding)method.binding.returnType.leafComponentType(),
(ReferenceBinding) template.returnType.leafComponentType(),
template.returnType.dimensions());
diff --git a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/RoleTypeCreator.java b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/RoleTypeCreator.java
index a929333..42f482c 100644
--- a/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/RoleTypeCreator.java
+++ b/org.eclipse.jdt.core/compiler/org/eclipse/objectteams/otdt/internal/core/compiler/util/RoleTypeCreator.java
@@ -185,7 +185,7 @@
if ( (variableBinding instanceof LocalVariableBinding) // note that for FieldBinding Bit63L has a different meaning!
&& (((LocalVariableBinding)variableBinding).tagBits & TagBits.IsFreshTeamInstance) != 0)
{
- if (!RoleTypeBinding.isRoleType(refBinding))
+ if (!refBinding.isRoleType())
return variableBinding.getDependentTypeBinding(refBinding, -1, null, dimensions);
return
originalType;
@@ -263,7 +263,7 @@
ReferenceBinding refReturn = (ReferenceBinding)returnType.leafComponentType();
// don't try externalized non-public role if compatibility can be established with plain types:
- if (send.expectedType != null && !DependentTypeBinding.isDependentType(send.expectedType))
+ if (send.expectedType != null && !(send.expectedType instanceof DependentTypeBinding))
if ( refReturn.isRole()
&& !refReturn.isPublic()
&& returnType.isCompatibleWith(send.expectedType))
@@ -910,7 +910,7 @@
anchorBinding = ((RoleTypeBinding)receiverLeaf)._teamAnchor;
} else {
// regression fix during work on https://bugs.eclipse.org/331877
- if (RoleTypeBinding.isRoleType(anchorExpr.resolvedType))
+ if (anchorExpr.resolvedType != null && anchorExpr.resolvedType.isRoleType())
return ((DependentTypeBinding)anchorExpr.resolvedType)._teamAnchor;
return cannotWrapType(roleType, problemReporter, typedNode);
}
@@ -974,7 +974,7 @@
ProblemReporter problemReporter,
ASTNode typedNode)
{
- if ( !RoleTypeBinding.isRoleType(roleType)
+ if ( !roleType.isRoleType()
&& problemReporter != null)
{
if ((typedNode.bits & ASTNode.IsGeneratedWithProblem) == 0) {
@@ -1257,7 +1257,7 @@
problemReason);
}
- if (DependentTypeBinding.isDependentType(roleBinding))
+ if (roleBinding instanceof DependentTypeBinding)
{
DependentTypeBinding wrappedRole = (DependentTypeBinding)roleBinding;
if (wrappedRole._teamAnchor != variableBinding)
@@ -1363,7 +1363,7 @@
scope.problemReporter().invalidType(type, anchoredType);
return null;
}
- if (RoleTypeBinding.isRoleType(anchoredType.leafComponentType())) {
+ if (anchoredType.leafComponentType().isRoleType()) {
// prepare for creating an AnchorListAttribute
RoleTypeBinding leafRoleType = (RoleTypeBinding)anchoredType.leafComponentType();
leafRoleType._argumentPosition = argPos;
@@ -1656,7 +1656,7 @@
}
}
- if (DependentTypeBinding.isDependentType(type)) {
+ if (type instanceof DependentTypeBinding) {
TypeBinding substituted = substitution.substitute((DependentTypeBinding) type, typeArguments, dimensions);
if (substituted != type) // includes substituted == null //$IDENTITY-COMPARISON$
return substituted;
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 ad61473..3389fae 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
@@ -235,7 +235,7 @@
// guaranteed to be scalar now
if (currentType instanceof ReferenceBinding)
{
- if (DependentTypeBinding.isDependentType(currentType))
+ if (currentType instanceof DependentTypeBinding)
currentType = ((DependentTypeBinding)currentType).getRealType();
if (! (tsuperType instanceof ReferenceBinding))
return false;
@@ -360,7 +360,7 @@
tb = ((UnresolvedReferenceBinding)tb).resolve(env, false);
}
if ( createTeamAnchor
- && DependentTypeBinding.isDependentType(tb)
+ && tb instanceof DependentTypeBinding
&& ((DependentTypeBinding)tb).hasExplicitAnchor())
{
DependentTypeBinding roleTypeBinding = (DependentTypeBinding)tb;
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java
index e09f7fb..3cd217e 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/RecoveredTypeBinding.java
@@ -780,7 +780,7 @@
if (this.binding != null) {
if (onlyRelevant)
return RoleTypeBinding.isRoleWithExplicitAnchor(this.binding);
- return DependentTypeBinding.isDependentType(this.binding);
+ return this.binding instanceof DependentTypeBinding;
}
if ( this.currentType != null
&& this.currentType.isParameterizedType())
@@ -791,7 +791,7 @@
/* implement method from ITypeBinding. */
public String[] getAnchorPath() {
if (this.binding != null) {
- if (DependentTypeBinding.isDependentType(this.binding))
+ if (this.binding instanceof DependentTypeBinding)
return TypeBinding.getBestNamePath((DependentTypeBinding)this.binding);
} else if ( this.currentType != null
&& this.currentType.isParameterizedType()
diff --git a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java
index 5d9b1cc..5af26e6 100644
--- a/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java
+++ b/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/TypeBinding.java
@@ -1485,11 +1485,11 @@
public boolean isDependentType(boolean onlyRelevant) {
if (onlyRelevant)
return RoleTypeBinding.isRoleWithExplicitAnchor(this.binding);
- return DependentTypeBinding.isDependentType(this.binding);
+ return this.binding instanceof DependentTypeBinding;
}
public String[] getAnchorPath() {
- if (!DependentTypeBinding.isDependentType(this.binding))
+ if (!(this.binding instanceof DependentTypeBinding))
return new String[0];
return getBestNamePath((DependentTypeBinding)this.binding);