<s> package org . eclipse . jdt . internal . core . util ; import org . eclipse . jdt . core . IInitializer ; import org . eclipse . jdt . core . IMember ; import org . eclipse . jdt . core . ISourceRange ; import org . eclipse . jdt . core . JavaModelException ; import org . eclipse . jdt . core . dom . ASTNode ; import org . eclipse . jdt . core . dom . ASTVisitor ; import org . eclipse . jdt . core . dom . AnnotationTypeDeclaration ; import org . eclipse . jdt . core . dom . AnnotationTypeMemberDeclaration ; import org . eclipse . jdt . core . dom . AnonymousClassDeclaration ; import org . eclipse . jdt . core . dom . ClassInstanceCreation ; import org . eclipse . jdt . core . dom . CompilationUnit ; import org . eclipse . jdt . core . dom . EnumConstantDeclaration ; import org . eclipse . jdt . core . dom . EnumDeclaration ; import org . eclipse . jdt . core . dom . IBinding ; import org . eclipse . jdt . core . dom . ImportDeclaration ; import org . eclipse . jdt . core . dom . Initializer ; import org . eclipse . jdt . core . dom . MarkerAnnotation ; import org . eclipse . jdt . core . dom . MethodDeclaration ; import org . eclipse . jdt . core . dom . NormalAnnotation ; import org . eclipse . jdt . core . dom . PackageDeclaration ; import org . eclipse . jdt . core . dom . ParameterizedType ; import org . eclipse . jdt . core . dom . SingleMemberAnnotation ; import org . eclipse . jdt . core . dom . TypeDeclaration ; import org . eclipse . jdt . core . dom . TypeParameter ; import org . eclipse . jdt . core . dom . VariableDeclarationFragment ; import org . eclipse . jdt . internal . core . SourceRefElement ; public class DOMFinder extends ASTVisitor { public ASTNode foundNode = null ; public IBinding foundBinding = null ; private CompilationUnit ast ; private SourceRefElement element ; private boolean resolveBinding ; private int rangeStart = - 1 , rangeLength = 0 ; public DOMFinder ( CompilationUnit ast , SourceRefElement element , boolean resolveBinding ) { this . ast = ast ; this . element = element ; this . resolveBinding = resolveBinding ; } protected boolean found ( ASTNode node , ASTNode name ) { if ( name . getStartPosition ( ) == this . rangeStart && name . getLength ( ) == this . rangeLength ) { this . foundNode = node ; return true ; } return false ; } public ASTNode search ( ) throws JavaModelException { ISourceRange range = null ; if ( this . element instanceof IMember && ! ( this . element instanceof IInitializer ) ) range = ( ( IMember ) this . element ) . getNameRange ( ) ; else range = this . element . getSourceRange ( ) ; this . rangeStart = range . getOffset ( ) ; this . rangeLength = range . getLength ( ) ; this . ast . accept ( this ) ; return this . foundNode ; } public boolean visit ( AnnotationTypeDeclaration node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( AnnotationTypeMemberDeclaration node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( AnonymousClassDeclaration node ) { ASTNode name ; ASTNode parent = node . getParent ( ) ; switch ( parent . getNodeType ( ) ) { case ASTNode . CLASS_INSTANCE_CREATION : name = ( ( ClassInstanceCreation ) parent ) . getType ( ) ; if ( name . getNodeType ( ) == ASTNode . PARAMETERIZED_TYPE ) { name = ( ( ParameterizedType ) name ) . getType ( ) ; } break ; case ASTNode . ENUM_CONSTANT_DECLARATION : name = ( ( EnumConstantDeclaration ) parent ) . getName ( ) ; break ; default : return true ; } if ( found ( node , name ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( EnumConstantDeclaration node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveVariable ( ) ; return true ; } public boolean visit ( EnumDeclaration node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( ImportDeclaration node ) { if ( found ( node , node ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( Initializer node ) { found ( node , node ) ; return true ; } public boolean visit ( MarkerAnnotation node ) { if ( found ( node , node ) && this . resolveBinding ) this . foundBinding = node . resolveAnnotationBinding ( ) ; return true ; } public boolean visit ( MethodDeclaration node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( NormalAnnotation node ) { if ( found ( node , node ) && this . resolveBinding ) this . foundBinding = node . resolveAnnotationBinding ( ) ; return true ; } public boolean visit ( PackageDeclaration node ) { if ( found ( node , node ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( SingleMemberAnnotation node ) { if ( found ( node , node ) && this . resolveBinding ) this . foundBinding = node . resolveAnnotationBinding ( ) ; return true ; } public boolean visit ( TypeDeclaration node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( TypeParameter node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } public boolean visit ( VariableDeclarationFragment node ) { if ( found ( node , node . getName ( ) ) && this . resolveBinding ) this . foundBinding = node . resolveBinding ( ) ; return true ; } } </s>