Skip to content

Commit

Permalink
fix #492
Browse files Browse the repository at this point in the history
  • Loading branch information
yanghuan committed Jan 23, 2024
1 parent f621a92 commit d20d217
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 5 deletions.
8 changes: 8 additions & 0 deletions CSharp.lua/LuaAst/LuaIdentifierNameSyntax.cs
Original file line number Diff line number Diff line change
Expand Up @@ -196,4 +196,12 @@ internal override void Render(LuaRenderer renderer) {
NameExpression.Render(renderer);
}
}

public sealed class LuaImportNameSyntax : LuaIdentifierNameSyntax {
public string TypeName { get; }

public LuaImportNameSyntax(string shorName, string name) : base(shorName) {
TypeName = name;
}
}
}
5 changes: 4 additions & 1 deletion CSharp.lua/LuaSyntaxGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2131,7 +2131,10 @@ internal LuaIdentifierNameSyntax GetTypeShortName(ISymbol symbol, LuaSyntaxNodeT
name = LuaIdentifierNameSyntax.Global.ValueText + '.' + name;
}
} else {
transform.ImportTypeName(ref name, (INamedTypeSymbol)symbol);
var newImportName = transform.ImportTypeName(name, (INamedTypeSymbol)symbol);
if (newImportName != null) {
return newImportName;
}
}
}
return name;
Expand Down
10 changes: 6 additions & 4 deletions CSharp.lua/LuaSyntaxNodeTransform.Helper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -994,7 +994,7 @@ private bool AddImport(string prefix, string newPrefix, bool isFromCode) {
return true;
}

internal void ImportTypeName(ref string name, INamedTypeSymbol symbol) {
internal LuaIdentifierNameSyntax ImportTypeName(string name, INamedTypeSymbol symbol) {
if (IsImportTypeNameEnable(symbol)) {
int pos = name.LastIndexOf('.');
if (pos != -1) {
Expand All @@ -1005,12 +1005,14 @@ internal void ImportTypeName(ref string name, INamedTypeSymbol symbol) {
if (!IsLocalVarExistsInCurMethod(newPrefix)) {
bool success = AddImport(prefix, newPrefix, symbol.IsFromCode());
if (success) {
name = newPrefix + name[pos..];
string newName = newPrefix + name[pos..];
return new LuaImportNameSyntax(newName, name);
}
}
}
}
}
return null;
}

internal bool AddGenericImport(LuaInvocationExpressionSyntax invocationExpression, string name, List<string> argumentTypeNames, bool isFromCode) {
Expand Down Expand Up @@ -1078,14 +1080,14 @@ private void CheckGenericDeclareTypeArgument(GenericUsingDeclare declare, LuaInv
foreach (var typeArgument in nameTypeSymbol.TypeArguments) {
if (typeArgument.Kind != SymbolKind.TypeParameter && typeArgument.IsFromCode()) {
var argumentExpression = invocation.ArgumentList.Arguments[i];
if (argumentExpression is LuaIdentifierNameSyntax identifier) {
if (argumentExpression is LuaImportNameSyntax identifier) {
string name = identifier.ValueText;
int j = name.IndexOf('.');
if (j != -1) {
name = name.Substring(0, j);
}
if (!CurTypeDeclaration.TypeDeclaration.IsGenericImportExists(name)) {
invocation.ArgumentList.Arguments[i] = LuaIdentifierNameSyntax.Global.MemberAccess(argumentExpression);
invocation.ArgumentList.Arguments[i] = LuaIdentifierNameSyntax.Global.MemberAccess(identifier.TypeName);
declare.IsFromGlobal = true;
}
}
Expand Down

0 comments on commit d20d217

Please sign in to comment.