Skip to content

Commit 4195040

Browse files
author
Samir L. Boulema
committed
fix: Fix OutOfMemory exception when mapping base classes
1 parent ab860c1 commit 4195040

File tree

2 files changed

+18
-8
lines changed

2 files changed

+18
-8
lines changed

CodeNav.Shared/Mappers/ClassMapper.cs

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace CodeNav.Mappers
1414
public class ClassMapper
1515
{
1616
public static CodeClassItem MapClass(ClassDeclarationSyntax member,
17-
ICodeViewUserControl control, SemanticModel semanticModel, SyntaxTree tree)
17+
ICodeViewUserControl control, SemanticModel semanticModel, SyntaxTree tree, bool mapBaseClass)
1818
{
1919
if (member == null)
2020
{
@@ -37,7 +37,10 @@ public static CodeClassItem MapClass(ClassDeclarationSyntax member,
3737
var implementedInterfaces = InterfaceMapper.MapImplementedInterfaces(member, control, semanticModel, tree);
3838

3939
// Map members from the base class
40-
MapMembersFromBaseClass(member, regions, control, semanticModel, tree);
40+
if (mapBaseClass)
41+
{
42+
MapMembersFromBaseClass(member, regions, control, semanticModel);
43+
}
4144

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

144147
private static string MapInheritance(ClassDeclarationSyntax member)
145148
{
146-
if (member?.BaseList == null) return string.Empty;
149+
if (member?.BaseList == null)
150+
{
151+
return string.Empty;
152+
}
147153

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

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

153159
private static string MapInheritance(VisualBasicSyntax.TypeBlockSyntax member)
154160
{
155-
if (member?.Inherits == null) return string.Empty;
161+
if (member?.Inherits == null)
162+
{
163+
return string.Empty;
164+
}
156165

157166
var inheritanceList = new List<string>();
158167

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

167176
private static void MapMembersFromBaseClass(ClassDeclarationSyntax member,
168177
List<CodeRegionItem> regions, ICodeViewUserControl control,
169-
SemanticModel semanticModel, SyntaxTree tree)
178+
SemanticModel semanticModel)
170179
{
171180
var classSymbol = semanticModel.GetDeclaredSymbol(member);
172181
var baseType = classSymbol?.BaseType;
@@ -206,7 +215,7 @@ private static void MapMembersFromBaseClass(ClassDeclarationSyntax member,
206215
}
207216

208217
var memberItem = SyntaxMapper.MapMember(syntaxNode, syntaxNode.SyntaxTree,
209-
SyntaxHelper.GetCSharpSemanticModel(syntaxNode.SyntaxTree), control);
218+
SyntaxHelper.GetCSharpSemanticModel(syntaxNode.SyntaxTree), control, mapBaseClass: false);
210219

211220
baseRegion.Members.Add(memberItem);
212221
}

CodeNav.Shared/Mappers/SyntaxMapper.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,8 @@ public static async Task<List<CodeItem>> MapDocument(ICodeViewUserControl contro
166166
}
167167

168168
public static CodeItem MapMember(SyntaxNode member,
169-
SyntaxTree tree, SemanticModel semanticModel, ICodeViewUserControl control)
169+
SyntaxTree tree, SemanticModel semanticModel, ICodeViewUserControl control,
170+
bool mapBaseClass = true)
170171
{
171172
if (member == null)
172173
{
@@ -190,7 +191,7 @@ public static CodeItem MapMember(SyntaxNode member,
190191
case SyntaxKind.StructDeclaration:
191192
return StructMapper.MapStruct(member as StructDeclarationSyntax, control, semanticModel, tree);
192193
case SyntaxKind.ClassDeclaration:
193-
return ClassMapper.MapClass(member as ClassDeclarationSyntax, control, semanticModel, tree);
194+
return ClassMapper.MapClass(member as ClassDeclarationSyntax, control, semanticModel, tree, mapBaseClass);
194195
case SyntaxKind.EventFieldDeclaration:
195196
return DelegateEventMapper.MapEvent(member as EventFieldDeclarationSyntax, control, semanticModel);
196197
case SyntaxKind.DelegateDeclaration:

0 commit comments

Comments
 (0)