@@ -43,13 +43,12 @@ public abstract class LuaTypeDeclarationSyntax : LuaWrapFunctionStatementSynatx
4343 private List < LuaConstructorAdapterExpressionSyntax > ctors_ = new List < LuaConstructorAdapterExpressionSyntax > ( ) ;
4444
4545 private List < LuaParameterSyntax > typeParameters_ = new List < LuaParameterSyntax > ( ) ;
46+ private List < GenericUsingDeclare > genericUsingDeclares_ = new List < GenericUsingDeclare > ( ) ;
47+
4648 private LuaTableInitializerExpression attributes_ = new LuaTableInitializerExpression ( ) ;
4749 private LuaDocumentStatement document_ = new LuaDocumentStatement ( ) ;
4850 public bool IsIgnoreExport => document_ . HasIgnoreAttribute ;
4951
50- public LuaTypeDeclarationSyntax ( ) {
51- }
52-
5352 internal void AddStaticReadOnlyAssignmentName ( LuaIdentifierNameSyntax name ) {
5453 if ( ! staticAssignmentNames_ . Contains ( name ) ) {
5554 staticAssignmentNames_ . Add ( name ) ;
@@ -84,6 +83,17 @@ internal void AddTypeParameters(IEnumerable<LuaParameterSyntax> typeParameters)
8483 typeParameters_ . AddRange ( typeParameters ) ;
8584 }
8685
86+ internal void AddImport ( LuaInvocationExpressionSyntax invocationExpression , string name , List < string > argumentTypeNames , bool isFromCode ) {
87+ if ( ! genericUsingDeclares_ . Exists ( i => i . NewName == name ) ) {
88+ genericUsingDeclares_ . Add ( new GenericUsingDeclare ( ) {
89+ InvocationExpression = invocationExpression ,
90+ NewName = name ,
91+ ArgumentTypeNames = argumentTypeNames ,
92+ IsFromCode = isFromCode ,
93+ } ) ;
94+ }
95+ }
96+
8797 internal void AddBaseTypes ( IEnumerable < LuaExpressionSyntax > baseTypes , LuaSpeaicalGenericType genericArgument , List < LuaIdentifierNameSyntax > baseCopyFields ) {
8898 bool hasLazyGenericArgument = false ;
8999 if ( genericArgument != null ) {
@@ -188,6 +198,7 @@ public void AddField(LuaIdentifierNameSyntax name, LuaExpressionSyntax value, bo
188198 }
189199 LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax ( name , value ) ;
190200 staticInitStatements_ . Add ( new LuaExpressionStatementSyntax ( assignment ) ) ;
201+ staticAssignmentNames_ . Add ( name ) ;
191202 }
192203 }
193204 } else {
@@ -198,7 +209,7 @@ public void AddField(LuaIdentifierNameSyntax name, LuaExpressionSyntax value, bo
198209 if ( statements != null ) {
199210 staticInitStatements_ . AddRange ( statements ) ;
200211 }
201- LuaAssignmentExpressionSyntax assignment = new LuaAssignmentExpressionSyntax ( new LuaMemberAccessExpressionSyntax ( LuaIdentifierNameSyntax . This , name ) , value ) ;
212+ var assignment = new LuaAssignmentExpressionSyntax ( new LuaMemberAccessExpressionSyntax ( LuaIdentifierNameSyntax . This , name ) , value ) ;
202213 staticInitStatements_ . Add ( new LuaExpressionStatementSyntax ( assignment ) ) ;
203214 }
204215 }
@@ -413,8 +424,18 @@ private void CheckAttributes() {
413424 }
414425 }
415426
427+ private void CheckGenericUsingDeclares ( LuaBlockSyntax body ) {
428+ if ( genericUsingDeclares_ . Count > 0 ) {
429+ genericUsingDeclares_ . Sort ( ) ;
430+ foreach ( var import in genericUsingDeclares_ ) {
431+ body . AddStatement ( new LuaLocalVariableDeclaratorSyntax ( new LuaIdentifierNameSyntax ( import . NewName ) , import . InvocationExpression ) ) ;
432+ }
433+ }
434+ }
435+
416436 private void AddAllStatementsTo ( LuaBlockSyntax body ) {
417437 body . Statements . Add ( local_ ) ;
438+ CheckGenericUsingDeclares ( body ) ;
418439 CheckStaticCtorFunction ( body ) ;
419440 CheckCtorsFunction ( body ) ;
420441 body . Statements . Add ( methodList_ ) ;
0 commit comments