1------------------------------------------------------------------------------
2--                                                                          --
3--                            Matreshka Project                             --
4--                                                                          --
5--                          Ada Modeling Framework                          --
6--                                                                          --
7--                        Runtime Library Component                         --
8--                                                                          --
9------------------------------------------------------------------------------
10--                                                                          --
11-- Copyright © 2011-2012, Vadim Godunko <vgodunko@gmail.com>                --
12-- All rights reserved.                                                     --
13--                                                                          --
14-- Redistribution and use in source and binary forms, with or without       --
15-- modification, are permitted provided that the following conditions       --
16-- are met:                                                                 --
17--                                                                          --
18--  * Redistributions of source code must retain the above copyright        --
19--    notice, this list of conditions and the following disclaimer.         --
20--                                                                          --
21--  * Redistributions in binary form must reproduce the above copyright     --
22--    notice, this list of conditions and the following disclaimer in the   --
23--    documentation and/or other materials provided with the distribution.  --
24--                                                                          --
25--  * Neither the name of the Vadim Godunko, IE nor the names of its        --
26--    contributors may be used to endorse or promote products derived from  --
27--    this software without specific prior written permission.              --
28--                                                                          --
29-- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS      --
30-- "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT        --
31-- LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR    --
32-- A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT     --
33-- HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,   --
34-- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED --
35-- TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR   --
36-- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF   --
37-- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING     --
38-- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS       --
39-- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.             --
40--                                                                          --
41------------------------------------------------------------------------------
42--  $Revision: 2937 $ $Date: 2012-05-01 21:07:27 +0400 (Tue, 01 May 2012) $
43------------------------------------------------------------------------------
44with AMF.Internals.UML_Named_Elements;
45with AMF.String_Collections;
46with AMF.UML.Behaviors.Collections;
47with AMF.UML.Classes;
48with AMF.UML.Classifiers.Collections;
49with AMF.UML.Constraints.Collections;
50with AMF.UML.Data_Types;
51with AMF.UML.Dependencies.Collections;
52with AMF.UML.Element_Imports.Collections;
53with AMF.UML.Interfaces;
54with AMF.UML.Named_Elements.Collections;
55with AMF.UML.Namespaces;
56with AMF.UML.Operation_Template_Parameters;
57with AMF.UML.Operations.Collections;
58with AMF.UML.Package_Imports.Collections;
59with AMF.UML.Packageable_Elements.Collections;
60with AMF.UML.Packages.Collections;
61with AMF.UML.Parameter_Sets.Collections;
62with AMF.UML.Parameterable_Elements.Collections;
63with AMF.UML.Parameters.Collections;
64with AMF.UML.Redefinable_Elements.Collections;
65with AMF.UML.String_Expressions;
66with AMF.UML.Template_Bindings.Collections;
67with AMF.UML.Template_Parameters;
68with AMF.UML.Template_Signatures;
69with AMF.UML.Types.Collections;
70with AMF.Visitors;
71
72package AMF.Internals.UML_Operations is
73
74   type UML_Operation_Proxy is
75     limited new AMF.Internals.UML_Named_Elements.UML_Named_Element_Proxy
76       and AMF.UML.Operations.UML_Operation with null record;
77
78   overriding function Get_Body_Condition
79    (Self : not null access constant UML_Operation_Proxy)
80       return AMF.UML.Constraints.UML_Constraint_Access;
81   --  Getter of Operation::bodyCondition.
82   --
83   --  An optional Constraint on the result values of an invocation of this
84   --  Operation.
85
86   overriding procedure Set_Body_Condition
87    (Self : not null access UML_Operation_Proxy;
88     To   : AMF.UML.Constraints.UML_Constraint_Access);
89   --  Setter of Operation::bodyCondition.
90   --
91   --  An optional Constraint on the result values of an invocation of this
92   --  Operation.
93
94   overriding function Get_Class
95    (Self : not null access constant UML_Operation_Proxy)
96       return AMF.UML.Classes.UML_Class_Access;
97   --  Getter of Operation::class.
98   --
99   --  The class that owns the operation.
100
101   overriding procedure Set_Class
102    (Self : not null access UML_Operation_Proxy;
103     To   : AMF.UML.Classes.UML_Class_Access);
104   --  Setter of Operation::class.
105   --
106   --  The class that owns the operation.
107
108   overriding function Get_Datatype
109    (Self : not null access constant UML_Operation_Proxy)
110       return AMF.UML.Data_Types.UML_Data_Type_Access;
111   --  Getter of Operation::datatype.
112   --
113   --  The DataType that owns this Operation.
114
115   overriding procedure Set_Datatype
116    (Self : not null access UML_Operation_Proxy;
117     To   : AMF.UML.Data_Types.UML_Data_Type_Access);
118   --  Setter of Operation::datatype.
119   --
120   --  The DataType that owns this Operation.
121
122   overriding function Get_Interface
123    (Self : not null access constant UML_Operation_Proxy)
124       return AMF.UML.Interfaces.UML_Interface_Access;
125   --  Getter of Operation::interface.
126   --
127   --  The Interface that owns this Operation.
128
129   overriding procedure Set_Interface
130    (Self : not null access UML_Operation_Proxy;
131     To   : AMF.UML.Interfaces.UML_Interface_Access);
132   --  Setter of Operation::interface.
133   --
134   --  The Interface that owns this Operation.
135
136   overriding function Get_Is_Ordered
137    (Self : not null access constant UML_Operation_Proxy)
138       return Boolean;
139   --  Getter of Operation::isOrdered.
140   --
141   --  This information is derived from the return result for this Operation.
142   --  Specifies whether the return parameter is ordered or not, if present.
143
144   overriding function Get_Is_Query
145    (Self : not null access constant UML_Operation_Proxy)
146       return Boolean;
147   --  Getter of Operation::isQuery.
148   --
149   --  Specifies whether an execution of the BehavioralFeature leaves the
150   --  state of the system unchanged (isQuery=true) or whether side effects
151   --  may occur (isQuery=false).
152
153   overriding procedure Set_Is_Query
154    (Self : not null access UML_Operation_Proxy;
155     To   : Boolean);
156   --  Setter of Operation::isQuery.
157   --
158   --  Specifies whether an execution of the BehavioralFeature leaves the
159   --  state of the system unchanged (isQuery=true) or whether side effects
160   --  may occur (isQuery=false).
161
162   overriding function Get_Is_Unique
163    (Self : not null access constant UML_Operation_Proxy)
164       return Boolean;
165   --  Getter of Operation::isUnique.
166   --
167   --  This information is derived from the return result for this Operation.
168   --  Specifies whether the return parameter is unique or not, if present.
169
170   overriding function Get_Lower
171    (Self : not null access constant UML_Operation_Proxy)
172       return AMF.Optional_Integer;
173   --  Getter of Operation::lower.
174   --
175   --  Specifies the lower multiplicity of the return parameter, if present.
176   --  This information is derived from the return result for this Operation.
177
178   overriding function Get_Owned_Parameter
179    (Self : not null access constant UML_Operation_Proxy)
180       return AMF.UML.Parameters.Collections.Ordered_Set_Of_UML_Parameter;
181   --  Getter of Operation::ownedParameter.
182   --
183   --  Specifies the ordered set of formal parameters of this
184   --  BehavioralFeature.
185   --  Specifies the parameters owned by this Operation.
186
187   overriding function Get_Postcondition
188    (Self : not null access constant UML_Operation_Proxy)
189       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
190   --  Getter of Operation::postcondition.
191   --
192   --  An optional set of Constraints specifying the state of the system when
193   --  the Operation is completed.
194
195   overriding function Get_Precondition
196    (Self : not null access constant UML_Operation_Proxy)
197       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
198   --  Getter of Operation::precondition.
199   --
200   --  An optional set of Constraints on the state of the system when the
201   --  Operation is invoked.
202
203   overriding function Get_Raised_Exception
204    (Self : not null access constant UML_Operation_Proxy)
205       return AMF.UML.Types.Collections.Set_Of_UML_Type;
206   --  Getter of Operation::raisedException.
207   --
208   --  References the Types representing exceptions that may be raised during
209   --  an invocation of this operation.
210
211   overriding function Get_Redefined_Operation
212    (Self : not null access constant UML_Operation_Proxy)
213       return AMF.UML.Operations.Collections.Set_Of_UML_Operation;
214   --  Getter of Operation::redefinedOperation.
215   --
216   --  References the Operations that are redefined by this Operation.
217
218   overriding function Get_Template_Parameter
219    (Self : not null access constant UML_Operation_Proxy)
220       return AMF.UML.Operation_Template_Parameters.UML_Operation_Template_Parameter_Access;
221   --  Getter of Operation::templateParameter.
222   --
223   --  The template parameter that exposes this element as a formal parameter.
224
225   overriding procedure Set_Template_Parameter
226    (Self : not null access UML_Operation_Proxy;
227     To   : AMF.UML.Operation_Template_Parameters.UML_Operation_Template_Parameter_Access);
228   --  Setter of Operation::templateParameter.
229   --
230   --  The template parameter that exposes this element as a formal parameter.
231
232   overriding function Get_Type
233    (Self : not null access constant UML_Operation_Proxy)
234       return AMF.UML.Types.UML_Type_Access;
235   --  Getter of Operation::type.
236   --
237   --  This information is derived from the return result for this Operation.
238   --  Specifies the return result of the operation, if present.
239
240   overriding function Get_Upper
241    (Self : not null access constant UML_Operation_Proxy)
242       return AMF.Optional_Unlimited_Natural;
243   --  Getter of Operation::upper.
244   --
245   --  Specifies the upper multiplicity of the return parameter, if present.
246   --  This information is derived from the return result for this Operation.
247
248   overriding function Get_Concurrency
249    (Self : not null access constant UML_Operation_Proxy)
250       return AMF.UML.UML_Call_Concurrency_Kind;
251   --  Getter of BehavioralFeature::concurrency.
252   --
253   --  Specifies the semantics of concurrent calls to the same passive
254   --  instance (i.e., an instance originating from a class with isActive
255   --  being false). Active instances control access to their own behavioral
256   --  features.
257
258   overriding procedure Set_Concurrency
259    (Self : not null access UML_Operation_Proxy;
260     To   : AMF.UML.UML_Call_Concurrency_Kind);
261   --  Setter of BehavioralFeature::concurrency.
262   --
263   --  Specifies the semantics of concurrent calls to the same passive
264   --  instance (i.e., an instance originating from a class with isActive
265   --  being false). Active instances control access to their own behavioral
266   --  features.
267
268   overriding function Get_Is_Abstract
269    (Self : not null access constant UML_Operation_Proxy)
270       return Boolean;
271   --  Getter of BehavioralFeature::isAbstract.
272   --
273   --  If true, then the behavioral feature does not have an implementation,
274   --  and one must be supplied by a more specific element. If false, the
275   --  behavioral feature must have an implementation in the classifier or one
276   --  must be inherited from a more general element.
277
278   overriding procedure Set_Is_Abstract
279    (Self : not null access UML_Operation_Proxy;
280     To   : Boolean);
281   --  Setter of BehavioralFeature::isAbstract.
282   --
283   --  If true, then the behavioral feature does not have an implementation,
284   --  and one must be supplied by a more specific element. If false, the
285   --  behavioral feature must have an implementation in the classifier or one
286   --  must be inherited from a more general element.
287
288   overriding function Get_Method
289    (Self : not null access constant UML_Operation_Proxy)
290       return AMF.UML.Behaviors.Collections.Set_Of_UML_Behavior;
291   --  Getter of BehavioralFeature::method.
292   --
293   --  A behavioral description that implements the behavioral feature. There
294   --  may be at most one behavior for a particular pairing of a classifier
295   --  (as owner of the behavior) and a behavioral feature (as specification
296   --  of the behavior).
297
298   overriding function Get_Owned_Parameter_Set
299    (Self : not null access constant UML_Operation_Proxy)
300       return AMF.UML.Parameter_Sets.Collections.Set_Of_UML_Parameter_Set;
301   --  Getter of BehavioralFeature::ownedParameterSet.
302   --
303   --  The ParameterSets owned by this BehavioralFeature.
304
305   overriding function Get_Featuring_Classifier
306    (Self : not null access constant UML_Operation_Proxy)
307       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
308   --  Getter of Feature::featuringClassifier.
309   --
310   --  The Classifiers that have this Feature as a feature.
311
312   overriding function Get_Is_Static
313    (Self : not null access constant UML_Operation_Proxy)
314       return Boolean;
315   --  Getter of Feature::isStatic.
316   --
317   --  Specifies whether this feature characterizes individual instances
318   --  classified by the classifier (false) or the classifier itself (true).
319
320   overriding procedure Set_Is_Static
321    (Self : not null access UML_Operation_Proxy;
322     To   : Boolean);
323   --  Setter of Feature::isStatic.
324   --
325   --  Specifies whether this feature characterizes individual instances
326   --  classified by the classifier (false) or the classifier itself (true).
327
328   overriding function Get_Is_Leaf
329    (Self : not null access constant UML_Operation_Proxy)
330       return Boolean;
331   --  Getter of RedefinableElement::isLeaf.
332   --
333   --  Indicates whether it is possible to further redefine a
334   --  RedefinableElement. If the value is true, then it is not possible to
335   --  further redefine the RedefinableElement. Note that this property is
336   --  preserved through package merge operations; that is, the capability to
337   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
338   --  the resulting RedefinableElement of a package merge operation where a
339   --  RedefinableElement with isLeaf=false is merged with a matching
340   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
341   --  will have isLeaf=false. Default value is false.
342
343   overriding procedure Set_Is_Leaf
344    (Self : not null access UML_Operation_Proxy;
345     To   : Boolean);
346   --  Setter of RedefinableElement::isLeaf.
347   --
348   --  Indicates whether it is possible to further redefine a
349   --  RedefinableElement. If the value is true, then it is not possible to
350   --  further redefine the RedefinableElement. Note that this property is
351   --  preserved through package merge operations; that is, the capability to
352   --  redefine a RedefinableElement (i.e., isLeaf=false) must be preserved in
353   --  the resulting RedefinableElement of a package merge operation where a
354   --  RedefinableElement with isLeaf=false is merged with a matching
355   --  RedefinableElement with isLeaf=true: the resulting RedefinableElement
356   --  will have isLeaf=false. Default value is false.
357
358   overriding function Get_Redefined_Element
359    (Self : not null access constant UML_Operation_Proxy)
360       return AMF.UML.Redefinable_Elements.Collections.Set_Of_UML_Redefinable_Element;
361   --  Getter of RedefinableElement::redefinedElement.
362   --
363   --  The redefinable element that is being redefined by this element.
364
365   overriding function Get_Redefinition_Context
366    (Self : not null access constant UML_Operation_Proxy)
367       return AMF.UML.Classifiers.Collections.Set_Of_UML_Classifier;
368   --  Getter of RedefinableElement::redefinitionContext.
369   --
370   --  References the contexts that this element may be redefined from.
371
372   overriding function Get_Client_Dependency
373    (Self : not null access constant UML_Operation_Proxy)
374       return AMF.UML.Dependencies.Collections.Set_Of_UML_Dependency;
375   --  Getter of NamedElement::clientDependency.
376   --
377   --  Indicates the dependencies that reference the client.
378
379   overriding function Get_Name_Expression
380    (Self : not null access constant UML_Operation_Proxy)
381       return AMF.UML.String_Expressions.UML_String_Expression_Access;
382   --  Getter of NamedElement::nameExpression.
383   --
384   --  The string expression used to define the name of this named element.
385
386   overriding procedure Set_Name_Expression
387    (Self : not null access UML_Operation_Proxy;
388     To   : AMF.UML.String_Expressions.UML_String_Expression_Access);
389   --  Setter of NamedElement::nameExpression.
390   --
391   --  The string expression used to define the name of this named element.
392
393   overriding function Get_Namespace
394    (Self : not null access constant UML_Operation_Proxy)
395       return AMF.UML.Namespaces.UML_Namespace_Access;
396   --  Getter of NamedElement::namespace.
397   --
398   --  Specifies the namespace that owns the NamedElement.
399
400   overriding function Get_Qualified_Name
401    (Self : not null access constant UML_Operation_Proxy)
402       return AMF.Optional_String;
403   --  Getter of NamedElement::qualifiedName.
404   --
405   --  A name which allows the NamedElement to be identified within a
406   --  hierarchy of nested Namespaces. It is constructed from the names of the
407   --  containing namespaces starting at the root of the hierarchy and ending
408   --  with the name of the NamedElement itself.
409
410   overriding function Get_Element_Import
411    (Self : not null access constant UML_Operation_Proxy)
412       return AMF.UML.Element_Imports.Collections.Set_Of_UML_Element_Import;
413   --  Getter of Namespace::elementImport.
414   --
415   --  References the ElementImports owned by the Namespace.
416
417   overriding function Get_Imported_Member
418    (Self : not null access constant UML_Operation_Proxy)
419       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
420   --  Getter of Namespace::importedMember.
421   --
422   --  References the PackageableElements that are members of this Namespace
423   --  as a result of either PackageImports or ElementImports.
424
425   overriding function Get_Member
426    (Self : not null access constant UML_Operation_Proxy)
427       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
428   --  Getter of Namespace::member.
429   --
430   --  A collection of NamedElements identifiable within the Namespace, either
431   --  by being owned or by being introduced by importing or inheritance.
432
433   overriding function Get_Owned_Member
434    (Self : not null access constant UML_Operation_Proxy)
435       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
436   --  Getter of Namespace::ownedMember.
437   --
438   --  A collection of NamedElements owned by the Namespace.
439
440   overriding function Get_Owned_Rule
441    (Self : not null access constant UML_Operation_Proxy)
442       return AMF.UML.Constraints.Collections.Set_Of_UML_Constraint;
443   --  Getter of Namespace::ownedRule.
444   --
445   --  Specifies a set of Constraints owned by this Namespace.
446
447   overriding function Get_Package_Import
448    (Self : not null access constant UML_Operation_Proxy)
449       return AMF.UML.Package_Imports.Collections.Set_Of_UML_Package_Import;
450   --  Getter of Namespace::packageImport.
451   --
452   --  References the PackageImports owned by the Namespace.
453
454   overriding function Get_Owned_Template_Signature
455    (Self : not null access constant UML_Operation_Proxy)
456       return AMF.UML.Template_Signatures.UML_Template_Signature_Access;
457   --  Getter of TemplateableElement::ownedTemplateSignature.
458   --
459   --  The optional template signature specifying the formal template
460   --  parameters.
461
462   overriding procedure Set_Owned_Template_Signature
463    (Self : not null access UML_Operation_Proxy;
464     To   : AMF.UML.Template_Signatures.UML_Template_Signature_Access);
465   --  Setter of TemplateableElement::ownedTemplateSignature.
466   --
467   --  The optional template signature specifying the formal template
468   --  parameters.
469
470   overriding function Get_Template_Binding
471    (Self : not null access constant UML_Operation_Proxy)
472       return AMF.UML.Template_Bindings.Collections.Set_Of_UML_Template_Binding;
473   --  Getter of TemplateableElement::templateBinding.
474   --
475   --  The optional bindings from this element to templates.
476
477   overriding function Get_Owning_Template_Parameter
478    (Self : not null access constant UML_Operation_Proxy)
479       return AMF.UML.Template_Parameters.UML_Template_Parameter_Access;
480   --  Getter of ParameterableElement::owningTemplateParameter.
481   --
482   --  The formal template parameter that owns this element.
483
484   overriding procedure Set_Owning_Template_Parameter
485    (Self : not null access UML_Operation_Proxy;
486     To   : AMF.UML.Template_Parameters.UML_Template_Parameter_Access);
487   --  Setter of ParameterableElement::owningTemplateParameter.
488   --
489   --  The formal template parameter that owns this element.
490
491   overriding function Get_Template_Parameter
492    (Self : not null access constant UML_Operation_Proxy)
493       return AMF.UML.Template_Parameters.UML_Template_Parameter_Access;
494   --  Getter of ParameterableElement::templateParameter.
495   --
496   --  The template parameter that exposes this element as a formal parameter.
497
498   overriding procedure Set_Template_Parameter
499    (Self : not null access UML_Operation_Proxy;
500     To   : AMF.UML.Template_Parameters.UML_Template_Parameter_Access);
501   --  Setter of ParameterableElement::templateParameter.
502   --
503   --  The template parameter that exposes this element as a formal parameter.
504
505   overriding function Is_Consistent_With
506    (Self : not null access constant UML_Operation_Proxy;
507     Redefinee : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
508       return Boolean;
509   --  Operation Operation::isConsistentWith.
510   --
511   --  A redefining operation is consistent with a redefined operation if it
512   --  has the same number of owned parameters, and the type of each owned
513   --  parameter conforms to the type of the corresponding redefined parameter.
514   --  The query isConsistentWith() specifies, for any two Operations in a
515   --  context in which redefinition is possible, whether redefinition would
516   --  be consistent in the sense of maintaining type covariance. Other senses
517   --  of consistency may be required, for example to determine consistency in
518   --  the sense of contravariance. Users may define alternative queries under
519   --  names different from 'isConsistentWith()', as for example, users may
520   --  define a query named 'isContravariantWith()'.
521
522   overriding function Is_Ordered
523    (Self : not null access constant UML_Operation_Proxy)
524       return Boolean;
525   --  Operation Operation::isOrdered.
526   --
527   --  If this operation has a return parameter, isOrdered equals the value of
528   --  isOrdered for that parameter. Otherwise isOrdered is false.
529
530   overriding function Is_Unique
531    (Self : not null access constant UML_Operation_Proxy)
532       return Boolean;
533   --  Operation Operation::isUnique.
534   --
535   --  If this operation has a return parameter, isUnique equals the value of
536   --  isUnique for that parameter. Otherwise isUnique is true.
537
538   overriding function Lower
539    (Self : not null access constant UML_Operation_Proxy)
540       return Integer;
541   --  Operation Operation::lower.
542   --
543   --  If this operation has a return parameter, lower equals the value of
544   --  lower for that parameter. Otherwise lower is not defined.
545
546   overriding function Return_Result
547    (Self : not null access constant UML_Operation_Proxy)
548       return AMF.UML.Parameters.Collections.Set_Of_UML_Parameter;
549   --  Operation Operation::returnResult.
550   --
551   --  The query returnResult() returns the set containing the return
552   --  parameter of the Operation if one exists, otherwise, it returns an
553   --  empty set
554
555   overriding function Types
556    (Self : not null access constant UML_Operation_Proxy)
557       return AMF.UML.Types.UML_Type_Access;
558   --  Operation Operation::type.
559   --
560   --  If this operation has a return parameter, type equals the value of type
561   --  for that parameter. Otherwise type is not defined.
562
563   overriding function Upper
564    (Self : not null access constant UML_Operation_Proxy)
565       return AMF.Unlimited_Natural;
566   --  Operation Operation::upper.
567   --
568   --  If this operation has a return parameter, upper equals the value of
569   --  upper for that parameter. Otherwise upper is not defined.
570
571   overriding function Is_Distinguishable_From
572    (Self : not null access constant UML_Operation_Proxy;
573     N : AMF.UML.Named_Elements.UML_Named_Element_Access;
574     Ns : AMF.UML.Namespaces.UML_Namespace_Access)
575       return Boolean;
576   --  Operation BehavioralFeature::isDistinguishableFrom.
577   --
578   --  The query isDistinguishableFrom() determines whether two
579   --  BehavioralFeatures may coexist in the same Namespace. It specifies that
580   --  they have to have different signatures.
581
582   overriding function Is_Redefinition_Context_Valid
583    (Self : not null access constant UML_Operation_Proxy;
584     Redefined : AMF.UML.Redefinable_Elements.UML_Redefinable_Element_Access)
585       return Boolean;
586   --  Operation RedefinableElement::isRedefinitionContextValid.
587   --
588   --  The query isRedefinitionContextValid() specifies whether the
589   --  redefinition contexts of this RedefinableElement are properly related
590   --  to the redefinition contexts of the specified RedefinableElement to
591   --  allow this element to redefine the other. By default at least one of
592   --  the redefinition contexts of this element must be a specialization of
593   --  at least one of the redefinition contexts of the specified element.
594
595   overriding function All_Owning_Packages
596    (Self : not null access constant UML_Operation_Proxy)
597       return AMF.UML.Packages.Collections.Set_Of_UML_Package;
598   --  Operation NamedElement::allOwningPackages.
599   --
600   --  The query allOwningPackages() returns all the directly or indirectly
601   --  owning packages.
602
603   overriding function Namespace
604    (Self : not null access constant UML_Operation_Proxy)
605       return AMF.UML.Namespaces.UML_Namespace_Access;
606   --  Operation NamedElement::namespace.
607   --
608   --  Missing derivation for NamedElement::/namespace : Namespace
609
610   overriding function Exclude_Collisions
611    (Self : not null access constant UML_Operation_Proxy;
612     Imps : AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element)
613       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
614   --  Operation Namespace::excludeCollisions.
615   --
616   --  The query excludeCollisions() excludes from a set of
617   --  PackageableElements any that would not be distinguishable from each
618   --  other in this namespace.
619
620   overriding function Get_Names_Of_Member
621    (Self : not null access constant UML_Operation_Proxy;
622     Element : AMF.UML.Named_Elements.UML_Named_Element_Access)
623       return AMF.String_Collections.Set_Of_String;
624   --  Operation Namespace::getNamesOfMember.
625   --
626   --  The query getNamesOfMember() takes importing into account. It gives
627   --  back the set of names that an element would have in an importing
628   --  namespace, either because it is owned, or if not owned then imported
629   --  individually, or if not individually then from a package.
630   --  The query getNamesOfMember() gives a set of all of the names that a
631   --  member would have in a Namespace. In general a member can have multiple
632   --  names in a Namespace if it is imported more than once with different
633   --  aliases. The query takes account of importing. It gives back the set of
634   --  names that an element would have in an importing namespace, either
635   --  because it is owned, or if not owned then imported individually, or if
636   --  not individually then from a package.
637
638   overriding function Import_Members
639    (Self : not null access constant UML_Operation_Proxy;
640     Imps : AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element)
641       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
642   --  Operation Namespace::importMembers.
643   --
644   --  The query importMembers() defines which of a set of PackageableElements
645   --  are actually imported into the namespace. This excludes hidden ones,
646   --  i.e., those which have names that conflict with names of owned members,
647   --  and also excludes elements which would have the same name when imported.
648
649   overriding function Imported_Member
650    (Self : not null access constant UML_Operation_Proxy)
651       return AMF.UML.Packageable_Elements.Collections.Set_Of_UML_Packageable_Element;
652   --  Operation Namespace::importedMember.
653   --
654   --  The importedMember property is derived from the ElementImports and the
655   --  PackageImports. References the PackageableElements that are members of
656   --  this Namespace as a result of either PackageImports or ElementImports.
657
658   overriding function Members_Are_Distinguishable
659    (Self : not null access constant UML_Operation_Proxy)
660       return Boolean;
661   --  Operation Namespace::membersAreDistinguishable.
662   --
663   --  The Boolean query membersAreDistinguishable() determines whether all of
664   --  the namespace's members are distinguishable within it.
665
666   overriding function Owned_Member
667    (Self : not null access constant UML_Operation_Proxy)
668       return AMF.UML.Named_Elements.Collections.Set_Of_UML_Named_Element;
669   --  Operation Namespace::ownedMember.
670   --
671   --  Missing derivation for Namespace::/ownedMember : NamedElement
672
673   overriding function Is_Template
674    (Self : not null access constant UML_Operation_Proxy)
675       return Boolean;
676   --  Operation TemplateableElement::isTemplate.
677   --
678   --  The query isTemplate() returns whether this templateable element is
679   --  actually a template.
680
681   overriding function Parameterable_Elements
682    (Self : not null access constant UML_Operation_Proxy)
683       return AMF.UML.Parameterable_Elements.Collections.Set_Of_UML_Parameterable_Element;
684   --  Operation TemplateableElement::parameterableElements.
685   --
686   --  The query parameterableElements() returns the set of elements that may
687   --  be used as the parametered elements for a template parameter of this
688   --  templateable element. By default, this set includes all the owned
689   --  elements. Subclasses may override this operation if they choose to
690   --  restrict the set of parameterable elements.
691
692   overriding function Is_Compatible_With
693    (Self : not null access constant UML_Operation_Proxy;
694     P : AMF.UML.Parameterable_Elements.UML_Parameterable_Element_Access)
695       return Boolean;
696   --  Operation ParameterableElement::isCompatibleWith.
697   --
698   --  The query isCompatibleWith() determines if this parameterable element
699   --  is compatible with the specified parameterable element. By default
700   --  parameterable element P is compatible with parameterable element Q if
701   --  the kind of P is the same or a subtype as the kind of Q. Subclasses
702   --  should override this operation to specify different compatibility
703   --  constraints.
704
705   overriding function Is_Template_Parameter
706    (Self : not null access constant UML_Operation_Proxy)
707       return Boolean;
708   --  Operation ParameterableElement::isTemplateParameter.
709   --
710   --  The query isTemplateParameter() determines if this parameterable
711   --  element is exposed as a formal template parameter.
712
713   overriding procedure Enter_Element
714    (Self    : not null access constant UML_Operation_Proxy;
715     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
716     Control : in out AMF.Visitors.Traverse_Control);
717   --  Dispatch call to corresponding subprogram of visitor interface.
718
719   overriding procedure Leave_Element
720    (Self    : not null access constant UML_Operation_Proxy;
721     Visitor : in out AMF.Visitors.Abstract_Visitor'Class;
722     Control : in out AMF.Visitors.Traverse_Control);
723   --  Dispatch call to corresponding subprogram of visitor interface.
724
725   overriding procedure Visit_Element
726    (Self     : not null access constant UML_Operation_Proxy;
727     Iterator : in out AMF.Visitors.Abstract_Iterator'Class;
728     Visitor  : in out AMF.Visitors.Abstract_Visitor'Class;
729     Control  : in out AMF.Visitors.Traverse_Control);
730   --  Dispatch call to corresponding subprogram of iterator interface.
731
732end AMF.Internals.UML_Operations;
733