mirror of
https://github.com/zoriya/EntityFrameworkCore.Projectables.git
synced 2026-08-15 18:44:57 +00:00
Fixed nullability rewrites with parameters and return types
This commit is contained in:
@@ -126,13 +126,7 @@ namespace EntityFrameworkCore.Projectables.Generator
|
||||
{
|
||||
if (symbolInfo.Symbol is IMethodSymbol methodSymbol && methodSymbol.IsExtensionMethod)
|
||||
{
|
||||
if (SymbolEqualityComparer.Default.Equals(symbolInfo.Symbol.ContainingType, _targetTypeSymbol))
|
||||
{
|
||||
//return SyntaxFactory.MemberAccessExpression(SyntaxKind.SimpleMemberAccessExpression,
|
||||
// methodSymbol.ReducedFrom.Sym
|
||||
//);
|
||||
//throw new Exception("foo");
|
||||
}
|
||||
|
||||
}
|
||||
else if (symbolInfo.Symbol.Kind is SymbolKind.Property or SymbolKind.Method or SymbolKind.Field && SymbolEqualityComparer.Default.Equals(symbolInfo.Symbol.ContainingType, _targetTypeSymbol))
|
||||
{
|
||||
@@ -178,5 +172,21 @@ namespace EntityFrameworkCore.Projectables.Generator
|
||||
|
||||
return base.VisitQualifiedName(node);
|
||||
}
|
||||
|
||||
public override SyntaxNode? VisitNullableType(NullableTypeSyntax node)
|
||||
{
|
||||
var typeInfo = _semanticModel.GetTypeInfo(node);
|
||||
if (typeInfo.Type is not null)
|
||||
{
|
||||
if (typeInfo.Type.TypeKind is not TypeKind.Struct)
|
||||
{
|
||||
return Visit(node.ElementType)
|
||||
.WithLeadingTrivia(node.GetLeadingTrivia())
|
||||
.WithTrailingTrivia(node.GetTrailingTrivia());
|
||||
}
|
||||
}
|
||||
|
||||
return base.VisitNullableType(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,25 +17,48 @@ namespace EntityFrameworkCore.Projectables.Generator
|
||||
|
||||
public override SyntaxNode? VisitIdentifierName(IdentifierNameSyntax node)
|
||||
{
|
||||
var symbol = _semanticModel.GetDeclaredSymbol(node);
|
||||
var visitedNode = base.VisitIdentifierName(node);
|
||||
|
||||
var symbol = _semanticModel.GetDeclaredSymbol(visitedNode);
|
||||
|
||||
if (symbol is not null)
|
||||
{
|
||||
node = SyntaxFactory.IdentifierName(symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat));
|
||||
return SyntaxFactory.IdentifierName(symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat));
|
||||
}
|
||||
|
||||
return base.VisitIdentifierName(node);
|
||||
return visitedNode;
|
||||
}
|
||||
|
||||
public override SyntaxNode? VisitParameter(ParameterSyntax node)
|
||||
{
|
||||
var thisKeywordIndex = node.Modifiers.IndexOf(SyntaxKind.ThisKeyword);
|
||||
if (thisKeywordIndex != -1)
|
||||
var visitedNode = base.VisitParameter(node);
|
||||
|
||||
if (visitedNode is ParameterSyntax visitedParameterSyntax)
|
||||
{
|
||||
node = node.WithModifiers(node.Modifiers.RemoveAt(thisKeywordIndex));
|
||||
var thisKeywordIndex = visitedParameterSyntax.Modifiers.IndexOf(SyntaxKind.ThisKeyword);
|
||||
if (thisKeywordIndex != -1)
|
||||
{
|
||||
return visitedParameterSyntax.WithModifiers(node.Modifiers.RemoveAt(thisKeywordIndex));
|
||||
}
|
||||
}
|
||||
|
||||
return base.VisitParameter(node);
|
||||
return visitedNode;
|
||||
}
|
||||
|
||||
public override SyntaxNode? VisitNullableType(NullableTypeSyntax node)
|
||||
{
|
||||
var typeInfo = _semanticModel.GetTypeInfo(node);
|
||||
if (typeInfo.Type is not null)
|
||||
{
|
||||
if (typeInfo.Type.TypeKind is not TypeKind.Struct)
|
||||
{
|
||||
return Visit(node.ElementType)
|
||||
.WithLeadingTrivia(node.GetLeadingTrivia())
|
||||
.WithTrailingTrivia(node.GetTrailingTrivia());
|
||||
}
|
||||
}
|
||||
|
||||
return base.VisitNullableType(node);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -100,13 +100,10 @@ namespace EntityFrameworkCore.Projectables.Generator
|
||||
return null;
|
||||
}
|
||||
|
||||
var returnTypeSymbol = semanticModel.GetSymbolInfo(returnTypeSyntaxRewriter.Visit(methodDeclarationSyntax.ReturnType)).Symbol;
|
||||
if (returnTypeSymbol is null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
var returnType = returnTypeSyntaxRewriter.Visit(methodDeclarationSyntax.ReturnType);
|
||||
|
||||
|
||||
descriptor.ReturnTypeName = returnTypeSymbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat);
|
||||
descriptor.ReturnTypeName = returnType.ToString();
|
||||
descriptor.Body = expressionSyntaxRewriter.Visit(methodDeclarationSyntax.ExpressionBody.Expression);
|
||||
foreach (var additionalParameter in ((ParameterListSyntax)parameterSyntaxRewriter.Visit(methodDeclarationSyntax.ParameterList)).Parameters)
|
||||
{
|
||||
|
||||
@@ -25,7 +25,9 @@ namespace EntityFrameworkCore.Projectables.Generator
|
||||
{
|
||||
if (typeInfo.Type.TypeKind is not TypeKind.Struct)
|
||||
{
|
||||
return Visit(node.ElementType);
|
||||
return Visit(node.ElementType)
|
||||
.WithLeadingTrivia(node.GetLeadingTrivia())
|
||||
.WithTrailingTrivia(node.GetTrailingTrivia());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user