Skip to content

Commit

Permalink
Inherited members support #116
Browse files Browse the repository at this point in the history
  • Loading branch information
Samir L. Boulema committed Sep 11, 2021
1 parent 3f65c4d commit d2485d9
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 4 deletions.
41 changes: 39 additions & 2 deletions CodeNav.Shared/Mappers/ClassMapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,10 @@ public class ClassMapper
public static CodeClassItem MapClass(ClassDeclarationSyntax member,
ICodeViewUserControl control, SemanticModel semanticModel, SyntaxTree tree)
{
if (member == null) return null;
if (member == null)
{
return null;
}

var item = BaseMapper.MapBase<CodeClassItem>(member, member.Identifier, member.Modifiers, control, semanticModel);
item.Kind = CodeItemKindEnum.Class;
Expand All @@ -31,7 +34,41 @@ public static CodeClassItem MapClass(ClassDeclarationSyntax member,
var regions = RegionMapper.MapRegions(tree, member.Span, control);
var implementedInterfaces = InterfaceMapper.MapImplementedInterfaces(member, control, semanticModel, tree);

foreach (var classMember in member.Members)
var members = new List<MemberDeclarationSyntax>();
members.AddRange(member.Members.Select(m => m));

// Map members from the base class
var classSymbol = semanticModel.GetDeclaredSymbol(member) as INamedTypeSymbol;
var baseType = classSymbol?.BaseType;

var baseRegion = new CodeRegionItem
{
Name = baseType.Name,
FullName = baseType.Name,
Id = baseType.Name,
Tooltip = baseType.Name,
ForegroundColor = Colors.Black,
BorderColor = Colors.DarkGray,
FontSize = General.Instance.Font.SizeInPoints - 2,
Kind = CodeItemKindEnum.BaseClass,
Control = control
};

regions.Add(baseRegion);

foreach (var inheritedMember in baseType?.GetMembers())
{
var syntaxReference = inheritedMember.DeclaringSyntaxReferences.FirstOrDefault();

if (syntaxReference?.GetSyntax() is MemberDeclarationSyntax declarationSyntax)
{
var memberItem = SyntaxMapper.MapMember(declarationSyntax, tree, semanticModel, control);
baseRegion.Members.Add(memberItem);
}
}

// Map class members
foreach (var classMember in members)
{
var memberItem = SyntaxMapper.MapMember(classMember, tree, semanticModel, control);
if (memberItem != null && !InterfaceMapper.IsPartOfImplementedInterface(implementedInterfaces, memberItem)
Expand Down
3 changes: 2 additions & 1 deletion CodeNav.Shared/Models/CodeItemKindEnum.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public enum CodeItemKindEnum
Switch,
SwitchSection,
Variable,
LocalFunction
LocalFunction,
BaseClass
}
}
2 changes: 1 addition & 1 deletion azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ trigger:
- main
- feature/*

name: 8.3.$(Build.BuildId)
name: 8.4.$(Build.BuildId)

steps:
- task: NuGetCommand@2
Expand Down

0 comments on commit d2485d9

Please sign in to comment.