aas-core-codegen 0.0.16__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aas_core_codegen/__init__.py +6 -0
- aas_core_codegen/__main__.py +8 -0
- aas_core_codegen/common.py +500 -0
- aas_core_codegen/cpp/__init__.py +1 -0
- aas_core_codegen/cpp/aas_common/__init__.py +6 -0
- aas_core_codegen/cpp/aas_common/_generate.py +713 -0
- aas_core_codegen/cpp/common.py +681 -0
- aas_core_codegen/cpp/constants/__init__.py +6 -0
- aas_core_codegen/cpp/constants/_generate.py +568 -0
- aas_core_codegen/cpp/description.py +654 -0
- aas_core_codegen/cpp/enhancing/__init__.py +4 -0
- aas_core_codegen/cpp/enhancing/_generate.py +993 -0
- aas_core_codegen/cpp/iteration/__init__.py +6 -0
- aas_core_codegen/cpp/iteration/_generate.py +2332 -0
- aas_core_codegen/cpp/jsonization/__init__.py +6 -0
- aas_core_codegen/cpp/jsonization/_generate.py +2619 -0
- aas_core_codegen/cpp/main.py +694 -0
- aas_core_codegen/cpp/naming.py +170 -0
- aas_core_codegen/cpp/optionaling.py +557 -0
- aas_core_codegen/cpp/pattern/__init__.py +6 -0
- aas_core_codegen/cpp/pattern/_generate.py +508 -0
- aas_core_codegen/cpp/revm/__init__.py +6 -0
- aas_core_codegen/cpp/revm/_generate.py +1149 -0
- aas_core_codegen/cpp/stringification/__init__.py +5 -0
- aas_core_codegen/cpp/stringification/_generate.py +955 -0
- aas_core_codegen/cpp/structure/__init__.py +7 -0
- aas_core_codegen/cpp/structure/_generate.py +1503 -0
- aas_core_codegen/cpp/transpilation.py +1383 -0
- aas_core_codegen/cpp/unrolling.py +159 -0
- aas_core_codegen/cpp/verification/__init__.py +6 -0
- aas_core_codegen/cpp/verification/_generate.py +3073 -0
- aas_core_codegen/cpp/visitation/__init__.py +6 -0
- aas_core_codegen/cpp/visitation/_generate.py +521 -0
- aas_core_codegen/cpp/wstringification/__init__.py +5 -0
- aas_core_codegen/cpp/wstringification/_generate.py +586 -0
- aas_core_codegen/cpp/xmlization/__init__.py +6 -0
- aas_core_codegen/cpp/xmlization/_generate.py +5373 -0
- aas_core_codegen/cpp/yielding.py +201 -0
- aas_core_codegen/csharp/__init__.py +1 -0
- aas_core_codegen/csharp/common.py +224 -0
- aas_core_codegen/csharp/constants/__init__.py +5 -0
- aas_core_codegen/csharp/constants/_generate.py +409 -0
- aas_core_codegen/csharp/copying/__init__.py +4 -0
- aas_core_codegen/csharp/copying/_generate.py +498 -0
- aas_core_codegen/csharp/description.py +1103 -0
- aas_core_codegen/csharp/enhancing/__init__.py +4 -0
- aas_core_codegen/csharp/enhancing/_generate.py +667 -0
- aas_core_codegen/csharp/jsonization/__init__.py +4 -0
- aas_core_codegen/csharp/jsonization/_generate.py +1630 -0
- aas_core_codegen/csharp/main.py +421 -0
- aas_core_codegen/csharp/naming.py +157 -0
- aas_core_codegen/csharp/reporting/__init__.py +4 -0
- aas_core_codegen/csharp/reporting/_generate.py +266 -0
- aas_core_codegen/csharp/stringification/__init__.py +4 -0
- aas_core_codegen/csharp/stringification/_generate.py +243 -0
- aas_core_codegen/csharp/structure/__init__.py +6 -0
- aas_core_codegen/csharp/structure/_generate.py +1341 -0
- aas_core_codegen/csharp/transpilation.py +990 -0
- aas_core_codegen/csharp/unrolling.py +211 -0
- aas_core_codegen/csharp/verification/__init__.py +6 -0
- aas_core_codegen/csharp/verification/_generate.py +1457 -0
- aas_core_codegen/csharp/visitation/__init__.py +5 -0
- aas_core_codegen/csharp/visitation/_generate.py +579 -0
- aas_core_codegen/csharp/xmlization/__init__.py +4 -0
- aas_core_codegen/csharp/xmlization/_generate.py +1980 -0
- aas_core_codegen/golang/__init__.py +1 -0
- aas_core_codegen/golang/aas_common/__init__.py +4 -0
- aas_core_codegen/golang/aas_common/_generate.py +152 -0
- aas_core_codegen/golang/common.py +303 -0
- aas_core_codegen/golang/constants/__init__.py +5 -0
- aas_core_codegen/golang/constants/_generate.py +339 -0
- aas_core_codegen/golang/description.py +501 -0
- aas_core_codegen/golang/enhancing/__init__.py +4 -0
- aas_core_codegen/golang/enhancing/_generate.py +527 -0
- aas_core_codegen/golang/jsonization/__init__.py +4 -0
- aas_core_codegen/golang/jsonization/_generate.py +1740 -0
- aas_core_codegen/golang/main.py +368 -0
- aas_core_codegen/golang/naming.py +412 -0
- aas_core_codegen/golang/pointering.py +631 -0
- aas_core_codegen/golang/reporting/__init__.py +4 -0
- aas_core_codegen/golang/reporting/_generate.py +218 -0
- aas_core_codegen/golang/stringification/__init__.py +4 -0
- aas_core_codegen/golang/stringification/_generate.py +394 -0
- aas_core_codegen/golang/structure/__init__.py +6 -0
- aas_core_codegen/golang/structure/_generate.py +1493 -0
- aas_core_codegen/golang/transpilation.py +1191 -0
- aas_core_codegen/golang/unrolling.py +159 -0
- aas_core_codegen/golang/verification/__init__.py +6 -0
- aas_core_codegen/golang/verification/_generate.py +1513 -0
- aas_core_codegen/golang/xmlization/__init__.py +4 -0
- aas_core_codegen/golang/xmlization/_generate.py +2507 -0
- aas_core_codegen/infer_for_schema/__init__.py +21 -0
- aas_core_codegen/infer_for_schema/_inline.py +693 -0
- aas_core_codegen/infer_for_schema/_len.py +527 -0
- aas_core_codegen/infer_for_schema/_pattern.py +311 -0
- aas_core_codegen/infer_for_schema/_set.py +394 -0
- aas_core_codegen/infer_for_schema/_stringify.py +201 -0
- aas_core_codegen/infer_for_schema/_types.py +135 -0
- aas_core_codegen/infer_for_schema/match.py +122 -0
- aas_core_codegen/intermediate/__init__.py +78 -0
- aas_core_codegen/intermediate/_hierarchy.py +397 -0
- aas_core_codegen/intermediate/_stringify.py +989 -0
- aas_core_codegen/intermediate/_translate.py +5128 -0
- aas_core_codegen/intermediate/_types.py +2901 -0
- aas_core_codegen/intermediate/construction.py +750 -0
- aas_core_codegen/intermediate/doc.py +344 -0
- aas_core_codegen/intermediate/pattern_verification.py +428 -0
- aas_core_codegen/intermediate/revm.py +985 -0
- aas_core_codegen/intermediate/type_inference.py +2266 -0
- aas_core_codegen/java/__init__.py +1 -0
- aas_core_codegen/java/common.py +197 -0
- aas_core_codegen/java/constants/__init__.py +5 -0
- aas_core_codegen/java/constants/_generate.py +334 -0
- aas_core_codegen/java/copying/__init__.py +4 -0
- aas_core_codegen/java/copying/_generate.py +502 -0
- aas_core_codegen/java/description.py +774 -0
- aas_core_codegen/java/enhancing/__init__.py +4 -0
- aas_core_codegen/java/enhancing/_generate.py +820 -0
- aas_core_codegen/java/generation/__init__.py +5 -0
- aas_core_codegen/java/generation/_generate.py +285 -0
- aas_core_codegen/java/jsonization/__init__.py +4 -0
- aas_core_codegen/java/jsonization/_generate.py +1472 -0
- aas_core_codegen/java/main.py +438 -0
- aas_core_codegen/java/naming.py +187 -0
- aas_core_codegen/java/optional.py +514 -0
- aas_core_codegen/java/reporting/__init__.py +4 -0
- aas_core_codegen/java/reporting/_generate.py +248 -0
- aas_core_codegen/java/stringification/__init__.py +4 -0
- aas_core_codegen/java/stringification/_generate.py +212 -0
- aas_core_codegen/java/structure/__init__.py +6 -0
- aas_core_codegen/java/structure/_generate.py +1767 -0
- aas_core_codegen/java/transpilation.py +1111 -0
- aas_core_codegen/java/verification/__init__.py +6 -0
- aas_core_codegen/java/verification/_generate.py +1536 -0
- aas_core_codegen/java/visitation/__init__.py +5 -0
- aas_core_codegen/java/visitation/_generate.py +689 -0
- aas_core_codegen/java/xmlization/__init__.py +4 -0
- aas_core_codegen/java/xmlization/_generate.py +2274 -0
- aas_core_codegen/jsonld/__init__.py +1 -0
- aas_core_codegen/jsonld/main.py +455 -0
- aas_core_codegen/jsonschema/__init__.py +1 -0
- aas_core_codegen/jsonschema/main.py +982 -0
- aas_core_codegen/main.py +245 -0
- aas_core_codegen/naming.py +133 -0
- aas_core_codegen/opcua/__init__.py +1 -0
- aas_core_codegen/opcua/main.py +1525 -0
- aas_core_codegen/opcua/naming.py +126 -0
- aas_core_codegen/parse/__init__.py +46 -0
- aas_core_codegen/parse/_rules.py +796 -0
- aas_core_codegen/parse/_stringify.py +532 -0
- aas_core_codegen/parse/_translate.py +3940 -0
- aas_core_codegen/parse/_types.py +973 -0
- aas_core_codegen/parse/retree/__init__.py +46 -0
- aas_core_codegen/parse/retree/_fix.py +434 -0
- aas_core_codegen/parse/retree/_parse.py +1143 -0
- aas_core_codegen/parse/retree/_render.py +298 -0
- aas_core_codegen/parse/retree/_stringify.py +199 -0
- aas_core_codegen/parse/retree/_types.py +362 -0
- aas_core_codegen/parse/retree/_visitor.py +70 -0
- aas_core_codegen/parse/tree.py +1303 -0
- aas_core_codegen/protobuf/__init__.py +1 -0
- aas_core_codegen/protobuf/common.py +225 -0
- aas_core_codegen/protobuf/description.py +1102 -0
- aas_core_codegen/protobuf/main.py +115 -0
- aas_core_codegen/protobuf/naming.py +143 -0
- aas_core_codegen/protobuf/structure/__init__.py +6 -0
- aas_core_codegen/protobuf/structure/_generate.py +502 -0
- aas_core_codegen/py.typed +1 -0
- aas_core_codegen/python/__init__.py +1 -0
- aas_core_codegen/python/aas_common/__init__.py +4 -0
- aas_core_codegen/python/aas_common/_generate.py +63 -0
- aas_core_codegen/python/common.py +406 -0
- aas_core_codegen/python/constants/__init__.py +5 -0
- aas_core_codegen/python/constants/_generate.py +377 -0
- aas_core_codegen/python/description.py +508 -0
- aas_core_codegen/python/jsonization/__init__.py +4 -0
- aas_core_codegen/python/jsonization/_generate.py +1391 -0
- aas_core_codegen/python/main.py +323 -0
- aas_core_codegen/python/naming.py +255 -0
- aas_core_codegen/python/stringification/__init__.py +4 -0
- aas_core_codegen/python/stringification/_generate.py +129 -0
- aas_core_codegen/python/structure/__init__.py +6 -0
- aas_core_codegen/python/structure/_generate.py +1801 -0
- aas_core_codegen/python/transpilation.py +958 -0
- aas_core_codegen/python/unrolling.py +156 -0
- aas_core_codegen/python/verification/__init__.py +6 -0
- aas_core_codegen/python/verification/_generate.py +1471 -0
- aas_core_codegen/python/xmlization/__init__.py +4 -0
- aas_core_codegen/python/xmlization/_generate.py +3003 -0
- aas_core_codegen/python_protobuf/__init__.py +1 -0
- aas_core_codegen/python_protobuf/main.py +1424 -0
- aas_core_codegen/python_protobuf/naming.py +85 -0
- aas_core_codegen/rdf_shacl/__init__.py +1 -0
- aas_core_codegen/rdf_shacl/_description.py +351 -0
- aas_core_codegen/rdf_shacl/common.py +206 -0
- aas_core_codegen/rdf_shacl/main.py +114 -0
- aas_core_codegen/rdf_shacl/naming.py +145 -0
- aas_core_codegen/rdf_shacl/rdf.py +435 -0
- aas_core_codegen/rdf_shacl/shacl.py +453 -0
- aas_core_codegen/run.py +124 -0
- aas_core_codegen/smoke/__init__.py +1 -0
- aas_core_codegen/smoke/main.py +219 -0
- aas_core_codegen/specific_implementations.py +72 -0
- aas_core_codegen/stringify.py +333 -0
- aas_core_codegen/typescript/__init__.py +1 -0
- aas_core_codegen/typescript/aas_common/__init__.py +4 -0
- aas_core_codegen/typescript/aas_common/_generate.py +472 -0
- aas_core_codegen/typescript/common.py +340 -0
- aas_core_codegen/typescript/constants/__init__.py +5 -0
- aas_core_codegen/typescript/constants/_generate.py +347 -0
- aas_core_codegen/typescript/description.py +530 -0
- aas_core_codegen/typescript/jsonization/__init__.py +4 -0
- aas_core_codegen/typescript/jsonization/_generate.py +1510 -0
- aas_core_codegen/typescript/main.py +258 -0
- aas_core_codegen/typescript/naming.py +189 -0
- aas_core_codegen/typescript/stringification/__init__.py +4 -0
- aas_core_codegen/typescript/stringification/_generate.py +367 -0
- aas_core_codegen/typescript/structure/__init__.py +6 -0
- aas_core_codegen/typescript/structure/_generate.py +2500 -0
- aas_core_codegen/typescript/transpilation.py +1051 -0
- aas_core_codegen/typescript/unrolling.py +159 -0
- aas_core_codegen/typescript/verification/__init__.py +6 -0
- aas_core_codegen/typescript/verification/_generate.py +1578 -0
- aas_core_codegen/xsd/__init__.py +1 -0
- aas_core_codegen/xsd/main.py +1187 -0
- aas_core_codegen/xsd/naming.py +83 -0
- aas_core_codegen/yielding/__init__.py +1 -0
- aas_core_codegen/yielding/flow.py +139 -0
- aas_core_codegen/yielding/linear.py +754 -0
- aas_core_codegen-0.0.16.dist-info/METADATA +211 -0
- aas_core_codegen-0.0.16.dist-info/RECORD +604 -0
- aas_core_codegen-0.0.16.dist-info/WHEEL +5 -0
- aas_core_codegen-0.0.16.dist-info/entry_points.txt +3 -0
- aas_core_codegen-0.0.16.dist-info/licenses/AUTHORS +9 -0
- aas_core_codegen-0.0.16.dist-info/licenses/LICENSE +23 -0
- aas_core_codegen-0.0.16.dist-info/top_level.txt +2 -0
- dev/continuous_integration/__init__.py +1 -0
- dev/continuous_integration/check_help_in_readme.py +208 -0
- dev/continuous_integration/check_init_and_pyproject_consistent.py +154 -0
- dev/continuous_integration/precommit.py +400 -0
- dev/dev_scripts/__init__.py +1 -0
- dev/dev_scripts/compare_rendered_regexes_against_source_py.py +42 -0
- dev/dev_scripts/copy_to_aas_core3_cpp.py +100 -0
- dev/dev_scripts/copy_to_aas_core3_java.py +90 -0
- dev/dev_scripts/download_latest_aas_core_meta_v3.py +114 -0
- dev/dev_scripts/draw_bipartite_graph_based_on_lines.py +37 -0
- dev/dev_scripts/run_tests_with_rerecord.py +69 -0
- dev/dev_scripts/update_to_aas_core_meta.py +174 -0
- dev/integration_tests/input/jsonschema/boilerplate/main.py +55 -0
- dev/integration_tests/input/meta_model.py +38 -0
- dev/integration_tests/input/python/boilerplate/main.py +153 -0
- dev/integration_tests/main.py +258 -0
- dev/test_data/csharp/test_structure/concrete_class_with_descendants/meta_model.py +15 -0
- dev/test_data/csharp/test_structure/constructor_without_arguments/all_properties_optional/meta_model.py +9 -0
- dev/test_data/csharp/test_structure/constructor_without_arguments/no_properties/meta_model.py +6 -0
- dev/test_data/csharp/test_verification/builtin_functions/len/on_list/meta_model.py +20 -0
- dev/test_data/csharp/test_verification/builtin_functions/len/on_str/meta_model.py +16 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_prefix/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/as_suffix/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_group_with_quantifier/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_the_middle/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/in_union/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/single_utf32_literal/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_within_group/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_as_literal/with_quantifier_without_group/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_beginning/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/at_the_end/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/in_the_middle/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/multiple/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/literal/single_with_quantifier/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/mixed_with_non_utf32/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/more_than_two_high_surrogates/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/multiple_utf32_ranges_mixed_with_non_utf32/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/same_high_surrogate_with_quantifier/meta_model.py +8 -0
- dev/test_data/csharp/test_verification/pattern_verification/utf32_in_character_set/range/two_high_surrogates/meta_model.py +8 -0
- dev/test_data/intermediate/expected/class/empty/meta_model.py +6 -0
- dev/test_data/intermediate/expected/class/implementation_specific_method/meta_model.py +8 -0
- dev/test_data/intermediate/expected/class/inheritance/meta_model.py +41 -0
- dev/test_data/intermediate/expected/class/methods_with_contracts/meta_model.py +15 -0
- dev/test_data/intermediate/expected/class/only_method_no_property/meta_model.py +7 -0
- dev/test_data/intermediate/expected/class/only_property_no_method/meta_model.py +9 -0
- dev/test_data/intermediate/expected/constant/constant_set/of_enum/meta_model.py +12 -0
- dev/test_data/intermediate/expected/constant/constant_set/of_str/meta_model.py +4 -0
- dev/test_data/intermediate/expected/constant/constant_set/with_description/meta_model.py +6 -0
- dev/test_data/intermediate/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
- dev/test_data/intermediate/expected/constant/constant_str/only_value/meta_model.py +7 -0
- dev/test_data/intermediate/expected/constant/constant_str/with_description/meta_model.py +5 -0
- dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_in_literal/meta_model.py +20 -0
- dev/test_data/intermediate/expected/documentation/docstring_with_special_characters_outside_literal/meta_model.py +20 -0
- dev/test_data/intermediate/expected/empty/meta_model.py +2 -0
- dev/test_data/intermediate/expected/enumeration/meta_model.py +9 -0
- dev/test_data/intermediate/expected/interface/basic/meta_model.py +14 -0
- dev/test_data/intermediate/expected/interface/empty/meta_model.py +7 -0
- dev/test_data/intermediate/expected/interface/inheritance/meta_model.py +27 -0
- dev/test_data/intermediate/expected/interface/method_signature/meta_model.py +10 -0
- dev/test_data/intermediate/expected/interface/only_constructor/meta_model.py +11 -0
- dev/test_data/intermediate/expected/method/non_mutating/implementation_specific/meta_model.py +12 -0
- dev/test_data/intermediate/expected/method/non_mutating/understood/meta_model.py +11 -0
- dev/test_data/intermediate/expected/type_annotation/atomic/meta_model.py +9 -0
- dev/test_data/intermediate/expected/type_annotation/subscripted/class/meta_model.py +13 -0
- dev/test_data/intermediate/expected/type_annotation/subscripted/primitive/meta_model.py +9 -0
- dev/test_data/intermediate/unexpected/constant_set/of_enum/enumeration_literals_in_subset_outside_of_superset/meta_model.py +20 -0
- dev/test_data/intermediate/unexpected/constant_set/of_enum/invalid_literal/meta_model.py +11 -0
- dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_between_enumeration_and_literal/meta_model.py +30 -0
- dev/test_data/intermediate/unexpected/constant_set/of_enum/mismatch_in_enumerations_between_subset_and_superset/meta_model.py +21 -0
- dev/test_data/intermediate/unexpected/constant_set/of_str/literals_in_subset_outside_of_superset/meta_model.py +18 -0
- dev/test_data/intermediate/unexpected/constant_set/of_str/mismatch_between_type_annotation_and_literals/meta_model.py +10 -0
- dev/test_data/intermediate/unexpected/constant_set/of_str/superset_and_subset_mismatch_in_type/meta_model.py +12 -0
- dev/test_data/intermediate/unexpected/constraints/dangling_constraintref/meta_model.py +18 -0
- dev/test_data/intermediate/unexpected/constraints/duplicate_constraints/meta_model.py +20 -0
- dev/test_data/intermediate/unexpected/documentation/unexpected_documentation_elements/meta_model.py +34 -0
- dev/test_data/intermediate/unexpected/invariant/class_invariant_uses_re/meta_model.py +10 -0
- dev/test_data/intermediate/unexpected/invariant/invariant_of_constrained_primitive_uses_re/meta_model.py +7 -0
- dev/test_data/intermediate/unexpected/invariant/unexpected_argument_count_to_len/meta_model.py +20 -0
- dev/test_data/intermediate/unexpected/invariant/unhandled_built_in_function/meta_model.py +16 -0
- dev/test_data/intermediate/unexpected/method_definitions/non_constant_default/meta_model.py +7 -0
- dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/default_non_none/meta_model.py +16 -0
- dev/test_data/intermediate/unexpected/optional_constructor_arguments_wo_default/no_default/meta_model.py +16 -0
- dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/after_inheritance/meta_model.py +58 -0
- dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/type_missmatch/meta_model.py +9 -0
- dev/test_data/intermediate/unexpected/properties_and_constructor_arguments_do_not_match/within_class/meta_model.py +22 -0
- dev/test_data/jsonschema/test_main/regression_when_len_constraints_on_inherited_property/meta_model.py +28 -0
- dev/test_data/opcua/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
- dev/test_data/opcua/test_main/classes_with_invariants/meta_model.py +21 -0
- dev/test_data/opcua/test_main/concrete_class_with_descendant/meta_model.py +27 -0
- dev/test_data/opcua/test_main/concrete_class_with_enum/meta_model.py +21 -0
- dev/test_data/opcua/test_main/concrete_class_with_list_of_instances/meta_model.py +21 -0
- dev/test_data/opcua/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
- dev/test_data/opcua/test_main/concrete_class_with_string/meta_model.py +13 -0
- dev/test_data/opcua/test_main/constrained_primitive/meta_model.py +20 -0
- dev/test_data/opcua/test_main/multiple_inheritance/meta_model.py +25 -0
- dev/test_data/parse/expected/constant/constant_set/of_enum/meta_model.py +12 -0
- dev/test_data/parse/expected/constant/constant_set/of_str/meta_model.py +4 -0
- dev/test_data/parse/expected/constant/constant_set/with_description/meta_model.py +6 -0
- dev/test_data/parse/expected/constant/constant_set/with_superset_of/meta_model.py +14 -0
- dev/test_data/parse/expected/constant/constant_str/only_value/meta_model.py +7 -0
- dev/test_data/parse/expected/constant/constant_str/with_description/meta_model.py +5 -0
- dev/test_data/parse/expected/enum/ok/meta_model.py +15 -0
- dev/test_data/parse/expected/implementation_specific_class/properties_and_methods_in_implementation_specific_class/meta_model.py +17 -0
- dev/test_data/parse/expected/inheritance/basic/meta_model.py +11 -0
- dev/test_data/parse/expected/inheritance/diamond/meta_model.py +26 -0
- dev/test_data/parse/expected/inheritance/inheritance_from_concrete_class/meta_model.py +10 -0
- dev/test_data/parse/expected/invariants/in_relation/meta_model.py +16 -0
- dev/test_data/parse/expected/method/arguments/meta_model.py +7 -0
- dev/test_data/parse/expected/method/basic/meta_model.py +7 -0
- dev/test_data/parse/expected/method/contracts/condition_as_keyword_argument/meta_model.py +8 -0
- dev/test_data/parse/expected/method/contracts/condition_as_positional_argument/meta_model.py +8 -0
- dev/test_data/parse/expected/method/contracts/description_as_keyword_argument/meta_model.py +8 -0
- dev/test_data/parse/expected/method/contracts/description_as_positional_argument/meta_model.py +8 -0
- dev/test_data/parse/expected/method/contracts/multiple_contracts_in_order/meta_model.py +17 -0
- dev/test_data/parse/expected/method/contracts/postcondition/basic/meta_model.py +10 -0
- dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_keyword_arguments/meta_model.py +9 -0
- dev/test_data/parse/expected/method/contracts/postcondition/snapshot/with_positional_arguments/meta_model.py +9 -0
- dev/test_data/parse/expected/method/default/meta_model.py +9 -0
- dev/test_data/parse/expected/method/description/meta_model.py +8 -0
- dev/test_data/parse/expected/method/is_implementation_specific/meta_model.py +8 -0
- dev/test_data/parse/expected/method/non_mutating/meta_model.py +11 -0
- dev/test_data/parse/expected/method/returns_none/meta_model.py +7 -0
- dev/test_data/parse/expected/method/returns_something/meta_model.py +7 -0
- dev/test_data/parse/expected/single_class/description/meta_model.py +12 -0
- dev/test_data/parse/expected/single_class/empty/meta_model.py +6 -0
- dev/test_data/parse/expected/single_class/property/description/meta_model.py +14 -0
- dev/test_data/parse/expected/single_class/property/mandatory/meta_model.py +6 -0
- dev/test_data/parse/expected/single_class/property/optional/meta_model.py +6 -0
- dev/test_data/parse/expected/single_class/property/recursion_to_entity/meta_model.py +6 -0
- dev/test_data/parse/unexpected/class_decorators/non_name_decorator/meta_model.py +7 -0
- dev/test_data/parse/unexpected/class_decorators/unknown_decorator/meta_model.py +7 -0
- dev/test_data/parse/unexpected/class_definitions/is_abstract_and_implementation_specific/meta_model.py +8 -0
- dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_before_a_method/meta_model.py +11 -0
- dev/test_data/parse/unexpected/class_definitions/unexpected_docstring_for_a_pass/meta_model.py +9 -0
- dev/test_data/parse/unexpected/class_definitions/unexpected_double_description_for_a_property/meta_model.py +10 -0
- dev/test_data/parse/unexpected/class_inheritances/inheriting_from_implementation_specific_parent/meta_model.py +20 -0
- dev/test_data/parse/unexpected/class_inheritances/non_name_super_class/meta_model.py +6 -0
- dev/test_data/parse/unexpected/enum/expression_as_assignment_value/meta_model.py +6 -0
- dev/test_data/parse/unexpected/enum/non_assignment/meta_model.py +8 -0
- dev/test_data/parse/unexpected/enum/non_string_literal/meta_model.py +6 -0
- dev/test_data/parse/unexpected/enum/unexpected_inheritance/meta_model.py +6 -0
- dev/test_data/parse/unexpected/method_contracts/contract/non_lambda_condition/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/contract/non_string_literal_description/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/contract/without_any_arguments/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/contract/without_condition/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/postcondition/OLD_in_postcondition_without_snapshot/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/postcondition/argument_missing_in_function/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/precondition/argument_missing_in_function/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/snapshot/argument_missing_in_function/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/snapshot/capture_not_a_lambda/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/snapshot/invalid_name/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/snapshot/name_not_a_string_literal/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_capture/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_contracts/snapshot/without_a_name/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_constructor/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_decorators/non_mutating/non_mutating_verification_function/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_decorators/non_name_decorator/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_decorators/unknown_call_decorator/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_decorators/unknown_name_decorator/meta_model.py +8 -0
- dev/test_data/parse/unexpected/method_definitions/argument_with_final/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/argument_without_a_type_annotation/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/default_for_self/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/dunder/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/init_with_return_type/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/with_keyword_only_arguments/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/with_positional_arguments/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/with_type_annotation_for_self/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/with_variable_arguments/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/with_variable_keyword_arguments/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/without_arguments/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/without_self/meta_model.py +7 -0
- dev/test_data/parse/unexpected/method_definitions/without_type_annotation_for_result/meta_model.py +7 -0
- dev/test_data/parse/unexpected/property_definitions/final_without_subscript/meta_model.py +6 -0
- dev/test_data/parse/unexpected/property_definitions/nested_final/meta_model.py +6 -0
- dev/test_data/parse/unexpected/property_definitions/non_simple/meta_model.py +6 -0
- dev/test_data/parse/unexpected/property_definitions/unexpected_assignment/meta_model.py +6 -0
- dev/test_data/parse/unexpected/property_definitions/unexpected_non_name_property/meta_model.py +6 -0
- dev/test_data/parse/unexpected/property_definitions/without_type_annotation/meta_model.py +6 -0
- dev/test_data/parse/unexpected/symbol_table/constant_set_with_a_non_set_subset/meta_model.py +6 -0
- dev/test_data/parse/unexpected/symbol_table/dangling_inheritance/meta_model.py +6 -0
- dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_a_property/meta_model.py +6 -0
- dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_an_argument/meta_model.py +7 -0
- dev/test_data/parse/unexpected/symbol_table/dangling_reference_in_type_annotation_of_constant_set/meta_model.py +6 -0
- dev/test_data/parse/unexpected/symbol_table/dangling_subset_in_constant_set/meta_model.py +4 -0
- dev/test_data/parse/unexpected/symbol_table/inheritance_from_non_class/meta_model.py +10 -0
- dev/test_data/parse_retree/expected/character_set/common_escaping/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/complementing/double_caret/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/complementing/multiple_ranges/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/complementing/suffix_dash/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/escape_first_caret/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/literals_which_need_no_escaping_in_characters_set_but_need_escaping_outside/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/multiple_ranges/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/single_literal/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/single_range/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/unescaped_dash/only_dash/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/unescaped_dash/prefix_dash/source.py +1 -0
- dev/test_data/parse_retree/expected/character_set/unescaped_dash/suffix_dash/source.py +1 -0
- dev/test_data/parse_retree/expected/dot/source.py +1 -0
- dev/test_data/parse_retree/expected/empty/group/source.py +1 -0
- dev/test_data/parse_retree/expected/empty/group_in_a_group/source.py +1 -0
- dev/test_data/parse_retree/expected/empty/group_of_union_of_empty_concatenations/source.py +1 -0
- dev/test_data/parse_retree/expected/empty/regex/source.py +1 -0
- dev/test_data/parse_retree/expected/empty/union_of_empty_concatenations/source.py +1 -0
- dev/test_data/parse_retree/expected/escaped_literals/source.py +1 -0
- dev/test_data/parse_retree/expected/formatted_value/at_the_beginning/source.py +1 -0
- dev/test_data/parse_retree/expected/formatted_value/at_the_end/source.py +1 -0
- dev/test_data/parse_retree/expected/formatted_value/in_the_middle/source.py +1 -0
- dev/test_data/parse_retree/expected/formatted_value/single_formatted_value/source.py +1 -0
- dev/test_data/parse_retree/expected/literal/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/greedy/at_least_3/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/greedy/at_least_one/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/greedy/at_most_3/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/greedy/exactly_3/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/greedy/maybe/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/greedy/zero_or_more/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_3/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/non_greedy/at_least_one/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/non_greedy/at_most_3/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/non_greedy/exactly_3/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/non_greedy/maybe/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/non_greedy/zero_or_more/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/on_a_character_set/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/on_a_formatted_value/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/on_a_group/source.py +1 -0
- dev/test_data/parse_retree/expected/quantifier/on_a_literal/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/double_end_symbol/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/double_start_symbol/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/end_symbol_in_the_middle/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/only_start_symbol/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/only_stop_symbol/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_at_the_beginning/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/start_symbol_in_the_middle/source.py +1 -0
- dev/test_data/parse_retree/expected/start_and_stop_symbols/stop_symbol_at_the_end/source.py +1 -0
- dev/test_data/parse_retree/expected/union/of_character_sets/source.py +1 -0
- dev/test_data/parse_retree/expected/union/of_groups/source.py +1 -0
- dev/test_data/parse_retree/expected/union/of_string_literals/source.py +1 -0
- dev/test_data/parse_retree/expected/union/within_group/source.py +1 -0
- dev/test_data/parse_retree/expected/whitespace/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/Uxxxxxxxx_out_of_range/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/only_backslash/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_Uxxxxxxxx/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_uxxxx/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/short_x/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unexpected_escaping/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/digit/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_digit/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_whitespace/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/not_word/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/whitespace/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/character_literal/unhandled/word/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/Uxxxxxxxx_out_of_range/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/only_backslash/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_Uxxxxxxxx/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_uxxxx/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/short_x/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unexpected_escaping/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/digit/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_digit/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_whitespace/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/not_word/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/whitespace/source.py +1 -0
- dev/test_data/parse_retree/unexpected/improper_escaping/range_character/unhandled/word/source.py +1 -0
- dev/test_data/parse_retree/unexpected/invalid_character_range/source.py +1 -0
- dev/test_data/parse_retree/unexpected/invalid_quantifier/at_least_x/source.py +1 -0
- dev/test_data/parse_retree/unexpected/invalid_quantifier/between_3_and_x/source.py +1 -0
- dev/test_data/parse_retree/unexpected/invalid_quantifier/exactly_x/source.py +1 -0
- dev/test_data/parse_retree/unexpected/unhandled_group_directives/source.py +1 -0
- dev/test_data/parse_retree/unexpected/unterminated/character_set/source.py +1 -0
- dev/test_data/parse_retree/unexpected/unterminated/group/source.py +1 -0
- dev/test_data/parse_retree/unexpected/unterminated/group_of_union_of_empty_concatenations/source.py +1 -0
- dev/test_data/parse_retree/unexpected/unterminated/quantifier/source.py +1 -0
- dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_comma/source.py +1 -0
- dev/test_data/parse_retree/unexpected/unterminated/quantifier_with_number_and_comma/source.py +1 -0
- dev/test_data/proto/test_main/expected/abstract_and_concrete_classes/meta_model.py +37 -0
- dev/test_data/proto/test_main/expected/concrete_class_with_descendants/meta_model.py +30 -0
- dev/test_data/proto/test_main/expected/concrete_class_with_enum/meta_model.py +21 -0
- dev/test_data/proto/test_main/expected/concrete_class_with_list_of_instances/meta_model.py +21 -0
- dev/test_data/proto/test_main/expected/concrete_class_with_primitive_attributes/meta_model.py +41 -0
- dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/expected_output/pbization.py +532 -0
- dev/test_data/python_protobuf/test_main/abstract_and_concrete_classes/meta_model.py +37 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/expected_output/pbization.py +527 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_descendant/meta_model.py +27 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_enum/expected_output/pbization.py +290 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_enum/meta_model.py +21 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/expected_output/pbization.py +328 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_list_of_instances/meta_model.py +23 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/expected_output/pbization.py +274 -0
- dev/test_data/python_protobuf/test_main/concrete_class_with_primitive_attributes/meta_model.py +41 -0
- dev/test_data/rdf_shacl/test_main/expected/regression_when_lang_string_class_is_missing/meta_model.py +29 -0
- dev/test_data/rdf_shacl/test_main/expected/regression_when_len_constraints_on_inherited_property/meta_model.py +27 -0
- dev/test_data/rdf_shacl/test_main/unexpected/regression_len_constraint_on_class_property/meta_model.py +61 -0
- dev/test_data/real_meta_models/aas_core_meta.v3.py +5721 -0
- dev/test_data/smoke/test_main/unexpected/infer_for_schema_error/meta_model.py +12 -0
- dev/test_data/smoke/test_main/unexpected/intermediate_error/meta_model.py +18 -0
- dev/test_data/smoke/test_main/unexpected/parse_error/meta_model.py +5 -0
- dev/test_data/smoke/test_main/unexpected/pattern_verification_unparsable_regex/direct_match/meta_model.py +8 -0
- dev/test_data/smoke/test_main/unexpected/type_error/meta_model.py +18 -0
- dev/tests/__init__.py +1 -0
- dev/tests/common.py +197 -0
- dev/tests/cpp/__init__.py +0 -0
- dev/tests/cpp/test_common.py +32 -0
- dev/tests/cpp/test_main.py +144 -0
- dev/tests/cpp/test_pattern.py +188 -0
- dev/tests/cpp/test_verification.py +189 -0
- dev/tests/cpp/test_yielding.py +225 -0
- dev/tests/csharp/__init__.py +0 -0
- dev/tests/csharp/live_test_main.py +109 -0
- dev/tests/csharp/test_common.py +28 -0
- dev/tests/csharp/test_description.py +684 -0
- dev/tests/csharp/test_main.py +129 -0
- dev/tests/csharp/test_structure.py +93 -0
- dev/tests/csharp/test_verification.py +82 -0
- dev/tests/description.py +29 -0
- dev/tests/golang/__init__.py +0 -0
- dev/tests/golang/test_common.py +78 -0
- dev/tests/golang/test_main.py +128 -0
- dev/tests/infer_for_schema/__init__.py +0 -0
- dev/tests/infer_for_schema/common.py +47 -0
- dev/tests/infer_for_schema/test_len_on_properties.py +955 -0
- dev/tests/infer_for_schema/test_len_on_self.py +580 -0
- dev/tests/infer_for_schema/test_patterns_on_properties.py +686 -0
- dev/tests/infer_for_schema/test_patterns_on_self.py +258 -0
- dev/tests/infer_for_schema/test_property_in_set_of_enumeration_literals.py +600 -0
- dev/tests/infer_for_schema/test_property_in_set_of_primitives.py +549 -0
- dev/tests/intermediate/__init__.py +0 -0
- dev/tests/intermediate/test_constructor.py +719 -0
- dev/tests/intermediate/test_hierarchy.py +221 -0
- dev/tests/intermediate/test_revm.py +134 -0
- dev/tests/intermediate/test_translate.py +337 -0
- dev/tests/intermediate/test_type_inference.py +333 -0
- dev/tests/intermediate/test_types.py +169 -0
- dev/tests/java/__init__.py +0 -0
- dev/tests/java/test_common.py +20 -0
- dev/tests/java/test_description.py +128 -0
- dev/tests/java/test_main.py +234 -0
- dev/tests/jsonld_context/test_main.py +79 -0
- dev/tests/opcua/__init__.py +3 -0
- dev/tests/opcua/test_main.py +110 -0
- dev/tests/our_jsonschema/__init__.py +3 -0
- dev/tests/our_jsonschema/test_main.py +232 -0
- dev/tests/parse/__init__.py +0 -0
- dev/tests/parse/test_parse.py +503 -0
- dev/tests/parse/test_retree.py +272 -0
- dev/tests/proto/__init__.py +0 -0
- dev/tests/proto/test_main.py +112 -0
- dev/tests/python/__init__.py +0 -0
- dev/tests/python/test_common.py +124 -0
- dev/tests/python/test_main.py +126 -0
- dev/tests/python/test_xml_playground.py +254 -0
- dev/tests/python_protobuf/__init__.py +0 -0
- dev/tests/python_protobuf/test_main.py +111 -0
- dev/tests/rdf_shacl/__init__.py +0 -0
- dev/tests/rdf_shacl/test_common.py +32 -0
- dev/tests/rdf_shacl/test_description.py +223 -0
- dev/tests/rdf_shacl/test_main.py +194 -0
- dev/tests/smoke/__init__.py +0 -0
- dev/tests/smoke/test_main.py +83 -0
- dev/tests/test_common.py +94 -0
- dev/tests/typescript/__init__.py +0 -0
- dev/tests/typescript/test_common.py +108 -0
- dev/tests/typescript/test_main.py +125 -0
- dev/tests/xsd/__init__.py +0 -0
- dev/tests/xsd/test_main.py +227 -0
- dev/tests/yielding/__init__.py +0 -0
- dev/tests/yielding/test_linear.py +558 -0
|
@@ -0,0 +1,579 @@
|
|
|
1
|
+
"""Generate the visitor classes based on the intermediate representation."""
|
|
2
|
+
|
|
3
|
+
import io
|
|
4
|
+
import textwrap
|
|
5
|
+
from typing import Tuple, Optional, List
|
|
6
|
+
|
|
7
|
+
from icontract import ensure
|
|
8
|
+
|
|
9
|
+
import aas_core_codegen.csharp.common as csharp_common
|
|
10
|
+
import aas_core_codegen.csharp.naming as csharp_naming
|
|
11
|
+
from aas_core_codegen import intermediate
|
|
12
|
+
from aas_core_codegen.common import Error, Stripped, Rstripped, Identifier
|
|
13
|
+
from aas_core_codegen.csharp.common import INDENT as I, INDENT2 as II
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
# region Generate
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _generate_ivisitor(symbol_table: intermediate.SymbolTable) -> Stripped:
|
|
20
|
+
"""Generate the visitor interface."""
|
|
21
|
+
blocks = [] # type: List[Stripped]
|
|
22
|
+
|
|
23
|
+
# Abstract classes have no particular implementation, so we do not visit
|
|
24
|
+
# them.
|
|
25
|
+
for cls in symbol_table.concrete_classes:
|
|
26
|
+
# NOTE (mristin, 2023-02-08): Operate on interfaces instead of classes
|
|
27
|
+
# We operate on *interfaces* instead of concrete classes to allow for
|
|
28
|
+
# custom extensions and wrappers around our model classes.
|
|
29
|
+
#
|
|
30
|
+
# Originally, we used type overloading to dispatch the visit calls. After we
|
|
31
|
+
# decided to support custom wrappers and enhancements to our classes, we had
|
|
32
|
+
# to switch here to interfaces instead of concrete classes. The type
|
|
33
|
+
# overloading does not work anymore in this setting, as descendants of
|
|
34
|
+
# *concrete* classes would be wrongly dispatched. That is why we dispatch
|
|
35
|
+
# explicitly, by having different visit method names instead of mere
|
|
36
|
+
# type overloads.
|
|
37
|
+
|
|
38
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
39
|
+
visit_name = csharp_naming.method_name(Identifier(f"visit_{cls.name}"))
|
|
40
|
+
|
|
41
|
+
blocks.append(
|
|
42
|
+
Stripped(
|
|
43
|
+
f"""\
|
|
44
|
+
public void {visit_name}(
|
|
45
|
+
{I}{interface_name} that
|
|
46
|
+
);"""
|
|
47
|
+
)
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
writer = io.StringIO()
|
|
51
|
+
writer.write(
|
|
52
|
+
f"""\
|
|
53
|
+
/// <summary>
|
|
54
|
+
/// Define the interface for a visitor which visits the instances of the model.
|
|
55
|
+
/// </summary>
|
|
56
|
+
/// <remarks>
|
|
57
|
+
/// When you use the visitor, please always call the main dispatching method
|
|
58
|
+
/// <see cref="Visit" />. You should most probably never call the <c>Visit*</c>
|
|
59
|
+
/// methods directly. They are only made public so that model classes can access them.
|
|
60
|
+
/// </remarks>
|
|
61
|
+
public interface IVisitor
|
|
62
|
+
{{
|
|
63
|
+
{I}public void Visit(IClass that);
|
|
64
|
+
"""
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
for i, block in enumerate(blocks):
|
|
68
|
+
if i > 0:
|
|
69
|
+
writer.write("\n")
|
|
70
|
+
writer.write(textwrap.indent(block, I))
|
|
71
|
+
|
|
72
|
+
writer.write("\n} // public interface IVisitor")
|
|
73
|
+
|
|
74
|
+
return Stripped(writer.getvalue())
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
def _generate_visitor_through(symbol_table: intermediate.SymbolTable) -> Stripped:
|
|
78
|
+
"""Generate the visitor that simply iterates over the instances."""
|
|
79
|
+
blocks = [
|
|
80
|
+
Stripped(
|
|
81
|
+
f"""\
|
|
82
|
+
public virtual void Visit(IClass that)
|
|
83
|
+
{{
|
|
84
|
+
{I}that.Accept(this);
|
|
85
|
+
}}"""
|
|
86
|
+
)
|
|
87
|
+
] # type: List[Stripped]
|
|
88
|
+
|
|
89
|
+
# Abstract classes are modeled as interfaces in C#, so we do not transform
|
|
90
|
+
# them.
|
|
91
|
+
for cls in symbol_table.concrete_classes:
|
|
92
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
93
|
+
|
|
94
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
95
|
+
visit_name = csharp_naming.method_name(Identifier(f"visit_{cls.name}"))
|
|
96
|
+
|
|
97
|
+
blocks.append(
|
|
98
|
+
Stripped(
|
|
99
|
+
f"""\
|
|
100
|
+
public virtual void {visit_name}(
|
|
101
|
+
{I}{interface_name} that
|
|
102
|
+
)
|
|
103
|
+
{{
|
|
104
|
+
{I}// Just descend through, do nothing with <c>that</c>
|
|
105
|
+
{I}foreach (var something in that.DescendOnce())
|
|
106
|
+
{I}{{
|
|
107
|
+
{II}Visit(something);
|
|
108
|
+
{I}}}
|
|
109
|
+
}}"""
|
|
110
|
+
)
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
writer = io.StringIO()
|
|
114
|
+
writer.write(
|
|
115
|
+
"""\
|
|
116
|
+
/// <summary>
|
|
117
|
+
/// Just descend through the instances without any action.
|
|
118
|
+
/// </summary>
|
|
119
|
+
/// <remarks>
|
|
120
|
+
/// This class is meaningless for itself. However, it is a good base if you
|
|
121
|
+
/// want to descend through instances and apply actions only on a subset of
|
|
122
|
+
/// classes.
|
|
123
|
+
/// </remarks>
|
|
124
|
+
public class VisitorThrough : IVisitor
|
|
125
|
+
{
|
|
126
|
+
"""
|
|
127
|
+
)
|
|
128
|
+
|
|
129
|
+
for i, block in enumerate(blocks):
|
|
130
|
+
if i > 0:
|
|
131
|
+
writer.write("\n\n")
|
|
132
|
+
writer.write(textwrap.indent(block, I))
|
|
133
|
+
|
|
134
|
+
writer.write("\n} // public class VisitorThrough")
|
|
135
|
+
|
|
136
|
+
return Stripped(writer.getvalue())
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
def _generate_abstract_visitor(symbol_table: intermediate.SymbolTable) -> Stripped:
|
|
140
|
+
"""Generate the visitor that performs double-dispatch."""
|
|
141
|
+
blocks = [
|
|
142
|
+
Stripped(
|
|
143
|
+
f"""\
|
|
144
|
+
public virtual void Visit(IClass that)
|
|
145
|
+
{{
|
|
146
|
+
{I}that.Accept(this);
|
|
147
|
+
}}"""
|
|
148
|
+
)
|
|
149
|
+
] # type: List[Stripped]
|
|
150
|
+
|
|
151
|
+
# Abstract classes have no particular implementation, so we do not transform
|
|
152
|
+
# them.
|
|
153
|
+
for cls in symbol_table.concrete_classes:
|
|
154
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
155
|
+
|
|
156
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
157
|
+
visit_name = csharp_naming.method_name(Identifier(f"visit_{cls.name}"))
|
|
158
|
+
|
|
159
|
+
blocks.append(
|
|
160
|
+
Stripped(
|
|
161
|
+
f"""\
|
|
162
|
+
public abstract void {visit_name}(
|
|
163
|
+
{I}{interface_name} that
|
|
164
|
+
);"""
|
|
165
|
+
)
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
writer = io.StringIO()
|
|
169
|
+
writer.write(
|
|
170
|
+
"""\
|
|
171
|
+
/// <summary>
|
|
172
|
+
/// Perform double-dispatch to visit the concrete instances.
|
|
173
|
+
/// </summary>
|
|
174
|
+
public abstract class AbstractVisitor : IVisitor
|
|
175
|
+
{
|
|
176
|
+
"""
|
|
177
|
+
)
|
|
178
|
+
|
|
179
|
+
for i, block in enumerate(blocks):
|
|
180
|
+
if i > 0:
|
|
181
|
+
writer.write("\n")
|
|
182
|
+
writer.write(textwrap.indent(block, I))
|
|
183
|
+
|
|
184
|
+
writer.write("\n} // public abstract class AbstractVisitor")
|
|
185
|
+
|
|
186
|
+
return Stripped(writer.getvalue())
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
def _generate_ivisitor_with_context(symbol_table: intermediate.SymbolTable) -> Stripped:
|
|
190
|
+
"""Generate the interface for the visitor with context."""
|
|
191
|
+
blocks = [] # type: List[Stripped]
|
|
192
|
+
|
|
193
|
+
# Abstract classes have no particular implementation, so we do not visit
|
|
194
|
+
# them.
|
|
195
|
+
for cls in symbol_table.concrete_classes:
|
|
196
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
197
|
+
|
|
198
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
199
|
+
visit_name = csharp_naming.method_name(Identifier(f"visit_{cls.name}"))
|
|
200
|
+
|
|
201
|
+
blocks.append(
|
|
202
|
+
Stripped(
|
|
203
|
+
f"""\
|
|
204
|
+
public void {visit_name}(
|
|
205
|
+
{I}{interface_name} that,
|
|
206
|
+
{I}TContext context
|
|
207
|
+
);"""
|
|
208
|
+
)
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
writer = io.StringIO()
|
|
212
|
+
writer.write(
|
|
213
|
+
f"""\
|
|
214
|
+
/// <summary>
|
|
215
|
+
/// Define the interface for a visitor which visits the instances of the model.
|
|
216
|
+
/// </summary>
|
|
217
|
+
/// <remarks>
|
|
218
|
+
/// When you use the visitor, please always call the main dispatching method
|
|
219
|
+
/// <see cref="Visit" />. You should most probably never call the <c>Visit*</c>
|
|
220
|
+
/// methods directly. They are only made public so that model classes can access them.
|
|
221
|
+
/// </remarks>
|
|
222
|
+
/// <typeparam name="TContext">Context type</typeparam>
|
|
223
|
+
public interface IVisitorWithContext<in TContext>
|
|
224
|
+
{{
|
|
225
|
+
{I}public void Visit(IClass that, TContext context);
|
|
226
|
+
"""
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
for i, block in enumerate(blocks):
|
|
230
|
+
if i > 0:
|
|
231
|
+
writer.write("\n")
|
|
232
|
+
writer.write(textwrap.indent(block, I))
|
|
233
|
+
|
|
234
|
+
writer.write("\n} // public interface IVisitorWithContext")
|
|
235
|
+
|
|
236
|
+
return Stripped(writer.getvalue())
|
|
237
|
+
|
|
238
|
+
|
|
239
|
+
def _generate_abstract_visitor_with_context(
|
|
240
|
+
symbol_table: intermediate.SymbolTable,
|
|
241
|
+
) -> Stripped:
|
|
242
|
+
"""Generate the visitor with context that performs double-dispatch."""
|
|
243
|
+
blocks = [
|
|
244
|
+
Stripped(
|
|
245
|
+
f"""\
|
|
246
|
+
public virtual void Visit(IClass that, TContext context)
|
|
247
|
+
{{
|
|
248
|
+
{I}that.Accept(this, context);
|
|
249
|
+
}}"""
|
|
250
|
+
)
|
|
251
|
+
] # type: List[Stripped]
|
|
252
|
+
|
|
253
|
+
# Abstract classes have no particular implementation, so we do not visit
|
|
254
|
+
# them.
|
|
255
|
+
for cls in symbol_table.concrete_classes:
|
|
256
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
257
|
+
|
|
258
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
259
|
+
visit_name = csharp_naming.method_name(Identifier(f"visit_{cls.name}"))
|
|
260
|
+
|
|
261
|
+
blocks.append(
|
|
262
|
+
Stripped(
|
|
263
|
+
f"""\
|
|
264
|
+
public abstract void {visit_name}(
|
|
265
|
+
{I}{interface_name} that,
|
|
266
|
+
{I}TContext context
|
|
267
|
+
);"""
|
|
268
|
+
)
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
writer = io.StringIO()
|
|
272
|
+
writer.write(
|
|
273
|
+
f"""\
|
|
274
|
+
/// <summary>
|
|
275
|
+
/// Perform double-dispatch to visit the concrete instances
|
|
276
|
+
/// with context.
|
|
277
|
+
/// </summary>
|
|
278
|
+
/// <typeparam name="TContext">Context type</typeparam>
|
|
279
|
+
public abstract class AbstractVisitorWithContext<TContext>
|
|
280
|
+
{I}: IVisitorWithContext<TContext>
|
|
281
|
+
{{
|
|
282
|
+
"""
|
|
283
|
+
)
|
|
284
|
+
|
|
285
|
+
for i, block in enumerate(blocks):
|
|
286
|
+
if i > 0:
|
|
287
|
+
writer.write("\n")
|
|
288
|
+
writer.write(textwrap.indent(block, I))
|
|
289
|
+
|
|
290
|
+
writer.write("\n} // public abstract class AbstractVisitorWithContext")
|
|
291
|
+
|
|
292
|
+
return Stripped(writer.getvalue())
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
def _generate_itransformer(symbol_table: intermediate.SymbolTable) -> Stripped:
|
|
296
|
+
"""Generate the transformer interface."""
|
|
297
|
+
blocks = [] # type: List[Stripped]
|
|
298
|
+
|
|
299
|
+
# Abstract classes have no particular implementation, so we do not transform
|
|
300
|
+
# them.
|
|
301
|
+
for cls in symbol_table.concrete_classes:
|
|
302
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
303
|
+
|
|
304
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
305
|
+
transform_name = csharp_naming.method_name(Identifier(f"transform_{cls.name}"))
|
|
306
|
+
|
|
307
|
+
blocks.append(
|
|
308
|
+
Stripped(
|
|
309
|
+
f"""\
|
|
310
|
+
public T {transform_name}(
|
|
311
|
+
{I}{interface_name} that
|
|
312
|
+
);"""
|
|
313
|
+
)
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
writer = io.StringIO()
|
|
317
|
+
writer.write(
|
|
318
|
+
f"""\
|
|
319
|
+
/// <summary>
|
|
320
|
+
/// Define the interface for a transformer which transforms recursively
|
|
321
|
+
/// the instances into something else.
|
|
322
|
+
/// </summary>
|
|
323
|
+
/// <remarks>
|
|
324
|
+
/// When you use the transformer, please always call the main dispatching method
|
|
325
|
+
/// <see cref="Transform" />. You should most probably never call the <c>Transform*</c>
|
|
326
|
+
/// methods directly. They are only made public so that model classes can access them.
|
|
327
|
+
/// </remarks>
|
|
328
|
+
/// <typeparam name="T">The type of the transformation result</typeparam>
|
|
329
|
+
public interface ITransformer<out T>
|
|
330
|
+
{{
|
|
331
|
+
{I}public T Transform(IClass that);
|
|
332
|
+
"""
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
for i, block in enumerate(blocks):
|
|
336
|
+
if i > 0:
|
|
337
|
+
writer.write("\n")
|
|
338
|
+
writer.write(textwrap.indent(block, I))
|
|
339
|
+
|
|
340
|
+
writer.write("\n} // public interface ITransformer")
|
|
341
|
+
|
|
342
|
+
return Stripped(writer.getvalue())
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
def _generate_abstract_transformer(symbol_table: intermediate.SymbolTable) -> Stripped:
|
|
346
|
+
"""Generate the most abstract transformer that merely double-dispatches."""
|
|
347
|
+
blocks = [
|
|
348
|
+
Stripped(
|
|
349
|
+
f"""\
|
|
350
|
+
public virtual T Transform(IClass that)
|
|
351
|
+
{{
|
|
352
|
+
{I}return that.Transform(this);
|
|
353
|
+
}}"""
|
|
354
|
+
)
|
|
355
|
+
] # type: List[Stripped]
|
|
356
|
+
|
|
357
|
+
# Abstract classes have no particular implementation, so we do not transform
|
|
358
|
+
# them.
|
|
359
|
+
for cls in symbol_table.concrete_classes:
|
|
360
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
361
|
+
|
|
362
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
363
|
+
transform_name = csharp_naming.method_name(Identifier(f"transform_{cls.name}"))
|
|
364
|
+
|
|
365
|
+
blocks.append(
|
|
366
|
+
Stripped(
|
|
367
|
+
f"""\
|
|
368
|
+
public abstract T {transform_name}(
|
|
369
|
+
{I}{interface_name} that
|
|
370
|
+
);"""
|
|
371
|
+
)
|
|
372
|
+
)
|
|
373
|
+
|
|
374
|
+
writer = io.StringIO()
|
|
375
|
+
writer.write(
|
|
376
|
+
"""\
|
|
377
|
+
/// <summary>
|
|
378
|
+
/// Perform double-dispatch to transform recursively
|
|
379
|
+
/// the instances into something else.
|
|
380
|
+
/// </summary>
|
|
381
|
+
/// <typeparam name="T">The type of the transformation result</typeparam>
|
|
382
|
+
public abstract class AbstractTransformer<T> : ITransformer<T>
|
|
383
|
+
{
|
|
384
|
+
"""
|
|
385
|
+
)
|
|
386
|
+
|
|
387
|
+
for i, block in enumerate(blocks):
|
|
388
|
+
if i > 0:
|
|
389
|
+
writer.write("\n\n")
|
|
390
|
+
writer.write(textwrap.indent(block, I))
|
|
391
|
+
|
|
392
|
+
writer.write("\n} // public abstract class AbstractTransformer")
|
|
393
|
+
|
|
394
|
+
return Stripped(writer.getvalue())
|
|
395
|
+
|
|
396
|
+
|
|
397
|
+
def _generate_itransformer_with_context(
|
|
398
|
+
symbol_table: intermediate.SymbolTable,
|
|
399
|
+
) -> Stripped:
|
|
400
|
+
"""Generate the interface for the transformer with context."""
|
|
401
|
+
blocks = [] # type: List[Stripped]
|
|
402
|
+
|
|
403
|
+
# Abstract classes have no particular implementation, so we do not transform
|
|
404
|
+
# them.
|
|
405
|
+
for cls in symbol_table.concrete_classes:
|
|
406
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
407
|
+
|
|
408
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
409
|
+
transform_name = csharp_naming.method_name(Identifier(f"transform_{cls.name}"))
|
|
410
|
+
|
|
411
|
+
blocks.append(
|
|
412
|
+
Stripped(
|
|
413
|
+
f"""\
|
|
414
|
+
public T {transform_name}(
|
|
415
|
+
{I}{interface_name} that,
|
|
416
|
+
{I}TContext context
|
|
417
|
+
);"""
|
|
418
|
+
)
|
|
419
|
+
)
|
|
420
|
+
|
|
421
|
+
writer = io.StringIO()
|
|
422
|
+
writer.write(
|
|
423
|
+
f"""\
|
|
424
|
+
/// <summary>
|
|
425
|
+
/// Define the interface for a transformer which recursively transforms
|
|
426
|
+
/// the instances into something else while the context is passed along.
|
|
427
|
+
/// </summary>
|
|
428
|
+
/// <remarks>
|
|
429
|
+
/// When you use the transformer, please always call the main dispatching method
|
|
430
|
+
/// <see cref="Transform" />. You should most probably never call the <c>Transform*</c>
|
|
431
|
+
/// methods directly. They are only made public so that model classes can access them.
|
|
432
|
+
/// </remarks>
|
|
433
|
+
/// <typeparam name="TContext">Type of the transformation context</typeparam>
|
|
434
|
+
/// <typeparam name="T">The type of the transformation result</typeparam>
|
|
435
|
+
public interface ITransformerWithContext<in TContext, out T>
|
|
436
|
+
{{
|
|
437
|
+
{I}public T Transform(IClass that, TContext context);
|
|
438
|
+
"""
|
|
439
|
+
)
|
|
440
|
+
|
|
441
|
+
for i, block in enumerate(blocks):
|
|
442
|
+
if i > 0:
|
|
443
|
+
writer.write("\n")
|
|
444
|
+
writer.write(textwrap.indent(block, I))
|
|
445
|
+
|
|
446
|
+
writer.write("\n} // public interface ITransformerWithContext")
|
|
447
|
+
|
|
448
|
+
return Stripped(writer.getvalue())
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
def _generate_abstract_transformer_with_context(
|
|
452
|
+
symbol_table: intermediate.SymbolTable,
|
|
453
|
+
) -> Stripped:
|
|
454
|
+
"""Generate the most abstract transformer that merely double-dispatches."""
|
|
455
|
+
blocks = [
|
|
456
|
+
Stripped(
|
|
457
|
+
f"""\
|
|
458
|
+
public virtual T Transform(IClass that, TContext context)
|
|
459
|
+
{{
|
|
460
|
+
{I}return that.Transform(this, context);
|
|
461
|
+
}}"""
|
|
462
|
+
)
|
|
463
|
+
] # type: List[Stripped]
|
|
464
|
+
|
|
465
|
+
# Abstract classes have no particular implementation, so we do not transform
|
|
466
|
+
# them.
|
|
467
|
+
for cls in symbol_table.concrete_classes:
|
|
468
|
+
# See the note: "Operate on interfaces instead of classes"
|
|
469
|
+
|
|
470
|
+
interface_name = csharp_naming.interface_name(cls.name)
|
|
471
|
+
transform_name = csharp_naming.method_name(Identifier(f"transform_{cls.name}"))
|
|
472
|
+
|
|
473
|
+
blocks.append(
|
|
474
|
+
Stripped(
|
|
475
|
+
f"""\
|
|
476
|
+
public abstract T {transform_name}(
|
|
477
|
+
{I}{interface_name} that,
|
|
478
|
+
{I}TContext context
|
|
479
|
+
);"""
|
|
480
|
+
)
|
|
481
|
+
)
|
|
482
|
+
|
|
483
|
+
writer = io.StringIO()
|
|
484
|
+
writer.write(
|
|
485
|
+
f"""\
|
|
486
|
+
/// <summary>
|
|
487
|
+
/// Perform double-dispatch to transform recursively
|
|
488
|
+
/// the instances into something else.
|
|
489
|
+
/// </summary>
|
|
490
|
+
/// <remarks>
|
|
491
|
+
/// When you use the transformer, please always call the main dispatching method
|
|
492
|
+
/// <see cref="Transform" />. You should most probably never call the <c>Transform*</c>
|
|
493
|
+
/// methods directly. They are only made public so that model classes can access them.
|
|
494
|
+
/// </remarks>
|
|
495
|
+
/// <typeparam name="TContext">The type of the transformation context</typeparam>
|
|
496
|
+
/// <typeparam name="T">The type of the transformation result</typeparam>
|
|
497
|
+
public abstract class AbstractTransformerWithContext<TContext, T>
|
|
498
|
+
{I}: ITransformerWithContext<TContext, T>
|
|
499
|
+
{{
|
|
500
|
+
"""
|
|
501
|
+
)
|
|
502
|
+
|
|
503
|
+
for i, block in enumerate(blocks):
|
|
504
|
+
if i > 0:
|
|
505
|
+
writer.write("\n\n")
|
|
506
|
+
writer.write(textwrap.indent(block, I))
|
|
507
|
+
|
|
508
|
+
writer.write("\n} // public abstract class AbstractTransformerWithContext")
|
|
509
|
+
|
|
510
|
+
return Stripped(writer.getvalue())
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
# fmt: off
|
|
514
|
+
@ensure(lambda result: (result[0] is not None) ^ (result[1] is not None))
|
|
515
|
+
@ensure(
|
|
516
|
+
lambda result:
|
|
517
|
+
not (result[0] is not None) or result[0].endswith('\n'),
|
|
518
|
+
"Trailing newline mandatory for valid end-of-files"
|
|
519
|
+
)
|
|
520
|
+
# fmt: on
|
|
521
|
+
def generate(
|
|
522
|
+
symbol_table: intermediate.SymbolTable, namespace: csharp_common.NamespaceIdentifier
|
|
523
|
+
) -> Tuple[Optional[str], Optional[List[Error]]]:
|
|
524
|
+
"""
|
|
525
|
+
Generate the C# code of the visitors based on the intermediate representation
|
|
526
|
+
|
|
527
|
+
The ``namespace`` defines the AAS C# namespace.
|
|
528
|
+
"""
|
|
529
|
+
blocks = [csharp_common.WARNING] # type: List[Rstripped]
|
|
530
|
+
|
|
531
|
+
writer = io.StringIO()
|
|
532
|
+
writer.write(f"namespace {namespace}\n{{\n")
|
|
533
|
+
writer.write(
|
|
534
|
+
f"""\
|
|
535
|
+
{I}public static class Visitation
|
|
536
|
+
{I}{{
|
|
537
|
+
"""
|
|
538
|
+
)
|
|
539
|
+
|
|
540
|
+
visitation_blocks = [
|
|
541
|
+
_generate_ivisitor(symbol_table=symbol_table),
|
|
542
|
+
_generate_visitor_through(symbol_table=symbol_table),
|
|
543
|
+
_generate_abstract_visitor(symbol_table=symbol_table),
|
|
544
|
+
_generate_ivisitor_with_context(symbol_table=symbol_table),
|
|
545
|
+
_generate_abstract_visitor_with_context(symbol_table=symbol_table),
|
|
546
|
+
_generate_itransformer(symbol_table=symbol_table),
|
|
547
|
+
_generate_abstract_transformer(symbol_table=symbol_table),
|
|
548
|
+
_generate_itransformer_with_context(symbol_table=symbol_table),
|
|
549
|
+
_generate_abstract_transformer_with_context(symbol_table=symbol_table),
|
|
550
|
+
]
|
|
551
|
+
|
|
552
|
+
for i, visitation_block in enumerate(visitation_blocks):
|
|
553
|
+
if i > 0:
|
|
554
|
+
writer.write("\n\n")
|
|
555
|
+
|
|
556
|
+
writer.write(textwrap.indent(visitation_block, II))
|
|
557
|
+
|
|
558
|
+
writer.write(f"\n{I}}} // public static class Visitation")
|
|
559
|
+
writer.write(f"\n}} // namespace {namespace}")
|
|
560
|
+
|
|
561
|
+
blocks.append(Stripped(writer.getvalue()))
|
|
562
|
+
|
|
563
|
+
blocks.append(csharp_common.WARNING)
|
|
564
|
+
|
|
565
|
+
out = io.StringIO()
|
|
566
|
+
for i, block in enumerate(blocks):
|
|
567
|
+
if i > 0:
|
|
568
|
+
out.write("\n\n")
|
|
569
|
+
|
|
570
|
+
assert not block.startswith("\n")
|
|
571
|
+
assert not block.endswith("\n")
|
|
572
|
+
out.write(block)
|
|
573
|
+
|
|
574
|
+
out.write("\n")
|
|
575
|
+
|
|
576
|
+
return out.getvalue(), None
|
|
577
|
+
|
|
578
|
+
|
|
579
|
+
# endregion
|