Skip to content

Commit ffd6bd5

Browse files
authored
Merge pull request #391 from Inxton/missing-types-in-smodel
Missing types in smodel
2 parents 47d57f4 + e5ba800 commit ffd6bd5

14 files changed

Lines changed: 318 additions & 104 deletions

GitVersion.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mode: ContinuousDeployment
2-
next-version: 0.23.0
2+
next-version: 0.24.0
33
branches:
44
main:
55
regex: ^master$|^main$

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Helpers/SemanticsHelpers.cs

Lines changed: 189 additions & 32 deletions
Large diffs are not rendered by default.

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerConfigurationConstructorBuilder.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,8 @@ protected CsOnlinerConfigurationConstructorBuilder(ISourceBuilder sourceBuilder)
7878

7979
public override void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisitor visitor)
8080
{
81-
if (semantics.IsMemberEligibleForConstructor(SourceBuilder))
81+
var eligibility = semantics.IsMemberEligibleForConstructor(SourceBuilder);
82+
if (eligibility.isEligibe)
8283
{
8384
switch (semantics.Type)
8485
{
@@ -113,7 +114,8 @@ public override void CreateVariableDeclaration(IVariableDeclaration semantics, I
113114
private void AddArrayMemberInitialization(IArrayTypeDeclaration type, IVariableDeclaration field,
114115
IxNodeVisitor visitor)
115116
{
116-
if (!type.IsMemberEligibleForConstructor(this.SourceBuilder))
117+
var eligibility = type.IsMemberEligibleForConstructor(this.SourceBuilder);
118+
if (!eligibility.isEligibe)
117119
return;
118120

119121
AddToSource($"{field.Name}");
@@ -135,8 +137,9 @@ private void AddArrayMemberInitialization(IArrayTypeDeclaration type, IVariableD
135137
case IStructuredTypeDeclaration structuredTypeDeclaration:
136138
case IEnumTypeDeclaration enumTypeDeclaration:
137139
case INamedValueTypeDeclaration namedValueTypeDeclaration:
138-
AddToSource("new");
139-
type.ElementTypeAccess.Type.Accept(visitor, this);
140+
AddToSource("new");
141+
eligibility.eligibleType.Accept(visitor, this);
142+
//type.ElementTypeAccess.Type.Accept(visitor, this);
140143
break;
141144
case IScalarTypeDeclaration scalarTypeDeclaration:
142145
AddToSource($"@Connector.ConnectorAdapter.AdapterFactory.Create{IecToAdapterExtensions.ToAdapterType(scalarTypeDeclaration)}");

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerConstructorBuilder.cs

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,10 @@ public void CreateStructuredType(IStructuredTypeDeclaration structuredTypeDeclar
6666

6767
public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
6868
{
69-
if (fieldDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
69+
var eligibility = fieldDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
70+
if (eligibility.isEligibe)
7071
{
71-
switch (fieldDeclaration.Type)
72+
switch (eligibility.eligibleType)
7273
{
7374
case IArrayTypeDeclaration array:
7475
AddArrayMemberInitialization(array, fieldDeclaration, visitor);
@@ -106,10 +107,10 @@ public virtual void CreateNamedValueTypeDeclaration(INamedValueTypeDeclaration n
106107

107108
public virtual void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisitor visitor)
108109
{
109-
110-
if (semantics.IsMemberEligibleForConstructor(SourceBuilder))
110+
var elibility = semantics.IsMemberEligibleForConstructor(SourceBuilder);
111+
if (elibility.isEligibe)
111112
{
112-
switch (semantics.Type)
113+
switch (elibility.eligibleType)
113114
{
114115
case IArrayTypeDeclaration array:
115116
AddArrayMemberInitialization(array, semantics, visitor);
@@ -151,7 +152,9 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio
151152

152153
public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor)
153154
{
154-
arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
155+
var type = this.SourceBuilder.Compilation.FindTypeDeclaration(arrayTypeDeclaration.ElementTypeAccess);
156+
type.Accept(visitor, this);
157+
//arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
155158
AddToSource("[");
156159
AddToSource(string.Join(",",
157160
arrayTypeDeclaration.Dimensions.Select(p => p.CountOfElements.ToString(CultureInfo.InvariantCulture))));
@@ -285,11 +288,13 @@ public static CsOnlinerConstructorBuilder Create(IxNodeVisitor visitor, IConfigu
285288
private void AddArrayMemberInitialization(IArrayTypeDeclaration type, IStorageDeclaration field,
286289
IxNodeVisitor visitor)
287290
{
288-
if(!type.IsMemberEligibleForConstructor(this.SourceBuilder))
291+
var eligibility = type.IsMemberEligibleForConstructor(this.SourceBuilder);
292+
if (!eligibility.isEligibe)
289293
return;
290294

291295
AddToSource($"{field.Name}");
292296
AddToSource("= new");
297+
//eligibility.eligibleType.Accept(visitor, this);
293298
type.Accept(visitor, this);
294299
AddToSource(";");
295300

@@ -300,15 +305,16 @@ private void AddArrayMemberInitialization(IArrayTypeDeclaration type, IStorageDe
300305
$"\"{field.Name}\", " +
301306
"(p, rt, st) => ");
302307

303-
switch (type.ElementTypeAccess.Type)
308+
switch (eligibility.eligibleType)
304309
{
305310

306311
case IClassDeclaration classDeclaration:
307312
case IStructuredTypeDeclaration structuredTypeDeclaration:
308313
case IEnumTypeDeclaration enumTypeDeclaration:
309314
case INamedValueTypeDeclaration namedValueTypeDeclaration:
310315
AddToSource("new");
311-
type.ElementTypeAccess.Type.Accept(visitor, this);
316+
eligibility.eligibleType.Accept(visitor, this);
317+
//type.ElementTypeAccess.Type.Accept(visitor, this);
312318
break;
313319
case IScalarTypeDeclaration scalarTypeDeclaration:
314320
AddToSource($"@Connector.ConnectorAdapter.AdapterFactory.Create{IecToAdapterExtensions.ToAdapterType(scalarTypeDeclaration)}");

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerMemberBuilder.cs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@ protected CsOnlinerMemberBuilder(ISourceBuilder ISourceBuilder)
3232

3333
public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor)
3434
{
35-
arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
35+
var type = this.SourceBuilder.Compilation.FindTypeDeclaration(arrayTypeDeclaration.ElementTypeAccess);
36+
//arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
37+
type.Accept(visitor, this);
3638
AddToSource("[]");
3739
}
3840

@@ -49,7 +51,8 @@ public void CreateEnumTypeDeclaration(IEnumTypeDeclaration enumTypeDeclaration,
4951

5052
public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
5153
{
52-
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder))
54+
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder);
55+
if (eligibility.isEligible)
5356
{
5457
AddToSource(fieldDeclaration.Pragmas.AddAttributes());
5558

@@ -67,22 +70,26 @@ public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVis
6770
AddToSource(
6871
$"[AXSharp.Connector.EnumeratorDiscriminatorAttribute(typeof({namedValue.GetQualifiedName()}))]");
6972
AddToSource($"{fieldDeclaration.AccessModifier.Transform()} ");
70-
fieldDeclaration.Type.Accept(visitor, this);
73+
eligibility.eligibleType.Accept(visitor, this);
74+
//fieldDeclaration.Type.Accept(visitor, this);
7175
AddToSource($" {fieldDeclaration.Name}");
7276
AddToSource("{get;}");
7377
break;
7478
case IArrayTypeDeclaration array:
75-
if (array.IsEligibleForTranspile(SourceBuilder))
79+
var arrayEligibility = array.IsEligibleForTranspile(SourceBuilder);
80+
if (arrayEligibility.isEligibe)
7681
{
7782
AddToSource($"{fieldDeclaration.AccessModifier.Transform()} ");
83+
//arrayEligibility.eligibleType.Accept(visitor, this);
7884
fieldDeclaration.Type.Accept(visitor, this);
7985
AddToSource($" {fieldDeclaration.Name}");
8086
AddToSource("{get;}");
8187
}
8288
break;
8389
default:
8490
AddToSource($"{fieldDeclaration.AccessModifier.Transform()} ");
85-
fieldDeclaration.Type.Accept(visitor, this);
91+
eligibility.eligibleType.Accept(visitor, this);
92+
//fieldDeclaration.Type.Accept(visitor, this);
8693
AddToSource($" {fieldDeclaration.Name}");
8794
AddToSource("{get;}");
8895
break;
@@ -138,12 +145,13 @@ public void CreateStructuredType(IStructuredTypeDeclaration structuredTypeDeclar
138145

139146
public void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisitor visitor)
140147
{
141-
if (semantics.IsMemberEligibleForTranspile(SourceBuilder))
148+
var eligibility = semantics.IsMemberEligibleForTranspile(SourceBuilder);
149+
if (eligibility.isEligibe)
142150
{
143151
AddToSource(semantics.Pragmas.AddAttributes());
144152

145153
// TODO: This is not nice refactor, also we should embed the int wrapper into actual member of enum type!
146-
switch (semantics.Type)
154+
switch (eligibility.eligibleType)
147155
{
148156
case IEnumTypeDeclaration @enum:
149157
AddToSource($"[AXSharp.Connector.EnumeratorDiscriminatorAttribute(typeof({@enum.GetQualifiedName()}))]");
@@ -156,22 +164,26 @@ public void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisi
156164
AddToSource(
157165
$"[AXSharp.Connector.EnumeratorDiscriminatorAttribute(typeof({namedValue.GetQualifiedName()}))]");
158166
AddToSource($"public");
159-
semantics.Type.Accept(visitor, this);
167+
eligibility.eligibleType.Accept(visitor, this);
168+
//semantics.Type.Accept(visitor, this);
160169
AddToSource($" {semantics.Name}");
161170
AddToSource("{get;}");
162171
break;
163172
case IArrayTypeDeclaration array:
164-
if (array.IsEligibleForTranspile(SourceBuilder))
173+
var arrayEligible = array.IsEligibleForTranspile(SourceBuilder);
174+
if (arrayEligible.isEligibe)
165175
{
166176
AddToSource($"public");
167-
semantics.Type.Accept(visitor, this);
177+
eligibility.eligibleType.Accept(visitor, this);
178+
//semantics.Type.Accept(visitor, this);
168179
AddToSource($" {semantics.Name}");
169180
AddToSource("{get;}");
170181
}
171182
break;
172183
default:
173184
AddToSource($"public");
174-
semantics.Type.Accept(visitor, this);
185+
eligibility.eligibleType.Accept(visitor, this);
186+
//semantics.Type.Accept(visitor, this);
175187
AddToSource($" {semantics.Name}");
176188
AddToSource("{get;}");
177189
break;

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerPlainerOnlineToPlainBuilder.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ protected CsOnlinerPlainerOnlineToPlainBuilder(ISourceBuilder sourceBuilder)
3636

3737
public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
3838
{
39-
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
39+
var eligible = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
40+
if (eligible.isEligible)
4041
{
4142
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
4243
}
@@ -49,7 +50,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio
4950

5051
public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
5152
{
52-
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
53+
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
54+
if (eligibility.isEligibe)
5355
{
5456
CreateAssignment(variableDeclaration.Type, variableDeclaration);
5557
}
@@ -70,7 +72,8 @@ internal void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration de
7072
AddToSource($"#pragma warning restore CS0612\n");
7173
break;
7274
case IArrayTypeDeclaration arrayTypeDeclaration:
73-
if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
75+
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
76+
if (arrayEligibility.isEligibe)
7477
{
7578
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
7679
{

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToOnlineBuilder.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,8 @@ protected CsOnlinerPlainerPlainToOnlineBuilder(ISourceBuilder sourceBuilder)
3636

3737
public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
3838
{
39-
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
39+
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
40+
if (eligibility.isEligible)
4041
{
4142
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
4243
}
@@ -49,7 +50,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio
4950

5051
public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
5152
{
52-
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
53+
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
54+
if (eligibility.isEligibe)
5355
{
5456
CreateAssignment(variableDeclaration.Type, variableDeclaration);
5557
}
@@ -69,8 +71,8 @@ private void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration dec
6971
AddToSource($"#pragma warning restore CS0612\n");
7072
break;
7173
case IArrayTypeDeclaration arrayTypeDeclaration:
72-
73-
if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
74+
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
75+
if (arrayEligibility.isEligibe)
7476
{
7577
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
7678
{

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerPlainerPlainToShadowBuilder.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ protected CsOnlinerPlainerPlainToShadowBuilder(ISourceBuilder sourceBuilder)
3535

3636
public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
3737
{
38-
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder,"POCO"))
38+
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
39+
if (eligibility.isEligible)
3940
{
4041
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
4142
}
@@ -48,7 +49,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio
4849

4950
public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
5051
{
51-
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
52+
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
53+
if (eligibility.isEligibe)
5254
{
5355
CreateAssignment(variableDeclaration.Type, variableDeclaration);
5456
}
@@ -66,8 +68,8 @@ private void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration dec
6668
AddToSource($" await this.{declaration.Name}.{MethodName}Async(plain.{declaration.Name});");
6769
break;
6870
case IArrayTypeDeclaration arrayTypeDeclaration:
69-
70-
if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
71+
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
72+
if (arrayEligibility.isEligibe)
7173
{
7274
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
7375
{

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerPlainerShadowToPlainBuilder.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ protected CsOnlinerPlainerShadowToPlainBuilder(ISourceBuilder sourceBuilder)
3535

3636
public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
3737
{
38-
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
38+
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
39+
if (eligibility.isEligible)
3940
{
4041
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
4142
}
@@ -48,7 +49,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio
4849

4950
public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
5051
{
51-
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
52+
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
53+
if (eligibility.isEligibe)
5254
{
5355
CreateAssignment(variableDeclaration.Type, variableDeclaration);
5456
}
@@ -66,7 +68,8 @@ internal void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration de
6668
AddToSource($" plain.{declaration.Name} = await {declaration.Name}.{MethodName}Async();");
6769
break;
6870
case IArrayTypeDeclaration arrayTypeDeclaration:
69-
if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
71+
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
72+
if (arrayEligibility.isEligibe)
7073
{
7174
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
7275
{

src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Onliner/CsOnlinerSourceBuilder.cs

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -155,12 +155,15 @@ public void CreateClassDeclaration(IClassDeclarationSyntax classDeclarationSynta
155155
AddToSource($"{classDeclaration.AccessModifier.Transform()}partial class {classDeclaration.Name}{generic?.Product}");
156156
AddToSource(":");
157157

158+
158159
var isExtended = false;
159-
var extendedType = classDeclaration.ExtendedTypeAccesses.FirstOrDefault();
160-
if (Compilation.GetSemanticTree().Types
161-
.Any(p => p.FullyQualifiedName == extendedType?.Type.FullyQualifiedName))
160+
AX.ST.Semantic.Model.ISemanticTypeAccess? extendedType = classDeclaration.ExtendedTypeAccesses.FirstOrDefault();
161+
162+
//TODO: Workaround for not fully qualified declarations. To be addressed with proper dependency handling in stc.
163+
var extend = Compilation.FindTypeDeclaration(extendedType);
164+
if (extend != null)
162165
{
163-
AddToSource($"{extendedType.Type.FullyQualifiedName}{ReplaceGenericSignature(classDeclaration)}");
166+
AddToSource($"{extend.FullyQualifiedName}{ReplaceGenericSignature(classDeclaration)}");
164167
isExtended = true;
165168
}
166169
else

0 commit comments

Comments
 (0)