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
8 changes: 4 additions & 4 deletions ba/doc/conformance.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,16 +59,16 @@ The review itself was a source and test-artifact audit. No Maven tests, simulato
| D.1–D.2: scope and concepts | Embedded `behavior_specification` parser, linker, serializer, and strict-model translation are registered. | Supports the language-tooling role; execution semantics require separate consumer evidence. |
| D.3: behavior specification | Variables, grouped states, state kinds, named/prioritized and multiple-source transitions, execute conditions, and a subset of dispatch/external conditions. State and transition legality checks have dedicated tests. | Partial. Internal conditions were absent (G01, since fixed) and the naming and otherwise-transition rules unenforced (V01 and V02, since fixed); mode binding is explicitly missing; multiple subprogram final states are rejected unconditionally; several consistency obligations lack demonstrated enforcement. |
| D.4: thread dispatch | Dispatch conjunction/disjunction, `stop`, bare timeout, timeout with a duration, and an unparenthesized frozen-port list. Selected timeout/stop checks exist. | Partial. Required frozen-list parentheses were missing (G03) and timeout reset ports absent (G04), both since fixed. Full protocol/trigger compatibility and core-property consistency are not demonstrated. |
| D.5: component interactions | Port send/dequeue/freeze, count/fresh, shared-data lock/unlock syntax, and subprogram-call syntax/model classes. | Partial. `updated` is absent; internal events were represented incorrectly (G10, since fixed); call-signature and direction/category checks need additional coverage. Input/output timing consistency is not established. |
| D.5: component interactions | Port send/dequeue/freeze, count/fresh/updated, shared-data lock/unlock syntax, and subprogram-call syntax/model classes. | Partial. `updated` was absent (G07) and internal events were represented incorrectly (G10), both since fixed; call-signature and direction/category checks need additional coverage. Input/output timing consistency is not established. |
| D.6: action language | Assignment/`any`, sequences and sets, blocks, conditionals, explicit-type loops, timed actions and processor bindings. Conflicting assignments in action sets and static minimum/maximum computation-time checks exist. | Partial. Type conformance is disabled outright, so no assignment, send, dequeue, range, or parameter type mismatch is reported (G18). Optional loop classifiers are missing; loop-variable assignment rejection was not enforced by the existing covering-test expectation (G16, since fixed, though the dequeue form is still open as [#3205](https://github.com/osate/osate2/issues/3205)); action-timeout catch and combination rules are now checked (V03), while resource-release and signature obligations remain incomplete or unverified. |
| D.7: expressions | Boolean/numeric/string syntax, arithmetic/relational/logical operators, property references, indexing, and operator applicability checks per operand data representation. | Partial, with semantic preservation defects. Operand consistency between the two operands is not checked, only applicability of the operator to the first one (G18). Short circuits and `updated` are missing; expression grouping/precedence and numeric translation differ from the document; initialization analysis is not demonstrated. |
| D.7: expressions | Boolean/numeric/string syntax, arithmetic/relational/logical operators, property references, indexing, and operator applicability checks per operand data representation. | Partial, with semantic preservation defects. Operand consistency between the two operands is not checked, only applicability of the operator to the first one (G18). Short circuits are missing and `updated` was (G07, since fixed); expression grouping/precedence and numeric translation differ from the document; initialization analysis is not demonstrated. |
| D.8: synchronization | `Behavior_Properties::Subprogram_Call_Protocol` declares HSER/LSER/ASER and defaults to HSER, matching the supplied document. A client/server example exists. | Property definition conforms. Enforcement of the two LSER/ASER legality rules and execution of the protocols are not established. |

Useful positive evidence includes [CoveringSyntaxTest](../../ba/org.osate.ba.tests/src/org/osate/ba/tests/CoveringSyntaxTest.xtend), [CoveringSemanticTest](../../ba/org.osate.ba.tests/src/org/osate/ba/tests/CoveringSemanticTest.xtend), [GrammarHazards.aadl](../../ba/org.osate.ba.tests/models/characterization/GrammarHazards.aadl), [BehaviorAnnexIntegrationTest](../../ba/org.osate.xtext.aadl2.ba.tests/src/org/osate/xtext/aadl2/ba/tests/BehaviorAnnexIntegrationTest.java), and [Issue3153Test](../../ba/org.osate.ba.tests/src/org/osate/ba/tests/Issue3153Test.java), [Issue3154Test](../../ba/org.osate.ba.tests/src/org/osate/ba/tests/Issue3154Test.java), and [Issue3155Test](../../ba/org.osate.ba.tests/src/org/osate/ba/tests/Issue3155Test.java). The latter tests establish specific diagnostic behavior and source locations, rather than general standard coverage.

## Ten gaps already identified by the conformance tests

All ten categories appear in [BehaviorAnnexConformanceTest](../../ba/org.osate.ba.tests/src/org/osate/ba/tests/characterization/BehaviorAnnexConformanceTest.java). At the review date its ten standard-outcome tests were all `@Ignore("Issue #2445: ...")`. After step 1 the class holds standard outcomes only: each skip names its own tracking issue instead of the umbrella #2445, and the paired "current failure" tests are gone because the golden suites compare the same diagnostics exactly. Step 1 left G03 as the single active expectation; five are active now, as G01, G04, G08, and G10 were fixed, and the five that remain skipped are held against #3166, #3169, #3170, #3171, and #3173 by the class's `TRACKED_SKIPS` list. Twelve AADL fixtures are under [models/characterization/conformance](../../ba/org.osate.ba.tests/models/characterization/conformance).
All ten categories appear in [BehaviorAnnexConformanceTest](../../ba/org.osate.ba.tests/src/org/osate/ba/tests/characterization/BehaviorAnnexConformanceTest.java). At the review date its ten standard-outcome tests were all `@Ignore("Issue #2445: ...")`. After step 1 the class holds standard outcomes only: each skip names its own tracking issue instead of the umbrella #2445, and the paired "current failure" tests are gone because the golden suites compare the same diagnostics exactly. Step 1 left G03 as the single active expectation; six are active now, as G01, G04, G07, G08, and G10 were fixed, and the four that remain skipped are held against #3166, #3169, #3170, and #3173 by the class's `TRACKED_SKIPS` list. Twelve AADL fixtures are under [models/characterization/conformance](../../ba/org.osate.ba.tests/models/characterization/conformance).

| ID | Standard requirement | Current implementation and test evidence | Status |
| --- | --- | --- | --- |
Expand All @@ -78,7 +78,7 @@ All ten categories appear in [BehaviorAnnexConformanceTest](../../ba/org.osate.b
| G04 | D.4 completion-relative timeout permits `timeout (p or q) behavior_time`. | `DispatchTriggerCondition` permits `timeout` and an optional time, without reset-port storage or syntax. `TimeoutResetPorts.aadl` records syntax errors. | Source-confirmed missing syntax and representation. **Addressed by [#3168](https://github.com/osate/osate2/issues/3168):** the grammar gained the parenthesized reset-port list, the strict model a `TimeoutResetPort` interface that `EventPortHolder` and `EventDataPortHolder` implement and a `resetPorts` list on `CompletionRelativeTimeout`, and the validator the two checks the new syntax makes reachable: a listed name that is not an event or event data port, and a reset-port list with no behavior time, which is neither D.4 timeout form. D.4 states no legality rule about reset ports themselves, and the existing D.4.(L1) and D.4.(L2) checks continue to apply to the timeout that carries them. |
| G05 | D.7 logical operators include `and then` and `or else`, with short-circuit meaning. | Expression grammar and translator recognize only `and`, `or`, and `xor`. `ShortCircuitOperators.aadl` records syntax errors. | Source-confirmed missing operators; both parsing and semantic representation need work. |
| G06 | D.7 `unary_adding_operator` contains only minus. | `UnaryExpression` explicitly accepts plus. `UnaryPlus.aadl` has an empty diagnostics golden, and the active test expects acceptance. | Source-confirmed overacceptance. |
| G07 | D.5 port-service table and D.7 `value_variable` include `p'updated`. | `ReferenceExpression` and `UnindexedReferenceExpression` permit only count/fresh suffixes. `PortUpdated.aadl` records a syntax error. | Source-confirmed missing operation. |
| G07 | D.5 port-service table and D.7 `value_variable` include `p'updated`. | `ReferenceExpression` and `UnindexedReferenceExpression` permit only count/fresh suffixes. `PortUpdated.aadl` records a syntax error. | Source-confirmed missing operation. **Addressed by [#3171](https://github.com/osate/osate2/issues/3171):** both rules gained the suffix, the strict model a `PortUpdatedValue` beside `PortCountValue` and `PortFreshValue`, and the type rules the universal Boolean those two already establish, so the value carries no data classifier and applies to a data-less event port. The generated sequencers emit it, so it round-trips. No legality check came with it: the production spells `port_name ' updated`, not the `incoming_port_name` it uses for a plain port read, and neither the D.5 nor the D.7 legality rules narrow that, so there is no stated rule to enforce even though the prose describes the value only in terms of input freeze. The fixture names incoming ports only and takes no position on the outgoing case. |
| G08 | D.7 component-element property references include `self`. | The translator now recognizes the text `self`, so the old expected “not found” diagnosis is stale. However, the strict golden for `SelfPropertyReference.aadl` contains `ClassifierFeaturePropertyReference.component : BehaviorVariableHolder element=<null>`. The source returns an empty holder before recording the owner against the complete prefix reference. | Partial syntactic/name recognition, still a source-confirmed translation gap. **Step 1 made it visible:** with the validator registered the fixture reports `resolved behavior annex holder has no element`, so the finding is now asserted rather than hidden behind an empty golden. **Addressed by [#3172](https://github.com/osate/osate2/issues/3172):** the resolver records the containing classifier against the complete prefix reference, so `self#Priority` becomes a `ClassifierPropertyReference` on that classifier, and its property name resolves to the classifier's own association. No holder can carry a classifier, so a bare `self` remains an unresolved holder in the positions that need a value, where D.7 does not admit it. |
| G09 | D.6 `for` and `forall` make `: data_unique_component_classifier_reference` optional. | `ForStatement` requires the colon and classifier. Both optional-classifier fixtures record syntax errors. | Source-confirmed missing syntax; inferred iterator types also need semantic support. |
| G10 | D.5–D.6 allow internal ports as assignment targets and internal-event send actions. | The internal-action diagnostics golden is now empty, but its strict golden maps the event-data target to `DataSubcomponentHolder [EventDataSource]` and the event send to `SubprogramCallAction` with an `EventSource` proxy. `createHolder` has no internal-feature specialization and falls back to a data-subcomponent holder. | Source-confirmed incorrect representation; acceptance is not correct internal-event support. Step 1 confirmed that on `master` the fixture is accepted with zero diagnostics even with the validator registered, so `internalPortActionsAreAcceptedByTheStandard` was left skipped with that reason recorded: it would have passed for the wrong reason, and closing #3174 needed a strict-model assertion. That expectation is active now that the representation is correct. **Addressed by [#3198](https://github.com/osate/osate2/pull/3198):** `InternalPortHolder`, `EventSourceHolder`, `EventDataSourceHolder`, and `InternalPortSendAction` were added. Running the checkers over the fixture on that branch also showed that this row understated the defect: with the validator registered, the resolver rejected the legal actions with `getClassifier : EventDataSourceImpl is not supported yet`. |
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions ba/org.osate.ba.edit/plugin.properties
Original file line number Diff line number Diff line change
Expand Up @@ -361,3 +361,4 @@ _UI_TimeoutResetPort_type = Timeout Reset Port
_UI_CompletionRelativeTimeout_resetPorts_feature = Reset Ports
_UI_BehaviorArraySize_type = Behavior Array Size
_UI_BehaviorArraySize_integerValue_feature = Integer Value
_UI_PortUpdatedValue_type = Port Updated Value
Original file line number Diff line number Diff line change
Expand Up @@ -2088,6 +2088,29 @@ public Adapter createInternalConditionAdapter() {
return internalConditionItemProvider;
}

/**
* This keeps track of the one adapter used for all {@link org.osate.ba.aadlba.PortUpdatedValue} instances.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
protected PortUpdatedValueItemProvider portUpdatedValueItemProvider;

/**
* This creates an adapter for a {@link org.osate.ba.aadlba.PortUpdatedValue}.
* <!-- begin-user-doc -->
* <!-- end-user-doc -->
* @generated
*/
@Override
public Adapter createPortUpdatedValueAdapter() {
if (portUpdatedValueItemProvider == null) {
portUpdatedValueItemProvider = new PortUpdatedValueItemProvider(this);
}

return portUpdatedValueItemProvider;
}

/**
* This returns the root adapter factory that contains this factory.
* <!-- begin-user-doc -->
Expand Down Expand Up @@ -2454,6 +2477,9 @@ public void dispose() {
if (internalConditionItemProvider != null) {
internalConditionItemProvider.dispose();
}
if (portUpdatedValueItemProvider != null) {
portUpdatedValueItemProvider.dispose();
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_ARRAY_SIZE__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -236,6 +236,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_TIME__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.BEHAVIOR_TIME__INTEGER_VALUE,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors
newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.GROUPABLE_ELEMENT__GROUP_HOLDERS,
AadlBaFactory.eINSTANCE.createGroupHolder()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,10 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors
newChildDescriptors
.add(createChildParameter(AadlBaPackage.Literals.CLASSIFIER_FEATURE_PROPERTY_REFERENCE__COMPONENT,
AadlBaFactory.eINSTANCE.createEventDataSourceHolder()));

newChildDescriptors
.add(createChildParameter(AadlBaPackage.Literals.CLASSIFIER_FEATURE_PROPERTY_REFERENCE__COMPONENT,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors
newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.GROUPABLE_ELEMENT__GROUP_HOLDERS,
AadlBaFactory.eINSTANCE.createGroupHolder()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors
newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.GROUPABLE_ELEMENT__GROUP_HOLDERS,
AadlBaFactory.eINSTANCE.createGroupHolder()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors
newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.GROUPABLE_ELEMENT__GROUP_HOLDERS,
AadlBaFactory.eINSTANCE.createGroupHolder()));

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.DISPATCH_CONDITION__FROZEN_PORTS,
AadlBaFactory.eINSTANCE.createPortFreshValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.DISPATCH_CONDITION__FROZEN_PORTS,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors
newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.FACTOR__FIRST_VALUE,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.FACTOR__FIRST_VALUE,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.FACTOR__SECOND_VALUE,
AadlBaFactory.eINSTANCE.createValueExpression()));

Expand Down Expand Up @@ -370,6 +373,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.FACTOR__SECOND_VALUE,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.FACTOR__SECOND_VALUE,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,9 @@ protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors
newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createStructUnionElementHolder()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.INDEXABLE_ELEMENT__ARRAY_INDEXES,
AadlBaFactory.eINSTANCE.createPortUpdatedValue()));

newChildDescriptors.add(createChildParameter(AadlBaPackage.Literals.GROUPABLE_ELEMENT__GROUP_HOLDERS,
AadlBaFactory.eINSTANCE.createGroupHolder()));

Expand Down
Loading
Loading