Java Code Examples for org.eclipse.jdt.internal.compiler.lookup.BlockScope#getField()
The following examples show how to use
org.eclipse.jdt.internal.compiler.lookup.BlockScope#getField() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: CodeSnippetThisReference.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 6 votes |
public TypeBinding resolveType(BlockScope scope) { // implicit this this.constant = Constant.NotAConstant; ReferenceBinding snippetType = scope.enclosingSourceType(); MethodScope methodScope = scope.methodScope(); if (!this.isImplicit && !checkAccess(scope, snippetType)) { return null; } this.delegateThis = scope.getField(snippetType, DELEGATE_THIS, this); if (this.delegateThis == null || !this.delegateThis.isValidBinding()) { // should not happen // if this happen we should report illegal access to this in a static context methodScope.problemReporter().errorThisSuperInStatic(this); return null; } return this.resolvedType = this.delegateThis.type; }
Example 2
Source File: SelectionOnSingleNameReference.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 5 votes |
public TypeBinding resolveType(BlockScope scope) { if (this.actualReceiverType != null) { this.binding = scope.getField(this.actualReceiverType, this.token, this); if (this.binding != null && this.binding.isValidBinding()) { throw new SelectionNodeFound(this.binding); } } // it can be a package, type, member type, local variable or field this.binding = scope.getBinding(this.token, Binding.VARIABLE | Binding.TYPE | Binding.PACKAGE, this, true /*resolve*/); if (!this.binding.isValidBinding()) { if (this.binding instanceof ProblemFieldBinding) { // tolerate some error cases if (this.binding.problemId() == ProblemReasons.NotVisible || this.binding.problemId() == ProblemReasons.InheritedNameHidesEnclosingName || this.binding.problemId() == ProblemReasons.NonStaticReferenceInConstructorInvocation || this.binding.problemId() == ProblemReasons.NonStaticReferenceInStaticContext){ throw new SelectionNodeFound(this.binding); } scope.problemReporter().invalidField(this, (FieldBinding) this.binding); } else if (this.binding instanceof ProblemReferenceBinding || this.binding instanceof MissingTypeBinding) { // tolerate some error cases if (this.binding.problemId() == ProblemReasons.NotVisible){ throw new SelectionNodeFound(this.binding); } scope.problemReporter().invalidType(this, (TypeBinding) this.binding); } else { scope.problemReporter().unresolvableReference(this, this.binding); } throw new SelectionNodeFound(); } throw new SelectionNodeFound(this.binding); }
Example 3
Source File: CodeSnippetFieldReference.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
public TypeBinding resolveType(BlockScope scope) { // Answer the signature type of the field. // constants are propaged when the field is final // and initialized with a (compile time) constant // regular receiver reference this.actualReceiverType = this.receiver.resolveType(scope); if (this.actualReceiverType == null){ this.constant = Constant.NotAConstant; return null; } // the case receiverType.isArrayType and token = 'length' is handled by the scope API this.binding = scope.getField(this.actualReceiverType, this.token, this); FieldBinding firstAttempt = this.binding; boolean isNotVisible = false; if (!this.binding.isValidBinding()) { if (this.binding instanceof ProblemFieldBinding && ((ProblemFieldBinding) this.binding).problemId() == NotVisible) { isNotVisible = true; if (this.evaluationContext.declaringTypeName != null) { this.delegateThis = scope.getField(scope.enclosingSourceType(), DELEGATE_THIS, this); if (this.delegateThis == null){ // if not found then internal error, field should have been found this.constant = Constant.NotAConstant; scope.problemReporter().invalidField(this, this.actualReceiverType); return null; } this.actualReceiverType = this.delegateThis.type; } else { this.constant = Constant.NotAConstant; scope.problemReporter().invalidField(this, this.actualReceiverType); return null; } CodeSnippetScope localScope = new CodeSnippetScope(scope); this.binding = localScope.getFieldForCodeSnippet(this.delegateThis.type, this.token, this); } } if (!this.binding.isValidBinding()) { this.constant = Constant.NotAConstant; if (isNotVisible) { this.binding = firstAttempt; } scope.problemReporter().invalidField(this, this.actualReceiverType); return null; } if (isFieldUseDeprecated(this.binding, scope, this.bits)) { scope.problemReporter().deprecatedField(this.binding, this); } // check for this.x in static is done in the resolution of the receiver this.constant = this.receiver.isImplicitThis() ? this.binding.constant() : Constant.NotAConstant; if (!this.receiver.isThis()) { // TODO need to check if shouldn't be isImplicitThis check (and then removed) this.constant = Constant.NotAConstant; } return this.resolvedType = this.binding.type; }
Example 4
Source File: CodeSnippetSingleNameReference.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
/** * Normal field binding did not work, try to bind to a field of the delegate receiver. */ public TypeBinding reportError(BlockScope scope) { this.constant = Constant.NotAConstant; if (this.binding instanceof ProblemFieldBinding && ((ProblemFieldBinding) this.binding).problemId() == NotFound){ if (this.evaluationContext.declaringTypeName != null) { this.delegateThis = scope.getField(scope.enclosingSourceType(), DELEGATE_THIS, this); if (this.delegateThis != null){ // if not found then internal error, field should have been found this.actualReceiverType = this.delegateThis.type; // will not support innerclass emulation inside delegate this.binding = scope.getField(this.delegateThis.type, this.token, this); if (!this.binding.isValidBinding()) { return super.reportError(scope); } return checkFieldAccess(scope); } } } if (this.binding instanceof ProblemBinding && ((ProblemBinding) this.binding).problemId() == NotFound){ if (this.evaluationContext.declaringTypeName != null) { this.delegateThis = scope.getField(scope.enclosingSourceType(), DELEGATE_THIS, this); if (this.delegateThis != null){ // if not found then internal error, field should have been found this.actualReceiverType = this.delegateThis.type; // will not support innerclass emulation inside delegate FieldBinding fieldBinding = scope.getField(this.delegateThis.type, this.token, this); if (!fieldBinding.isValidBinding()) { if (((ProblemFieldBinding) fieldBinding).problemId() == NotVisible) { // manage the access to a private field of the enclosing type CodeSnippetScope localScope = new CodeSnippetScope(scope); this.binding = localScope.getFieldForCodeSnippet(this.delegateThis.type, this.token, this); return checkFieldAccess(scope); } else { return super.reportError(scope); } } this.binding = fieldBinding; return checkFieldAccess(scope); } } } return super.reportError(scope); }
Example 5
Source File: CodeSnippetQualifiedNameReference.java From Eclipse-Postfix-Code-Completion with Eclipse Public License 1.0 | 4 votes |
public TypeBinding getOtherFieldBindings(BlockScope scope) { // At this point restrictiveFlag may ONLY have two potential value : FIELD LOCAL (i.e cast <<(VariableBinding) binding>> is valid) int length = this.tokens.length; if ((this.bits & Binding.FIELD) != 0) { if (!((FieldBinding) this.binding).isStatic()) { //must check for the static status.... if (this.indexOfFirstFieldBinding == 1) { //the field is the first token of the qualified reference.... if (scope.methodScope().isStatic) { scope.problemReporter().staticFieldAccessToNonStaticVariable(this, (FieldBinding) this.binding); return null; } } else { //accessing to a field using a type as "receiver" is allowed only with static field scope.problemReporter().staticFieldAccessToNonStaticVariable(this, (FieldBinding) this.binding); return null; } } // only last field is actually a write access if any if (isFieldUseDeprecated((FieldBinding) this.binding, scope, this.indexOfFirstFieldBinding == length ? this.bits : 0)) { scope.problemReporter().deprecatedField((FieldBinding) this.binding, this); } } TypeBinding type = ((VariableBinding) this.binding).type; int index = this.indexOfFirstFieldBinding; if (index == length) { // restrictiveFlag == FIELD this.constant = ((FieldBinding) this.binding).constant(); return type; } // allocation of the fieldBindings array and its respective constants int otherBindingsLength = length - index; this.otherBindings = new FieldBinding[otherBindingsLength]; // fill the first constant (the one of the binding) this.constant =((VariableBinding) this.binding).constant(); // iteration on each field while (index < length) { char[] token = this.tokens[index]; if (type == null) return null; // could not resolve type prior to this point FieldBinding field = scope.getField(type, token, this); int place = index - this.indexOfFirstFieldBinding; this.otherBindings[place] = field; if (!field.isValidBinding()) { // try to retrieve the field as private field CodeSnippetScope localScope = new CodeSnippetScope(scope); if (this.delegateThis == null) { if (this.evaluationContext.declaringTypeName != null) { this.delegateThis = scope.getField(scope.enclosingSourceType(), DELEGATE_THIS, this); if (this.delegateThis == null){ // if not found then internal error, field should have been found return super.reportError(scope); } this.actualReceiverType = this.delegateThis.type; } else { this.constant = Constant.NotAConstant; //don't fill other constants slots... scope.problemReporter().invalidField(this, field, index, type); return null; } } field = localScope.getFieldForCodeSnippet(this.delegateThis.type, token, this); this.otherBindings[place] = field; } if (field.isValidBinding()) { // only last field is actually a write access if any if (isFieldUseDeprecated(field, scope, index+1 == length ? this.bits : 0)) { scope.problemReporter().deprecatedField(field, this); } // constant propagation can only be performed as long as the previous one is a constant too. if (this.constant != Constant.NotAConstant){ this.constant = field.constant(); } type = field.type; index++; } else { this.constant = Constant.NotAConstant; //don't fill other constants slots... scope.problemReporter().invalidField(this, field, index, type); return null; } } return (this.otherBindings[otherBindingsLength - 1]).type; }