@ -133,28 +133,7 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -133,28 +133,7 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
builder . Append ( ' ' ) ;
}
if ( IncludeHtmlMarkup ) {
builder . Append ( "<b>" ) ;
}
if ( UseFullyQualifiedMemberNames ) {
builder . Append ( c . FullyQualifiedName ) ;
} else {
builder . Append ( c . Name ) ;
}
if ( IncludeHtmlMarkup ) {
builder . Append ( "</b>" ) ;
}
if ( ShowTypeParameterList & & c . TypeParameters . Count > 0 ) {
builder . Append ( "(Of " ) ;
for ( int i = 0 ; i < c . TypeParameters . Count ; + + i ) {
if ( i > 0 ) builder . Append ( ", " ) ;
builder . Append ( ConvertTypeParameter ( c . TypeParameters [ i ] ) ) ;
}
builder . Append ( ')' ) ;
}
AppendClassNameWithTypeParameters ( builder , c , UseFullyQualifiedMemberNames , true , null ) ;
if ( ShowParameterList & & c . ClassType = = ClassType . Delegate ) {
builder . Append ( "(" ) ;
@ -202,6 +181,50 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -202,6 +181,50 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
return builder . ToString ( ) ;
}
void AppendTypeNameForFullyQualifiedMemberName ( StringBuilder builder , IReturnType declaringType )
{
if ( UseFullyQualifiedMemberNames & & declaringType ! = null ) {
AppendReturnType ( builder , declaringType , true ) ;
builder . Append ( '.' ) ;
}
}
void AppendClassNameWithTypeParameters ( StringBuilder builder , IClass c , bool fullyQualified , bool isConvertingClassName , IList < IReturnType > typeArguments )
{
if ( isConvertingClassName & & IncludeHtmlMarkup ) {
builder . Append ( "<b>" ) ;
}
if ( fullyQualified ) {
if ( c . DeclaringType ! = null ) {
AppendClassNameWithTypeParameters ( builder , c . DeclaringType , fullyQualified , false , typeArguments ) ;
builder . Append ( '.' ) ;
builder . Append ( c . Name ) ;
} else {
builder . Append ( c . FullyQualifiedName ) ;
}
} else {
builder . Append ( c . Name ) ;
}
if ( isConvertingClassName & & IncludeHtmlMarkup ) {
builder . Append ( "</b>" ) ;
}
// skip type parameters that belong to declaring types (in DOM, inner classes repeat type parameters from outer classes)
int skippedTypeParameterCount = c . DeclaringType ! = null ? c . DeclaringType . TypeParameters . Count : 0 ;
// show type parameters for classes only if ShowTypeParameterList is set; but always show them in other cases.
if ( ( ShowTypeParameterList | | ! isConvertingClassName ) & & c . TypeParameters . Count > skippedTypeParameterCount ) {
builder . Append ( "(Of " ) ;
for ( int i = skippedTypeParameterCount ; i < c . TypeParameters . Count ; + + i ) {
if ( i > skippedTypeParameterCount )
builder . Append ( ", " ) ;
if ( typeArguments ! = null & & i < typeArguments . Count )
AppendReturnType ( builder , typeArguments [ i ] , false ) ;
else
builder . Append ( ConvertTypeParameter ( c . TypeParameters [ i ] ) ) ;
}
builder . Append ( ')' ) ;
}
}
public override string ConvertEnd ( IClass c )
{
if ( c = = null )
@ -260,15 +283,16 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -260,15 +283,16 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
if ( IncludeHtmlMarkup ) {
builder . Append ( "</i>" ) ;
builder . Append ( "<b>" ) ;
}
if ( UseFullyQualifiedMemberNames ) {
builder . Append ( field . FullyQualifiedName ) ;
} else {
builder . Append ( field . Name ) ;
AppendTypeNameForFullyQualifiedMemberName ( builder , field . DeclaringTypeReference ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "<b>" ) ;
}
builder . Append ( field . Name ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "</b>" ) ;
}
@ -308,15 +332,12 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -308,15 +332,12 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
builder . Append ( "Property " ) ;
}
AppendTypeNameForFullyQualifiedMemberName ( builder , property . DeclaringTypeReference ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "<b>" ) ;
}
if ( UseFullyQualifiedMemberNames ) {
builder . Append ( property . FullyQualifiedName ) ;
} else {
builder . Append ( property . Name ) ;
}
builder . Append ( property . Name ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "</b>" ) ;
@ -365,15 +386,13 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -365,15 +386,13 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
builder . Append ( "Event " ) ;
}
AppendTypeNameForFullyQualifiedMemberName ( builder , e . DeclaringTypeReference ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "<b>" ) ;
}
if ( UseFullyQualifiedMemberNames ) {
builder . Append ( e . FullyQualifiedName ) ;
} else {
builder . Append ( e . Name ) ;
}
builder . Append ( e . Name ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "</b>" ) ;
@ -409,16 +428,13 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -409,16 +428,13 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
}
}
string dispName = UseFullyQualifiedMemberNames ? m . FullyQualifiedName : m . Name ;
if ( m . IsConstructor ) {
dispName = "New" ;
}
AppendTypeNameForFullyQualifiedMemberName ( builder , m . DeclaringTypeReference ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "<b>" ) ;
}
builder . Append ( disp Name) ;
builder . Append ( m . IsConstructor ? "New" : m . Name ) ;
if ( IncludeHtmlMarkup ) {
builder . Append ( "</b>" ) ;
@ -489,24 +505,61 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -489,24 +505,61 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
StringBuilder builder = new StringBuilder ( ) ;
AppendReturnType ( builder , returnType , false ) ;
return builder . ToString ( ) ;
}
void AppendReturnType ( StringBuilder builder , IReturnType returnType , bool forceFullyQualifiedName )
{
IReturnType arrayReturnType = returnType ;
returnType = GetElementType ( returnType ) ;
if ( returnType = = null )
return ;
string fullName = returnType . FullyQualifiedName ;
string shortName ;
if ( fullName ! = null & & TypeConversionTable . TryGetValue ( fullName , out shortName ) ) {
bool isConstructedType = returnType . IsConstructedReturnType ;
if ( fullName ! = null & & ! isConstructedType & & TypeConversionTable . TryGetValue ( fullName , out shortName ) ) {
builder . Append ( shortName ) ;
} else {
if ( UseFullyQualifiedTypeNames ) {
builder . Append ( fullName ) ;
IClass c = returnType . GetUnderlyingClass ( ) ;
if ( c ! = null ) {
IList < IReturnType > ta = isConstructedType ? returnType . CastToConstructedReturnType ( ) . TypeArguments : null ;
AppendClassNameWithTypeParameters ( builder , c , forceFullyQualifiedName | | UseFullyQualifiedTypeNames , false , ta ) ;
} else {
builder . Append ( returnType . Name ) ;
if ( UseFullyQualifiedTypeNames | | forceFullyQualifiedName ) {
builder . Append ( fullName ) ;
} else {
builder . Append ( returnType . Name ) ;
}
if ( isConstructedType ) {
builder . Append ( "(Of " ) ;
IList < IReturnType > ta = returnType . CastToConstructedReturnType ( ) . TypeArguments ;
for ( int i = 0 ; i < ta . Count ; + + i ) {
if ( i > 0 ) builder . Append ( ", " ) ;
AppendReturnType ( builder , ta [ i ] , false ) ;
}
builder . Append ( ')' ) ;
}
}
}
UnpackNestedType ( builder , returnType ) ;
return builder . ToString ( ) ;
UnpackArrayType ( builder , arrayReturnType ) ;
}
static IReturnType GetElementType ( IReturnType potentialArrayType )
{
ArrayReturnType result ;
while ( ( result = potentialArrayType . CastToArrayReturnType ( ) ) ! = null ) {
potentialArrayType = result . ArrayElementType ;
}
return potentialArrayType ;
}
void UnpackNestedType ( StringBuilder builder , IReturnType returnType )
static void UnpackArray Type( StringBuilder builder , IReturnType returnType )
{
if ( returnType . IsArrayReturnType ) {
builder . Append ( '(' ) ;
@ -515,16 +568,7 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
@@ -515,16 +568,7 @@ namespace ICSharpCode.SharpDevelop.Dom.VBNet
builder . Append ( ',' ) ;
}
builder . Append ( ')' ) ;
UnpackNestedType ( builder , returnType . CastToArrayReturnType ( ) . ArrayElementType ) ;
} else if ( returnType . IsConstructedReturnType ) {
UnpackNestedType ( builder , returnType . CastToConstructedReturnType ( ) . UnboundType ) ;
builder . Append ( "(Of " ) ;
IList < IReturnType > ta = returnType . CastToConstructedReturnType ( ) . TypeArguments ;
for ( int i = 0 ; i < ta . Count ; + + i ) {
if ( i > 0 ) builder . Append ( ", " ) ;
builder . Append ( Convert ( ta [ i ] ) ) ;
}
builder . Append ( ')' ) ;
UnpackArrayType ( builder , returnType . CastToArrayReturnType ( ) . ArrayElementType ) ;
}
}