Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion GitVersion.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
mode: ContinuousDeployment
next-version: 0.23.0
next-version: 0.24.0
branches:
main:
regex: ^master$|^main$
Expand Down
221 changes: 189 additions & 32 deletions src/AXSharp.compiler/src/AXSharp.Cs.Compiler/Helpers/SemanticsHelpers.cs

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,8 @@ protected CsOnlinerConfigurationConstructorBuilder(ISourceBuilder sourceBuilder)

public override void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisitor visitor)
{
if (semantics.IsMemberEligibleForConstructor(SourceBuilder))
var eligibility = semantics.IsMemberEligibleForConstructor(SourceBuilder);
if (eligibility.isEligibe)
{
switch (semantics.Type)
{
Expand Down Expand Up @@ -113,7 +114,8 @@ public override void CreateVariableDeclaration(IVariableDeclaration semantics, I
private void AddArrayMemberInitialization(IArrayTypeDeclaration type, IVariableDeclaration field,
IxNodeVisitor visitor)
{
if (!type.IsMemberEligibleForConstructor(this.SourceBuilder))
var eligibility = type.IsMemberEligibleForConstructor(this.SourceBuilder);
if (!eligibility.isEligibe)
return;

AddToSource($"{field.Name}");
Expand All @@ -135,8 +137,9 @@ private void AddArrayMemberInitialization(IArrayTypeDeclaration type, IVariableD
case IStructuredTypeDeclaration structuredTypeDeclaration:
case IEnumTypeDeclaration enumTypeDeclaration:
case INamedValueTypeDeclaration namedValueTypeDeclaration:
AddToSource("new");
type.ElementTypeAccess.Type.Accept(visitor, this);
AddToSource("new");
eligibility.eligibleType.Accept(visitor, this);
//type.ElementTypeAccess.Type.Accept(visitor, this);
break;
case IScalarTypeDeclaration scalarTypeDeclaration:
AddToSource($"@Connector.ConnectorAdapter.AdapterFactory.Create{IecToAdapterExtensions.ToAdapterType(scalarTypeDeclaration)}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,9 +66,10 @@ public void CreateStructuredType(IStructuredTypeDeclaration structuredTypeDeclar

public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
{
if (fieldDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
var eligibility = fieldDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
if (eligibility.isEligibe)
{
switch (fieldDeclaration.Type)
switch (eligibility.eligibleType)
{
case IArrayTypeDeclaration array:
AddArrayMemberInitialization(array, fieldDeclaration, visitor);
Expand Down Expand Up @@ -106,10 +107,10 @@ public virtual void CreateNamedValueTypeDeclaration(INamedValueTypeDeclaration n

public virtual void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisitor visitor)
{

if (semantics.IsMemberEligibleForConstructor(SourceBuilder))
var elibility = semantics.IsMemberEligibleForConstructor(SourceBuilder);
if (elibility.isEligibe)
{
switch (semantics.Type)
switch (elibility.eligibleType)
Comment on lines +110 to +113
Copy link

Copilot AI Mar 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is a typo in the variable name 'elibility'; consider renaming it to 'eligibility' for consistency and clarity.

Copilot uses AI. Check for mistakes.
{
case IArrayTypeDeclaration array:
AddArrayMemberInitialization(array, semantics, visitor);
Expand Down Expand Up @@ -151,7 +152,9 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio

public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor)
{
arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
var type = this.SourceBuilder.Compilation.FindTypeDeclaration(arrayTypeDeclaration.ElementTypeAccess);
type.Accept(visitor, this);
//arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
AddToSource("[");
AddToSource(string.Join(",",
arrayTypeDeclaration.Dimensions.Select(p => p.CountOfElements.ToString(CultureInfo.InvariantCulture))));
Expand Down Expand Up @@ -285,11 +288,13 @@ public static CsOnlinerConstructorBuilder Create(IxNodeVisitor visitor, IConfigu
private void AddArrayMemberInitialization(IArrayTypeDeclaration type, IStorageDeclaration field,
IxNodeVisitor visitor)
{
if(!type.IsMemberEligibleForConstructor(this.SourceBuilder))
var eligibility = type.IsMemberEligibleForConstructor(this.SourceBuilder);
if (!eligibility.isEligibe)
return;

AddToSource($"{field.Name}");
AddToSource("= new");
//eligibility.eligibleType.Accept(visitor, this);
type.Accept(visitor, this);
AddToSource(";");

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

switch (type.ElementTypeAccess.Type)
switch (eligibility.eligibleType)
{

case IClassDeclaration classDeclaration:
case IStructuredTypeDeclaration structuredTypeDeclaration:
case IEnumTypeDeclaration enumTypeDeclaration:
case INamedValueTypeDeclaration namedValueTypeDeclaration:
AddToSource("new");
type.ElementTypeAccess.Type.Accept(visitor, this);
eligibility.eligibleType.Accept(visitor, this);
//type.ElementTypeAccess.Type.Accept(visitor, this);
break;
case IScalarTypeDeclaration scalarTypeDeclaration:
AddToSource($"@Connector.ConnectorAdapter.AdapterFactory.Create{IecToAdapterExtensions.ToAdapterType(scalarTypeDeclaration)}");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,9 @@ protected CsOnlinerMemberBuilder(ISourceBuilder ISourceBuilder)

public void CreateArrayTypeDeclaration(IArrayTypeDeclaration arrayTypeDeclaration, IxNodeVisitor visitor)
{
arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
var type = this.SourceBuilder.Compilation.FindTypeDeclaration(arrayTypeDeclaration.ElementTypeAccess);
//arrayTypeDeclaration.ElementTypeAccess.Type.Accept(visitor, this);
type.Accept(visitor, this);
AddToSource("[]");
}

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

public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
{
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder))
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder);
if (eligibility.isEligible)
{
AddToSource(fieldDeclaration.Pragmas.AddAttributes());

Expand All @@ -67,22 +70,26 @@ public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVis
AddToSource(
$"[AXSharp.Connector.EnumeratorDiscriminatorAttribute(typeof({namedValue.GetQualifiedName()}))]");
AddToSource($"{fieldDeclaration.AccessModifier.Transform()} ");
fieldDeclaration.Type.Accept(visitor, this);
eligibility.eligibleType.Accept(visitor, this);
//fieldDeclaration.Type.Accept(visitor, this);
AddToSource($" {fieldDeclaration.Name}");
AddToSource("{get;}");
break;
case IArrayTypeDeclaration array:
if (array.IsEligibleForTranspile(SourceBuilder))
var arrayEligibility = array.IsEligibleForTranspile(SourceBuilder);
if (arrayEligibility.isEligibe)
{
AddToSource($"{fieldDeclaration.AccessModifier.Transform()} ");
//arrayEligibility.eligibleType.Accept(visitor, this);
fieldDeclaration.Type.Accept(visitor, this);
AddToSource($" {fieldDeclaration.Name}");
AddToSource("{get;}");
}
break;
default:
AddToSource($"{fieldDeclaration.AccessModifier.Transform()} ");
fieldDeclaration.Type.Accept(visitor, this);
eligibility.eligibleType.Accept(visitor, this);
//fieldDeclaration.Type.Accept(visitor, this);
AddToSource($" {fieldDeclaration.Name}");
AddToSource("{get;}");
break;
Expand Down Expand Up @@ -138,12 +145,13 @@ public void CreateStructuredType(IStructuredTypeDeclaration structuredTypeDeclar

public void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisitor visitor)
{
if (semantics.IsMemberEligibleForTranspile(SourceBuilder))
var eligibility = semantics.IsMemberEligibleForTranspile(SourceBuilder);
if (eligibility.isEligibe)
{
AddToSource(semantics.Pragmas.AddAttributes());

// TODO: This is not nice refactor, also we should embed the int wrapper into actual member of enum type!
switch (semantics.Type)
switch (eligibility.eligibleType)
{
case IEnumTypeDeclaration @enum:
AddToSource($"[AXSharp.Connector.EnumeratorDiscriminatorAttribute(typeof({@enum.GetQualifiedName()}))]");
Expand All @@ -156,22 +164,26 @@ public void CreateVariableDeclaration(IVariableDeclaration semantics, IxNodeVisi
AddToSource(
$"[AXSharp.Connector.EnumeratorDiscriminatorAttribute(typeof({namedValue.GetQualifiedName()}))]");
AddToSource($"public");
semantics.Type.Accept(visitor, this);
eligibility.eligibleType.Accept(visitor, this);
//semantics.Type.Accept(visitor, this);
AddToSource($" {semantics.Name}");
AddToSource("{get;}");
break;
case IArrayTypeDeclaration array:
if (array.IsEligibleForTranspile(SourceBuilder))
var arrayEligible = array.IsEligibleForTranspile(SourceBuilder);
if (arrayEligible.isEligibe)
{
AddToSource($"public");
semantics.Type.Accept(visitor, this);
eligibility.eligibleType.Accept(visitor, this);
//semantics.Type.Accept(visitor, this);
AddToSource($" {semantics.Name}");
AddToSource("{get;}");
}
break;
default:
AddToSource($"public");
semantics.Type.Accept(visitor, this);
eligibility.eligibleType.Accept(visitor, this);
//semantics.Type.Accept(visitor, this);
AddToSource($" {semantics.Name}");
AddToSource("{get;}");
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ protected CsOnlinerPlainerOnlineToPlainBuilder(ISourceBuilder sourceBuilder)

public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
{
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
var eligible = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligible.isEligible)
{
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
}
Expand All @@ -49,7 +50,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio

public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
{
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligibility.isEligibe)
{
CreateAssignment(variableDeclaration.Type, variableDeclaration);
}
Expand All @@ -70,7 +72,8 @@ internal void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration de
AddToSource($"#pragma warning restore CS0612\n");
break;
case IArrayTypeDeclaration arrayTypeDeclaration:
if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
if (arrayEligibility.isEligibe)
{
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,8 @@ protected CsOnlinerPlainerPlainToOnlineBuilder(ISourceBuilder sourceBuilder)

public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
{
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligibility.isEligible)
{
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
}
Expand All @@ -49,7 +50,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio

public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
{
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligibility.isEligibe)
{
CreateAssignment(variableDeclaration.Type, variableDeclaration);
}
Expand All @@ -69,8 +71,8 @@ private void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration dec
AddToSource($"#pragma warning restore CS0612\n");
break;
case IArrayTypeDeclaration arrayTypeDeclaration:

if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
if (arrayEligibility.isEligibe)
{
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ protected CsOnlinerPlainerPlainToShadowBuilder(ISourceBuilder sourceBuilder)

public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
{
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder,"POCO"))
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligibility.isEligible)
{
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
}
Expand All @@ -48,7 +49,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio

public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
{
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligibility.isEligibe)
{
CreateAssignment(variableDeclaration.Type, variableDeclaration);
}
Expand All @@ -66,8 +68,8 @@ private void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration dec
AddToSource($" await this.{declaration.Name}.{MethodName}Async(plain.{declaration.Name});");
break;
case IArrayTypeDeclaration arrayTypeDeclaration:

if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
if (arrayEligibility.isEligibe)
{
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@ protected CsOnlinerPlainerShadowToPlainBuilder(ISourceBuilder sourceBuilder)

public void CreateFieldDeclaration(IFieldDeclaration fieldDeclaration, IxNodeVisitor visitor)
{
if (fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
var eligibility = fieldDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligibility.isEligible)
{
CreateAssignment(fieldDeclaration.Type, fieldDeclaration);
}
Expand All @@ -48,7 +49,8 @@ public void CreateInterfaceDeclaration(IInterfaceDeclaration interfaceDeclaratio

public void CreateVariableDeclaration(IVariableDeclaration variableDeclaration, IxNodeVisitor visitor)
{
if (variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO"))
var eligibility = variableDeclaration.IsMemberEligibleForTranspile(SourceBuilder, "POCO");
if (eligibility.isEligibe)
{
CreateAssignment(variableDeclaration.Type, variableDeclaration);
}
Expand All @@ -66,7 +68,8 @@ internal void CreateAssignment(ITypeDeclaration typeDeclaration, IDeclaration de
AddToSource($" plain.{declaration.Name} = await {declaration.Name}.{MethodName}Async();");
break;
case IArrayTypeDeclaration arrayTypeDeclaration:
if (arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder))
var arrayEligibility = arrayTypeDeclaration.IsMemberEligibleForConstructor(SourceBuilder);
if (arrayEligibility.isEligibe)
{
switch (arrayTypeDeclaration.ElementTypeAccess.Type)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,12 +155,15 @@ public void CreateClassDeclaration(IClassDeclarationSyntax classDeclarationSynta
AddToSource($"{classDeclaration.AccessModifier.Transform()}partial class {classDeclaration.Name}{generic?.Product}");
AddToSource(":");


var isExtended = false;
var extendedType = classDeclaration.ExtendedTypeAccesses.FirstOrDefault();
if (Compilation.GetSemanticTree().Types
.Any(p => p.FullyQualifiedName == extendedType?.Type.FullyQualifiedName))
AX.ST.Semantic.Model.ISemanticTypeAccess? extendedType = classDeclaration.ExtendedTypeAccesses.FirstOrDefault();

//TODO: Workaround for not fully qualified declarations. To be addressed with proper dependency handling in stc.
var extend = Compilation.FindTypeDeclaration(extendedType);
if (extend != null)
{
AddToSource($"{extendedType.Type.FullyQualifiedName}{ReplaceGenericSignature(classDeclaration)}");
AddToSource($"{extend.FullyQualifiedName}{ReplaceGenericSignature(classDeclaration)}");
isExtended = true;
}
else
Expand Down
Loading