Issues for Mailing list of the Concrete Syntax for a UML Action language for Foundational UML (ALF)

To comment on any of these issues, send email to alf-ftf@omg.org. (Please include the issue number in the Subject: header, thusly: [Issue ###].) To submit a new issue, send email to issues@omg.org.

List of issues (green=resolved, yellow=pending Board vote, red=unresolved)

List options: All ; Open Issues only; or Closed Issues only

Issue 15625: The Model file includes the UML Primitive Types package rather than referencing it.
Issue 15626: Need to replace the CMOF file for the abstract syntax by a UML file for UML 2.4
Issue 16006: StructuredMember should be renamed to StructuredElement
Issue 16015: Correction to Section 8.3.6, Property Access Expressions
Issue 16028: [ALF] Issue with Section 8.3.6 - Invocation Expressions
Issue 16413: Null Template Binding Arguments
Issue 16414: Boolean Literals Cannot Be Used as Identifiers
Issue 16415: Error in Synthesis of Null Expressions
Issue 16416: Parenthesizing Left Hand Sides
Issue 16417: Missing Cross Reference in Subclause 9.6
Issue 16418: Evaluation of Loop Variable Definitions
Issue 16419: Return Statements with no Expression
Issue 16420: Implicit Imports
Issue 16421: Error in Singleton Examples
Issue 16422: Error in ProcessQueue Example
Issue 16423: Constructors and Diamond Inheritance
Issue 16424: Synthesis of the Name of a Reception Definition
Issue 16425: IndexOf Return Type
Issue 16426: Errors in Collection Function Table
Issue 16429: Errors in Abstract Syntax Attribute Names
Issue 16431: Type Conformance for Compound Assignments for Bit Strings
Issue 16432: Errors in BehaviorInvocationExpression Constraints
Issue 16434: binaryExpressionOperandMultiplicity Constraint is Too Strong for EqualityExpression
Issue 16435: Derived Attributes for LeftHandSide
Issue 16436: Require Non-Template Classifier
Issue 16437: Corrections to updateAssignments for ConditionalTestExpression
Issue 16439: Constraint Needed on FeatureLeftHandSide
Issue 16440: Derivations of type, lower and upper for Invocation Expressions
Issue 16441: Corrections to InvocationExpression::parameterElements
Issue 16442: literalExpressionTypeDerivation Is Not Necessary
Issue 16443: Errors in LogicalExpression Constraints
Issue 16444: Problem with the NamedExpression Conversion Constraints
Issue 16445: NamedTuple Needs a Constraint
Issue 16447: NameExpression Should Override updateAssignments
Issue 16448: Problems with NameLeftHandSide Constraints
Issue 16449: PositionalTuple Needs a Constraint
Issue 16450: Error in propertyAccessExpressionLowerDerivation
Issue 16451: QualifiedName::templateName Needs a Description
Issue 16452: Error in qualifiedNameDisambiguationDerivation
Issue 16453: SequenceConstructionExpression::typeName May Be Empty
Issue 16454: SequenceConstructionExpression Constraints
Issue 16455: SequenceConstructionExpression Needs to Override updateAssignments
Issue 16456: SequenceOperationExpression Should Override parameterElements
Issue 16457: SequenceOperationExpression Constraints
Issue 16458: Correction to shiftExpressionOperands Constraint
Issue 16459: Correction to superInvocationExpressionTarget Constraint
Issue 16460: Block Assignment Constraints
Issue 16462: ForStatement Should Have a Composition Association to Block
Issue 16463: localNameDeclarationStatementAssignmentsAfter constraint
Issue 16464: Derivation of LocalNameDeclaration::type
Issue 16467: SwitchClause Should Have a switchClauseCase Constraint
Issue 16468: Errors in Descriptions of SwitchStatement constraints
Issue 16469: ElementImportReference Constraint
Issue 16470: Errors in ImportedMember
Issue 16472: NamespaceDefinition::ownedMember Should Be Ordered
Issue 16473: Description of operationDefinitionRedefinition
Issue 16474: Constructor Return Type
Issue 16476: Assignments Before a Property Initializer
Issue 16477: Description of SignalDefinition::isSameKindAs
Issue 16478: Errors in Constraint Names
Issue 16479: Errors in QuickSort Example
Issue 16480: Errors in the Online Bookstore Example
Issue 16481: Errors in the Property Management Service Example
Issue 16482: Errors in the Collection Classes Implemenation
Issue 16586: Typo in sequence functions?
Issue 16591: Problem with parameters of CollectionFunctions::removeAll
Issue 16592: Problem with parameters of CollectionFunctions::replaceOne
Issue 16606: Should be allowed to use return statement in all behaviors
Issue 17508: Errors in Subclause 8.2
Issue 17510: Error in Data Value Creation Expression
Issue 17511: SequenceExpressionList::element should be ordered
Issue 17513: Error in bit string conversion
Issue 17514: @determined should be @determinate
Issue 17515: Inconsistency on being constructorless
Issue 17516: AssignmentExpression as a data value update
Issue 17517: Error in AssignmentExpression constraints
Issue 17518: Constructor in a BehaviorInvocationExpression
Issue 17519: Referent of a signal send
Issue 17520: Indexed feature left hand sides
Issue 17521: InstanceCreationExpression class must not be abstract
Issue 17522: Assigned name must not be template binding
Issue 17523: Derivation of SequenceOperationExpression::isCollectionConversion
Issue 17524: Assignment of out parameters in if and switch statements
Issue 17525: Classifier behavior required for an active class
Issue 17526: Inherited abstract operations

Issue 15625: The Model file includes the UML Primitive Types package rather than referencing it. (alf-ftf)

Click here for this issue's archive.
Source: Adaptive (Mr. Pete Rivett, pete.rivett(at)adaptive.com)
Nature: Uncategorized Issue
Severity:
Summary:
The Model file includes the UML Primitive Types package rather than referencing it.


Resolution: This occurs in the Alf Standard Library model XMI file. This file actually contains a spurious UML package, with a nested AuxiliaryConstructs, with PrimitiveTypes nested within that (as well as a number of other, empty packages). This included UML package should be removed. Note that all primitive type references elsewhere in the file already use hrefs with normative URIs, not references to the nested PrimitiveTypes package
Revised Text: Remove the included UML package from the Alf Standard Library model XMI file.
Actions taken:
September 23, 2010: received issue

Discussion:
issue15625


Issue 15626: Need to replace the CMOF file for the abstract syntax by a UML file for UML 2.4 (alf-ftf)

Click
here for this issue's archive.
Source: Adaptive (Mr. Pete Rivett, pete.rivett(at)adaptive.com)
Nature: Uncategorized Issue
Severity:
Summary:
Need to replace the CMOF file for the abstract syntax by a UML file for UML 2.4


Resolution: Agreed, the Alf abstract syntax is supposed to be based on UML 2.4.
Revised Text: Convert the Alf abstract syntax XMI file to a UML 2.4.1/XMI 2.4.1 file.
Actions taken:
September 23, 2010: received issue

Issue 16006: StructuredMember should be renamed to StructuredElement (alf-ftf)

Click
here for this issue's archive.
Nature: Uncategorized Issue
Severity:
Summary:
In order to play with ALF I have thrown together a parser for my own use.
Along the way I have found a small error in the spec regarding the Abstract  Syntax for ALF. Many clauses in the spec (Beta 1) refer to 'StructuredElement' and those same  clauses say  that StructuredElement is defined in clause 10.4.4. However, in clause 10.4.4 the element appears to be named 'StructuredMember' instead.


It looks to me like StructuredMember should be renamed to StructuredElement since the term 'Element' appears to be the convention used throughout the rest of the spec.


Resolution: The intent was actually to change StructuredElement to StructuredMember (which is a better name for it), but the rest of the document outside Subclause 10.4.4 does not seem to have been properly updated for this (note that the parser grammar in the Annex uses StructuredMember).
Revised Text: Replace the word “StructuredElement” with “StructuredMember” in the following places: Subclause 10.4.5 Associations, under Syntax, 3 places in the production: AssociationDefinition(d: AssociationDefinition) = AssociationDeclaration(d) "{" StructuredElement(d.ownedMember) StructuredElement(d.ownedMember) { StructuredElement(d.ownedMember) } "}" and in item 3 under Cross References. Subclause 10.4.7 Signals, under Syntax, in the production: SignalDefinition(d: SignalDefinition) = SignalDeclaration(d) "{" { StructuredElement(d.ownedMember) } "}" and in item 3 under Cross References. Subclause 10.5.4 Receptions, under Syntax, in the production: SignalReceptionDefinition(d: SignalReceptionDefinition) = SignalReceptionDeclaration(d) "{" { StructuredElement(d.ownedMember) } "}" and in item 5 under Cross References.
Actions taken:
February 2, 2011: received issue

Issue 16015: Correction to Section 8.3.6, Property Access Expressions (alf-ftf)

Click
here for this issue's archive.
Source: RPC Software (Mr. Ted Stockwell, emorning(at)yahoo.com)
Nature: Uncategorized Issue
Severity:
Summary:
There is a small problem in section 8.3.6 regarding property access expressions.
The problem is that the concrete syntax defined in that section will not 
actually match the examples given in that section.


---------
Here is the concrete syntax defined in that section...


    PropertyAccessExpression(e: PropertyAccessExpression)
     = FeatureReference(e.featureReference)


   FeatureReference(f: FeatureReference)
     = FeatureTargetExpression(f.expression) "." NameBinding(f.nameBinding)


   FeatureTargetExpression(e: Expression)
     = NameTargetExpression(e)
     | NonNamePrimaryExpression(e)


   NameTargetExpression(e: NameExpression)
    = ColonQualifiedName(e.name)


Note that NameTargetExpression only allows ColonQualifiedName(s) to be used to 
define a PropertyAccessExpression.


-------
Here are the examples of property access expressions from the same section...
   
    poleValue.im
    this.node
    members.name
    jack.house


Note that, because NameTargetExpression only allows ColonQualifiedName(s), none 
of the above examples matches the concrete syntax.


----------
I suspect that NameTargetExpression should be defined to be a QualifiedName, 
which is defined to be either a DotQualifiedName, an UnqualifiedName, or a 
ColonQualifiedName, so...


   NameTargetExpression(e: NameExpression)
    = QualifiedName(e.name)


where QualifiedName is defined elsewhere as:


QualifiedName(q: QualifedName)
= ColonQualifiedName(q)
| DotQualifiedName(q)
| UnqualifiedName(q)


Resolution: This is indeed a little confusing, but it is not actually an error in the spec. There is a note on page 38 that says: “See Subclause 8.2 for rules on the disambiguation of a qualified name using the dot notation to a property access expression. Such a potentially ambiguous expression is always initially parsed as a qualified name.” For example, as far as context-free parsing is concerned, an expression like “poleValue.im” is ambiguous – it could be a qualified name using the dot notation, or it could be a property access expression for the “im” attribute of the value of the name “poleValue”. Disambiguation requires using static semantic information on “poleValue” (e.g., is it a local name with a type that has an “im” property), as described in Subclause 8.2. Despite this conceptual ambiguity, the formal grammar is made unambiguous by always parsing “poleValue.im” initially as a qualified name. That is why a dot qualified name is not allowed as a name target expression. Possible disambiguation to a property access expression then happens as part of static semantic analysis (this is formally through the derived QualifiedName::disambiguation attribute specified in Subclause 13.2.42). Note also, by the way, that the grammar as given actually does parse “this.node” as a property access expression, because “this” is a reserved word, not a name. Thus, “this” is parsed as a NonNamePrimaryExpression (a ThisExpression, to be exact), not a NameTargetExpression.
Revised Text: To make this clearer in the text, move the note on page 38 in Subclause 8.3.6 Property Access Expression, which is currently after the Cross References, to be immediately before Figure 8-7, after the production for NameTargetExpression, and add the following to the end of the note: This is why a NameTargetExpression is not allowed to be a DotQualifiedName or an UnqualifiedName, since, along with the dot notation for the feature reference, this should initially be parsed as a potentially ambiguous qualified name rather than a feature reference.
Actions taken:
February 7, 2011: received issue

Discussion:


Issue 16028: [ALF] Issue with Section 8.3.6 - Invocation Expressions (alf-ftf)

Click
here for this issue's archive.
Source: RPC Software (Mr. Ted Stockwell, emorning(at)yahoo.com)
Nature: Uncategorized Issue
Severity:
Summary:
The abstract syntax defined in Section 8.3.7 (Invocation Expressions) and 
Section 8.3.9 (Behavior Invocation Expressions) will not match this 
expression...
 
    this.monitor.getActiveSensor().getReading()


(NOTE: the above expression is used as an example in Section 8.5.6 - Isolation 
Expressions)
 
The issue seems to be that the definition of InvocationExpression does not 
repeat.


Here is the current definition for InvocationExpression...
 
        InvocationExpression= InvocationTarget Tuple
        InvocationTarget= BehaviorInvocationTarget 
            | FeatureInvocationTarget 
            | SuperInvocationTarget


 
Maybe the definition for InvocationTarget should be something like this?...
 
        InvocationExpression= InvocationTarget Tuple { "." InvocationTarget 
Tuple }


Resolution: The expression “this.monitor.getActiveSensor().getReading()” is not a behavior invocation expression, it is a feature invocation expression. The production needed is the one for FeatureInvocationTarget in Subclause 8.3.10: FeatureInvocationTarget(e: FeatureInvocationExpression) = FeatureReference(e.target) | "this" The expression given in the issues parses in full as follows: FeatureInvocationExpression FeatureInvocationTarget FeatureReference FeatureTargetExpression NonNamePrimaryExpression InvocationExpression [ <- Note recursion on InvocationExpression here ] FeatureInvocationExpression FeatureInvocationTarget FeatureReference FeatureTargetExpression NonNamePrimaryExpression PropertyAccessExpression FeatureReference FeatureTargetExpression NonNamePrimaryExpression ThisExpression NameBinding Name “monitor” NameBinding Name “getActiveSensor” Tuple NameBinding Name “getReading” Tuple
Revised Text: closed no0 change
Actions taken:
February 15, 2011: received issue
October 21, 2011: closed issue

Issue 16413: Null Template Binding Arguments (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 6.2 Templates

The rule in Subclause 6.2 for constructing the name of an equivalent bound element does not account for the possibility that one of the arguments may be null (i.e., “any”). While the syntax for template bindings in qualified names (Subclause 8.2) does not allow “any” to be used as a template argument, such an argument can result from the rules for the implicit binding for a template behavior as given in Subclause 8.3.9.

Resolution: agreed
Revised Text: In Subclause 6.2, at the bottom of page 9, at the end of the list item Take the fully qualified name of each actual element in the template binding and replace all “::” separators with “$” characters. If the actual element is itself a template binding, then use the name of the equivalent bound element. Add the following: If the actual element is empty (null), then use “any” as the name of the actual element. (While the Alf syntax for template bindings given in Subclause 8.2 does not actually allow any to be used as a template argument, such an argument can result from the rules for the implicit binding for a template behavior as given in Subclause 8.3.9.)
Actions taken:
July 29, 2011: received issue

Issue 16414: Boolean Literals Cannot Be Used as Identifiers (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause 7.5: Names

Subclause 7.5 should says that reserved words cannot be used as identifiers, but it should also note that Boolean literals (which are not classified as reserved words) can also not be used as identifiers.

Resolution: agreed
Revised Text: At the end of the second paragraph of Subclause 7.5 added the following sentence: The Boolean literals true and false also have the form of identifiers, but they are considered lexically to be primitive literals rather than names (see Subclause 7.7.1).
Actions taken:
July 29, 2011: received issue

Issue 16415: Error in Synthesis of Null Expressions (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 8.3.15: Sequence Construction Expressions

In Subclause 8.3.15, the parsing of a NullExpression should set the hasMultiplicity=true for the SequenceConstructionExpression, otherwise the derivation of the lower and upper attributes (see Subclause 13.2.46) will result in those both being 1 instead of both being 0.

Resolution: In Subclause 8.3.15 Sequence Construction Expressions, under Syntax, in the production for SequenceConstructionExpression, in the second line, after “NullExpression” add “(hasMultiplicity=true)”.
Revised Text:
Actions taken:
July 29, 2011: received issue

Discussion:
agreed


Issue 16416: Parenthesizing Left Hand Sides (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 8.8 Assignment Expressions

It should be allowed to parenthesize a left hand side. This makes it possible to parse the left hand side simply as an expression and then check afterward if it is correct (as is done in the grammar given in the annex). It is also consistent with Java syntax.

Resolution: agreed
Revised Text: In Subclause 8.8, under syntax, change the production for LeftHandSide to: LeftHandSide(lhs: LeftHandSide) = NameLeftHandSide(lhs) [ Index(lhs.index) ] | FeatureLeftHandSide(lhs) [ Index(lhs.index) ] | "(" LeftHandSide(lhs) ")"
Actions taken:
July 29, 2011: received issue

Issue 16417: Missing Cross Reference in Subclause 9.6 (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 9.6 Local Name Declaration Statements

Subclause 9.6 should have a cross reference to the abstract syntax class InstanceCreationExpression, since the InstanceInitializationExpression production creates an instance of that class.

Resolution: agreed
Revised Text: In Subclause 9.6 Local Name Declaration Statements, under Cross Reference, after the entry for “4. TypeName” add the line: 5. InstanceCreationExpression see Subclause 8.4.12 and renumber subsequent lines appropriately.
Actions taken:
July 29, 2011: received issue

Issue 16418: Evaluation of Loop Variable Definitions (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 9.12 for Statements

It should be made clear that the expressions in the loop variable definitions of a for statement are evaluated sequentially in the order of the loop variables (per the mapping). (Or, if the expressions are evaluated concurrently, then there needs to be a constraint that the same name cannot be assigned in more than one of those expressions.)

Resolution: Rather than adding a constraint (and changing the mapping), it seems easier to just make it clear that they are evaluated sequentially. And, in the abstract syntax, ForStatement::variableDefinition is ordered, which also indicates that sequential evaluation is the intent.
Revised Text: In Subclause 9.12, under Semantics, “Iterative Execution”, at the end of the first sentence, replace “concurrently” with “sequentially”.
Actions taken:
July 29, 2011: received issue

Issue 16419: Return Statements with no Expression (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclauses: 9.14 return Statements
A return statement without an expression should be allowed for a behavior without a return parameter.

Resolution: agreed
Revised Text: In Subclause 9.14: • Under Syntax, replace the production for ReturnStatement with: ReturnStatement(s: ReturnStatement) = "return" [ Expression(s.expression) ] ";" (Also update the consolidated grammar in the annex.) • In Figure 9-56, change the multiplicity of “expression” to 0..1. • Replace both paragraphs under Semantics with A return statement is used to terminate the execution of the enclosing behavior. If the enclosing behavior has a return parameter, then the return statement must have an expression that is assignable to the return parameter (see Subclause 8.8 for the definition of assignability.) Otherwise, it must not have an expression. When a return statement is executed, if it has an expression, that expression is evaluated, and the resulting values (if any) are assigned to the return parameter. The execution of the enclosing behavior then immediately terminates. In Subclause 14.1, Figure 14-95, change the multiplicity of ReturnStatement::expression to 0..1. In Subclause 14.2.19 ReturnStatement, under Synthesized Properties: • Add the multiplicity “[0..1]” to the specification of the attribute “expression”. • Under the constraint “[3] returnStatementContext”, replace both sentences with If the behavior containing the return statement has a return parameter, then the return statement must have an expression, and the expression must be assignable to that return parameter. In Subclause 18.13 return Statements, replace the body of the subclause with 1. A return statement is mapped to a structured activity node. The structured activity node is connected by a control flow to an activity final node placed directly at the top level within the activity enclosing the return statement. 2. If the return statement has an expression, then the mapping for that expression is contained in the structured activity node for the return statement. The result source element of the mapping of the expression is connected by an object flow to an output pin of the structured activity node. This output pin is, in turn, connected by an object flow to the output activity parameter node for the return parameter of the enclosing activity.
Actions taken:
July 29, 2011: received issue

Issue 16420: Implicit Imports (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 10.1 Overview

It is only necessary to require implicit imports of standard model library packages into model units. Any direct or indirect subunits of a model library unit with implicit imports will have visibility upwards of the packages imported into the model unit. Also, applying «ModelLibrary» to a subunit cannot prevent this visibility of the standard model library packages, and so this stereotype is also actually only effective on a model unit.

Resolution: agreed
Revised Text: In Subclause 10.1, under Semantics, “Import Declarations”, in page 135, replace the paragraph: Unless it is stereotyped as a «ModelLibrary», an Alf unit has an implicit, private package import for each of the sub-packages of the Alf::Library package (see 11). These packages must therefore be available in the modeling environment for any Alf unit. with Unless it is stereotyped as a «ModelLibrary», an Alf model unit has an implicit, private package import for each of the sub-packages of the Alf::Library package (see Subclause 11). These packages must therefore be available in the modeling environment for any Alf unit. (Note that it is unnecessary for subunits to have such implicit imports, since they will have visibility to the imports on the enclosing model unit.) In the following paragraph, in the last sentence, replace “A package so annotated…” with “A model-unit package so annotated…”.
Actions taken:
July 29, 2011: received issue

Issue 16421: Error in Singleton Examples (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause 10.4.2 Classes

In the Singleton example use in Subclause 10.4.2 under Semantics, “allinstances” should be “allInstances”.

Resolution: agreed
Revised Text: In Subclause 10.4.2 Classes, in the code for the getSingleton operation of the Singleton class near the top of page 146, replace the one occurrence of “allinstances” with “allInstances”.
Actions taken:
July 29, 2011: received issue

Issue 16422: Error in ProcessQueue Example (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 10.4.3 Active Classes

In the ProcessQueue example in Subclause 10.4.3, “sign” that appears twice in the classifier behavior should be “sig”.

Resolution: agreed
Revised Text: In Subclause 10.4.3, under Examples, in the code for active class ProcessQueue, in the first clause of the accept statement, replace two occurrences of “sign” with “sig”.
Actions taken:
July 29, 2011: received issue

Issue 16423: Constructors and Diamond Inheritance (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 10.5.3.1 Constructors

At the end of Subclause 10.5.3.1 it states that: “In the absence of explicit constructor invocations at the start of a constructor body (and also in the case of the default constructor behavior), a super constructor invocation is made implicitly for each immediate superclass, in the order the superclasses appear in the specializes list of the class containing the constructor, before executing any statements in the constructor body.” However, if the immediate superclasses themselves have common ancestors (so called “diamond inheritance”), applying this rule recursively will result in the constructors of these common ancestors being called multiple times.

Resolution: Agreed. Handling diamond inheritance can be tricky. The approach proposed here leaves the current constructor semantics largely in place, and simply adds that, after a constructor from a certain class is called on an object, other calls on constructors from the same class have no effect. This could be implemented adding class-specific initialization flags to the implementation of the object or by “linearizing” the sequence of direct and indirect super constructor calls and removing any redundant calls.
Revised Text: At the end of Subclause 10.5.3.1, add the following paragraph: If a class has multiple superclasses, then it is possible that these superclasses may themselves have one or more common ancestor classes (this is sometimes referred to as “diamond inheritance”). In this case, the above rules may result in the same constructor of a common ancestor class being called more than once or more than one constructor from the same common ancestor class being called. However, once a constructor from a class is called on an object, that object is considered to be initialized for that class. If another call is made, either explicitly or implicitly, on an object using any constructor from a class for which the object is already initialized, then that constructor has no further effect: no default initialization is carried out, no implicit super constructor calls are made and the body of the constructor is not executed.
Actions taken:
July 29, 2011: received issue

Issue 16424: Synthesis of the Name of a Reception Definition (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause 10.5.4: ReceptionDefinition

In the syntax for ReceptionDefinition, the condition for d.name should be {d.name=d.signal.nameBinding->last().name}.

Resolution: agreed
Revised Text: In Subclause 10.5.4 Reception Definition, under Syntax, in the production for ReceptionDefinition replace “(d.name=d.signal.names->last())” with “(d.name=d.signal.nameBinding->last().name)”,
Actions taken:
July 29, 2011: received issue

Issue 16425: IndexOf Return Type (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 11.3.6 Sequence Functions

In Table 11-14, the return type of IndexOf should be Integer, not any.

Resolution: agreed
Revised Text: In Subclause 11.3.6 Sequence Functions, Table 11-14, in the entry for IndexOf (second row on page 182), change the return type from “any” to “Integer”.
Actions taken:
July 29, 2011: received issue

Issue 16426: Errors in Collection Function Table (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 11.5 Collection Functions

In Table 11-15, “ordered nonuique” [sic] appears twice (first column, second and third rows) and should be replaced with “sequence”. remove, removeAll and removeOne should return “T[*] sequence”.

Resolution: agreed
Revised Text: In Subclause 11.5 Collection Functions, Table 11-15, in the first column of the entries for addAt and addAll (second and third rows on page 189), replace “ordered nonuique” with “sequence”.
Actions taken:
July 29, 2011: received issue

Issue 16429: Errors in Abstract Syntax Attribute Names (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclauses: 13.2.31 NamedExpression, 15.2.9 EnumerationDefinition, 15.2.15 NamespaceDefinition, and 15.2.16 OperationDefinition

•	NamedExpression::isBitStringConverstion should be isBitStringConversion
•	EnumerationDefinition::classDefinitionSpecializationReferent should be enumerationDefinitionSpecializationReferent
•	NamespaceDefinition::annotationAllowed should not be abstract.
•	OperationDefinition::redefinedOperations should be redefinedOperation

Resolution: Agreed. (Note, however, that “classDefinitionSpecializationReferent” and “annotationAllowed” are not an attributes, they are a constraint and a helper operation, respectively. But the indicated errors still need to be corrected.)
Revised Text: In Subclause 13.2.31 NamedExpression, under Derived Properties, change “isBitStringConverstion” to “isBitStringConversion”. Also make this change in Figure 13-86 [sic]. In Subclause 15.2.9 EnumerationDefinition, under Constraints, change “classDefinitionSpecializationReferent” to “enumerationDefinitionSpecializationReferent”. In Subclause 15.2.16 OperationDefinition, under Derived Properties, change “redefinedOperations” to “redefinedOperation”. Also make this change in Figure 15-101. Also make the above changes in the abstract syntax model XMI. In addition, make NamespaceDefinition annotationAllowed not abstract in the abstract syntax model.
Actions taken:
July 29, 2011: received issue

Issue 16431: Type Conformance for Compound Assignments for Bit Strings (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.2

The assignmentExpressionCompoundAssignmentTypeConformance constraint should also handle compound assignments for bit string operators.

Resolution: agreed
Revised Text: In Subclause 13.2.2, in the text for constraint [4]assignmentExpressionCompoundAssignmentTypeConformance, replace “arithmetic or logical operator” with “arithmetic, logical or shift operator”.
Actions taken:
July 29, 2011: received issue

Issue 16432: Errors in BehaviorInvocationExpression Constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.3 BehaviorInvocationExpression

•	The behaviorInvocationExpressionReferentDerivation should allow for resolution of the target to an association end.

•	The behaviorInvocationExpressionArgumentCompatibility constraint should note that it only applies if the target does not disambiguate to a feature reference.

Resolution: agreed
Revised Text: In Subclause 13.2.3, replace the text for constraint [4] behaviorInvocationExpressionReferentDerivation with: If the target of a behavior invocation expression resolves to a behavior, then the referent of the expression is that behavior. If the target disambiguates to a feature reference, then the reference is the operation or signal being invoked. Otherwise, if the target resolves to a property that is an association end, then the referent is that property. In the text for constraint [1] behaviorInvocationExpressionArgumentCompatibility, replace the first two sentences with: If the target qualified name does not disambiguate to a feature reference, then each input argument expression must be assignable to its corresponding parameter and each output argument expression must be assignable from its corresponding parameter.
Actions taken:
July 29, 2011: received issue

Issue 16434: binaryExpressionOperandMultiplicity Constraint is Too Strong for EqualityExpression (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.4

The binaryExpressionOperandMultiplicity constraint requires that the operands of a binary expression have a multiplicity upper bound of 1. However, an equality expression (a kind of binary expression) is allowed to compare to “null”, which has a multiplicity upper bound of zero.

Resolution: agreed
Revised Text: In Subclause 13.2.4, add the following Helper Operation: noNullArguments ( ) : Boolean By default, null arguments are not allowed for binary expressions. (This is overridden for equality expressions.) Replace the text of constraint [2] binaryExpressionOperandMultiplicity with: The operands of a binary expression must have a multiplicity upper bound no greater than 1. If null arguments are not allowed (as given by the noNullArguments helper operation), then the upper bounds must be exactly 1. In Subclause 13.2.14 Equality Expressions, add the helper operation: noNullArguments ( ) : Boolean Returns false for an equality expression.
Actions taken:
July 29, 2011: received issue

Issue 16435: Derived Attributes for LeftHandSide (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.6 LeftHandSide

A left hand side should have derived type, lower and upper attributes, since these are defined in Subclause 8.8.

Resolution: Agreed (however, the correct subclause for LeftHandSide is 13.2.26, not 13.2.6). Constraints for AssignmentExpression also refer to the type and bounds of the left-hand side. Note, though, that the type and bounds for a left-hand side for the first assignment of a local name cannot be derived directly from the left-hand side, since they are determined by the right-hand side of the assignment. But this is already accounted for in the simple assignment multiplicity and type conformance constraints for an AssignmentExpression.
Revised Text: Add the following derived properties to LeftHandSide, to be listed in Subclause 13.2.26 and shown on Figure 13-93 Assignment Expressions: • referent: ElementReference [0..1] A reference to the assignable element denoted by this left-hand side, if one exists (i.e., the left-hand side is not for the first assignment of a local name). • type : ElementReference [0..1] A reference to the element that specifies the statically determined type of this left-hand side (if any). • lower: Integer The statically determined lower bound of the multiplicity of this left-hand side. • upper: UnlimitedNatural The statically determined upper bound of the multiplicity of this left-hand side. In Subclause 13.2.18, add the constraints: featureLeftHandSideReferentDerivation The referent of a feature left-hand side is the structural feature to which the feature reference of the left-hand side resolves. featureLeftHandSideTypeDerivation The type of a feature left-hand side is the type of its referent. featureLeftHandSideLowerDerivation If a feature left-hand side is indexed, then its lower bound is 1. Otherwise, its lower bound is that of its referent. featureLeftHandSideUpperDerivation If a feature left-hand side is indexed, then its upper bound is 1. Otherwise, its upper bound is that of its referent. In Subclause 13.2.35 NameLeftHandSide, add the constraints: nameLeftHandSideReferentDerivation If the target of a name left-hand side disambiguates to a structural feature, then the referent of the left-hand side is that feature. If the target resolves to a parameter, then the referent is that left-hand side. If the target resolves to a local name, then the referent is the assigned source for that local name, if it has one. nameLeftHandSideTypeDerivation If a name left-hand side is for a local name with an assignment, then its type is that of that assignment. Otherwise, if the left-hand side has a referent, then its type is the type of that referent. leftHandSideLowerDerivation If a left-hand side is indexed, then its lower bound is 1. Otherwise, if the left-hand side is for a local name with an assignment, than its lower bound is that of the assignment, else, if it has a referent, then its lower bound is that of the referent. leftHandSideUpperDerivation If a left-hand side is indexed, then its upper bound is 1. Otherwise, if the left-hand side is for a local name with an assignment, than its upper bound is that of the assignment, else, if it has a referent, then its upper bound is that of the referent.
Actions taken:
July 29, 2011: received issue

Issue 16436: Require Non-Template Classifier (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclauses: 13.2.8 CastExpression and 13.2.10 Classification Expression

The castExpressionTypeResolution and classificationExpressionTypeName constraints should require a non-template classifier

Resolution: agreed
Revised Text: In Subclause 13.2.8, in the text for constraint [4] castExpressionTypeResolution, insert “non-template” before “classifier”. In Subclause 13.2.10, in the text for constraint [5] classificationExpressionTypeDerivation, insert “non-template” before “classifier”.
Actions taken:
July 29, 2011: received issue

Issue 16437: Corrections to updateAssignments for ConditionalTestExpression (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.13 ConditionalTestExpression

The description of the updateAssignments operation for ConditionalTestExpression should clearly state that assignments can be made in the first operand expression. It should also state that the type of newly defined names is the effective common ancestor of the types of the name in each of the second and third operands

Resolution: agreed
Revised Text: In Subclause 13.2.13, replace the text for the helper operation updateAssignments with: Returns the assignments after the first operand expression, plus assignments for any newly defined local names in the second and third operand expressions. Local names that exist after the first operand expression but are reassigned in the second or third operand expressions are adjusted to have the conditional-test expression as their assigned source. Local names that are newly defined in the second and third operand expressions have the conditional-text expression as their source and a type that is the effective common ancestor (if one exists) of the types from the assignments after each of the second and third operands.
Actions taken:
July 29, 2011: received issue

Issue 16439: Constraint Needed on FeatureLeftHandSide (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.18

There needs to be a constraint on FeatureLeftHandSide that it resolves to a single referent that is a structural feature.

Resolution: Agreed. Note that the revised text below presumes the resolution for Issue 16435, which adds the referent derived property.
Revised Text: In Subclause 13.2.18, add the following constraint: featureLeftHandSideReferentConstraint The feature of a feature-left hand side must have a single referent that is a structural feature.
Actions taken:
July 29, 2011: received issue

Issue 16440: Derivations of type, lower and upper for Invocation Expressions (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.23 InvocationExpression

The derivations of type, lower and upper inherited in  InvocationExpression are based on the return parameter of the referent of the expression. This doesn’t work for referents that are not behaviors or operations. Specifically:

•	For an InstanceCreationExpression, the referent may be a classifier (Class or DataType), in which case, the type needs to be the referent itself and lower and upper need to both be 1.

•	For a BehaviorInvocationExpression, the referent may be an association end, in which case the type, lower and upper need to be the same as for the end. 

Resolution: agreed
Revised Text: Revised Text: In Subclause 13.2.23, update the text for the following constraints, as given: [8] invocationExpressionLowerDerivation If the referent of an invocationExpression is an operation or behavior with a return parameter, then the lower bound of the expression is that of the return parameter. If the referent is a classifier, then the lower bound is 1. If the referent is a property, then the lower bound is that of the property. Otherwise the lower bound is 0. [10] invocationExpressionLowerDerivation If the referent of an invocationExpression is an operation or behavior with a return parameter, then the type of the expression is that of the return parameter (if any). If the referent is a classifier, then the type is the referent. If the referent is a property, then the type is that of the property. Otherwise the expression has no type. [11] invocationExpressionUpperDerivation If the referent of an invocationExpression is an operation or behavior with a return parameter, then the upper bound of the expression is that of the return parameter. If the referent is a classifier, then the upper bound is 1. If the referent is a property, then the upper bound is that of the property. Otherwise the upper bound is 0.
Actions taken:
July 29, 2011: received issue

Issue 16441: Corrections to InvocationExpression::parameterElements (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.23 InvocationExpression

•	The return parameter of the InvocationExpression::parameterElements helper operation should be ordered.

•	The definition of InvocationExpression::parameterElements should also handle the case in which the reference is an association end.


Resolution: Agreed. Though ordering the return parameter on parameterElements presumes a resolution to Issue 16472 such that the ownedMembers of a Namespace are ordered.
Revised Text: In Subclause 13.2.23, replace the definition of the parameterElements helper operation with: [1] parameterElements ( ) : ElementReference [*] {ordered} Returns references to the elements that act as the parameters of the referent. If the referent is a behavior or operation, these are the owned parameters, in order. If the referent is an association end, then the parameters are the other association ends of the association of the referent end, which are treated as if they were in parameters. Otherwise (by default), they are any properties of the referent (e.g., signal attributes), which are treated as if they were in parameters. (This is defined as a helper operation, so that it can be overridden by subclasses of InvocationExpression, if necessary.)
Actions taken:
July 29, 2011: received issue

Issue 16442: literalExpressionTypeDerivation Is Not Necessary (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.28 LiteralExpression

The constraint literalExpressionTypeDerivation (“The type of a literal expression is given by the type of the literal, as defined for each subclass below.”) is not necessary, since it doesn’t provide any actual constraint. (Plus, in the current document organization, not all of the subclasses are “below” the subclause on LiteralExpression.)

Resolution: Agreed.
Revised Text: In Subclause 13.2.28, remove constraint [2] literalExpressionTypeDerivation
Actions taken:
July 29, 2011: received issue

Issue 16443: Errors in LogicalExpression Constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.29 LogicalExpression

•	The definitions of the logicalExpressionIsBitStringConversion1 and logicalExpressionIsBitStringConversion2 constraints mention “shift expression” when they should say “logical expression”.

•	The logicalExpressionOperands constraint should allow for BitString and Integer operands (per the semantics of logical expression in Subclause 8.6.7).

•	The logicalExpressionTypeDeriviation constraint should give the type BitString if the expression is bit-wise.

Resolution: agreed
Revised Text: In Subclause 13.2.29: • In constraints [1] logicalExpressionIsBitStringConversion1 and [2] logicalExpressionIsBitStringConversion2, replace “shift expression” with “logical expression”. • In constraint [5] logicalExpressionOperands, replace the text with: The operands of a logical expression must have type Boolean, Integer or BitString. However, if one of the operands is Boolean, then the other must also be Boolean. • In constraint [6] logicalExpressionTypeDerivation, replace the text with: A logical expression has type Boolean if it is not bit-wise and type BitString if it is bit-wise.
Actions taken:
July 29, 2011: received issue

Issue 16444: Problem with the NamedExpression Conversion Constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.31 NamedExpression

The constraints namedExpressionIsBitStringConversion and namedExpressionIsCollectionConversion cannot really be checked within the context of NamedExpression, since there is no way from that context to determine what the type of the “corresponding parameter” is.

Resolution:
Revised Text:
Actions taken:
July 29, 2011: received issue

Issue 16445: NamedTuple Needs a Constraint (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.33 NamedTuple

NamedTuple should have a constraint that its argument names all correspond to parameter names of its invocation and that no argument name appears more than once.

Resolution: agreed
Revised Text: In Subclause 13.2.33, add the following constraint: [1] namedTupleArgumentNames The name of a named expression of a named tuple must be the name of a parameter of the invocation the tuple is for. No two named expressions may have the same name.
Actions taken:
July 29, 2011: received issue

Issue 16447: NameExpression Should Override updateAssignments (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.34 NameExpression

NameExpression should override updateAssignments to return the assignments after its derived propertyAccess expression, if it has one (i.e., if it disambiguates to a feature reference).

Resolution: agreed
Revised Text: In Subclause 13.2.34, add the following helper operation: [1] updateAssignments ( ) : AssignedSource [*] If propertyAccess is not empty (i.e., if the referenced name disambiguates to a feature reference), then return the assignments after the propertyAccess expression. Otherwise, return the result of the superclass updateAssignments operation.
Actions taken:
July 29, 2011: received issue

Issue 16448: Problems with NameLeftHandSide Constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.35 NameLeftHandSide

•	There needs to be a constraint on NameLeftHandSide that if its name is qualified, and does not disambiguate to a feature, then it resolves to a parameter of the behavior containing the left-hand side, and, if it disambiguates to a feature, it resolves to a single referent that is a structural feature.

•	In the nameLeftHandSideAssignmentAfterDerivation constraint, if the named left hand side has an index, then the assignments after the left hand side should be the assignments after the index.

•	The derivations for assignmentBefore and assignmentAfter for NameLeftHandSide need to account for the possibility of the name disambiguating to a feature reference

Resolution: agreed
Revised Text: In Subclause 13.2.35: • Add the following constraint: nameLeftHandSideTargetResolution If the target of a name left-hand side is qualified, then, if it does not disambiguate to a feature, it must have a referent that is a parameter of an operation or behavior that is the current scope the left-hand is in, and, if it does disambiguate to a feature, it must have a single referent that is a structural feature. • Replace the text for constraint [1] nameLeftHandSideAssignmentAfterDerivation with: If a name left-hand side has an index, then the assignments after the left-hand side are the same as the assignments after the index. If the left-hand side has no index, but its target disambiguates to a feature reference, then the assignments after the left-hand side are the assignments after the feature expression. Otherwise the assignments after the left-hand side are the same as the assignments before the left-hand side. • Replace the text for constraint [2] nameLeftHandSideAssignmentsBefore with: If the target of a name left-hand side disambiguates to a feature reference, then the assignments before the expression of the feature reference are the assignments before the left-hand side. If a name left-hand side has an index, then the target must either disambiguate to a feature reference or already have an assigned source, and the assignments before the index expression are the assignments before the left-hand side or, if the target disambiguates to a feature reference, the assignments after the expression of the feature reference.
Actions taken:
July 29, 2011: received issue

Issue 16449: PositionalTuple Needs a Constraint (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.40 PositionalTuple

PositionalTuple should have a constraint that it does not have more arguments than its invocation has parameters.

Resolution: agreed
Revised Text: In Subclause 13.2.40, add the following constraint: positionalTupleArguments A positional tuple must not have more arguments than the invocation it is for has parameters.
Actions taken:
July 29, 2011: received issue

Issue 16450: Error in propertyAccessExpressionLowerDerivation (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.41 PropertyAccessExpression

The propertyAccessExpressionLowerDerivation constraint description refers to upper bounds when it should refer to lower bounds

Resolution: agreed
Revised Text: In Subclause 13.2.41 PropertyAccessExpression, in the text of constraint [4] propertyAccessExpressionLowerDerivation, replace two occurrences of “upper” with “lower”. Also make this change in the abstract syntax XMI.
Actions taken:
July 29, 2011: received issue

Issue 16451: QualifiedName::templateName Needs a Description (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.42 QualifiedName
QualifiedName::templateName needs a description

Resolution: agreed
Revised Text: In Subclause 13.2.42, add the following description to the templateName derived property: If this qualified name is for a template binding, then the name of the template for which this qualified name is a binding.
Actions taken:
July 29, 2011: received issue

Issue 16452: Error in qualifiedNameDisambiguationDerivation (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.42 QualifiedName

In the description of qualifiedNameDisambiguationDerivation, “If a qualified name is not ambiguous or it resolves to a namespace…” should be “If a qualified name is not ambiguous or it has a qualification that resolves to a namespace…”

Resolution: agreed
Revised Text: In Subclause 13.2.42, in the description of qualifiedNameDismabiguationDerivation, replace “If a qualified name is not ambiguous or it resolves to a namespace…” with “If a qualified name is not ambiguous or it has a qualification that resolves to a namespace…”
Actions taken:
July 29, 2011: received issue

Issue 16453: SequenceConstructionExpression::typeName May Be Empty (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.46 SequenceConstructionExpression

The description of the sequenceConstructionExpressionType constraint should make it clear that it is legal for the typeName property to be empty (corresponding to a type name notation of “any”).

Resolution: agreed
Revised Text: In Subclause 13.2.46, replace the following constraints, as given: [2] sequenceConstructionExpressionType If the type name of a sequence construction expression is not empty, then it must resolve to a non-template classifier. If the expression does not have multiplicity, then the type name must not be empty and the classifier to which it resolves must be the instantiation of a collection class. [3] sequenceConstructionExpressionTypeDerivation If the type name of a sequence construction expression is not empty, then the type of the expression is the classifier to which the type name resolves.
Actions taken:
July 29, 2011: received issue

Issue 16454: SequenceConstructionExpression Constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.46 SerquenceConstructionExpression

•	SequenceConstructionExpression needs constraints on the type and multiplicity of its sequence elements. However, the rules here (and as stated in Subclause 8.3.15) need to allow for bit string conversion of integer elements for a bit string sequence.

•	The description of the sequenceExpansionExpressionVariableSourceDerivation constraint should also state that the type of the assigned source for the expansion variable is the type of the primary expression and the multiplicity bounds are both 1.

•	SequenceExpansionExpression needs a constraint that no names defined before the argument expression may be reassigned in the argument expression (per the Semantics in Subclause 8.3.19), not just the expansion variable.

•	The description of the sequenceExpansionExpressionListUpperDerivation constraint says “lower bound” when in should say “upper bound”.

Resolution: Agreed. However, only the first bullet in the issue summary is for Subclause 13.2.46 SequenceConstructionExpression. The second bullet is for 13.2.48 SequenceExpansionExpression. The third bullet is for 13.2.49 SequenceExpressionList (not “SequenceExpansionExpressionList”).
Revised Text: In Subclause 8.3.15, in the last paragraph under “Sequence Elements”, replace the last sentence with: If the expression has a sequence element list, and the type name in the type part is not any, then the type of each expression in the list must either conform to the given type or be convertible to it by bit string conversion (see Subclause 8.8 on type conformance and bit string conversion). In Subclause 13.2.46, add the following constraint: sequenceConstructionExpressionElementType If the elements of a sequence construction expression are given by a sequence range, then the expression must have type Integer. If the elements are given by a sequence element list, and the sequence construction expression has a non-empty type, then each expression in the list must have a type that either conforms to the type of the sequence construction expression or is convertible to it by bit string conversion. In Subclause 13.2.48: • In constraint [5] sequenceExpansionExpressionVariableSourceDerivation, add the following at the end of the description: The for the assignment is the type of the primary expression of the sequence expansion expression and the multiplicity lower and upper bounds are 1. • Replace constraint [3] sequenceExpansionExpressionVariableAssignment with the following constraint: sequenceExpansionExpressionAssignmentsAfterArgument The assignments after the argument expression of a sequence expansion expression must be the same as the assignments before the argument expression. In Subclause 13.2.49, in constraint [2] sequenceExpressionListUpperDerivation, in the first sentence, replace “lower bound” with “upper bound” and “lower bounds” with “upper bounds”. In Subclause 13.2.51 SequenceRange, add the following constraint: sequenceRangeExpressionMultiplicity Both expressions in a sequence range must have a multiplicity upper bound of 1.
Actions taken:
July 29, 2011: received issue

Issue 16455: SequenceConstructionExpression Needs to Override updateAssignments (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.46 SequenceConstructionExpression

SequenceConstructionExpression needs to override updateAssignments. For a sequence expression list, the assignments before each element expression should be the assignment after the previous one and the assignments after the sequence construction expression are the assignments after the last element expression. For a sequence range the assignments before both expressions are the assignments before the sequence construction expression and the assignments after the sequence construction expression are the assignments after the expressions. There should also be a constraint on sequence ranges that the same local name cannot be assigned in both expressions

Resolution: agreed
Revised Text: In Subclause 13.2.46, add the following constraint: sequenceConstructionExpressionAssignmentsBefore If the elements of a sequence construction expression are given by a sequence expression list, then the assignments before the first expression in the list are the same as the assignments before the sequence construction expression, and the assignments before each subsequent expression are the assignments after the previous expression. If the elements are given by a sequence range, the assignments before both expressions in the range are the same as the assignments before the sequence construction expression. Add the following helper operation: updateAssignments ( ) : AssignedSource [*] If the elements of the sequence construction expression are given by a sequence expression list, then return the assignments after the last expression in the list (if the list is empty, then return the assignments before the sequence construction expression). If the elements are given by a sequence range, then return the union of the assignments after each of the expressions in the range. In Subclause 13.2.51, add the constraint: sequenceRangeAssignments A local name may be defined or reassigned in at most one of the expressions of a sequence range.
Actions taken:
July 29, 2011: received issue

Issue 16456: SequenceOperationExpression Should Override parameterElements (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.50 SequenceOperationExpression

SequenceOperationExpression should override the parameterElements operation to only return the parameters after the first, since the argument for the first parameter is given by the primary expression not in the tuple.

Resolution: agreed
Revised Text: In Subcaluse 13.2.50, add the following helper operation: parameterElements ( ) : ElementReference [*] Returns the list of parameter elements from the superclass operation, with the first parameter removed (since the argument for the first parameter is given by the primary expression of a sequence operation expression, not in its tuple).
Actions taken:
July 29, 2011: received issue

Issue 16457: SequenceOperationExpression Constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.50 SequenceOperationExpression

•	SequenceOperationExpression needs a constraint that a name may not be assigned in both the primary expression and any tuple argument expression.

•	SequenceOperationExpression should have a derived association with an optional LeftHandSide that is created in the case of an “in place” operation and must have its constraints satisfied. The sequenceOperationExpressionTargetCompatibility constraint should also require that, for an “in place” operation, the primary expression have the form of a left-hand side and, if for a local name, the local name must already exist. 

Resolution: agreed
Revised Text: Add the following derived property: • leftHandSide : LeftHandSide [0..1] The effective left-hand side corresponding to the primary expression, if the sequence operation is “in place” (that is, has a first parameter with direction inout). In the abstract syntax model as shown in Figure 13-85 Invocation Expressions, add an association for this property from SequenceOperationExpression to LeftHandSide. In Subclause 13.2.50, add the following constraints: sequenceOperationExpressionAssignmentsAfter A local name that is assigned in the primary expression of a sequence operation expression may not be assigned in any expression in the tuple of the sequence operation expression. sequenceOperationExpressionLeftHandSideDerivation If the operation of a sequence operation expression has a first parameter whose direction is inout, then the effective left-hand side for the expression is constructed as follows: If the primary is a name expression, then the left-hand side is a name left-hand side with the name from the name expression as its target. If the primary is a property access expression, then the left-hand side is a feature left hand side with the feature reference from the property access expression as its feature. If the primary is a sequence access expression whose primary is a name expression or a property access expression, then the left-hand side is constructed from the primary of the sequence access expression as given previously and the index of the sequence access expression becomes the index of the left-hand side. In constraint [8] sequenceOperationExpressionTargetCompatibility, remove the period at the end of the sentence in the description and add “, the primary expression must have the form of a left-hand side and, if the equivalent left-hand side is for a local name, that name must already exist.”
Actions taken:
July 29, 2011: received issue

Issue 16458: Correction to shiftExpressionOperands Constraint (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.53 ShiftExpression

The description of the shiftExpressionOperands constraint should say “The first operand expression of a shift expression must have the type BitString or Integer. The second operand expression must have the type Integer.” (per Subclause 8.6.3).

Resolution: agreed
Revised Text: In Subclause 13.2.53, replace the description of constraint [3] shiftExpressionOperands with: The first operand expression of a shift expression must have the type BitString or Integer. The second operand expression must have the type Integer.
Actions taken:
July 29, 2011: received issue

Issue 16459: Correction to superInvocationExpressionTarget Constraint (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 13.2.55 SuperInvocationExpression

The superInvocationExpressionImplicitTarget constraint should include the condition that the containing behavior has only a single superclass

Resolution: agreed
Revised Text: In Subclause 13.2.55, in the description for constraint [4] superInvocationExpressionImplicitTarget, remove the period at the end and add “and the context class for the behavior containing the super invocation expression must have exactly one superclass.”
Actions taken:
July 29, 2011: received issue

Issue 16460: Block Assignment Constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 14.2.4 Block

•	The second sentence of the description of the Block::assignmentAfter derived property mentions “statement” twice when it should say “block”.

•	The blockAssignmentsBefore constraint should have the definition “The assignments before the first statement of a block are the same as the assignments before the block.”

Resolution: agreed
Revised Text: In Subclause 14.2.4: • Under Derived Properties, in the second sentence of the description of “assignmentAfter”, change two occurrences of “statement” to “block”. • Under Constraints, add the following text as the body of constraint [2] blockAssignmentsBefore: The assignments before the first statement of a block are the same as the assignments before the block.
Actions taken:
July 29, 2011: received issue

Issue 16462: ForStatement Should Have a Composition Association to Block (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 14.2.12 for Statements

ForStatement should have a composition association with its body Block.

Resolution: agreed
Revised Text: Change the “body” association from ForStatement to Block to be a composition association, both in Figure 14-97 and in the abstract syntax XMI.
Actions taken:
July 29, 2011: received issue

Issue 16463: localNameDeclarationStatementAssignmentsAfter constraint (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause 14.2.15 LocalNameDeclarationStatement

The localNameDeclarationStatementAssignmentsAfter constraint states “The assignments after a local name declaration statement are the assignments before the statement plus a new assignment for the local name defined by the statement.” The assignments should be the assignments after the expression of the statement plus the new assignment (so as to include assignments made in the expression).


Resolution: agreed
Revised Text: In Subclause 14.2.15, under Constraints, in constraint [1] localNameDeclarationStatementAssignementsAfter, in the first sentence, change “the assignments before the statement” to “the assignments after the expression of the statement”.
Actions taken:
July 29, 2011: received issue

Issue 16464: Derivation of LocalNameDeclaration::type (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 14.2.15

The localNameDeclarationTypeDerivation requires the type of the statement to be the type of the expression if no type name is given. However, this is not correct, since the only way that the type name could be empty is if it is given as “any”, in which case the local name should be untyped.

Resolution: agreed
Revised Text: In Subclause 14.2.15, under Constraints, in the body of constraint [6] localNameDeclarationStatementTypeDerivation, replace the second sentence with “Otherwise the type is empty.”
Actions taken:
July 29, 2011: received issue

Issue 16467: SwitchClause Should Have a switchClauseCase Constraint (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 14.2.21 SwitchClause

SwitchClause should have a switchClauseCases constraint the states “All the cases expressions of a switch clause must have a multiplicity no greater than 1.”

Resolution: agreed
Revised Text: In Subclause 14.2.21, under Constraints, add the constraint: [3] switchClauseCases All the case expressions of a switch clause must have a multiplicity no greater than 1.
Actions taken:
July 29, 2011: received issue

Issue 16468: Errors in Descriptions of SwitchStatement constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 14.2.22

•	The description of the switchStatementExpression constraint should be “The expression of a switch statement must have a multiplicity no greater than 1.” 

•	The description of the switchStatementEnclosedStatements constraint should be “A switch statement is the enclosing statement for the statements in all of its switch clauses.”

•	The switchStatementAssignmentsBefore constraint should state that the assignments before the clauses of a switch statement are the assignments after the expression of the switch statement.


Resolution: agreed
Revised Text: In Subclause 14.2.22, under Constraints: • In the body of constraint [3] switchStatementAssignmentsBefore, change “assignments before the switch statement” to “assignments after the expression of the switch statement”. • Add the following body for constraint [5] switchStatementEnclosedStatements: “A switch statement is the enclosing statement for the statements in all of its switch clauses.” • Add the following body for the constraint [6] switchStatementExpression: “A switch statement must have a multiplicity no greater than 1.”
Actions taken:
July 29, 2011: received issue

Issue 16469: ElementImportReference Constraint (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 15.2.8 ElementImportReference

ElementImportReference should have a constraint that its referent must be a packageable element.


Resolution: agreed
Revised Text: In Subclause 15.2.8, under Constraints, replace “None” with: [1] elementImportReferenceReferent The referent of an element import reference must be a packageable element.
Actions taken:
July 29, 2011: received issue

Issue 16470: Errors in ImportedMember (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 15.2.12 ImportedMember

•	The description of ImportedMember::isSameKind is written in terms of distinguishability rather than same kind.

•	An ImportedMember should not generally be considered a feature, even if it is a feature of the namespace it is imported from, since it is not a feature of the namespace it is imported into.


Resolution: • In the case of Alf members, it is appropriate to use the terminology “same kind”. However, in the case of two UML elements, the standard terminology of distinguishability still needs to be used. • No change is required for an ImportedMember no be considered a feature. The isFeature property inherited from Member is false by default and the default value is never changed for an ImportedMember.
Revised Text: In Subclause 15.2.12, under Helper Operations, in the description of operation [2] isSameKindAs, in all the sentences but the last, replace “is distinguishable from” with “is the same kind as”.
Actions taken:
July 29, 2011: received issue

Issue 16472: NamespaceDefinition::ownedMember Should Be Ordered (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 15.2.15 NamespaceDefinition

NamespaceDefinition::ownedMember association should be ordered. (This is important at least for activity and operation parameters.)

Resolution: agreed
Revised Text: In Subclause 15.2.15, under “Synthesized Properties”, after “ownedMember : Member [*]” add “{ordered}”. Also add this to the abstract syntax model as shown in Figures 10-60 Abstract Syntax of Namespace Definition and 15-99 Unit and Namespace Definitions.
Actions taken:
July 29, 2011: received issue

Issue 16473: Description of operationDefinitionRedefinition (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 15.2.16 OperationDefinition

In the description of OperationDefinition::operationDefinitionRedefinition, “signal referent” should be “single referent”.

Resolution: agreed
Revised Text: In Subclause 15.2.16 OperationDefinition, in the text for Constraint [10] operationDefinitionRedefinition, change one occurrence of “signal referent” to “single referent”. Also make this change in the abstract syntax XMI.
Actions taken:
July 29, 2011: received issue

Issue 16474: Constructor Return Type (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 15.2.16 OperationDefinition

OperationDefinition must take into account that the return type of a constructor is not explicitly declared, but is still included in the operation signature (per Subclause 10.5.3.1).


Resolution: This needs to be accounted for in the definitions of the isSameKindAs and matchForStub helper operations.
Revised Text: In Subclause 15.2.16, under “Helper Operations”: • At the end of the description of operation [2] isSameKindAs, add the sentence: “A constructor operation without an explicit return parameter is considered to implicitly have a return parameter, following any other formal parameters, of the same type as the owner of the constructor operation.” • At the end of the description of operation [3] matchForStub, add the sentence: “If this operation definition is a constructor, then it is considered to have an implicit return parameter, following any other formal parameters, with the same type as the class of the operation definition and a multiplicity of 1..1.”
Actions taken:
July 29, 2011: received issue

Issue 16476: Assignments Before a Property Initializer (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 15.2.19 PropertyDefinition

The propertyDefinitionInitializer constraint should also state that there are no assignments before the initializer expression.

Resolution: agreed
Revised Text: In Subclause 15.2.19, under Constraints, in constraint [1] propertyDefinitionInitializer, at the end of the body of the constraint, add the sentence: There are no assignments before an initializer expression.
Actions taken:
July 29, 2011: received issue

Issue 16477: Description of SignalDefinition::isSameKindAs (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: 15.2.21 SignalDefinition

The description of SignalDefinition::isSameKindAs mentions “Reception” where it should say “Signal”.

Resolution: agreed
Revised Text: In Subclause 15.2.21 SignalDefinition, in the text for Helper Operation [2] isSameKindAs, replace one occurrence of “Reception” with “Signal”.
Actions taken:
July 29, 2011: received issue

Issue 16478: Errors in Constraint Names (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclauses: Various subclauses in Part III Abstract Syntax

The following constraint names should be corrected as shown:
•	expressionAssignmentsAfterDerivation -> expressionAssignmentAfterDerivation 
•	bitStringUnaryExpresionIsBitStringConversionDerivation -> bitStringUnaryExpressionIsBitStringConversionDerivation 
•	loopVariableIsCollectionConversionDerivation -> loopVariableDefinitionIsCollectionConversionDerivation 
•	importedElementNotStub -> importedMemberNotStub 
•	importedElementFeatureDerivation -> importedMemberIsFeatureDerivation 
•	forAllOrExistOrOneExpressionTypeDerivation -> forAllOrExistsOrOneExpressionTypeDerivation 
•	forAllOrExistOrOneExpressionLowerDerivation -> forAllOrExistsOrOneExpressionLowerDerivation 
•	forAllOrExistOrOneExpressionUpperDerivation -> forAllOrExistsOrOneExpressionUpperDerivation 
•	forAllOrExistOrOneExpressionArgument -> forAllOrExistsOrOneExpressionArgument 
•	relationalExpressionIsTypeDerivation -> relationalExpressionTypeDerivation 
•	relationalExpressionIsLowerDerivation -> relationalExpressionLowerDerivation 
•	relationalExpressionIsUpperDerivation -> relationalExpressionUpperDerivation 
•	unboundedLiteralExpressionDerivation -> unboundedLiteralExpressionTypeDerivation 
•	namespaceDefinitionMemberDistinguishaibility -> namespaceDefinitionMemberDistinguishability 
•	operationDefinitionIsConstructorDefinition -> operationDefinitionIsDestructorDerivation 
•	operationDefinitionIsDestructorDefinition -> operationDefinitionIsDestructorDerivation 
•	operationDefinitionRedefinedOperationsDerivation -> operationDefinitionRedefinedOperationConstraint 
•	propertyDefinitionIsBitStringConversion -> propertyDefinitionIsBitStringConversionDerivation 
•	incrementOrDecrementExpressionIsDataValueUpdate -> incrementOrDecrementExpressionIsDataValueUpdateDerivation 
•	incrementOrDecrementExpressionFeature -> incrementOrDecrementExpressionFeatureDerivation 
•	incrementOrDecrementExpressionAssignment -> incrementOrDecrementExpressionAssignmentDerivation 

Resolution: agreed
Revised Text: Make the following changes in the text and also in the abstract syntax XMI. In Subclause 13.2.15 Expression, change the name of constraint [1] to “expressionAssignmentAfterDerivation”. In Subclause 13.2.5 BitStringUnaryExpression change the name of constraint [1] to “bitStringUnaryExpressionIsBitStringConversionDerivation”. In Subclause 14.2.16 LoopVariableDefinition, change the name of constraint [8] to “loopVariableDefinitionIsCollectionConversionDerivation”. In Subclause 15.2.12 ImportedMember”: • Change the name of constraint [1] to “importedMemberNotStub”. • Change the name of constraint [2] to “importedMemberIsFeatureDerivation”. In Subclause 13.2.20 ForAllOrExistsOrOneExpression in all the constraint names, change the beginning of the name from “ForAllOrExist…” to “ForAllOrExists…”. In Subclause 13.2.43 RelationalExpression: • Change the name of constraint [1] to “relationalExpressionLowerDerivation”. • Change the name of constraint [2] to “relationalExpressionTypeDerivation”. • Change the name of constraint [4] to “relationalExpressionUpperDerivation”. In Subclause 13.2.61 UnboundedLiteralExpression, change the name of constraint [1] to “unboundedLiteralExpressionTypeDerivation”. In Subclause 15.2.15 NamespaceDefinition, change the name of constraint [2] to “namespaceDefinitionMemberDistinguishability”. In Subclause 15.2.16 OperationDefinition: • Change the name of constraint [4] to “operationDefinitionIsConstructorDerivation”. • Change the name of constraint [5] to “operationDefinitionIsDestructorDerivation”. In Subclause 15.2.19 PropertyDefinition, change the name of constraint [2] to “propertyDefinitionIsBitStringConversionDerivation”. In Subclause 13.2.21 IncrementOrDecrementExpression: • Change the name of constraint [1] to “incrementOrDecrementExpressionAssignmentDerivation”. • Change the name of constraint [5] to “incrementOrDecrementExpressionIsDataValueUpdateDerivation”.
Actions taken:
July 29, 2011: received issue

Issue 16479: Errors in QuickSort Example (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: C.1 Quicksort Activity

In the “functional” QuickSort example:
•	x cannot be set only in the else part of an if statement
•	The sequence operation “remove” should be “removeAt” 
•	The recursive call to “QuickSort” should be “Quicksort”.

Resolution: The first and third bullets are correct. However, the example already uses “removeAt”, not “remove”, so no change is necessary for that. Note also that Annex C should really be Annex B (since it is the second annex).
Revised Text: Re-letter Clause C as Clause B, so Clause C.1 becomes Clause B.1. In Subclause C.1.1 Quicksort Functional Implementation (to become Subclause B.1.1): • Move the content of the else clause of the if statement to be after the if statement and remove the else clause. Revise diagram B-102 to reflect this restructuring. • In the second return statement, replace two occurrences of “QuickSort” with “Quicksort”.
Actions taken:
July 29, 2011: received issue

Issue 16480: Errors in the Online Bookstore Example (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: C.2 Online Bookstore

•	In the example class Order, the statement “accept (OrderDelivery)” should be “accept (OrderDelivered)”. Also, the nested activities have to be operations, because nested activities don’t have the containing class as their context.

•	In the example activity EstablishCustomer, “TIM::current_date” should be replaced with “TIM::GetCurrentDate()”.

•	The ProcessCharge activity should import Ordering::CreditCardCharge::ChargeData.

•	In the graphical model for the Ordering example, the Customer class is shown as having a purchasesMade attribute that is not set in the EstablishCustomer activity, but that activity instead shows a phone attribute being set that is missing from the class.

Resolution: agreed
Revised Text: Re-letter Subclause C.2 to Subclause B.2. In Subclause C.2.1 (to become B.2.1), in Figure B-103, in the Customer class, replace the attribute +purchasesMade : Count with +phone : TelephoneNumber In Subclause C.2.2.1 Activity EstablishCustomer (to become B.2.2.4), replace “TIM::current_date” with “TIM::GetCurrentDate()”. In Subclause C.2.2.2 Activity ProcessCharge (to become B.2.2.2), at the beginning, add the line private import Ordering::CreditCardCharge::ChargeData; In Subclause C.2.4 Class Order (to become Subclause B.2.4): • At the end of the class part of active class Order, in the section commented with “See Note 2”, replace: private activity EstablishCustomer(); // See Note 2 private activity ProcessCharge(); private activity DeclineCharge(); private activity PackAndShip(); private activity NotifyOfDelivery(); with private EstablishCustomer(); // See Note 2 private ProcessCharge(); private DeclineCharge(); private PackAndShip(); private NotifyOfDelivery(); • In the classifier behavior part of active class Order: o Replace the statement “EstablishCustomer();” with “this.EstablishCustomer();” o Replace the statement “ProcessCharge();” with “this.ProcessCharge();” o Replace the statement “DeclineCharge();” with “this.DeclineCharge();” o Replace the statement “PackAndShip();” with “this.PackAndShip();” o Replace the statement “NotifyOfDelivery();” with “this.NotifyOfDelivery();” o Replace the statement “accept(OrderDelivery);” with “accept(OrderDelivered);” • Under Notes, replace 2. Rather than standalone activities, the effective “entry behaviors” are now specified as privately owned activities of class Order. However, other than the different containing namespace, the definitions of these activities are exactly the same as given in Annex C.2.2. (Note that fUML semantics ensures that the correct context object for “this” references is propagated to activities called from the body of a classifier behavior.) with 2. Rather than standalone activities, the effective “entry behaviors” are now specified as privately owned operations of class Order. However, other than the different containing namespace, the definitions of the activities that provide the methods for these operations are exactly the same as given in Annex B.2.2. (Note that fUML semantics ensures that the correct context object for “this” references is propagated to operations called from the body of a classifier behavior.)
Actions taken:
July 29, 2011: received issue

Issue 16481: Errors in the Property Management Service Example (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: C.3 Property Management Service

•	To be consistent with the implementation of ‘create reply’, the association of Property to Location should be optional.

•	In the ‘create property’ example, the mandatory ‘property type’ needs to be set in the propertyData instance creation expression.

•	In the establish operation, two occurrences of “request.name” should be replaced with “request.’property name’”.

•	In the acquire, update, delete and retrieve operations, the reply and error out parameters need to be set to null values before the if statement and the select expressions should have “[1]” at the end.

•	In the acquire, update and dispose operations, the reference to ‘Property Type’ should be ‘Property Status’ and the assignment in the second if clause should be equality.

•	The update operation needs to import 'Property Management'::'Data Model'::Locations::Location. Also, “request.’property location’” should be “request.’property location identifier’” (three times), “request.’serial number’ “should be “request.’property serial number’” and “request.size” should be “request.’property size’”.

Resolution: Agreed, except that: • The second bullet should reference the ‘create reply’ activity (which has a propertyData instance creation expression) rather than ‘create property) which does not. • In the fifth bullet, the issue with assignment seems to have already been resolved. Revised Text:
Revised Text: Re-letter Subclause C.3 to B.3. In Subclause C.3.1 The Property Management Model (to become Subclause B.3.1), in Figure B-107, in the Property_Location association, change the multiplicity of the location association to 0..1. In Subclause C.3.4.3 Property Management Service Implementation (to become Subclause B.3.4.1): • Under ‘create reply’, in the call to “new 'Property Data'”, add the argument 'property type' => property instanceof 'Personal Property'? 'Property Type'::personal: 'Property Type'::real And, in the second if statement, remove the statements propertyData.'property type' = 'Property Type'::personal; and propertyData.'property type' = 'Property Type'::real; • Under “establish”, replace two occurrences of “request.name” with “request.'property name'”. • Under “acquire”, “update” and “dispose”: o At the end of the select expression at the beginning of the body of each activity, add “[1]”. o Before the first if statement in each activity, add error = null; reply = null; • Under “acquire”, “update”, “delete” and “retrieve”, replace “'Property Type'” with “'Property Status'”. • Under “update”: o Between the two existing import declarations, add the line private import 'Property Management'::'Data Model'::Locations::Location; o In the body of the action, replace “request.'property location'” with “request.'property location identifier'” (three times), “request.'serial number'” with “request.'property serial number'” and “request.size” with “request.'property size'”.
Actions taken:
July 29, 2011: received issue

Issue 16482: Errors in the Collection Classes Implemenation (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subclause: C.4 Alf Standard Library Collection Classes Implementation

•	All the collection implementation classes have an incorrect namespace declaration containing “Collections::CollectionClasses”, rather than just “CollectionClasses”. They also import “Alf::Library::FunctionBehaviors::Collections::CollectionFunctions” rather than “Alf::Library::CollectionFunctions”. 
•	Return types should not be given on constructors. 
•	Several classes have destructors that call CollectionImpl<T>::destroy, but CollectionImpl has no such destructor. 
•	The classes that have multiple specializations have to redefine indistinguishable operations inherited from both classes. 
•	In C.4.2 CollectionImpl, 
o	excludesAll and includesAll have seq as their parameter, but incorrectly use the name “element” in their bodies. 
o	In the first statement of removeOne, “self” is used instead of “this”. 
o	In the last statement of retainAll, there should not be “()” after “preSize”. 
•	In C.4.3 OrderedCollectionImpl, 
o	In the body of addAt, the call to “addAllAt” should be proceeded by “this.”. 
o	In the body of indexOf, the reference to “indexof” should be “indexOf”. 
•	In C.4.5 OrderedSet, 
o	In the body of equals, “OrdredCollcetionImpl” should be “OrderedCollectionImpl”. 
o	In the body of subOrderedSet, the constructor “OrderedSet” should be “OrderedSet<T>”. 
•	In C.4.6 Bag, the super constructor call should be to CollectionImpl, not OrderedCollection. 
•	In C.4.7 List, 
o	 CollectionClasses::Impl::List should specialize CollectionClasses::List, not CollectionClasses::OrderedSet. 
o	subList should return List<T>, not OrderedSet<T>. 
o	In subList, the constructor “List” should be “List<T>”. 
o	The parameter for setContent should be a “sequence”. 
•	In C.4.8 Queue, 
o	Queue should specialize CollectionClasses::Queue, not CollectionClasses::Set. 
o	In the body of removeFirst, “toSequence” should be “toSequence()”. 
o	removeFirstOne should have a return multiploicity of 1..1. 
o	The body of removeFirstOne should return the argument element or null, depending on whether the element was actually found for deletion. 
•	In C.4.9 Deque, 
o	Deque should specialize CollectionClasses::Deque in addition to Queue. 
o	The super constructor call should be super.Queue<T>::Queue, not just super, and the super destructor call should be super.Queue<T>::destroy. 
o	The implementation of removeLastOne removes all occurrences of the given element, not just the last one. 
o	toSequence cannot return “this.content”, since “content” is private to Queue. 
o	The (constructor) operation Queue is inherited from both superclasses and must be redefined. 

Resolution: agreed
Revised Text: Re-letter Subclause C.4 to B.4. In each of Subclauses C.4.1 to C.4.10 (to become B.4.1 to B.4.10), replace the code with the following (but leave the non-code text unchanged): • In C.4.1 (B.4.1): namespace Alf::Library::CollectionClasses; package Impl { private abstract class CollectionImpl<T>; private abstract class OrderedCollectionImpl<T> specializes CollectionImpl<T>; public class Set<T> specializes CollectionImpl<T>, CollectionClasses::Set<T>; public class Bag<T> specializes CollectionImpl<T>, CollectionClasses::Bag<T>; public class OrderedSet<T> specializes OrderedCollectionImpl<T>, CollectionClasses::OrderedSet<T>; public class List<T> specializes OrderedCollectionImpl<T>, CollectionClasses::List<T>; public class Queue<T> specializes CollectionImpl<T>, CollectionClasses::Queue<T>; public class Deque<T> specializes Queue<T>, CollectionClasses::Deque<T>; public class Map<Key,Value> specializes CollectionClasses::Map<Key,Value>; } • In C.4.2 (B.4.2): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The base concrete implementation for all the standard library collection classes. */ abstract class CollectionImpl<T> { @Create protected CollectionImpl(in seq: T[0..*] sequence) { this.setContent(seq); } protected abstract setContent (in seq: T[0..*] sequence); public abstract toSequence (): T[0..*] sequence; public add (in element: T): Boolean { result = this.excludes(element); this.setContent(this.toSequence()->including(element)); return result; } public addAll (in seq: T[0..*] sequence): Boolean { preSize = this.size(); this.setContent(this.toSequence()->union(seq)); return this.size() > preSize; } public clear () { this.setContent(null); } public count (in element: T): Integer { return this.toSequence()->count(element); } public equals (in seq: T[0..*] sequence): Boolean { return this.toSequence()->equals(seq); } public excludes (in element: T): Boolean { return this.toSequence()->excludes(element); } public excludesAll (in seq: T[0..*] sequence): Boolean { return this.toSequence()->excludesAll(seq); } public includes (in element: T): Boolean { return this.toSequence()->includes(element); } public includesAll (in seq: T[0..*] sequence): Boolean { return this.toSequence()->includesAll(seq); } public isEmpty (): Boolean { return this.toSequence()->isEmpty(); } public notEmpty (): Boolean { return this.toSequence()->notEmpty(); } public remove (in element: T): Integer { result = this.count(element); this.setContent(this.toSequence()->excluding(element)); return result; } public removeAll (in seq: T[0..*] sequence): Boolean { preSize = this.size(); this.setContent(this.toSequence()->difference(seq)); return this.size() < preSize; } public removeOne (in element: T): Boolean { result = this.includes(element); this.setContent(this.toSequence()->excludingOne(element)); return result; } public replace (in element: T, in newElement: T): Integer { result = this.count(element); this.setContent(this.toSequence()->replacing(element, newElement)); return result; } public replaceOne (in element: T, in newElement: T): Boolean { result = this.includes(element); this.setContent(this.toSequence()->replacingOne(element, newElement)); return result; } public retainAll (in seq: T[0..*] sequence): Boolean { preSize = this.size(); this.setContent(this.toSequence()->intersection(seq)); return this.size() < preSize; } public size (): Integer { return this.toSequence()->size(); } } • In C.4.3 (B.4.3): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The base concrete implementation for the standard library ordered collection classes */ abstract class OrderedCollectionImpl<T> specializes CollectionImpl<T> { @Create protected OrderedCollectionImpl(in seq: T[0..*] sequence) { super(seq); } public addAllAt (in index: Integer, in seq: T[0..*] sequence): Boolean { preSize = this.size(); this.setContent(this.toSequence()->includeAllAt(index, seq)); return this.size() > preSize; } public addAt (in index: Integer, in element: T): Boolean { return this.addAllAt(index, element); } public at (in index: Integer): T[0..1] { return this.toSequence()->at(index); } public first (): T[0..1] { return this.at(1); } public indexOf (in element: T) : Integer[0..1] { return this.toSequence()->indexOf(element); } public last (): T[0..1] { return this.at(this.size()); } public removeAt (in index: Integer): T[0..1] { result = this.at(index); this.setContent(this.toSequence()->excludeAt(index)); return result; } public replaceAt (in index: Integer, in element: T): T[0..1] { result = this.at(index); this.setContent(this.toSequence()->replacingAt(index, element)); return result; } } • In C.4.4 (B.4.4): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The concrete implementation of the standard library template Set class. */ class Set<T> specializes CollectionImpl<T>, CollectionClasses::Set<T> { private content: T[0..*]; @Create public Set (in seq: T[0..*] sequence) { super.CollectionImpl(seq); } @Destroy public destroy () { } private setContent (in seq: T[0..*] sequence) { this.content = seq; } public add (in element: T): Boolean { return super.CollectionImpl<T>::add(element); } public addAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::addAll(seq->toOrderedSet()); } public clear () { super.CollectionImpl<T>::clear(); } public count (in element: T): Integer { return super.CollectionImpl<T>::count(element); } public equals (in seq: T[0..*] sequence): Boolean { set = seq->toOrderedSet(); return this.size() == set->size() && this.includesAll(set); } public excludes (in element: T): Boolean { return super.CollectionImpl<T>::excludes (element); } public excludesAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::excludesAll(seq->toOrderedSet()); } public includes (in element: T): Boolean { return super.CollectionImpl<T>::includes(element); } public includesAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::includesAll(seq->toOrderedSet()); } public isEmpty (): Boolean { return super.CollectionImpl<T>::isEmpty(); } public notEmpty (): Boolean { return super.CollectionImpl<T>::notEmpty(); } public remove (in element: T): Integer { return super.CollectionImpl<T>::remove(element); } public removeAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::removeAll(seq); } public removeOne (in element: T): Boolean { return super.CollectionImpl<T>::removeOne(element); } public replace (in element: T, in newElement: T): Integer { return super.CollectionImpl<T>::replace(element, newElement); } public replaceOne (in element: T, in newElement: T): Boolean { return super.CollectionImpl<T>::replaceOne(element, newElement); } public retainAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::retainAll(seq); } public size (): Integer { return super.CollectionImpl<T>::size(); } public toSequence (): T[0..*] sequence { return this.content; } } • In C.4.5 (B.4.5): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The concrete implementation of the standard library template OrderedSet class. */ class OrderedSet<T> specializes OrderedCollectionImpl<T>, CollectionClasses::OrderedSet<T> { private content: T[0..*] ordered; @Create public OrderedSet (in seq: T[0..*] sequence) { super.OrderedCollectionImpl(seq->toOrderedSet()); } @Destroy public destroy () { } private setContent(in seq: T[0..*] sequence) { this.content = seq; } public add (in element: T): Boolean { return super.OrderedCollectionImpl<T>::add(element); } public addAt (in index: Integer, in element: T): Boolean { return super.OrderedCollectionImpl<T>::addAt(index, element); } public addAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::addAll(seq->toOrderedSet()); } public addAllAt (in index: Integer, in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::addAllAt(index, seq->toOrderedSet()); } public at (in index: Integer): T[0..1] { return super.OrderedCollectionImpl<T>::at(index); } public clear () { super.OrderedCollectionImpl<T>::clear(); } public count (in element: T): Integer { return super.OrderedCollectionImpl<T>::count(element); } public equals (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::equals(seq->toOrderedSet()); } public first (): T[0..1] { return super.OrderedCollectionImpl<T>::first(); } public indexOf (in element: T) : Integer[0..1] { return super.OrderedCollectionImpl<T>::indexOf(element); } public last (): T[0..1] { return super.OrderedCollectionImpl<T>::last(); } public excludes (in element: T): Boolean { return super.OrderedCollectionImpl<T>::excludes (element); } public excludesAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::excludesAll(seq->toOrderedSet()); } public includes (in element: T): Boolean { return super.OrderedCollectionImpl<T>::includes(element); } public includesAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::includesAll(seq->toOrderedSet()); } public isEmpty (): Boolean { return super.OrderedCollectionImpl<T>::isEmpty(); } public notEmpty (): Boolean { return super.OrderedCollectionImpl<T>::notEmpty(); } public remove (in element: T): Integer { return super.OrderedCollectionImpl<T>::remove(element); } public removeAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::removeAll(seq); } public removeAt (in index: Integer): T[0..1] { return super.OrderedCollectionImpl<T>::removeAt(index); } public removeOne (in element: T): Boolean { return super.OrderedCollectionImpl<T>::removeOne(element); } public replace (in element: T, in newElement: T): Integer { return super.OrderedCollectionImpl<T>::replace(element, newElement); } public replaceAt (in index: Integer, in element: T): T[0..1] { result = this.at(index); if (result->notEmpty()) { this.remove(result); this.addAt(index, element); } return result; } public replaceOne (in element: T, in newElement: T): Boolean { return super.OrderedCollectionImpl<T>::replaceOne(element, newElement); } public retainAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::retainAll(seq); } public size (): Integer { return super.OrderedCollectionImpl<T>::size(); } public subOrderedSet (in lower: Integer, in upper: Integer): CollectionClasses::OrderedSet<T> { return new OrderedSet<T>(this.toSequence()->subsequence(lower, upper)); } public toSequence(): T[0..*] sequence { return this.content; } } • In C.4.6 (B.4.6): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The concrete implementation of the standard library template Bag class. */ class Bag<T> specializes CollectionImpl<T>, CollectionClasses::Bag<T> { private content: T[0..*] nonunique; @Create public Bag (in seq: T[0..*] sequence) { super.CollectionImpl(seq); } @Destroy public destroy () { } private setContent(in seq: T[0..*] sequence) { this.content = seq; } public add (in element: T): Boolean { return super.CollectionImpl<T>::add(element); } public addAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::addAll(seq); } public clear () { super.CollectionImpl<T>::clear(); } public count (in element: T): Integer { return super.CollectionImpl<T>::count(element); } public equals (in seq: T[0..*] sequence): Boolean { return this.size() == seq->size() && this.includesAll(seq); } public excludes (in element: T): Boolean { return super.CollectionImpl<T>::excludes (element); } public excludesAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::excludesAll(seq); } public includes (in element: T): Boolean { return super.CollectionImpl<T>::includes(element); } public includesAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::includesAll(seq); } public isEmpty (): Boolean { return super.CollectionImpl<T>::isEmpty(); } public notEmpty (): Boolean { return super.CollectionImpl<T>::notEmpty(); } public remove (in element: T): Integer { return super.CollectionImpl<T>::remove(element); } public removeAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::removeAll(seq); } public removeOne (in element: T): Boolean { return super.CollectionImpl<T>::removeOne(element); } public replace (in element: T, in newElement: T): Integer { return super.CollectionImpl<T>::replace(element, newElement); } public replaceOne (in element: T, in newElement: T): Boolean { return super.CollectionImpl<T>::replaceOne(element, newElement); } public retainAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::retainAll(seq); } public size(): Integer { return super.CollectionImpl<T>::size(); } public toSequence(): T[0..*] sequence { return this.content; } } • In C.4.7 (B.4.7): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The concrete implementation of the standard library template List class. */ class List<T> specializes OrderedCollectionImpl<T>, CollectionClasses::List<T> { private content: T[0..*] sequence; @Create public List (in seq: T[0..*] sequence) { super.OrderedCollectionImpl(seq); } @Destroy public destroy () { } private setContent(in seq: T[0..*] sequence) { this.content = seq; } public add (in element: T): Boolean { return super.OrderedCollectionImpl<T>::add(element); } public addAt (in index: Integer, in element: T): Boolean { return super.OrderedCollectionImpl<T>::addAt(index, element); } public addAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::addAll(seq); } public addAllAt (in index: Integer, in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::addAllAt(index, seq); } public at (in index: Integer): T[0..1] { return super.OrderedCollectionImpl<T>::at(index); } public clear () { super.OrderedCollectionImpl<T>::clear(); } public count (in element: T): Integer { return super.OrderedCollectionImpl<T>::count(element); } public equals (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::equals(seq); } public first (): T[0..1] { return super.OrderedCollectionImpl<T>::first(); } public indexOf (in element: T) : Integer[0..1] { return super.OrderedCollectionImpl<T>::indexOf(element); } public last (): T[0..1] { return super.OrderedCollectionImpl<T>::last(); } public excludes (in element: T): Boolean { return super.OrderedCollectionImpl<T>::excludes (element); } public excludesAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::excludesAll(seq); } public includes (in element: T): Boolean { return super.OrderedCollectionImpl<T>::includes(element); } public includesAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::includesAll(seq); } public isEmpty (): Boolean { return super.OrderedCollectionImpl<T>::isEmpty(); } public notEmpty (): Boolean { return super.OrderedCollectionImpl<T>::notEmpty(); } public remove (in element: T): Integer { return super.OrderedCollectionImpl<T>::remove(element); } public removeAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::removeAll(seq); } public removeAt (in index: Integer): T[0..1] { return super.OrderedCollectionImpl<T>::removeAt(index); } public removeOne (in element: T): Boolean { return super.OrderedCollectionImpl<T>::removeOne(element); } public replace (in element: T, in newElement: T): Integer { return super.OrderedCollectionImpl<T>::replace(element, newElement); } public replaceAt (in index: Integer, in element: T): T[0..1] { return super.OrderedCollectionImpl<T>::replaceAt(index, element); } public replaceOne (in element: T, in newElement: T): Boolean { return super.OrderedCollectionImpl<T>::replaceOne(element, newElement); } public retainAll (in seq: T[0..*] sequence): Boolean { return super.OrderedCollectionImpl<T>::retainAll(seq); } public size (): Integer { return super.OrderedCollectionImpl<T>::size(); } public subList (in lower: Integer, in upper: Integer): CollectionClasses::List<T> { return new List<T>(this.toSequence()->subsequence(lower, upper)); } public toSequence(): T[0..*] sequence { return this.content; } } • In C.4.8 (B.4.8): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The concrete implementation of the standard library template Queue class. */ class Queue<T> specializes CollectionImpl<T>, CollectionClasses::Queue<T> { private content: T[0..*] sequence; @Create public Queue (in seq: T[0..*] sequence) { super.CollectionImpl(seq); } @Destroy public destroy () { } protected setContent (in seq: T[0..*] sequence) { this.content = seq; } public add (in element: T): Boolean { return super.CollectionImpl<T>::add(element); } public addAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::addAll(seq); } public addLast (in element : T): Boolean { return this.add(element); } public clear () { super.CollectionImpl<T>::clear(); } public count (in element: T): Integer { return super.CollectionImpl<T>::count(element); } public equals (in seq: T[0..*] sequence): Boolean { return this.size() == seq->size() && this.includesAll(seq); } public excludes (in element: T): Boolean { return super.CollectionImpl<T>::excludes (element); } public excludesAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::excludesAll(seq); } public first(): T[0..1] { return this.toSequence()->first(); } public includes (in element: T): Boolean { return super.CollectionImpl<T>::includes(element); } public includesAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::includesAll(seq); } public isEmpty (): Boolean { return super.CollectionImpl<T>::isEmpty(); } public notEmpty (): Boolean { return super.CollectionImpl<T>::notEmpty(); } public remove (in element: T): Integer { return super.CollectionImpl<T>::remove(element); } public removeAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::removeAll(seq); } public removeFirst (): T[0..1] { result = this.toSequence()->first(); this.setContent(this.toSequence()->subsequence(2,this.size())); return result; } public removeFirstOne (in element: T): T[0..1] { return this.removeOne(element)? element: null; } public removeOne (in element: T): Boolean { return super.CollectionImpl<T>::removeOne(element); } public replace (in element: T, in newElement: T): Integer { return super.CollectionImpl<T>::replace(element, newElement); } public replaceOne (in element: T, in newElement: T): Boolean { return super.CollectionImpl<T>::replaceOne(element, newElement); } public retainAll (in seq: T[0..*] sequence): Boolean { return super.CollectionImpl<T>::retainAll(seq); } public size(): Integer { return super.CollectionImpl<T>::size(); } public toSequence (): T[0..*] sequence { return this.content; } } • In C.4.9 (B.4.9): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The concrete implementation of the standard library template Deque class. */ class Deque<T> specializes Queue<T>, CollectionClasses::Deque<T> { @Create public Deque (in seq: T[0..*] sequence) { super.Queue<T>::Queue(seq); } @Destroy public destroy () { super.Queue<T>::destroy(); } @Create private Queue (in seq: T[0..*] sequence) { this.Deque(seq); } public add (in element: T): Boolean { return super.Queue<T>::add(element); } public addAll (in seq: T[0..*] sequence): Boolean { return super.Queue<T>::addAll(seq); } public addFirst (in element: T): Boolean { this.setContent(this.toSequence()->includeAt(1, element)); return true; } public addLast (in element : T): Boolean { return this.add(element); } public clear () { super.Queue<T>::clear(); } public count (in element: T): Integer { return super.Queue<T>::count(element); } public equals (in seq: T[0..*] sequence): Boolean { return this.size() == seq->size() && this.includesAll(seq); } public excludes (in element: T): Boolean { return super.Queue<T>::excludes (element); } public excludesAll (in seq: T[0..*] sequence): Boolean { return super.Queue<T>::excludesAll(seq); } public first(): T[0..1] { return this.toSequence()->first(); } public includes (in element: T): Boolean { return super.Queue<T>::includes(element); } public includesAll (in seq: T[0..*] sequence): Boolean { return super.Queue<T>::includesAll(seq); } public isEmpty (): Boolean { return super.Queue<T>::isEmpty(); } public last (): T[0..1] { return this.toSequence()->last(); } public notEmpty (): Boolean { return super.Queue<T>::notEmpty(); } public remove (in element: T): Integer { return super.Queue<T>::remove(element); } public removeAll (in seq: T[0..*] sequence): Boolean { return super.Queue<T>::removeAll(seq); } public removeFirst (): T[0..1] { result = this.toSequence()->first(); this.setContent(this.toSequence()->subsequence(2,this.size())); return result; } public removeFirstOne (in element: T): T[0..1] { return this.removeOne(element)? element: null; } public removeLast (): T[0..1] { result = this.last(); this.setContent(this.toSequence()->subsequence(1,this.size()-1)); return result; } public removeLastOne (in element: T): T[0..1] { n = this.size(); for (i in 1..n) { e = this.toSequence()->at(n - i + 1); if (e == element) { this.setContent(this.toSequence()->excludeAt(i)); return e; } } return null; } public removeOne (in element: T): Boolean { return super.Queue<T>::removeOne(element); } public replace (in element: T, in newElement: T): Integer { return super.Queue<T>::replace(element, newElement); } public replaceOne (in element: T, in newElement: T): Boolean { return super.Queue<T>::replaceOne(element, newElement); } public retainAll (in seq: T[0..*] sequence): Boolean { return super.Queue<T>::retainAll(seq); } public size(): Integer { return super.Queue<T>::size(); } public toSequence (): T[0..*] sequence { return super.Queue<T>::toSequence(); } } • In C.4.10 (B.4.10): namespace Alf::Library::CollectionClasses::Impl; private import Alf::Library::CollectionFunctions::*; /** The concrete implementation of the standard library template Map class. */ class Map<Key, Value> specializes CollectionClasses::Map<Key,Value> { private entries: Entry[0..*]; @Create public Map (in entries: Entry[0..*]) { this.putAll(entries); } @Destroy public destroy () { } private indexOf(in key: Key): Integer[0..1] { return this.entries.key->indexOf(key); } public entries (): CollectionClasses::Set<Entry> { return new Set<Entry>(this.entries); } public clear () { this.entries = null; } public excludesAll (in entries: Entry[0..*]): Boolean { return this.entries->excludesAll(entries); } public get (in key: Key): Value[0..1] { return this.entries->select e (e.key == key)[1].value; } public includesAll (in entries: Entry[0..*]): Boolean { return this.entries->includesAll(entries); } public includesKey (in key: Key): Boolean { return this.entries.key->includes(key); } public includesValue (in value: Value[0..1]): Boolean { return this.entries.value->includes(value); } public isEmpty (): Boolean { return this.entries->isEmpty(); } public keys (): CollectionClasses::Set<Key> { return new Set<Key>(this.entries.key); } public notEmpty (): Boolean { return this.entries->notEmpty(); } public put (in key: Key, in value: Value[0..1]): Value[0..1] { result = this.remove(key); this.entries->add(new Entry(key,value)); return result; } public putAll (in entries: Entry[0..*]) { entries->iterate e (this.put(e.key, e.value)); } public remove (in key: Key): Value[0..1] { result = this.get(key); this.entries = this.entries->reject e (e.key == key); return result; } public removeAll (in keys: Key[0..*]) { keys->iterate k (this.remove(k)); } public size (): Integer { this.entries->size(); } public toSequence (): Entry[0..*] sequence { return this.entries; } public values (): CollectionClasses::Bag<Value> { return new Bag<Value>(this.entries.value); } }
Actions taken:
July 29, 2011: received issue

Issue 16586: Typo in sequence functions? (alf-ftf)

Click
here for this issue's archive.
Source: Commissariat a l Energie Atomique-CEA (Dr. Arnaud Cuccuru, arnaud.cuccuru(at)cea.fr)
Nature: Uncategorized Issue
Severity:
Summary:
I think there is a typo page 184:

 

Difference

(in seq1: any[*] sequence,

in seq2: any[*] sequence nonunique):

any[*] sequence

 

it’s not necessary to show “nonunique” for seq2.

 

I don’t recall having seen something about that in existing issues (sorry if I missed it). I’ll raise an issue for that.

 


Resolution: agreed
Revised Text: In Table 11-14, page 184, column “Function Signature”, replace the signature of function “Difference” with: Difference (in seq1: any[*] sequence, in seq2: any[*] sequence): any[*] sequence
Actions taken:
October 10, 2011: received issue

Issue 16591: Problem with parameters of CollectionFunctions::removeAll (alf-ftf)

Click
here for this issue's archive.
Source: Commissariat a l Energie Atomique-CEA (Dr. Arnaud Cuccuru, arnaud.cuccuru(at)cea.fr)
Nature: Clarification
Severity: Minor
Summary:
Currently, the signature of CollectionFunctions::removeAll is:


removeAll<T> (inout seq: T[*] sequence, in element: T)


According to the associated description, it should probably be (taking into account issue 16426 which requires a return parameter):


removeAll<T> (inout seq1: T[*] sequence, in seq2:T[*] sequence) : T[*] sequence

And the description should also be corrected to read “Remove all elements of seq2 from seq1” (“from” instead of “to”).

Resolution: agreed
Revised Text: In Table 11-15, page 189, column “Activity Signature”, replace the signature of activity “removeAll” with: removeAll<T> (inout seq1: T[*] sequence, in seq2: T[*] sequence): T[*] sequence In Table 11-15, page 189, column “Description”, replace the description of activity “removeAll” with: Remove all elements of seq2 from seq1. seq1 = difference(seq1,seq2)
Actions taken:
October 12, 2011: received issue

Issue 16592: Problem with parameters of CollectionFunctions::replaceOne (alf-ftf)

Click
here for this issue's archive.
Source: Commissariat a l Energie Atomique-CEA (Dr. Arnaud Cuccuru, arnaud.cuccuru(at)cea.fr)
Nature: Clarification
Severity: Minor
Summary:
The signature of replaceOne is :
replaceOne<T> (in seq: T[*] sequence, in element: T, in newElement: T): T[*] sequence
 
The direction of parameter “seq” should probably be “inout”.

Resolution: agreed
Revised Text: In table 11-15, page 189, column “Activity Signature”, replace the signature of activity “removeOne” with: replaceOne<T> (inout seq: T[*] sequence, in element: T, in newElement: T): T[*] sequence
Actions taken:
October 12, 2011: received issue

Issue 16606: Should be allowed to use return statement in all behaviors (alf-ftf)

Click
here for this issue's archive.
Nature: Revision
Severity: Significant
Summary:
The Alf standard says
"A return statement may only be used within the definition of a behavior that has a return parameter."
We think it must be allowed to always use a return statement. If the context behavior has no return parameter then no expression should be provided in the return statement.

Resolution: This is a duplicate of Issue 16419.
Revised Text:
Actions taken:
October 14, 2011: received issue

Issue 17508: Errors in Subclause 8.2 (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Errors in Subclause 8.2

Subclause: 8.2 Qualified Names

 

·         In the example at the end of Subclause 8.2 Qualified Names it says “The standard library class Map has two template parameters, K and V.” Actually, the template parameters are “Key” and “Value”.

 

·         The references to UML specification subclauses in Subclause 8.2 are all off by one (e.g., 7.3.34 instead of 7.3.35 for Namespace) for UML 2.4.


Resolution: Agreed on the first bullet. On the second bullet, it is actually only references to subclauses with numbers greater than 7.3.28 that are wrong, because the UML 2.4.1 inserted a new Subclause 7.3.29 for LiteralReal.
Revised Text: • In the opening paragraph, make the following replacements: o 7.3.33 to 7.3.34 o 7.3.34 to 7.3.35 o 7.3.55 to 7.3.56 o 7.3.37 to 7.3.38 o 7.3.39 to 7.3.40 • Under Semantics, in the second paragraph, make the following replacements: o 7.3.34 to 7.3.35 o 7.3.55 to 7.3.56 o 7.3.39 to 7.3.40 • Under Semantics, “Type Names”, in the first paragraph, replace 7.3.51 with 7.3.52. • Replace the last paragraph of the subclause, including the three code examples, with: The standard library class Map has two template parameters, Key and Value. The following are all equivalent bindings for this template. Map<String, Definition> Map<Key=>String, Value=>Definition> Map<Value=>Definition, Key=>String>
Actions taken:
July 19, 2012: received issue

Issue 17510: Error in Data Value Creation Expression (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Error in Data Value Creation Expression

Subclause: 8.3.12 Instance Creation Expressions

 

In the second paragraph under “Data Value Creation Expression” in Subclause 8.3.12 Instance Creation Expressions, it says “Each argument expression must be to the corresponding attribute…”. This should be “Each argument expression must be assignable to the corresponding attribute…”.


Resolution: agreed
Revised Text: In Subclause 8.3.12, under Semantics, “Data Value Creation Expression”, in the second paragraph, second sentence, insert “assignable” after “Each argument expression must be”.
Actions taken:
July 19, 2012: received issue

Issue 17511: SequenceExpressionList::element should be ordered (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: SequenceExpressionList::element should be ordered

Subclauses: 8.3.15 Sequence Construction Expressions, 13.1 Overview

 

Since a SequenceExpressionList represents an ordered list of expressions, clearly SequenceExpressionList::element should be ordered.


Resolution: agreed
Revised Text: In Subclause 8.3.15, Figure 8-16, and Subclause 13.1, Figure 13-87, make the SequenceExpressionList::element association end ordered.
Actions taken:
July 19, 2012: received issue

Issue 17513: Error in bit string conversion (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Error in bit string conversion

Subclause: 8.8 Assignment Expressions

 

In Subclause 8.8 Assignment Expressions, under “Assignability”, the function referenced for bit string conversion should be ToBitString, not ToInteger.


Resolution: agreed
Revised Text: In Subclause 8.8, under Semantics, “Assignability”, in the list item “4. Bit String Conversion”, third sentence, replace “BitStringFunctions::toInteger” with “BitStringFunctions::ToBitString”.
Actions taken:
July 19, 2012: received issue

Issue 17514: @determined should be @determinate (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: @determined should be @determinate

Subclauses: 9.8 if Statement, 9.9 switch Statement, 14.2.13 IfStatement, 14.2.22 SwitchStatement

 

The @determined annotation on if and switch statements should be @determinate, to correspond to the ConditionalNode attribute isDeterminate.


Resolution: agreed
Revised Text: In Subclause 9.8: • Under Examples, in the second example, replace “@determined” by “@determinate”. • Under Semantics, “Annotations”, in the first paragraph, replace “@determined” by “@determinate” (twice). In Subclause 9.9, under Semantics, “Annotations”, in the first paragraph, replace “@determined” by “@determinate” (twice). In Subclause 14.1, Figure 14-96, in the classes IfStatement and SwitchStatement, change the name of the attribute “isDetermined” to “isDeterminate”. In Subclause 14.2.13: • Change the name of constraint [5] to “ifStatementIsDeterminateDerivation” and, in its body, change “@determined” to “@determinate”. • In the body of helper operation [1] annotationAllowed, change “@determined” to “@determinate”. In Subclause 14.2.22: • Change the name of constraint [8] to “switchStatementIsDeterminateDerivation” and, in its body, change “@determined” to “@determinate”. • In the body of helper operation [1] annotationAllowed, change “@determined” to “@determinate”.
Actions taken:
July 19, 2012: received issue

Issue 17515: Inconsistency on being constructorless (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Inconsistency on being constructorless 

Subclause: 10.5.3.1 Constructors

 

In Subclause 10.5.3.1 it says that the mapping of default constructors “means that the instantiation of a class defined using Alf textual notation is never ‘constructorless’ as defined in Subclause 8.3.12”. However, later in the same subclause it says “If a class has an explicit constructor definition, then the default constructor is no longer available, even if the defined constructor has a different name than the default constructor.” But if no default constructor is available, and there is no explicit constructor with the name of the class and no arguments, then a constructorless instantiation is possible.


Resolution: If a class has one or more explicit constructors, then the intent is that instances of the class be created using one of these constructors. Therefore, constructorless instantiation should not be allowed in this case, even if there is no default constructor.
Revised Text: In Subclause 8.3.12, under Semantics, “Object Creation Expression”, in the paragraph after the “NOTE”, replace the sentences Further, if no constructor is found, then the object creation expression may still be legal but considered to be constructorless. However, a constructorless instance create expression may not have any arguments. with Further, if no constructor is found, then the object creation expression is considered to be constructorless. However, a constructorless instance create expression may not have any arguments and is only legal if the named class has no constructor operations (see Subclause 10.5.3.1). In Subclause 13.2.22, remove constraint [7] instanceCreationExpressionTuple, and add the following constraint (numbered appropriately): [x] instanceCreationExpressionConstructorlessLegality If the expression is constructorless, then its tuple must be empty and the referent class must not have any owned operations that are constructors
Actions taken:
July 19, 2012: received issue

Issue 17516: AssignmentExpression as a data value update (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: AssignmentExpression as a data value update

Subclause: 13.2.2 AssignmentExpression, 

 

·         An assignment expression should only be allowed to be a data value update if its left hand side is a feature reference whose primary expression is a local name or parameter name.

 

·         The derivation of the assignment for an assignment expression needs to account for the cases of a data value update and an indexed left hand side.

 


Resolution: The deriviation of isDataValueUpdate is such that it is true only in the case mentioned in the first bullet. However, nothing currently prevents assignment to an attribute of a data type where the primary expression of the feature reference is not a local name or parameter. Such an assignment will not be mapped correctly, because it will not be considered a data value update and, so, the updated data value will be lost. Therefore, this case should be disallowed. In the case of a data value update for an indexed left-hand side, the multiplicity of the new assignment should not be that of the left-hand side (which will be 1) but, rather, should be * (since only a sequence can be indexed).
Revised Text: In Subclause 13.2.2: • In the body of constraint [1] assignmentExpressionAssignmentDerivation, replace the last sentence with “Otherwise, the type is the same as the left-hand side and the multiplicity is also the same as the left-hand side, if the left-hand side is not indexed, and is * if it is indexed.” • Add the following constraint (numbered appropriately): [x] assignmentExpressionDataValueUpdateLegality If an assignment expression has a feature with a primary expression whose type is a data type, then the assignment expression must be a data value update.
Actions taken:
July 19, 2012: received issue

Issue 17517: Error in AssignmentExpression constraints (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Error in AssignmentExpression constraints

Subclause: 13.2.2 AssignmentExpression

 

·         In Subclause 13.2.1 AssignmentExpression, the constraint assignmentExpressionSimpleAssignmentTypeConformance should require the type of the right-hand side to conform to the type of the left-hand side, not the other way around.

 

·         The type and multiplicity bounds of a compound AssignmentExpression should be those of the left-hand side, not the right-hand side.


Resolution: Agreed on the first bullet (except that the reference to 13.2.1 should be to 13.2.2). On the second bullet, the problem is that the current assignmentExpressionCompoundTypeConformance constraint requires that the left-hand side and the right-hand side have the same type. This works for arithmetic or Boolean operations, but it does not necessarily work for bit string operations (which may have an Integer right-hand side) or shift operations (which require and Integer right-hand side). In all cases, however, the type of the compound assignment will be the type of the left-hand side. The multiplicity upper bound for a compound assignment is required to always be 1. However, the multiplicity lower bound may be either 0 or 1, as determined by the multiplicity lower bound of the left-hand side.
Revised Text: (Note that this resolution presumes the resolution to Issue 16431 Type Conformance for Compound Assignments for Bit Strings.) In Subclause 13.2.2: • Replace the body of constraint [4] assignmentExpressionCompoundTypeConformance with For a compound assignment, if the operator is an arithmetic operator, then either the left-hand side and the right-hand side both have type Integer or they both have type String and the operator is +. If the operator is a logical operator, then either the left-hand side and the right-hand side both have type Boolean or Bit String or the left-hand side has type Bit String and the right-hand side has type Integer. If the operator is a shift operator, then the left-hand side must have type Bit String and the right-hand side must have type Integer. • Replace the body of constraint [15] assignmentExpressionLowerDerivation with A simple assignment expression has the same multiplicity lower bound as its right-hand side expression. A compound assignment expression has the same multiplicity as its left-hand side. • Replace the body of constraint [18] assignmentExpressionTypeDerivation with A simple assignment expression has the same type as its right-hand side expression. A compound assignment expression has the same type as its left-hand side.
Actions taken:
July 19, 2012: received issue

Issue 17518: Constructor in a BehaviorInvocationExpression (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Constructor in a BehaviorInvocationExpression

Subclause: 13.2.3 BehaviorInvocationExpression

 

In Subclause 13.2.17, FeatureInvocationExpression contains the constraint featureInvocationExpressionAlternativeConstructor, which constrains the placement of an alternative constructor invocation within the method of a constructor operation. However, the target name of a BehaviorInvocationExpression may also disambiguate to a feature reference to a constructor. If such an invocation is within the method of a constructor operation, then it also needs to be similarly constrained as an alternative constructor invocation (perhaps by moving featureInvocationAlternativeConstructor constraint needs to be moved to the InvocationExpression superclass).


Resolution: Moving the constraint to the InvocationExpression superclass will not work, because this constraint limits when the referent of a feature invocation is a constructor. However, InstanceCreationExpression is also a subclass of InvocationExpression, and, in this case, the referent actually is supposed to be a constructor. Therefore, a similar constraint needs to be added to BehaviorInvocationExpression
Revised Text: In Subclause 13.2.3 BehaviorInvocationExpression, add the following constraint (and adjust the numbering of the other constraints): [1] behaviorInvocationExpressionAlternativeConstructor The referent may only be a constructor (as a result of the target disambiguating to a feature reference) if this behavior invocation expression is the expression of an expression statement that is the first statement in the definition for the method of a constructor operation.
Actions taken:
July 19, 2012: received issue

Issue 17519: Referent of a signal send (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Referent of a signal send

Subclauses: 13.2.3 BehaviorInvocationExpression, 13.2.17 FeatureInvocationExpression

 

The description of the InvocationExpression::referent property in Subclause 13.2.23 is “The behavior, operation or signal being invoked.” The featureInvocationExpressionReferentDerivation in Subclause 13.2.17 derives this property as the referent of the feature of the FeatureInvocationExpression. The behaviorInvocationExpressionReferentDerivation in Subclause 13.2.3 has derives the referent similarly, in the case that the target name of a BehaviorInvocationExpression disambiguates to a feature reference. However, for a signal send, the feature being referenced will actually be a reception for the signal, not the signal itself. The derivations in Subclauses 13.2.3 and 13.2.17 should be revised to account for this.

 


Resolution: The constraint behaviorInvocationExpressionReferentDerivation actually already says “if the target disambiguates to a feature reference, the operation or signal being invoked”, which identifies that, for a signal send, the referent is the signal, not the reception. It is featureInvocationExpressionReferentDerivation that needs to be adjusted.
Revised Text: In Subcaluse 13.2.17, replace the second sentence of constraint [4] featureInvocationExpressionReferentDerivation with “Otherwise, its referent is the operation or signal being invoked.”
Actions taken:
July 19, 2012: received issue

Issue 17520: Indexed feature left hand sides (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Indexed feature left hand sides

Subclauses: 13.2.18 FeatureLeftHandSide, 13.2.35 NameLeftHandSide

 

In a FeatureLeftHandSide, if the left-hand side has an index, then the referenced feature must be a sequence (simply being ordered is not enough for the “replace” semantics of indexed assignment). Since a similar constraint is required for a NameLeftHandSide with an index, if the name 

disambiguates to a feature, the constraint is probably best handled in a unified way in the LeftHandSide superclass.


Resolution: To handle this constraint in a unified way in LeftHandSide superclass would probably require adding a derived referent property to be used for it, as well as adding derivations for it in each subclass. It is simpler instead to just add to each subclass the specific constraints necessary to resolve the issue.
Revised Text: In Subclause 13.2.18, add the following constraint: [5] featureLeftHandSideIndexedFeature If a feature left-hand side has an index, then the referent of the feature must be ordered and non-unique. In Subclause 13.2.35, add the following constraint (and renumber the current constraint [3]): [3] nameLeftHandSideIndexedFeature If the target of a name left-hand side disambiguates to a feature reference, and the left-hand side has an index, then the referent of the feature reference must be ordered and non-unique.
Actions taken:
July 19, 2012: received issue

Issue 17521: InstanceCreationExpression class must not be abstract (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: InstanceCreationExpression class must not be abstract

Subclause: 13.2.22 InstranceCreationExpression

 

In Subclause 13.2.22 InstanceCreationExpression there should be a constraint that the class of a constructor operation, or the referent if it is a class or data type, must not be abstract. In the case in which this constraint would be violated, but there is an associated Impl class constructor per Subclause 8.3.12, the referent should be the Impl constructor

Resolution: agreed
Revised Text: In Subclause 13.2.22: • Add the following constraint (numbered as appropriate): [x] instanceCreationExpressionReferent If the referent of an instance creation expression is an operation, then the class of that operation must not be abstract. Otherwise, the referent is a class or data type, which must not be abstract. • In the instanceCreationExpressionReferentDerivation, add “normally” after “The referent of an instance creation expression is”, and add the sentence “However, if the referent is an operation whose class is abstract or is a class that is itself abstract, and there is an associated Impl class constructor, then the referent is the Impl class constructor
Actions taken:
July 19, 2012: received issue

Issue 17522: Assigned name must not be template binding (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Assigned name must not be template binding

Subclause: 13.2.35 NameLeftHandSide

 

In Subclause 13.2.35 NameLeftHandSide, there needs to be a constraint that the name is not a template binding.

 


Resolution: agreed
Revised Text: In Subclause 13.2.35, add the following constraint (number as appropriate): [x] nameLeftHandSideNontemplateTarget The target of a name left-hand side must not have a template binding.
Actions taken:
July 19, 2012: received issue

Issue 17523: Derivation of SequenceOperationExpression::isCollectionConversion (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Derivation of SequenceOperationExpression::isCollectionConversion

Subclause: 13.2.50 SequenceOperationExpression

 

In Subclause 13.2.50 SequenceOperationExpression, the derivation for isCollectionConversion should include the requirement that the multiplicity is upper bound is 1.


Resolution: agreed
Revised Text: In subclause 13.2.50, at the end of the body of constraint [5] sequenceOperationExpressionIsCollectionConversionDerivation, add “and the multiplicity upper bound of the primary expression is 1”.
Actions taken:
July 19, 2012: received issue

Issue 17524: Assignment of out parameters in if and switch statements (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Assignment of out parameters in if and switch statements

Subclauses: 14.2.13 ifStatement, 14.2.20 SwitchStatement

 

According to Subclauses 9.8 and 9.9, it is not permitted to define a new local name in an if statement without an else clause or a switch statement without a default clause. The ifStatementAssignmentsAfter and switchStatementAssignments constraints in Subclauses 14.2.13 and 14.2.22 attempt to enforce this by requiring that the assignments after such if or switch statements be the same as those before the statement. However, this constraint is too strong. An out parameter does not have an assign source before it is first assignment, yet it is already defined as a local name. Therefore, the constraints should be loosened to allow an if statement without an else clause or a switch statement without a default clause to contain the first assignment of an out parameter.


Resolution: agreed
Revised Text: In Subclause 14.2.13, in the first sentence in the body of constraint [1] ifStatementAssignmentsAfter, repace “is unassigned” with “is not an out parameter and is unassigned”. In Subclause 14.2.22, in the first sentence in the body of constraint [1] switchStatementAssignments replace “is unassigned” with “is not an out parameter and is unassigned”.
Actions taken:
July 19, 2012: received issue

Issue 17525: Classifier behavior required for an active class (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Classifier behavior required for an active class

Subclause: 15.2.1 ActiveClassDefinition

 

A non-abstract active class must have a classifier behavior, because this is required by StartObjectBehaviorAction

Resolution: agreed
Revised Text: In Subclause 15.2.1, under Constraints, replace “None” with [1] activeClassDefinitionClassifierBehavior If an active class definition is not abstract, then it must have a classifier behavior.
Actions taken:
July 19, 2012: received issue

Issue 17526: Inherited abstract operations (alf-ftf)

Click
here for this issue's archive.
Source: Model Driven Solutions (Mr. Ed Seidewitz, ed-s(at)modeldriven.com)
Nature: Uncategorized Issue
Severity:
Summary:
Subject: Inherited abstract operations

Subclauses: 15.2.4 ClassDefinition, 15.2.16 OperationDefinition

 

There is currently a constraint for an OperationDefinition that it must owned by a non-abstract class. This isn’t strong enough, because it doesn’t prevent a non-abstract class from inheriting an abstract operation. Instead, there should be a constraint on ClassDefinition that all member operations (owned or inherited) are not abstract.


Resolution: agreed
Revised Text: In Subclause 15.2.4, add the following constraint (and renumber the existing constraint): [1] classDefinitionAbstractMembers If a class definition is not abstract, then no member operations (owned or inherited) of the class definition may be abstract. In Subclause 15.2.16, in the body of constraint [7] operationDefinitionNamespace, remove the second sentence.
Actions taken:
July 19, 2012: received issue