diff --git a/test/codegen/__snapshots__/codegen.js.snap b/test/codegen/__snapshots__/codegen.js.snap index a1a77602..a4bb2f08 100644 --- a/test/codegen/__snapshots__/codegen.js.snap +++ b/test/codegen/__snapshots__/codegen.js.snap @@ -53,11 +53,8 @@ class \`org.acme.hr@1.0.0.pii\` { + Category category } -\`org.acme.hr@1.0.0.pii\` "1" *-- "1" \`org.acme.hr@1.0.0.Category\` +\`org.acme.hr@1.0.0.pii\` "1" *-- "1" \`org.acme.hr.base@1.0.0.Category\` \`org.acme.hr@1.0.0.pii\` --|> \`concerto.decorator@1.0.0.Decorator\` -class \`org.acme.hr@1.0.0.Category\` -<< concept>> \`org.acme.hr@1.0.0.Category\` - class \`org.acme.hr@1.0.0.Info\` { << concept>> + String name @@ -256,10 +253,8 @@ class org.acme.hr_1_0_0.pii { + Boolean isPii + Category category } -org.acme.hr_1_0_0.pii "1" *-- "1" org.acme.hr_1_0_0.Category : category +org.acme.hr_1_0_0.pii "1" *-- "1" org.acme.hr.base_1_0_0.Category : category org.acme.hr_1_0_0.pii --|> concerto.decorator_1_0_0.Decorator -class org.acme.hr_1_0_0.Category { -} class org.acme.hr_1_0_0.Info { + String name } @@ -483,9 +478,6 @@ protocol MyProtocol { Category category; } - record Category { - } - record Info { string name; } @@ -793,13 +785,7 @@ public class pii : AccordProject.Concerto.Metamodel.Decorator { [System.Text.Json.Serialization.JsonPropertyName("$class")] public override string _class { get; } = "org.acme.hr@1.0.0.pii"; public bool isPii { get; set; } - public Category category { get; set; } -} -[AccordProject.Concerto.Type(Namespace = "org.acme.hr", Version = "1.0.0", Name = "Category")] -[System.Text.Json.Serialization.JsonConverter(typeof(AccordProject.Concerto.ConcertoConverterFactorySystem))] -public class Category : Concept { - [System.Text.Json.Serialization.JsonPropertyName("$class")] - public override string _class { get; } = "org.acme.hr@1.0.0.Category"; + public org.acme.hr.base.Category category { get; set; } } [AccordProject.Concerto.Type(Namespace = "org.acme.hr", Version = "1.0.0", Name = "Info")] [System.Text.Json.Serialization.JsonConverter(typeof(AccordProject.Concerto.ConcertoConverterFactorySystem))] @@ -1065,9 +1051,6 @@ type pii struct { IsPii bool \`json:"isPii"\` Category Category \`json:"category"\` } -type Category struct { - concerto_1_0_0.Concept -} type Info struct { concerto_1_0_0.Concept Name string \`json:"name"\` @@ -1202,9 +1185,6 @@ type pii @example @usedBy { isPii: Boolean! category: Category! } -type Category { - _: Boolean -} type Info { name: String! @pii(false: "Category") } @@ -1692,6 +1672,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -1723,34 +1704,6 @@ public class pii extends Decorator { `; exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 15`] = ` -{ - "key": "org/acme/hr/Category.java", - "value": "// this code is generated and should not be modified -package org.acme.hr; - -import org.acme.hr.base.Address; -import org.acme.hr.base.State; -import org.acme.hr.base.SSN; -import org.acme.hr.base.Time; -import org.acme.hr.base.EmployeeTShirtSizes; -import org.acme.hr.base.Level; -import org.acme.hr.base.GeneralCategory; -import concerto.decorator.Decorator; -import concerto.Concept; -import concerto.Asset; -import concerto.Transaction; -import concerto.Participant; -import concerto.Event; -import com.fasterxml.jackson.annotation.*; - -@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "$class") -public class Category extends Concept { -} -", -} -`; - -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 16`] = ` { "key": "org/acme/hr/Info.java", "value": "// this code is generated and should not be modified @@ -1762,6 +1715,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -1785,7 +1739,7 @@ public class Info extends Concept { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 17`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 16`] = ` { "key": "org/acme/hr/Company.java", "value": "// this code is generated and should not be modified @@ -1797,6 +1751,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -1864,7 +1819,7 @@ public class Company extends Concept { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 18`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 17`] = ` { "key": "org/acme/hr/Department.java", "value": "// this code is generated and should not be modified @@ -1884,7 +1839,7 @@ public enum Department { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 19`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 18`] = ` { "key": "org/acme/hr/Equipment.java", "value": "// this code is generated and should not be modified @@ -1896,6 +1851,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -1926,7 +1882,7 @@ public abstract class Equipment extends Asset { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 20`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 19`] = ` { "key": "org/acme/hr/LaptopMake.java", "value": "// this code is generated and should not be modified @@ -1942,7 +1898,7 @@ public enum LaptopMake { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 21`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 20`] = ` { "key": "org/acme/hr/Laptop.java", "value": "// this code is generated and should not be modified @@ -1954,6 +1910,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -1984,7 +1941,7 @@ public class Laptop extends Equipment { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 22`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 21`] = ` { "key": "org/acme/hr/Person.java", "value": "// this code is generated and should not be modified @@ -1996,6 +1953,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -2084,7 +2042,7 @@ public abstract class Person extends Participant { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 23`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 22`] = ` { "key": "org/acme/hr/Employee.java", "value": "// this code is generated and should not be modified @@ -2096,6 +2054,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -2175,7 +2134,7 @@ public class Employee extends Person { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 24`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 23`] = ` { "key": "org/acme/hr/Contractor.java", "value": "// this code is generated and should not be modified @@ -2187,6 +2146,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -2224,7 +2184,7 @@ public class Contractor extends Person { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 25`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 24`] = ` { "key": "org/acme/hr/Manager.java", "value": "// this code is generated and should not be modified @@ -2236,6 +2196,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -2266,7 +2227,7 @@ public class Manager extends Employee { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 26`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 25`] = ` { "key": "org/acme/hr/CompanyEvent.java", "value": "// this code is generated and should not be modified @@ -2278,6 +2239,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -2293,7 +2255,7 @@ public class CompanyEvent extends Event { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 27`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 26`] = ` { "key": "org/acme/hr/Onboarded.java", "value": "// this code is generated and should not be modified @@ -2305,6 +2267,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -2327,7 +2290,7 @@ public class Onboarded extends CompanyEvent { } `; -exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 28`] = ` +exports[`codegen #formats check we can convert all formats from namespace versioned CTO, format 'java' 27`] = ` { "key": "org/acme/hr/ChangeOfAddress.java", "value": "// this code is generated and should not be modified @@ -2339,6 +2302,7 @@ import org.acme.hr.base.SSN; import org.acme.hr.base.Time; import org.acme.hr.base.EmployeeTShirtSizes; import org.acme.hr.base.Level; +import org.acme.hr.base.Category; import org.acme.hr.base.GeneralCategory; import concerto.decorator.Decorator; import concerto.Concept; @@ -2490,7 +2454,14 @@ exports[`codegen #formats check we can convert all formats from namespace versio "type": "boolean" }, "category": { - "$ref": "#/definitions/org.acme.hr@1.0.0.Category" + "anyOf": [ + { + "$ref": "#/definitions/org.acme.hr.base@1.0.0.Category" + }, + { + "$ref": "#/definitions/org.acme.hr.base@1.0.0.GeneralCategory" + } + ] } }, "required": [ @@ -2507,22 +2478,6 @@ exports[`codegen #formats check we can convert all formats from namespace versio ] } }, - "org.acme.hr@1.0.0.Category": { - "title": "Category", - "description": "An instance of org.acme.hr@1.0.0.Category", - "type": "object", - "properties": { - "$class": { - "type": "string", - "default": "org.acme.hr@1.0.0.Category", - "pattern": "^org\\\\.acme\\\\.hr@1\\\\.0\\\\.0\\\\.Category$", - "description": "The class identifier for org.acme.hr@1.0.0.Category" - } - }, - "required": [ - "$class" - ] - }, "org.acme.hr@1.0.0.Info": { "title": "Info", "description": "An instance of org.acme.hr@1.0.0.Info", @@ -3341,7 +3296,7 @@ class \`org.acme.hr.base@1.0.0.Level\` # Namespace org.acme.hr@1.0.0 ## Overview -- 4 concepts +- 3 concepts - 2 enumerations - 6 maps - 2 scalars @@ -3349,7 +3304,7 @@ class \`org.acme.hr.base@1.0.0.Level\` - 4 participants - 1 transactions - 2 events -- 23 total declarations +- 22 total declarations ## Imports - org.acme.hr.base@1.0.0.Address @@ -3358,6 +3313,7 @@ class \`org.acme.hr.base@1.0.0.Level\` - org.acme.hr.base@1.0.0.Time - org.acme.hr.base@1.0.0.EmployeeTShirtSizes - org.acme.hr.base@1.0.0.Level +- org.acme.hr.base@1.0.0.Category - org.acme.hr.base@1.0.0.GeneralCategory - concerto.decorator@1.0.0.Decorator - concerto@1.0.0.Concept @@ -3374,7 +3330,7 @@ class \`org.acme.hr.base@1.0.0.Level\` | Field | Type | Required | Identifier | Reference | Inherited | Description | Contraints | | ------ | ------------------- | --- | --- | --- | --- |------------ | --------- | | isPii | Boolean | ✔️ | | | | | | -| category | org.acme.hr@1.0.0.Category | ✔️ | | | | | | +| category | org.acme.hr.base@1.0.0.Category | ✔️ | | | | | | #### Example Usage \`\`\`cs @@ -3387,12 +3343,6 @@ class \`org.acme.hr.base@1.0.0.Level\` |Everyone| -### Category (Concept) - - -No fields. - - ### Info (Concept) @@ -3577,11 +3527,8 @@ class \`org.acme.hr@1.0.0.pii\` { + Category category } -\`org.acme.hr@1.0.0.pii\` "1" *-- "1" \`org.acme.hr@1.0.0.Category\` +\`org.acme.hr@1.0.0.pii\` "1" *-- "1" \`org.acme.hr.base@1.0.0.Category\` \`org.acme.hr@1.0.0.pii\` --|> \`concerto.decorator@1.0.0.Decorator\` -class \`org.acme.hr@1.0.0.Category\` -<< concept>> \`org.acme.hr@1.0.0.Category\` - class \`org.acme.hr@1.0.0.Info\` { << concept>> + String name @@ -3799,12 +3746,8 @@ class \`org.acme.hr@1.0.0.pii\` { + Category category } -\`org.acme.hr@1.0.0.pii\` "1" *-- "1" \`org.acme.hr@1.0.0.Category\` +\`org.acme.hr@1.0.0.pii\` "1" *-- "1" \`org.acme.hr.base@1.0.0.Category\` \`org.acme.hr@1.0.0.pii\` --|> \`concerto.decorator@1.0.0.Decorator\` -class \`org.acme.hr@1.0.0.Category\` -<< concept>> \`org.acme.hr@1.0.0.Category\` - -\`org.acme.hr@1.0.0.Category\` --|> \`concerto@1.0.0.Concept\` class \`org.acme.hr@1.0.0.Info\` { << concept>> + String name @@ -4130,11 +4073,9 @@ exports[`codegen #formats check we can convert all formats from namespace versio - + - - @@ -4428,7 +4369,14 @@ exports[`codegen #formats check we can convert all formats from namespace versio "type": "boolean" }, "category": { - "$ref": "#/components/schemas/org.acme.hr@1.0.0.Category" + "anyOf": [ + { + "$ref": "#/components/schemas/org.acme.hr.base@1.0.0.Category" + }, + { + "$ref": "#/components/schemas/org.acme.hr.base@1.0.0.GeneralCategory" + } + ] } }, "required": [ @@ -4445,22 +4393,6 @@ exports[`codegen #formats check we can convert all formats from namespace versio ] } }, - "org.acme.hr@1.0.0.Category": { - "title": "Category", - "description": "An instance of org.acme.hr@1.0.0.Category", - "type": "object", - "properties": { - "$class": { - "type": "string", - "default": "org.acme.hr@1.0.0.Category", - "pattern": "^org\\\\.acme\\\\.hr@1\\\\.0\\\\.0\\\\.Category$", - "description": "The class identifier for org.acme.hr@1.0.0.Category" - } - }, - "required": [ - "$class" - ] - }, "org.acme.hr@1.0.0.Info": { "title": "Info", "description": "An instance of org.acme.hr@1.0.0.Info", @@ -5446,11 +5378,8 @@ class org.acme.hr_1_0_0.pii { + Boolean isPii + Category category } -org.acme.hr_1_0_0.pii "1" *-- "1" org.acme.hr_1_0_0.Category : category +org.acme.hr_1_0_0.pii "1" *-- "1" org.acme.hr.base_1_0_0.Category : category org.acme.hr_1_0_0.pii --|> concerto.decorator_1_0_0.Decorator -class org.acme.hr_1_0_0.Category { -} -org.acme.hr_1_0_0.Category --|> concerto_1_0_0.Concept class org.acme.hr_1_0_0.Info { + String name } @@ -5622,8 +5551,6 @@ message pii { bool isPii = 2; } -message Category {} - message Info { string name = 1; } @@ -6262,14 +6189,6 @@ pub struct pii { pub category: Category, } -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Category { - #[serde( - rename = "$class", - )] - pub _class: String, -} - #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Info { #[serde( @@ -6860,7 +6779,6 @@ import type { Level } from './org.acme.hr.base@1.0.0'; import type { - ICategory, IInfo, ICompany, Department, @@ -6894,7 +6812,6 @@ export interface IConcept { export type ConceptUnion = ICategory | IAddress | -ICategory | IInfo | ICompany; @@ -6997,7 +6914,7 @@ exports[`codegen #formats check we can convert all formats from namespace versio // Warning: Beware of circular dependencies when modifying these imports // Warning: Beware of circular dependencies when modifying these imports -import {Time,SSN,IAddress,EmployeeTShirtSizes} from './org.acme.hr.base@1.0.0'; +import {ICategory,Time,SSN,IAddress,EmployeeTShirtSizes} from './org.acme.hr.base@1.0.0'; import {IDecorator} from './concerto.decorator@1.0.0'; import {IConcept,IAsset,IParticipant,IEvent,ITransaction} from './concerto@1.0.0'; @@ -7007,9 +6924,6 @@ export interface Ipii extends IDecorator { category: ICategory; } -export interface ICategory extends IConcept { -} - export interface IInfo extends IConcept { name: string; } @@ -7170,7 +7084,6 @@ declarations: properties: - isPii: Is Pii of thepii - category: Category of thepii - - Category: Category - Info: Info properties: - name: Name of the Info @@ -7456,21 +7369,12 @@ xmlns:concerto="concerto" - + - - - - - - - - - diff --git a/test/codegen/fromcto/data/model/hr.cto b/test/codegen/fromcto/data/model/hr.cto index d1f5ee62..9ae802df 100644 --- a/test/codegen/fromcto/data/model/hr.cto +++ b/test/codegen/fromcto/data/model/hr.cto @@ -1,7 +1,7 @@ @category(GeneralCategory) namespace org.acme.hr@1.0.0 -import org.acme.hr.base@1.0.0.{Address, State, SSN, Time, EmployeeTShirtSizes, Level, GeneralCategory} +import org.acme.hr.base@1.0.0.{Address, State, SSN, Time, EmployeeTShirtSizes, Level, Category, GeneralCategory} import concerto.decorator@1.0.0.{Decorator} @example("@pii(true, GeneralCategory)") @@ -11,8 +11,6 @@ concept pii extends Decorator { o Category category } -concept Category {} - concept Info { @pii(false, Category) o String name diff --git a/test/common/__snapshots__/graph.js.snap b/test/common/__snapshots__/graph.js.snap index 194b424d..05a4ccda 100644 --- a/test/common/__snapshots__/graph.js.snap +++ b/test/common/__snapshots__/graph.js.snap @@ -21,15 +21,13 @@ exports[`graph #visitor should visit a model manager 1`] = ` \`org.acme.hr.base@1.0.0.Time\` \`org.acme.hr.base@1.0.0.SSN\` \`org.acme.hr@1.0.0.pii\` - \`org.acme.hr@1.0.0.pii\` --> \`org.acme.hr@1.0.0.Category\` + \`org.acme.hr@1.0.0.pii\` --> \`org.acme.hr.base@1.0.0.Category\` \`concerto.decorator@1.0.0.Decorator\` \`concerto.decorator@1.0.0.Decorator\` <--> \`org.acme.hr@1.0.0.pii\` - \`org.acme.hr@1.0.0.Category\` - \`org.acme.hr@1.0.0.Category\` --> \`concerto@1.0.0.Concept\` \`org.acme.hr@1.0.0.Info\` \`org.acme.hr@1.0.0.Info\` --> \`concerto@1.0.0.Concept\` \`org.acme.hr@1.0.0.Info\` --> \`org.acme.hr@1.0.0.pii\` - \`org.acme.hr@1.0.0.Info\` --> \`org.acme.hr@1.0.0.Category\` + \`org.acme.hr@1.0.0.Info\` --> \`org.acme.hr.base@1.0.0.Category\` \`org.acme.hr@1.0.0.CompanyProperties\` \`org.acme.hr@1.0.0.CompanyProperties\` --> \`String\` \`org.acme.hr@1.0.0.EmployeeLoginTimes\` @@ -131,13 +129,11 @@ exports[`graph #visitor should visit a model manager and create a dependency gra \`org.acme.hr.base@1.0.0.SSN\` \`org.acme.hr@1.0.0.pii\` \`org.acme.hr@1.0.0.pii\` --> \`concerto.decorator@1.0.0.Decorator\` - \`org.acme.hr@1.0.0.pii\` --> \`org.acme.hr@1.0.0.Category\` - \`org.acme.hr@1.0.0.Category\` - \`org.acme.hr@1.0.0.Category\` --> \`concerto@1.0.0.Concept\` + \`org.acme.hr@1.0.0.pii\` --> \`org.acme.hr.base@1.0.0.Category\` \`org.acme.hr@1.0.0.Info\` \`org.acme.hr@1.0.0.Info\` --> \`concerto@1.0.0.Concept\` \`org.acme.hr@1.0.0.Info\` --> \`org.acme.hr@1.0.0.pii\` - \`org.acme.hr@1.0.0.Info\` --> \`org.acme.hr@1.0.0.Category\` + \`org.acme.hr@1.0.0.Info\` --> \`org.acme.hr.base@1.0.0.Category\` \`org.acme.hr@1.0.0.CompanyProperties\` \`org.acme.hr@1.0.0.CompanyProperties\` --> \`String\` \`org.acme.hr@1.0.0.EmployeeLoginTimes\`