Browse Source

* Support anonymous types in arrays

Michaël Van Canneyt 1 week ago
parent
commit
e4224aea88
1 changed files with 14 additions and 2 deletions
  1. 14 2
      packages/fcl-jsonschema/src/fpjson.schema.pascaltypes.pp

+ 14 - 2
packages/fcl-jsonschema/src/fpjson.schema.pascaltypes.pp

@@ -858,6 +858,7 @@ var
   lType : TSchemaSimpleType;
   lType : TSchemaSimpleType;
   lName,lBaseName,lPascalName : string;
   lName,lBaseName,lPascalName : string;
   lFormat : String;
   lFormat : String;
+  lTmp : TJSONSchema;
   lElTypeData : TPascalTypeData;
   lElTypeData : TPascalTypeData;
 
 
 begin
 begin
@@ -911,7 +912,7 @@ begin
         end;
         end;
       sstArray:
       sstArray:
         begin
         begin
-        lElTypeData:=GetSchemaTypeData(Nil,lSchema.Items[0]);
+        lElTypeData:=GetSchemaTypeData(Nil,lSchema.Items[0],True);
         lPascalName:=Sanitize(ArrayTypePrefix+lElTypeData.PascalName+ArrayTypeSuffix);
         lPascalName:=Sanitize(ArrayTypePrefix+lElTypeData.PascalName+ArrayTypeSuffix);
         lName:='['+lElTypeData.SchemaName;
         lName:='['+lElTypeData.SchemaName;
         if lSchema.Items[0].Validations.HasKeywordData(jskformat) then
         if lSchema.Items[0].Validations.HasKeywordData(jskformat) then
@@ -936,7 +937,18 @@ begin
           if assigned(aType) then
           if assigned(aType) then
             lBaseName:=aType.GetTypeName(ntSchema)+'_'+lSchema.Name
             lBaseName:=aType.GetTypeName(ntSchema)+'_'+lSchema.Name
           else
           else
-            lBaseName:='Nested_'+lSchema.Name;
+            begin
+            lBaseName:=lSchema.Name;
+            lTmp:=lSchema.Parent;
+            While lTmp<>Nil do
+              begin
+              if lTmp.Name<>'' then
+                lBaseName:=lTmp.Name+'_'+lBaseName
+              else
+                lBaseName:='Nested_'+lBaseName;
+              lTmp:=lTmp.Parent;
+              end;
+            end;
           lName:='{'+lBaseName+'}';
           lName:='{'+lBaseName+'}';
           lPascalName:=ObjectTypePrefix+Sanitize(lBaseName);
           lPascalName:=ObjectTypePrefix+Sanitize(lBaseName);
           Result:=FindSchemaTypeData(lName);
           Result:=FindSchemaTypeData(lName);