List of usage examples for org.eclipse.jdt.internal.compiler.lookup TagBits BeginHierarchyCheck
long BeginHierarchyCheck
To view the source code for org.eclipse.jdt.internal.compiler.lookup TagBits BeginHierarchyCheck.
Click Source Link
From source file:org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.java
License:Open Source License
/** * Returns true if the type hierarchy is being connected *//*from w w w .jav a2 s . c o m*/ public boolean isHierarchyBeingConnected() { return (this.tagBits & TagBits.EndHierarchyCheck) == 0 && (this.tagBits & TagBits.BeginHierarchyCheck) != 0; }
From source file:org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.java
License:Open Source License
/** * Returns true if the type hierarchy is being connected "actively" i.e not paused momentatrily, * while resolving type arguments. See https://bugs.eclipse.org/bugs/show_bug.cgi?id=294057 *///from w ww . j ava 2s . c om public boolean isHierarchyBeingActivelyConnected() { return (this.tagBits & TagBits.EndHierarchyCheck) == 0 && (this.tagBits & TagBits.BeginHierarchyCheck) != 0 && (this.tagBits & TagBits.PauseHierarchyCheck) == 0; }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.ast.TypeAnchorReference.java
License:Open Source License
ITeamAnchor resolveAnchor(Scope scope, Reference reference) { ITeamAnchor prefix = null;//from w ww .j a va2 s . c om ITeamAnchor currentAnchor = null; char[] currentToken = null; // for lookup and creation of problem binding // be careful not to trigger fields() which may be where we are called from! if (reference instanceof SingleNameReference) { SingleNameReference singleAnchor = (SingleNameReference) reference; currentToken = singleAnchor.token; currentAnchor = findVariable(scope, currentToken, scope.isStatic(), singleAnchor.sourceStart, singleAnchor.sourceEnd); this.anchor.bits |= (this.bits & DepthMASK); // could be ProblemAnchorBinding } else if (reference instanceof FieldReference) { FieldReference fieldRef = (FieldReference) reference; Expression prefixExpr = fieldRef.receiver; if (!(prefixExpr instanceof Reference)) throw new InternalCompilerError("Unexpected anchor prefix " + prefixExpr); //$NON-NLS-1$ prefix = resolveAnchor(scope, (Reference) prefixExpr); currentToken = fieldRef.token; // fieldRef holds on to problem binding: fieldRef.binding = TypeAnalyzer.findField(((ReferenceBinding) prefix.getResolvedType()).getRealClass(), currentToken, false/*static*/, true/*outer*/); currentAnchor = checkAnchor(scope, reference, currentToken, reference.sourceStart, reference.sourceEnd, fieldRef.binding); } else if (reference instanceof QualifiedBaseReference) { QualifiedBaseReference baseRef = (QualifiedBaseReference) reference; if (scope instanceof BlockScope) baseRef.resolveType((BlockScope) scope); else baseRef.resolveType((ClassScope) scope); currentAnchor = baseRef.baseField; } else if (reference instanceof QualifiedThisReference) { QualifiedThisReference thisRef = (QualifiedThisReference) reference; if (scope instanceof BlockScope) thisRef.resolveType((BlockScope) scope); else thisRef.resolveType((ClassScope) scope); if (thisRef.resolvedType.isTeam()) currentAnchor = ((ReferenceBinding) thisRef.resolvedType).getTeamModel().getTThis(); } else { boolean haveReportedProblem = false; long currentPos = 0; QualifiedNameReference qualifiedAnchor = (QualifiedNameReference) reference; char[][] tokens = qualifiedAnchor.tokens; currentToken = tokens[tokens.length - 1]; // default, so we never use null name for problem binding // check maximal static prefix: Binding staticPrefix = null; int j; for (j = 1; j <= tokens.length; j++) { Binding current = scope.getTypeOrPackage(CharOperation.subarray(tokens, 0, j)); if (current == null || !current.isValidBinding()) break; else staticPrefix = current; } if (j > tokens.length) { scope.problemReporter().typeAnchorReferenceNotAValue(reference); haveReportedProblem = true; } else { // find first field: if (staticPrefix != null) { currentPos = qualifiedAnchor.sourcePositions[j - 1]; currentToken = tokens[j - 1]; if (staticPrefix instanceof ReferenceBinding) { currentAnchor = TypeAnalyzer.findField(((ReferenceBinding) staticPrefix).getRealClass(), currentToken, /*static*/true, /*outer*/true); } else { scope.problemReporter().typeAnchorReferenceNotAnObjectRef((int) (currentPos >>> 32), (int) currentPos); haveReportedProblem = true; } } else { currentPos = qualifiedAnchor.sourcePositions[0]; currentToken = tokens[0]; currentAnchor = findVariable(scope, currentToken, scope.isStatic(), (int) (currentPos >>> 32), (int) currentPos); haveReportedProblem = currentAnchor == null; } if (currentAnchor != null) { if (!currentAnchor.hasValidReferenceType()) { if (j < tokens.length) // would need to process more tokens? currentAnchor = null; // replace with problem binding below } else { // find more fields: for (int i = j; i < tokens.length; i++) { TypeBinding fieldType = currentAnchor.getResolvedType().leafComponentType(); if (fieldType instanceof SourceTypeBinding) { SourceTypeBinding stb = (SourceTypeBinding) fieldType; if ((stb.scope != null) && (stb.scope.compilationUnitScope() != scope.compilationUnitScope()) && (stb.tagBits & (TagBits.BeginHierarchyCheck | TagBits.EndHierarchyCheck)) == (TagBits.BeginHierarchyCheck | TagBits.EndHierarchyCheck) && StateHelper.isReadyToProcess(stb, ITranslationStates.STATE_LENV_DONE_FIELDS_AND_METHODS)) Dependencies.ensureBindingState(stb, ITranslationStates.STATE_LENV_DONE_FIELDS_AND_METHODS); } currentPos = qualifiedAnchor.sourcePositions[i]; currentToken = tokens[i]; FieldBinding nextField = currentAnchor.getFieldOfType(currentToken, /*static*/false, true); if (nextField == null || !nextField.hasValidReferenceType()) { currentAnchor = null; // replace with problem binding below break; } currentAnchor = nextField.setPathPrefix(currentAnchor); } } } } if (!haveReportedProblem) { if (currentAnchor == null) { scope.problemReporter().typeAnchorNotFound(currentToken, (int) (currentPos >>> 32), (int) currentPos); } else if (!currentAnchor.hasValidReferenceType()) { scope.problemReporter().typeAnchorReferenceNotAnObjectRef((int) (currentPos >>> 32), (int) currentPos); } } } if (currentAnchor == null) { currentAnchor = new ProblemFieldBinding(scope.enclosingReceiverType(), currentToken, ProblemReasons.NotFound); ((FieldBinding) currentAnchor).type = reference.resolvedType = new ProblemReferenceBinding( "UnresolvedType".toCharArray(), null, ProblemReasons.NotFound); //$NON-NLS-1$ } else if (currentAnchor.isValidBinding()) { if (prefix != null && !(prefix instanceof TThisBinding)) currentAnchor = currentAnchor.setPathPrefix(prefix); // fill anchor with resolved data: reference.resolvedType = currentAnchor.getResolvedType(); reference.bits &= ~RestrictiveFlagMASK; // clear bits if (currentAnchor instanceof FieldBinding) { reference.bits |= Binding.FIELD; // TODO(SH): must we remember a previous anchor to set this correctly?: if (reference instanceof NameReference) ((NameReference) reference).actualReceiverType = ((FieldBinding) currentAnchor).declaringClass; if (reference instanceof FieldReference) ((FieldReference) reference).actualReceiverType = ((FieldBinding) currentAnchor).declaringClass; } else { reference.bits |= Binding.LOCAL; } reference.constant = Constant.NotAConstant; } if (reference instanceof NameReference) { ((NameReference) reference).binding = (Binding) currentAnchor; ((NameReference) reference).resolveFinished(); } else if (reference instanceof FieldReference) { ((FieldReference) reference).binding = (FieldBinding) currentAnchor; //TODO(SH): this method doesn't exist, is the call needed? //((FieldReference)this.anchor).resolveFinished(); } return currentAnchor; }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.statemachine.copyinheritance.CopyInheritance.java
License:Open Source License
private static void loadRoFiFromType(ReferenceBinding sourceTeam, TypeReference type, HashSet<String> processed) { if (type instanceof SingleTypeReference) { char[] typeName = ((SingleTypeReference) type).token; String typeString = new String(typeName); if (!processed.contains(typeString)) { ReferenceBinding rofi = sourceTeam.getMemberType(typeName); while (rofi != null && !rofi.isBinaryBinding()) { // if a rofi actually entered the compilation process it needs // to have its super types connected: SourceTypeBinding sourceRole = (SourceTypeBinding) rofi; if (sourceRole.scope != null && (sourceRole.tagBits & TagBits.BeginHierarchyCheck) == 0) sourceRole.scope.connectTypeHierarchyWithoutMembers(); // do the same for the class part, too? if (sourceRole.isSynthInterface()) { rofi = sourceRole.getRealClass(); if (rofi != null && rofi.isInterface()) // observed an infinite loop, probably caused by rofi remaining unchanged by getRealClass above. Want to see why. throw new InternalCompilerError("Role has no class-part"); //$NON-NLS-1$ } else { rofi = null; // terminate loop }//from www .ja v a2s.c om } processed.add(typeString); } } }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.statemachine.copyinheritance.CopyInheritance.java
License:Open Source License
/** * If a tsuper role is not overriden in the current team, * create a fresh new role type declaration. * Always copy all inheritance information to the tsub role * (extends, implements, playedBy)./*from w w w.j a va 2s. c o m*/ * No difference, whether we are looking at a role class or interface. * * @param superRole * @param subTeamDecl this declaration is being edited. * @return the new or modified type declaration */ private static TypeDeclaration copyRole(ReferenceBinding superRole, boolean isNestedType, TypeDeclaration subTeamDecl, boolean isTsuperTeam) { subTeamDecl.getTeamModel()._isCopyingLateRole = true; try { if (superRole instanceof MissingTypeBinding) return null; // don't copy missing type! if (superRole.sourceName == null) return null; // local types have null name String name = new String(superRole.sourceName); if ((name.startsWith(TSUPER_OT) || CharOperation.equals(superRole.sourceName, ROFI_CACHE))) return null; // don't copy these special roles if (subTeamDecl.isRole() && superRole.roleModel.equals(subTeamDecl.getRoleModel())) return null; // can happen in case of a role extending its enclosing TypeDeclaration subRoleDecl = findMemberType(subTeamDecl, superRole.sourceName); ReferenceBinding subRoleBinding = subTeamDecl.binding.getMemberType(superRole.internalName()); if (subRoleBinding != null) { // don't copy binary tsuper, if a binary exists already here. if (shouldPreserveBinaryRole(subRoleBinding, subTeamDecl.compilationResult)) { if (isNestedType) subRoleBinding.roleModel.maybeAddLocalToEnclosing(); // no further processing needed except for connecting tsuper and copyInheritanceSrc: connectBinaryNested(superRole, subTeamDecl, subRoleBinding); return null; } // try again, memberType lookup might have introduced a role file to subTeamDecl: if (subRoleDecl == null) subRoleDecl = findMemberType(subTeamDecl, superRole.sourceName); if (subRoleDecl != null && (subRoleDecl.binding.tagBits & TagBits.BeginHierarchyCheck) == 0) subRoleDecl.scope.connectTypeHierarchyWithoutMembers(); if (subRoleDecl == null) // still? return null; // assume recompile has been scheduled } // If type doesn't exist, create now if (subRoleDecl == null) { char[] superRoleName = superRole.internalName(); if (superRole.isLocalType()) { if (!superRole.isBinaryBinding()) ((LocalTypeBinding) superRole).computeConstantPoolName(); int lastDollar = CharOperation.lastIndexOf('$', superRole.sourceName); if (lastDollar >= 0) { superRoleName = CharOperation.subarray(superRole.sourceName, lastDollar + 1, -1); } else { char[] superConstantPoolName = superRole.constantPoolName(); lastDollar = CharOperation.lastIndexOf('$', superConstantPoolName); if (lastDollar >= 0) superRoleName = CharOperation.subarray(superConstantPoolName, lastDollar + 1, -1); } } subRoleDecl = AstConverter.createNestedType(superRoleName, superRole.modifiers, isNestedType, true, // purely copied subTeamDecl, superRole); if (subRoleDecl.isInterface()) { // purely copied interface now copies superinterfaces (not handled in connectRolesFromTeam()): ReferenceBinding[] tsuperSupers = superRole.superInterfaces(); subRoleDecl.binding.superInterfaces = new ReferenceBinding[tsuperSupers.length]; int j = 0; for (int i = 0; i < tsuperSupers.length; i++) { char[] tsuperSuperName = tsuperSupers[i].internalName(); if (!CharOperation.equals(tsuperSuperName, superRoleName)) { ReferenceBinding tsubRole = subTeamDecl.binding.getMemberType(tsuperSuperName); if (tsubRole != null) subRoleDecl.binding.superInterfaces[j++] = tsubRole; } } if (j < tsuperSupers.length) System.arraycopy(subRoleDecl.binding.superInterfaces, 0, subRoleDecl.binding.superInterfaces = new ReferenceBinding[j], 0, j); } } else { if (subRoleDecl.isRegularInterface() != superRole.isRegularInterface()) { subRoleDecl.scope.problemReporter().roleClassIfcConflict(subRoleDecl); // overwrite existing type with tsuper copy: subRoleDecl.isGenerated = true; subRoleDecl.isPurelyCopied = true; subRoleDecl.modifiers = superRole.modifiers; subRoleDecl.fields = null; subRoleDecl.methods = null; subRoleDecl.superclass = null; subRoleDecl.superInterfaces = null; SourceTypeBinding roleBinding = subRoleDecl.binding; roleBinding.modifiers = superRole.modifiers; roleBinding.setFields(Binding.NO_FIELDS); roleBinding.setMethods(Binding.NO_METHODS); roleBinding.baseclass = null; roleBinding.superclass = subTeamDecl.scope.getJavaLangObject(); roleBinding.superInterfaces = Binding.NO_SUPERINTERFACES; return subRoleDecl; } if (superRole.isTeam() && !subRoleDecl.isTeam()) { if (!Protections.hasClassKindProblem(subRoleDecl.binding)) subRoleDecl.scope.problemReporter().regularOverridesTeam(subRoleDecl, superRole); subRoleDecl.modifiers |= ClassFileConstants.AccTeam; if (subRoleBinding != null) subRoleBinding.modifiers |= ClassFileConstants.AccTeam; } if (!isTsuperTeam) { if (CharOperation.equals(subRoleDecl.name, OTCONFINED)) { subRoleDecl.scope.problemReporter().overridingConfined(subRoleDecl, "Confined"); //$NON-NLS-1$ return null; } if (CharOperation.equals(subRoleDecl.name, ICONFINED)) { subRoleDecl.scope.problemReporter().overridingConfined(subRoleDecl, "IConfined"); //$NON-NLS-1$ return null; } if (superRole.isFinal()) { subRoleDecl.scope.problemReporter().overridingFinalRole(subRoleDecl, superRole); return null; } } } superRole.roleModel.hasBaseclassProblem(); // just trigger propagation from super-role to current // if (subRoleBinding != null && subRoleBinding.isBinaryBinding()) // subRoleDecl.scope.problemReporter().mismatchingRoleParts(subRoleBinding, subRoleDecl); return subRoleDecl; } finally { subTeamDecl.getTeamModel()._isCopyingLateRole = false; } }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.statemachine.copyinheritance.CopyInheritance.java
License:Open Source License
private static boolean hasHiearchyCheckBegun(ReferenceBinding type) { if ((type.tagBits & TagBits.BeginHierarchyCheck) != 0) return true; if (type.enclosingType() != null) return hasHiearchyCheckBegun(type.enclosingType()); return false; }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.statemachine.copyinheritance.CopyInheritance.java
License:Open Source License
public static TypeDeclaration internalCheckCopyLateRoleFile(SourceTypeBinding teamBinding, char[] name) { ReferenceBinding superTeam = (ReferenceBinding) teamBinding.superclass().original(); // FIXME(SH): tsuper teams if (superTeam != null && superTeam.isTeam() && !TypeAnalyzer.isOrgObjectteamsTeam(superTeam) && !teamBinding._teamModel._isCopyingLateRole && !OTNameUtils.isTSuperMarkerInterface(name)) { ReferenceBinding tsuperRole = superTeam.getMemberType(name); if ((tsuperRole == null || (!tsuperRole.isValidBinding() && tsuperRole.problemId() == ProblemReasons.NotFound)) && superTeam instanceof SourceTypeBinding) { TypeDeclaration tsuperDecl = internalCheckCopyLateRoleFile(((SourceTypeBinding) superTeam), name); if (tsuperDecl != null) tsuperRole = tsuperDecl.binding; }/*from w ww .j a v a2 s .co m*/ if (tsuperRole != null && tsuperRole.isRole() && tsuperRole.isValidBinding() && !tsuperRole.isLocalType()) { if ((teamBinding.tagBits & TagBits.BeginHierarchyCheck) != 0) return copyLateRole(teamBinding._teamModel.getAst(), tsuperRole); else return copyLateRolePart(teamBinding._teamModel.getAst(), tsuperRole); } } return null; }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.statemachine.copyinheritance.CopyInheritance.java
License:Open Source License
public static TypeDeclaration copyLateRole(TypeDeclaration teamDecl, ReferenceBinding tsuperRole) { TypeDeclaration roleType = null;//from w w w . j a v a2 s .co m ReferenceBinding ifcPart = null; char[] tsuperName = tsuperRole.internalName(); if (CharOperation.prefixEquals(IOTConstants.OT_DELIM_NAME, tsuperName)) { char[] ifcName = CharOperation.subarray(tsuperName, IOTConstants.OT_DELIM_LEN, -1); ifcPart = teamDecl.binding.getMemberType(ifcName); } roleType = copyLateRolePart(teamDecl, tsuperRole); if (ifcPart != null) { ReferenceBinding superTeam = tsuperRole.enclosingType(); if ((superTeam.tagBits & TagBits.BeginHierarchyCheck) == 0) Dependencies.ensureBindingState(superTeam, ITranslationStates.STATE_LENV_CONNECT_TYPE_HIERARCHY); if (StateHelper.hasState(tsuperRole, ITranslationStates.STATE_LENV_CONNECT_TYPE_HIERARCHY)) { RoleModel subRole = roleType.getRoleModel(); TypeLevel.connectRoleClasses(superTeam, roleType); setRoleState(subRole, STATE_LENV_CONNECT_TYPE_HIERARCHY); } } if (roleType == null) return null; Dependencies.lateRolesCatchup(teamDecl.getTeamModel()); return roleType; }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.statemachine.copyinheritance.TypeLevel.java
License:Open Source License
/** * Add the "implements" link that connects a sub-role-ifc to * its implicit super-role-ifc.//from w ww .j a v a 2s. c om * Also checks compatibility of visibilities. * @param roleInterfaceDeclaration * @param superrole */ public static void addImplicitInheritance(TypeDeclaration roleInterfaceDeclaration, ReferenceBinding superrole) { assert (roleInterfaceDeclaration.binding.tagBits & TagBits.BeginHierarchyCheck) != 0 : "binding should be connected"; //$NON-NLS-1$ int modifiers = roleInterfaceDeclaration.modifiers; int inheritedModifiers = superrole.modifiers; if (!Protections.isAsVisible(modifiers, inheritedModifiers)) { roleInterfaceDeclaration.scope.problemReporter().reducingRoleVisibility(roleInterfaceDeclaration, modifiers, inheritedModifiers); } // create bindings: ReferenceBinding[] superInterfaces = roleInterfaceDeclaration.binding.superInterfaces; ReferenceBinding[] newSuperInterfaces = null; int len = 0; if (superInterfaces != null) { for (int i = 0; i < superInterfaces.length; i++) if (TypeBinding.equalsEquals(superInterfaces[i], superrole)) return; // superinterface already present. len = superInterfaces.length; newSuperInterfaces = new ReferenceBinding[len + 1]; System.arraycopy(superInterfaces, 0, newSuperInterfaces, 0, len); } else { newSuperInterfaces = new ReferenceBinding[1]; } // this line cannot assign null, would have produced NPE above: newSuperInterfaces[len] = superrole; roleInterfaceDeclaration.scope.compilationUnitScope().recordSuperTypeReference(superrole); roleInterfaceDeclaration.binding.superInterfaces = newSuperInterfaces; }
From source file:org.eclipse.objectteams.otdt.internal.core.compiler.util.AstEdit.java
License:Open Source License
/** * Adds a new binding in the superInterfaces array of type's binding * @param typeDeclaration/* w w w. ja v a 2s. com*/ * @param resolvedSuper */ public static void addImplementsBinding(TypeDeclaration typeDeclaration, ReferenceBinding resolvedSuper) { boolean bindingPresent = typeDeclaration.binding != null && ((typeDeclaration.binding.tagBits & TagBits.BeginHierarchyCheck) != 0); assert (resolvedSuper != null && bindingPresent); SourceTypeBinding typeBinding = typeDeclaration.binding; ReferenceBinding[] superInterfaces = typeBinding.superInterfaces; int length = 0; if (superInterfaces == null) { superInterfaces = new ReferenceBinding[1]; } else { for (ReferenceBinding superIfc : superInterfaces) if (TypeBinding.equalsEquals(superIfc, resolvedSuper)) return; // already present length = superInterfaces.length; System.arraycopy(superInterfaces, 0, (superInterfaces = new ReferenceBinding[length + 1]), 1, length); } superInterfaces[0] = resolvedSuper; typeBinding.superInterfaces = superInterfaces; // compatibility may have changed, clear negative cache entries: typeBinding.resetIncompatibleTypes(); }