@ -229,7 +229,7 @@ namespace ICSharpCode.SharpDevelop.Dom
lock ( namespaces ) {
lock ( namespaces ) {
AddClassToNamespaceListInternal ( addClass ) ;
AddClassToNamespaceListInternal ( addClass ) ;
}
}
SearchClassReturnTyp e. ClearCache ( ) ;
DomCach e. Clear ( ) ;
}
}
/// <summary>
/// <summary>
@ -462,7 +462,7 @@ namespace ICSharpCode.SharpDevelop.Dom
foreach ( IAttribute attr in unit . Attributes )
foreach ( IAttribute attr in unit . Attributes )
assemblyAttributes . Remove ( attr ) ;
assemblyAttributes . Remove ( attr ) ;
}
}
SearchClassReturnTyp e. ClearCache ( ) ;
DomCach e. Clear ( ) ;
}
}
public void UpdateCompilationUnit ( ICompilationUnit oldUnit , ICompilationUnit parserOutput , string fileName )
public void UpdateCompilationUnit ( ICompilationUnit oldUnit , ICompilationUnit parserOutput , string fileName )
@ -481,7 +481,7 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
assemblyAttributes . AddRange ( parserOutput . Attributes ) ;
assemblyAttributes . AddRange ( parserOutput . Attributes ) ;
}
}
SearchClassReturnTyp e. ClearCache ( ) ;
DomCach e. Clear ( ) ;
}
}
protected void RemoveClass ( IClass @class )
protected void RemoveClass ( IClass @class )
@ -554,14 +554,9 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
#region Default Parser Layer dependent functions
#region Default Parser Layer dependent functions
public IClass GetClass ( string typeName )
{
return GetClass ( typeName , 0 ) ;
}
public IClass GetClass ( string typeName , int typeParameterCount )
public IClass GetClass ( string typeName , int typeParameterCount )
{
{
return GetClass ( typeName , typeParameterCount , language , true ) ;
return GetClass ( typeName , typeParameterCount , language , GetClassOptions . Default ) ;
}
}
protected IClass GetClassInternal ( string typeName , int typeParameterCount , LanguageProperties language )
protected IClass GetClassInternal ( string typeName , int typeParameterCount , LanguageProperties language )
@ -587,7 +582,7 @@ namespace ICSharpCode.SharpDevelop.Dom
return c . IsPublic | | c . ProjectContent = = this ;
return c . IsPublic | | c . ProjectContent = = this ;
}
}
public IClass GetClass ( string typeName , int typeParameterCount , LanguageProperties language , bool lookInReference s)
public IClass GetClass ( string typeName , int typeParameterCount , LanguageProperties language , GetClassOptions option s)
{
{
IClass c = GetClassInternal ( typeName , typeParameterCount , language ) ;
IClass c = GetClassInternal ( typeName , typeParameterCount , language ) ;
if ( c ! = null & & c . TypeParameters . Count = = typeParameterCount ) {
if ( c ! = null & & c . TypeParameters . Count = = typeParameterCount ) {
@ -595,10 +590,10 @@ namespace ICSharpCode.SharpDevelop.Dom
}
}
// Search in references:
// Search in references:
if ( l ookInReferences) {
if ( ( options & GetClassOptions . L ookInReferences) ! = 0 ) {
lock ( referencedContents ) {
lock ( referencedContents ) {
foreach ( IProjectContent content in referencedContents ) {
foreach ( IProjectContent content in referencedContents ) {
IClass contentClass = content . GetClass ( typeName , typeParameterCount , language , fals e) ;
IClass contentClass = content . GetClass ( typeName , typeParameterCount , language , GetClassOptions . Non e) ;
if ( contentClass ! = null ) {
if ( contentClass ! = null ) {
if ( contentClass . TypeParameters . Count = = typeParameterCount
if ( contentClass . TypeParameters . Count = = typeParameterCount
& & IsAccessibleClass ( contentClass ) )
& & IsAccessibleClass ( contentClass ) )
@ -616,19 +611,21 @@ namespace ICSharpCode.SharpDevelop.Dom
return c ;
return c ;
}
}
// not found -> maybe nested type -> trying to find class that contains this one.
if ( ( options & GetClassOptions . LookForInnerClass ) ! = 0 ) {
int lastIndex = typeName . LastIndexOf ( '.' ) ;
// not found -> maybe nested type -> trying to find class that contains this one.
if ( lastIndex > 0 ) {
int lastIndex = typeName . LastIndexOf ( '.' ) ;
string outerName = typeName . Substring ( 0 , lastIndex ) ;
if ( lastIndex > 0 ) {
IClass upperClass = GetClass ( outerName , typeParameterCount , language , lookInReferences ) ;
string outerName = typeName . Substring ( 0 , lastIndex ) ;
if ( upperClass ! = null ) {
IClass upperClass = GetClass ( outerName , typeParameterCount , language , options ) ;
foreach ( IClass upperBaseClass in upperClass . ClassInheritanceTree ) {
if ( upperClass ! = null ) {
IList < IClass > innerClasses = upperBaseClass . InnerClasses ;
foreach ( IClass upperBaseClass in upperClass . ClassInheritanceTree ) {
if ( innerClasses ! = null ) {
IList < IClass > innerClasses = upperBaseClass . InnerClasses ;
string innerName = typeName . Substring ( lastIndex + 1 ) ;
if ( innerClasses ! = null ) {
foreach ( IClass innerClass in innerClasses ) {
string innerName = typeName . Substring ( lastIndex + 1 ) ;
if ( language . NameComparer . Equals ( innerClass . Name , innerName ) ) {
foreach ( IClass innerClass in innerClasses ) {
return innerClass ;
if ( language . NameComparer . Equals ( innerClass . Name , innerName ) ) {
return innerClass ;
}
}
}
}
}
}
}
@ -895,9 +892,9 @@ namespace ICSharpCode.SharpDevelop.Dom
int typeParameterCount = className [ className . Length - 1 ] - '0' ;
int typeParameterCount = className [ className . Length - 1 ] - '0' ;
if ( typeParameterCount < 0 ) typeParameterCount = 0 ;
if ( typeParameterCount < 0 ) typeParameterCount = 0 ;
className = className . Substring ( 0 , className . Length - 2 ) ;
className = className . Substring ( 0 , className . Length - 2 ) ;
return GetClass ( className , typeParameterCount , LanguageProperties . CSharp , lookInReferences ) ;
return GetClass ( className , typeParameterCount , LanguageProperties . CSharp , GetClassOptions . Default ) ;
} else {
} else {
return GetClass ( className , 0 , LanguageProperties . CSharp , lookInReferences ) ;
return GetClass ( className , 0 , LanguageProperties . CSharp , GetClassOptions . Default ) ;
}
}
}
}
@ -999,7 +996,7 @@ namespace ICSharpCode.SharpDevelop.Dom
protected virtual void OnReferencedContentsChanged ( EventArgs e )
protected virtual void OnReferencedContentsChanged ( EventArgs e )
{
{
systemTypes = null ; // re-create system types
systemTypes = null ; // re-create system types
SearchClassReturnTyp e. ClearCache ( ) ;
DomCach e. Clear ( ) ;
if ( ReferencedContentsChanged ! = null ) {
if ( ReferencedContentsChanged ! = null ) {
ReferencedContentsChanged ( this , e ) ;
ReferencedContentsChanged ( this , e ) ;
}
}