{ 32 FOREACH(ManagedTypeSymbol*, genericArgument, currentType->GetGenericArguments()) 33 { 34 EnsureTypeVisibility(languageElement, genericArgument, argument, thisTypes, baseTypes); 35 } 36 } 37 38 ManagedSymbolItem* currentSymbol=currentDeclaration->GetSymbol(); 39 declatt::Accessor currentAccessor=declatt::Public; 40 switch(currentSymbol->GetSymbolType()) 41 { 42 case ManagedSymbolItem::Class: 43 case ManagedSymbolItem::Structure: 44 case ManagedSymbolItem::Interface: 45 { 46 ManagedSymbolDeclaration* symbol=dynamic_cast(currentSymbol); 47 currentAccessor=symbol->accessor; 48 } 49 break; 50 case ManagedSymbolItem::TypeRename: 51 { 52 ManagedSymbolTypeRename* symbol=dynamic_cast(currentSymbol); 53 currentAccessor=symbol->accessor; 54 } 55 break; 56 case ManagedSymbolItem::GenericParameter: 57 break; 58 default: 59 argument.errors.Add(ManagedLanguageCodeException::GetTypeInvisible(languageElement, currentType)); 60 return; 61 } 62 63 if(!parentType) 64 { 65 ManagedSymbolItem* parentSymbol=currentSymbol->GetParentItem(); 66 switch(parentSymbol->GetSymbolType()) 67 { 68 case ManagedSymbolItem::Class: 69 case ManagedSymbolItem::Structure: 70 case ManagedSymbolItem::Interface: 71 { 72 ManagedSymbolDeclaration* parentDeclaration=dynamic_cast(parentSymbol); 73 parentType=argument.symbolManager->GetThisType(parentDeclaration); 74 } 75 break; 76 } 77 } 78 if(parentType && !thisTypes.Contains(parentType)) 79 { 80 if(baseTypes.Contains(parentType)) 81 { 82 switch(currentAccessor) 83 { 84 case declatt::Public: 85 case declatt::Protected: 86 case declatt::Internal: 87 case declatt::ProtectedInternal: 88 break; 89 default: 90 argument.errors.Add(ManagedLanguage |