<s> package org . eclipse . jdt . internal . core ; import java . io . InputStream ; import java . util . ArrayList ; import java . util . HashMap ; import org . eclipse . core . runtime . Assert ; import org . eclipse . core . runtime . IProgressMonitor ; import org . eclipse . jdt . core . * ; import org . eclipse . jdt . core . compiler . * ; import org . eclipse . jdt . core . search . SearchEngine ; import org . eclipse . jdt . internal . codeassist . CompletionEngine ; import org . eclipse . jdt . internal . compiler . ast . TypeDeclaration ; import org . eclipse . jdt . internal . compiler . lookup . Binding ; import org . eclipse . jdt . internal . core . hierarchy . TypeHierarchy ; import org . eclipse . jdt . internal . core . util . MementoTokenizer ; import org . eclipse . jdt . internal . core . util . Messages ; public class SourceType extends NamedMember implements IType { protected SourceType ( JavaElement parent , String name ) { super ( parent , name ) ; } protected void closing ( Object info ) throws JavaModelException { super . closing ( info ) ; SourceTypeElementInfo elementInfo = ( SourceTypeElementInfo ) info ; ITypeParameter [ ] typeParameters = elementInfo . typeParameters ; for ( int i = 0 , length = typeParameters . length ; i < length ; i ++ ) { ( ( TypeParameter ) typeParameters [ i ] ) . close ( ) ; } } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , ICompletionRequestor requestor ) throws JavaModelException { codeComplete ( snippet , insertion , position , localVariableTypeNames , localVariableNames , localVariableModifiers , isStatic , requestor , DefaultWorkingCopyOwner . PRIMARY ) ; } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , ICompletionRequestor requestor , WorkingCopyOwner owner ) throws JavaModelException { if ( requestor == null ) { throw new IllegalArgumentException ( "" ) ; } codeComplete ( snippet , insertion , position , localVariableTypeNames , localVariableNames , localVariableModifiers , isStatic , new org . eclipse . jdt . internal . codeassist . CompletionRequestorWrapper ( requestor ) , owner ) ; } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , CompletionRequestor requestor ) throws JavaModelException { codeComplete ( snippet , insertion , position , localVariableTypeNames , localVariableNames , localVariableModifiers , isStatic , requestor , DefaultWorkingCopyOwner . PRIMARY ) ; } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , CompletionRequestor requestor , IProgressMonitor monitor ) throws JavaModelException { codeComplete ( snippet , insertion , position , localVariableTypeNames , localVariableNames , localVariableModifiers , isStatic , requestor , DefaultWorkingCopyOwner . PRIMARY , monitor ) ; } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , CompletionRequestor requestor , WorkingCopyOwner owner ) throws JavaModelException { codeComplete ( snippet , insertion , position , localVariableTypeNames , localVariableNames , localVariableModifiers , isStatic , requestor , owner , null ) ; } public void codeComplete ( char [ ] snippet , int insertion , int position , char [ ] [ ] localVariableTypeNames , char [ ] [ ] localVariableNames , int [ ] localVariableModifiers , boolean isStatic , CompletionRequestor requestor , WorkingCopyOwner owner , IProgressMonitor monitor ) throws JavaModelException { if ( requestor == null ) { throw new IllegalArgumentException ( "" ) ; } JavaProject project = ( JavaProject ) getJavaProject ( ) ; SearchableEnvironment environment = project . newSearchableNameEnvironment ( owner ) ; CompletionEngine engine = new CompletionEngine ( environment , requestor , project . getOptions ( true ) , project , owner , monitor ) ; String source = getCompilationUnit ( ) . getSource ( ) ; if ( source != null && insertion > - 1 && insertion < source . length ( ) ) { char [ ] prefix = CharOperation . concat ( source . substring ( 0 , insertion ) . toCharArray ( ) , new char [ ] { '{' } ) ; char [ ] suffix = CharOperation . concat ( new char [ ] { '}' } , source . substring ( insertion ) . toCharArray ( ) ) ; char [ ] fakeSource = CharOperation . concat ( prefix , snippet , suffix ) ; BasicCompilationUnit cu = new BasicCompilationUnit ( fakeSource , null , getElementName ( ) , getParent ( ) ) ; engine . complete ( cu , prefix . length + position , prefix . length , null ) ; } else { engine . complete ( this , snippet , position , localVariableTypeNames , localVariableNames , localVariableModifiers , isStatic ) ; } if ( NameLookup . VERBOSE ) { System . out . println ( Thread . currentThread ( ) + "" + environment . nameLookup . timeSpentInSeekTypesInSourcePackage + "ms" ) ; System . out . println ( Thread . currentThread ( ) + "" + environment . nameLookup . timeSpentInSeekTypesInBinaryPackage + "ms" ) ; } } public IField createField ( String contents , IJavaElement sibling , boolean force , IProgressMonitor monitor ) throws JavaModelException { CreateFieldOperation op = new CreateFieldOperation ( this , contents , force ) ; if ( sibling != null ) { op . createBefore ( sibling ) ; } op . runOperation ( monitor ) ; return ( IField ) op . getResultElements ( ) [ 0 ] ; } public IInitializer createInitializer ( String contents , IJavaElement sibling , IProgressMonitor monitor ) throws JavaModelException { CreateInitializerOperation op = new CreateInitializerOperation ( this , contents ) ; if ( sibling != null ) { op . createBefore ( sibling ) ; } op . runOperation ( monitor ) ; return ( IInitializer ) op . getResultElements ( ) [ 0 ] ; } public IMethod createMethod ( String contents , IJavaElement sibling , boolean force , IProgressMonitor monitor ) throws JavaModelException { CreateMethodOperation op = new CreateMethodOperation ( this , contents , force ) ; if ( sibling != null ) { op . createBefore ( sibling ) ; } op . runOperation ( monitor ) ; return ( IMethod ) op . getResultElements ( ) [ 0 ] ; } public IType createType ( String contents , IJavaElement sibling , boolean force , IProgressMonitor monitor ) throws JavaModelException { CreateTypeOperation op = new CreateTypeOperation ( this , contents , force ) ; if ( sibling != null ) { op . createBefore ( sibling ) ; } op . runOperation ( monitor ) ; return ( IType ) op . getResultElements ( ) [ 0 ] ; } public boolean equals ( Object o ) { if ( ! ( o instanceof SourceType ) ) return false ; return super . equals ( o ) ; } public IMethod [ ] findMethods ( IMethod method ) { try { return findMethods ( method , getMethods ( ) ) ; } catch ( JavaModelException e ) { return null ; } } public IAnnotation [ ] getAnnotations ( ) throws JavaModelException { AnnotatableInfo info = ( AnnotatableInfo ) getElementInfo ( ) ; return info . annotations ; } public IJavaElement [ ] getChildrenForCategory ( String category ) throws JavaModelException { IJavaElement [ ] children = getChildren ( ) ; int length = children . length ; if ( length == 0 ) return NO_ELEMENTS ; SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; HashMap categories = info . getCategories ( ) ; if ( categories == null ) return NO_ELEMENTS ; IJavaElement [ ] result = new IJavaElement [ length ] ; int index = 0 ; for ( int i = 0 ; i < length ; i ++ ) { IJavaElement child = children [ i ] ; String [ ] elementCategories = ( String [ ] ) categories . get ( child ) ; if ( elementCategories != null ) for ( int j = 0 , length2 = elementCategories . length ; j < length2 ; j ++ ) { if ( elementCategories [ j ] . equals ( category ) ) result [ index ++ ] = child ; } } if ( index == 0 ) return NO_ELEMENTS ; if ( index < length ) System . arraycopy ( result , 0 , result = new IJavaElement [ index ] , 0 , index ) ; return result ; } public IType getDeclaringType ( ) { IJavaElement parentElement = getParent ( ) ; while ( parentElement != null ) { if ( parentElement . getElementType ( ) == IJavaElement . TYPE ) { return ( IType ) parentElement ; } else if ( parentElement instanceof IMember ) { parentElement = parentElement . getParent ( ) ; } else { return null ; } } return null ; } public int getElementType ( ) { return TYPE ; } public IField getField ( String fieldName ) { return new SourceField ( this , fieldName ) ; } public IField [ ] getFields ( ) throws JavaModelException { ArrayList list = getChildrenOfType ( FIELD ) ; IField [ ] array = new IField [ list . size ( ) ] ; list . toArray ( array ) ; return array ; } public String getFullyQualifiedName ( ) { return this . getFullyQualifiedName ( '$' ) ; } public String getFullyQualifiedName ( char enclosingTypeSeparator ) { try { return getFullyQualifiedName ( enclosingTypeSeparator , false ) ; } catch ( JavaModelException e ) { return null ; } } public String getFullyQualifiedParameterizedName ( ) throws JavaModelException { return getFullyQualifiedName ( '.' , true ) ; } public IJavaElement getHandleFromMemento ( String token , MementoTokenizer memento , WorkingCopyOwner workingCopyOwner ) { switch ( token . charAt ( 0 ) ) { case JEM_COUNT : return getHandleUpdatingCountFromMemento ( memento , workingCopyOwner ) ; case JEM_FIELD : if ( ! memento . hasMoreTokens ( ) ) return this ; String fieldName = memento . nextToken ( ) ; JavaElement field = ( JavaElement ) getField ( fieldName ) ; return field . getHandleFromMemento ( memento , workingCopyOwner ) ; case JEM_INITIALIZER : if ( ! memento . hasMoreTokens ( ) ) return this ; String count = memento . nextToken ( ) ; JavaElement initializer = ( JavaElement ) getInitializer ( Integer . parseInt ( count ) ) ; return initializer . getHandleFromMemento ( memento , workingCopyOwner ) ; case JEM_METHOD : if ( ! memento . hasMoreTokens ( ) ) return this ; String selector = memento . nextToken ( ) ; ArrayList params = new ArrayList ( ) ; nextParam : while ( memento . hasMoreTokens ( ) ) { token = memento . nextToken ( ) ; switch ( token . charAt ( 0 ) ) { case JEM_TYPE : case JEM_TYPE_PARAMETER : case JEM_ANNOTATION : break nextParam ; case JEM_METHOD : if ( ! memento . hasMoreTokens ( ) ) return this ; String param = memento . nextToken ( ) ; StringBuffer buffer = new StringBuffer ( ) ; while ( param . length ( ) == 1 && Signature . C_ARRAY == param . charAt ( 0 ) ) { buffer . append ( Signature . C_ARRAY ) ; if ( ! memento . hasMoreTokens ( ) ) return this ; param = memento . nextToken ( ) ; } params . add ( buffer . toString ( ) + param ) ; break ; default : break nextParam ; } } String [ ] parameters = new String [ params . size ( ) ] ; params . toArray ( parameters ) ; JavaElement method = ( JavaElement ) getMethod ( selector , parameters ) ; switch ( token . charAt ( 0 ) ) { case JEM_TYPE : case JEM_TYPE_PARAMETER : case JEM_LOCALVARIABLE : case JEM_ANNOTATION : return method . getHandleFromMemento ( token , memento , workingCopyOwner ) ; default : return method ; } case JEM_TYPE : String typeName ; if ( memento . hasMoreTokens ( ) ) { typeName = memento . nextToken ( ) ; char firstChar = typeName . charAt ( 0 ) ; if ( firstChar == JEM_FIELD || firstChar == JEM_INITIALIZER || firstChar == JEM_METHOD || firstChar == JEM_TYPE || firstChar == JEM_COUNT ) { token = typeName ; typeName = "" ; } else { token = null ; } } else { typeName = "" ; token = null ; } JavaElement type = ( JavaElement ) getType ( typeName ) ; if ( token == null ) { return type . getHandleFromMemento ( memento , workingCopyOwner ) ; } else { return type . getHandleFromMemento ( token , memento , workingCopyOwner ) ; } case JEM_TYPE_PARAMETER : if ( ! memento . hasMoreTokens ( ) ) return this ; String typeParameterName = memento . nextToken ( ) ; JavaElement typeParameter = new TypeParameter ( this , typeParameterName ) ; return typeParameter . getHandleFromMemento ( memento , workingCopyOwner ) ; case JEM_ANNOTATION : if ( ! memento . hasMoreTokens ( ) ) return this ; String annotationName = memento . nextToken ( ) ; JavaElement annotation = new Annotation ( this , annotationName ) ; return annotation . getHandleFromMemento ( memento , workingCopyOwner ) ; } return null ; } public IInitializer getInitializer ( int count ) { return new Initializer ( this , count ) ; } public IInitializer [ ] getInitializers ( ) throws JavaModelException { ArrayList list = getChildrenOfType ( INITIALIZER ) ; IInitializer [ ] array = new IInitializer [ list . size ( ) ] ; list . toArray ( array ) ; return array ; } public String getKey ( ) { try { return getKey ( this , false ) ; } catch ( JavaModelException e ) { return null ; } } public IMethod getMethod ( String selector , String [ ] parameterTypeSignatures ) { return new SourceMethod ( this , selector , parameterTypeSignatures ) ; } public IMethod [ ] getMethods ( ) throws JavaModelException { ArrayList list = getChildrenOfType ( METHOD ) ; IMethod [ ] array = new IMethod [ list . size ( ) ] ; list . toArray ( array ) ; return array ; } public IPackageFragment getPackageFragment ( ) { IJavaElement parentElement = this . parent ; while ( parentElement != null ) { if ( parentElement . getElementType ( ) == IJavaElement . PACKAGE_FRAGMENT ) { return ( IPackageFragment ) parentElement ; } else { parentElement = parentElement . getParent ( ) ; } } Assert . isTrue ( false ) ; return null ; } public IJavaElement getPrimaryElement ( boolean checkOwner ) { if ( checkOwner ) { CompilationUnit cu = ( CompilationUnit ) getAncestor ( COMPILATION_UNIT ) ; if ( cu . isPrimary ( ) ) return this ; } IJavaElement primaryParent = this . parent . getPrimaryElement ( false ) ; switch ( primaryParent . getElementType ( ) ) { case IJavaElement . COMPILATION_UNIT : return ( ( ICompilationUnit ) primaryParent ) . getType ( this . name ) ; case IJavaElement . TYPE : return ( ( IType ) primaryParent ) . getType ( this . name ) ; case IJavaElement . FIELD : case IJavaElement . INITIALIZER : case IJavaElement . METHOD : return ( ( IMember ) primaryParent ) . getType ( this . name , this . occurrenceCount ) ; } return this ; } public String getSuperclassName ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; char [ ] superclassName = info . getSuperclassName ( ) ; if ( superclassName == null ) { return null ; } return new String ( superclassName ) ; } public String getSuperclassTypeSignature ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; char [ ] superclassName = info . getSuperclassName ( ) ; if ( superclassName == null ) { return null ; } return new String ( Signature . createTypeSignature ( superclassName , false ) ) ; } public String [ ] getSuperInterfaceNames ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; char [ ] [ ] names = info . getInterfaceNames ( ) ; return CharOperation . toStrings ( names ) ; } public String [ ] getSuperInterfaceTypeSignatures ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; char [ ] [ ] names = info . getInterfaceNames ( ) ; if ( names == null ) { return CharOperation . NO_STRINGS ; } String [ ] strings = new String [ names . length ] ; for ( int i = 0 ; i < names . length ; i ++ ) { strings [ i ] = new String ( Signature . createTypeSignature ( names [ i ] , false ) ) ; } return strings ; } public ITypeParameter [ ] getTypeParameters ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; return info . typeParameters ; } public String [ ] getTypeParameterSignatures ( ) throws JavaModelException { ITypeParameter [ ] typeParameters = getTypeParameters ( ) ; int length = typeParameters . length ; String [ ] typeParameterSignatures = new String [ length ] ; for ( int i = 0 ; i < length ; i ++ ) { TypeParameter typeParameter = ( TypeParameter ) typeParameters [ i ] ; TypeParameterElementInfo info = ( TypeParameterElementInfo ) typeParameter . getElementInfo ( ) ; char [ ] [ ] bounds = info . bounds ; if ( bounds == null ) { typeParameterSignatures [ i ] = Signature . createTypeParameterSignature ( typeParameter . getElementName ( ) , CharOperation . NO_STRINGS ) ; } else { int boundsLength = bounds . length ; char [ ] [ ] boundSignatures = new char [ boundsLength ] [ ] ; for ( int j = 0 ; j < boundsLength ; j ++ ) { boundSignatures [ j ] = Signature . createCharArrayTypeSignature ( bounds [ j ] , false ) ; } typeParameterSignatures [ i ] = new String ( Signature . createTypeParameterSignature ( typeParameter . getElementName ( ) . toCharArray ( ) , boundSignatures ) ) ; } } return typeParameterSignatures ; } public IType getType ( String typeName ) { return new SourceType ( this , typeName ) ; } public ITypeParameter getTypeParameter ( String typeParameterName ) { return new TypeParameter ( this , typeParameterName ) ; } public String getTypeQualifiedName ( ) { return this . getTypeQualifiedName ( '$' ) ; } public String getTypeQualifiedName ( char enclosingTypeSeparator ) { try { return getTypeQualifiedName ( enclosingTypeSeparator , false ) ; } catch ( JavaModelException e ) { return null ; } } public IType [ ] getTypes ( ) throws JavaModelException { ArrayList list = getChildrenOfType ( TYPE ) ; IType [ ] array = new IType [ list . size ( ) ] ; list . toArray ( array ) ; return array ; } public boolean isAnonymous ( ) { return this . name . length ( ) == 0 ; } public boolean isClass ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; return TypeDeclaration . kind ( info . getModifiers ( ) ) == TypeDeclaration . CLASS_DECL ; } public boolean isEnum ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; return TypeDeclaration . kind ( info . getModifiers ( ) ) == TypeDeclaration . ENUM_DECL ; } public boolean isInterface ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; switch ( TypeDeclaration . kind ( info . getModifiers ( ) ) ) { case TypeDeclaration . INTERFACE_DECL : case TypeDeclaration . ANNOTATION_TYPE_DECL : return true ; } return false ; } public boolean isAnnotation ( ) throws JavaModelException { SourceTypeElementInfo info = ( SourceTypeElementInfo ) getElementInfo ( ) ; return TypeDeclaration . kind ( info . getModifiers ( ) ) == TypeDeclaration . ANNOTATION_TYPE_DECL ; } public boolean isLocal ( ) { switch ( this . parent . getElementType ( ) ) { case IJavaElement . METHOD : case IJavaElement . INITIALIZER : case IJavaElement . FIELD : return true ; default : return false ; } } public boolean isMember ( ) { return getDeclaringType ( ) != null ; } public boolean isResolved ( ) { return false ; } public ITypeHierarchy loadTypeHierachy ( InputStream input , IProgressMonitor monitor ) throws JavaModelException { return loadTypeHierachy ( input , DefaultWorkingCopyOwner . PRIMARY , monitor ) ; } public ITypeHierarchy loadTypeHierachy ( InputStream input , WorkingCopyOwner owner , IProgressMonitor monitor ) throws JavaModelException { return TypeHierarchy . load ( this , input , owner ) ; } public ITypeHierarchy newSupertypeHierarchy ( IProgressMonitor monitor ) throws JavaModelException { return this . newSupertypeHierarchy ( DefaultWorkingCopyOwner . PRIMARY , monitor ) ; } public ITypeHierarchy newSupertypeHierarchy ( ICompilationUnit [ ] workingCopies , IProgressMonitor monitor ) throws JavaModelException { CreateTypeHierarchyOperation op = new CreateTypeHierarchyOperation ( this , workingCopies , SearchEngine . createWorkspaceScope ( ) , false ) ; op . runOperation ( monitor ) ; return op . getResult ( ) ; } public ITypeHierarchy newSupertypeHierarchy ( IWorkingCopy [ ] workingCopies , IProgressMonitor monitor ) throws JavaModelException { ICompilationUnit [ ] copies ; if ( workingCopies == null ) { copies = null ; } else { int length = workingCopies . length ; System . arraycopy ( workingCopies , 0 , copies = new ICompilationUnit [ length ] , 0 , length ) ; } return newSupertypeHierarchy ( copies , monitor ) ; } public ITypeHierarchy newSupertypeHierarchy ( WorkingCopyOwner owner , IProgressMonitor monitor ) throws JavaModelException { ICompilationUnit [ ] workingCopies = JavaModelManager . getJavaModelManager ( ) . getWorkingCopies ( owner , true ) ; CreateTypeHierarchyOperation op = new CreateTypeHierarchyOperation ( this , workingCopies , SearchEngine . createWorkspaceScope ( ) , false ) ; op . runOperation ( monitor ) ; return op . getResult ( ) ; } public ITypeHierarchy newTypeHierarchy ( IJavaProject project , IProgressMonitor monitor ) throws JavaModelException { return newTypeHierarchy ( project , DefaultWorkingCopyOwner . PRIMARY , monitor ) ; } public ITypeHierarchy newTypeHierarchy ( IJavaProject project , WorkingCopyOwner owner , IProgressMonitor monitor ) throws JavaModelException { if ( project == null ) { throw new IllegalArgumentException ( Messages . hierarchy_nullProject ) ; } ICompilationUnit [ ] workingCopies = JavaModelManager . getJavaModelManager ( ) . getWorkingCopies ( owner , true ) ; ICompilationUnit [ ] projectWCs = null ; if ( workingCopies != null ) { int length = workingCopies . length ; projectWCs = new ICompilationUnit [ length ] ; int index = 0 ; for ( int i = 0 ; i < length ; i ++ ) { ICompilationUnit wc = workingCopies [ i ] ; if ( project . equals ( wc . getJavaProject ( ) ) ) { projectWCs [ index ++ ] = wc ; } } if ( index != length ) { System . arraycopy ( projectWCs , 0 , projectWCs = new ICompilationUnit [ index ] , 0 , index ) ; } } CreateTypeHierarchyOperation op = new CreateTypeHierarchyOperation ( this , projectWCs , project , true ) ; op . runOperation ( monitor ) ; return op . getResult ( ) ; } public ITypeHierarchy newTypeHierarchy ( IProgressMonitor monitor ) throws JavaModelException { return newTypeHierarchy ( DefaultWorkingCopyOwner . PRIMARY , monitor ) ; } public ITypeHierarchy newTypeHierarchy ( ICompilationUnit [ ] workingCopies , IProgressMonitor monitor ) throws JavaModelException { CreateTypeHierarchyOperation op = new CreateTypeHierarchyOperation ( this , workingCopies , SearchEngine . createWorkspaceScope ( ) , true ) ; op . runOperation ( monitor ) ; return op . getResult ( ) ; } public ITypeHierarchy newTypeHierarchy ( IWorkingCopy [ ] workingCopies , IProgressMonitor monitor ) throws JavaModelException { ICompilationUnit [ ] copies ; if ( workingCopies == null ) { copies = null ; } else { int length = workingCopies . length ; System . arraycopy ( workingCopies , 0 , copies = new ICompilationUnit [ length ] , 0 , length ) ; } return newTypeHierarchy ( copies , monitor ) ; } public ITypeHierarchy newTypeHierarchy ( WorkingCopyOwner owner , IProgressMonitor monitor ) throws JavaModelException { ICompilationUnit [ ] workingCopies = JavaModelManager . getJavaModelManager ( ) . getWorkingCopies ( owner , true ) ; CreateTypeHierarchyOperation op = new CreateTypeHierarchyOperation ( this , workingCopies , SearchEngine . createWorkspaceScope ( ) , true ) ; op . runOperation ( monitor ) ; return op . getResult ( ) ; } public JavaElement resolved ( Binding binding ) { SourceRefElement resolvedHandle = new ResolvedSourceType ( this . parent , this . name , new String ( binding . computeUniqueKey ( ) ) ) ; resolvedHandle . occurrenceCount = this . occurrenceCount ; return resolvedHandle ; } protected void toStringInfo ( int tab , StringBuffer buffer , Object info , boolean showResolvedInfo ) { buffer . append ( tabString ( tab ) ) ; if ( info == null ) { String elementName = getElementName ( ) ; if ( elementName . length ( ) == 0 ) { buffer . append ( "<anonymous #" ) ; buffer . append ( this . occurrenceCount ) ; buffer . append ( ">" ) ; } else { toStringName ( buffer ) ; } buffer . append ( " (not open)" ) ; } else if ( info == NO_INFO ) { String elementName = getElementName ( ) ; if ( elementName . length ( ) == 0 ) { buffer . append ( "<anonymous #" ) ; buffer . append ( this . occurrenceCount ) ; buffer . append ( ">" ) ; } else { toStringName ( buffer ) ; } } else { try { if ( isEnum ( ) ) { buffer . append ( "enum " ) ; } else if ( isAnnotation ( ) ) { buffer . append ( "@interface " ) ; } else if ( isInterface ( ) ) { buffer . append ( "interface " ) ; } else { buffer . append ( "class " ) ; } String elementName = getElementName ( ) ; if ( elementName . length ( ) == 0 ) { buffer . append ( "<anonymous #" ) ; buffer . append ( this . occurrenceCount ) ; buffer . append ( ">" ) ; } else { toStringName ( buffer ) ; } } catch ( JavaModelException e ) { buffer . append ( "" + getElementName ( ) ) ; } } } } </s>