Skip to content

Commit

Permalink
fix: Fix OutOfMemory exception when mapping base classes
Browse files Browse the repository at this point in the history
  • Loading branch information
Samir L. Boulema committed Sep 24, 2021
1 parent ab860c1 commit 4195040
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 8 deletions.
21 changes: 15 additions & 6 deletions CodeNav.Shared/Mappers/ClassMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ namespace CodeNav.Mappers
public class ClassMapper
{
public static CodeClassItem MapClass(ClassDeclarationSyntax member,
ICodeViewUserControl control, SemanticModel semanticModel, SyntaxTree tree)
ICodeViewUserControl control, SemanticModel semanticModel, SyntaxTree tree, bool mapBaseClass)
{
if (member == null)
{
Expand All @@ -37,7 +37,10 @@ public static CodeClassItem MapClass(ClassDeclarationSyntax member,
var implementedInterfaces = InterfaceMapper.MapImplementedInterfaces(member, control, semanticModel, tree);

// Map members from the base class
MapMembersFromBaseClass(member, regions, control, semanticModel, tree);
if (mapBaseClass)
{
MapMembersFromBaseClass(member, regions, control, semanticModel);
}

// Map class members
foreach (var classMember in member.Members)
Expand Down Expand Up @@ -143,7 +146,10 @@ public static CodeClassItem MapClass(VisualBasicSyntax.TypeBlockSyntax member,

private static string MapInheritance(ClassDeclarationSyntax member)
{
if (member?.BaseList == null) return string.Empty;
if (member?.BaseList == null)
{
return string.Empty;
}

var inheritanceList = (from BaseTypeSyntax bases in member.BaseList.Types select bases.Type.ToString()).ToList();

Expand All @@ -152,7 +158,10 @@ private static string MapInheritance(ClassDeclarationSyntax member)

private static string MapInheritance(VisualBasicSyntax.TypeBlockSyntax member)
{
if (member?.Inherits == null) return string.Empty;
if (member?.Inherits == null)
{
return string.Empty;
}

var inheritanceList = new List<string>();

Expand All @@ -166,7 +175,7 @@ private static string MapInheritance(VisualBasicSyntax.TypeBlockSyntax member)

private static void MapMembersFromBaseClass(ClassDeclarationSyntax member,
List<CodeRegionItem> regions, ICodeViewUserControl control,
SemanticModel semanticModel, SyntaxTree tree)
SemanticModel semanticModel)
{
var classSymbol = semanticModel.GetDeclaredSymbol(member);
var baseType = classSymbol?.BaseType;
Expand Down Expand Up @@ -206,7 +215,7 @@ private static void MapMembersFromBaseClass(ClassDeclarationSyntax member,
}

var memberItem = SyntaxMapper.MapMember(syntaxNode, syntaxNode.SyntaxTree,
SyntaxHelper.GetCSharpSemanticModel(syntaxNode.SyntaxTree), control);
SyntaxHelper.GetCSharpSemanticModel(syntaxNode.SyntaxTree), control, mapBaseClass: false);

baseRegion.Members.Add(memberItem);
}
Expand Down
5 changes: 3 additions & 2 deletions CodeNav.Shared/Mappers/SyntaxMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,8 @@ public static async Task<List<CodeItem>> MapDocument(ICodeViewUserControl contro
}

public static CodeItem MapMember(SyntaxNode member,
SyntaxTree tree, SemanticModel semanticModel, ICodeViewUserControl control)
SyntaxTree tree, SemanticModel semanticModel, ICodeViewUserControl control,
bool mapBaseClass = true)
{
if (member == null)
{
Expand All @@ -190,7 +191,7 @@ public static CodeItem MapMember(SyntaxNode member,
case SyntaxKind.StructDeclaration:
return StructMapper.MapStruct(member as StructDeclarationSyntax, control, semanticModel, tree);
case SyntaxKind.ClassDeclaration:
return ClassMapper.MapClass(member as ClassDeclarationSyntax, control, semanticModel, tree);
return ClassMapper.MapClass(member as ClassDeclarationSyntax, control, semanticModel, tree, mapBaseClass);
case SyntaxKind.EventFieldDeclaration:
return DelegateEventMapper.MapEvent(member as EventFieldDeclarationSyntax, control, semanticModel);
case SyntaxKind.DelegateDeclaration:
Expand Down

0 comments on commit 4195040

Please sign in to comment.