<s> package org . eclipse . jdt . internal . codeassist . complete ; import org . eclipse . jdt . internal . compiler . * ; import org . eclipse . jdt . internal . compiler . ast . * ; import org . eclipse . jdt . internal . compiler . lookup . * ; public class CompletionNodeDetector extends ASTVisitor { private ASTNode searchedNode ; private ASTNode parent ; private boolean result ; public CompletionNodeDetector ( ASTNode searchedNode , ASTNode visitedAst ) { this . searchedNode = searchedNode ; this . result = false ; if ( searchedNode != null && visitedAst != null ) { visitedAst . traverse ( this , null ) ; } } public boolean containsCompletionNode ( ) { return this . result ; } public ASTNode getCompletionNodeParent ( ) { return this . parent ; } public void endVisit ( AllocationExpression allocationExpression , BlockScope scope ) { endVisit ( allocationExpression ) ; } public void endVisit ( AND_AND_Expression and_and_Expression , BlockScope scope ) { endVisit ( and_and_Expression ) ; } public void endVisit ( ArrayAllocationExpression arrayAllocationExpression , BlockScope scope ) { endVisit ( arrayAllocationExpression ) ; } public void endVisit ( ArrayInitializer arrayInitializer , BlockScope scope ) { endVisit ( arrayInitializer ) ; } public void endVisit ( ArrayQualifiedTypeReference arrayQualifiedTypeReference , BlockScope scope ) { endVisit ( arrayQualifiedTypeReference ) ; } public void endVisit ( ArrayQualifiedTypeReference arrayQualifiedTypeReference , ClassScope scope ) { endVisit ( arrayQualifiedTypeReference ) ; } public void endVisit ( ArrayReference arrayReference , BlockScope scope ) { endVisit ( arrayReference ) ; } public void endVisit ( ArrayTypeReference arrayTypeReference , BlockScope scope ) { endVisit ( arrayTypeReference ) ; } public void endVisit ( ArrayTypeReference arrayTypeReference , ClassScope scope ) { endVisit ( arrayTypeReference ) ; } public void endVisit ( Assignment assignment , BlockScope scope ) { endVisit ( assignment ) ; } public void endVisit ( BinaryExpression binaryExpression , BlockScope scope ) { endVisit ( binaryExpression ) ; } public void endVisit ( CastExpression castExpression , BlockScope scope ) { endVisit ( castExpression ) ; } public void endVisit ( CompoundAssignment compoundAssignment , BlockScope scope ) { endVisit ( compoundAssignment ) ; } public void endVisit ( ConditionalExpression conditionalExpression , BlockScope scope ) { endVisit ( conditionalExpression ) ; } public void endVisit ( EqualExpression equalExpression , BlockScope scope ) { endVisit ( equalExpression ) ; } public void endVisit ( ExplicitConstructorCall explicitConstructor , BlockScope scope ) { endVisit ( explicitConstructor ) ; } public void endVisit ( FieldReference fieldReference , BlockScope scope ) { endVisit ( fieldReference ) ; } public void endVisit ( InstanceOfExpression instanceOfExpression , BlockScope scope ) { endVisit ( instanceOfExpression ) ; } public void endVisit ( MessageSend messageSend , BlockScope scope ) { endVisit ( messageSend ) ; } public void endVisit ( OR_OR_Expression or_or_Expression , BlockScope scope ) { endVisit ( or_or_Expression ) ; } public void endVisit ( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference , BlockScope scope ) { endVisit ( parameterizedQualifiedTypeReference ) ; } public void endVisit ( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference , ClassScope scope ) { endVisit ( parameterizedQualifiedTypeReference ) ; } public void endVisit ( ParameterizedSingleTypeReference parameterizedSingleTypeReference , BlockScope scope ) { endVisit ( parameterizedSingleTypeReference ) ; } public void endVisit ( ParameterizedSingleTypeReference parameterizedSingleTypeReference , ClassScope scope ) { endVisit ( parameterizedSingleTypeReference ) ; } public void endVisit ( PostfixExpression postfixExpression , BlockScope scope ) { endVisit ( postfixExpression ) ; } public void endVisit ( PrefixExpression prefixExpression , BlockScope scope ) { endVisit ( prefixExpression ) ; } public void endVisit ( QualifiedAllocationExpression qualifiedAllocationExpression , BlockScope scope ) { endVisit ( qualifiedAllocationExpression ) ; } public void endVisit ( QualifiedNameReference qualifiedNameReference , BlockScope scope ) { endVisit ( qualifiedNameReference ) ; } public void endVisit ( QualifiedSuperReference qualifiedSuperReference , BlockScope scope ) { endVisit ( qualifiedSuperReference ) ; } public void endVisit ( QualifiedThisReference qualifiedThisReference , BlockScope scope ) { endVisit ( qualifiedThisReference ) ; } public void endVisit ( QualifiedTypeReference qualifiedTypeReference , BlockScope scope ) { endVisit ( qualifiedTypeReference ) ; } public void endVisit ( QualifiedTypeReference qualifiedTypeReference , ClassScope scope ) { endVisit ( qualifiedTypeReference ) ; } public void endVisit ( SingleNameReference singleNameReference , BlockScope scope ) { endVisit ( singleNameReference ) ; } public void endVisit ( SingleTypeReference singleTypeReference , BlockScope scope ) { endVisit ( singleTypeReference ) ; } public void endVisit ( SingleTypeReference singleTypeReference , ClassScope scope ) { endVisit ( singleTypeReference ) ; } public void endVisit ( SuperReference superReference , BlockScope scope ) { endVisit ( superReference ) ; } public void endVisit ( ThisReference thisReference , BlockScope scope ) { endVisit ( thisReference ) ; } public void endVisit ( UnaryExpression unaryExpression , BlockScope scope ) { endVisit ( unaryExpression ) ; } public void endVisit ( MemberValuePair pair , BlockScope scope ) { endVisit ( pair ) ; } public void endVisit ( MemberValuePair pair , CompilationUnitScope scope ) { endVisit ( pair ) ; } public boolean visit ( AllocationExpression allocationExpression , BlockScope scope ) { return this . visit ( allocationExpression ) ; } public boolean visit ( AND_AND_Expression and_and_Expression , BlockScope scope ) { return this . visit ( and_and_Expression ) ; } public boolean visit ( ArrayAllocationExpression arrayAllocationExpression , BlockScope scope ) { return this . visit ( arrayAllocationExpression ) ; } public boolean visit ( ArrayInitializer arrayInitializer , BlockScope scope ) { return this . visit ( arrayInitializer ) ; } public boolean visit ( ArrayQualifiedTypeReference arrayQualifiedTypeReference , BlockScope scope ) { return this . visit ( arrayQualifiedTypeReference ) ; } public boolean visit ( ArrayQualifiedTypeReference arrayQualifiedTypeReference , ClassScope scope ) { return this . visit ( arrayQualifiedTypeReference ) ; } public boolean visit ( ArrayReference arrayReference , BlockScope scope ) { return this . visit ( arrayReference ) ; } public boolean visit ( ArrayTypeReference arrayTypeReference , BlockScope scope ) { return this . visit ( arrayTypeReference ) ; } public boolean visit ( ArrayTypeReference arrayTypeReference , ClassScope scope ) { return this . visit ( arrayTypeReference ) ; } public boolean visit ( Assignment assignment , BlockScope scope ) { return this . visit ( assignment ) ; } public boolean visit ( BinaryExpression binaryExpression , BlockScope scope ) { return this . visit ( binaryExpression ) ; } public boolean visit ( CastExpression castExpression , BlockScope scope ) { return this . visit ( castExpression ) ; } public boolean visit ( CompoundAssignment compoundAssignment , BlockScope scope ) { return this . visit ( compoundAssignment ) ; } public boolean visit ( ConditionalExpression conditionalExpression , BlockScope scope ) { return this . visit ( conditionalExpression ) ; } public boolean visit ( EqualExpression equalExpression , BlockScope scope ) { return this . visit ( equalExpression ) ; } public boolean visit ( ExplicitConstructorCall explicitConstructor , BlockScope scope ) { return this . visit ( explicitConstructor ) ; } public boolean visit ( FieldReference fieldReference , BlockScope scope ) { return this . visit ( fieldReference ) ; } public boolean visit ( InstanceOfExpression instanceOfExpression , BlockScope scope ) { return this . visit ( instanceOfExpression ) ; } public boolean visit ( MessageSend messageSend , BlockScope scope ) { return this . visit ( messageSend ) ; } public boolean visit ( OR_OR_Expression or_or_Expression , BlockScope scope ) { return this . visit ( or_or_Expression ) ; } public boolean visit ( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference , BlockScope scope ) { return this . visit ( parameterizedQualifiedTypeReference ) ; } public boolean visit ( ParameterizedQualifiedTypeReference parameterizedQualifiedTypeReference , ClassScope scope ) { return this . visit ( parameterizedQualifiedTypeReference ) ; } public boolean visit ( ParameterizedSingleTypeReference parameterizedSingleTypeReference , BlockScope scope ) { return this . visit ( parameterizedSingleTypeReference ) ; } public boolean visit ( ParameterizedSingleTypeReference parameterizedSingleTypeReference , ClassScope scope ) { return this . visit ( parameterizedSingleTypeReference ) ; } public boolean visit ( PostfixExpression postfixExpression , BlockScope scope ) { return this . visit ( postfixExpression ) ; } public boolean visit ( PrefixExpression prefixExpression , BlockScope scope ) { return this . visit ( prefixExpression ) ; } public boolean visit ( QualifiedAllocationExpression qualifiedAllocationExpression , BlockScope scope ) { return this . visit ( qualifiedAllocationExpression ) ; } public boolean visit ( QualifiedNameReference qualifiedNameReference , BlockScope scope ) { return this . visit ( qualifiedNameReference ) ; } public boolean visit ( QualifiedSuperReference qualifiedSuperReference , BlockScope scope ) { return this . visit ( qualifiedSuperReference ) ; } public boolean visit ( QualifiedThisReference qualifiedThisReference , BlockScope scope ) { return this . visit ( qualifiedThisReference ) ; } public boolean visit ( QualifiedTypeReference qualifiedTypeReference , BlockScope scope ) { return this . visit ( qualifiedTypeReference ) ; } public boolean visit ( QualifiedTypeReference qualifiedTypeReference , ClassScope scope ) { return this . visit ( qualifiedTypeReference ) ; } public boolean visit ( SingleNameReference singleNameReference , BlockScope scope ) { return this . visit ( singleNameReference ) ; } public boolean visit ( SingleTypeReference singleTypeReference , BlockScope scope ) { return this . visit ( singleTypeReference ) ; } public boolean visit ( SingleTypeReference singleTypeReference , ClassScope scope ) { return this . visit ( singleTypeReference ) ; } public boolean visit ( StringLiteral stringLiteral , BlockScope scope ) { return this . visit ( stringLiteral ) ; } public boolean visit ( SuperReference superReference , BlockScope scope ) { return this . visit ( superReference ) ; } public boolean visit ( ThisReference thisReference , BlockScope scope ) { return this . visit ( thisReference ) ; } public boolean visit ( UnaryExpression unaryExpression , BlockScope scope ) { return this . visit ( unaryExpression ) ; } public boolean visit ( MemberValuePair pair , BlockScope scope ) { return this . visit ( pair ) ; } public boolean visit ( MemberValuePair pair , CompilationUnitScope scope ) { return this . visit ( pair ) ; } private void endVisit ( ASTNode astNode ) { if ( this . result && this . parent == null && astNode != this . searchedNode ) { if ( ! ( astNode instanceof AllocationExpression && ( ( AllocationExpression ) astNode ) . type == this . searchedNode ) && ! ( astNode instanceof ConditionalExpression && ( ( ConditionalExpression ) astNode ) . valueIfTrue == this . searchedNode ) && ! ( astNode instanceof ConditionalExpression && ( ( ConditionalExpression ) astNode ) . valueIfFalse == this . searchedNode ) ) { this . parent = astNode ; } } } private boolean visit ( ASTNode astNode ) { if ( astNode == this . searchedNode ) { this . result = true ; } return ! this . result ; } } </s>