Fully qualify Type names where possible

This commit is contained in:
Koen Bekkenutte
2021-11-26 00:00:47 +08:00
parent ac90b5b1a1
commit 7790f146e4
11 changed files with 114 additions and 26 deletions
@@ -45,5 +45,31 @@ namespace EntityFrameworkCore.Projectables.Generator
return base.VisitNullableType(node);
}
public override SyntaxNode? VisitIdentifierName(IdentifierNameSyntax node)
{
var typeInfo = _semanticModel.GetTypeInfo(node);
if (typeInfo.Type is not null)
{
return SyntaxFactory.ParseTypeName(
typeInfo.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)
).WithTriviaFrom(node);
}
return base.VisitIdentifierName(node);
}
public override SyntaxNode? VisitQualifiedName(QualifiedNameSyntax node)
{
var typeInfo = _semanticModel.GetTypeInfo(node);
if (typeInfo.Type is not null)
{
return SyntaxFactory.ParseTypeName(
typeInfo.Type.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat)
).WithTriviaFrom(node);
}
return base.VisitQualifiedName(node);
}
}
}
@@ -130,6 +130,15 @@ namespace EntityFrameworkCore.Projectables.Generator
}
else if (symbolInfo.Symbol.Kind is SymbolKind.Property or SymbolKind.Method or SymbolKind.Field && SymbolEqualityComparer.Default.Equals(symbolInfo.Symbol.ContainingType, _targetTypeSymbol))
{
if (node.Parent is MemberAccessExpressionSyntax parentMemberAccessNode)
{
var targetSymbolInfo = _semanticModel.GetSymbolInfo(parentMemberAccessNode.Expression);
if (targetSymbolInfo.Symbol is { Kind: SymbolKind.Parameter })
{
return base.VisitIdentifierName(node);
}
}
return SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
SyntaxFactory.IdentifierName("@this"),
node