Nonfinal to final
|
Yes [A derived component might exist that already defines the block with a more restrictive access mode or otherwise incompatible difference. In such a case, a change would make the derived component invalid. A new nonabstract block can be added to a component type if no derived component has already defined a block that has the same name.]
|
Yes
|
Final to nonfinal
|
Yes
|
Yes
|
Nonabstract to abstract
|
No
|
Yes
|
Abstract to nonabstract
|
Yes
|
Yes
|
More restrictive access
|
No
|
No
|
Less restrictive access
|
Yes
|
Yes
|
Add a new nonprivate block
|
Yes
|
Yes
|
Add a new private block
|
Yes
|
Yes
|
Remove or rename a nonprivate block
|
No
|
No
|
Remove or rename a private block
|
Yes
|
Yes
|
Change the body of a block
|
Yes [The plan run history of prior runs of this block are not updated. Therefore, they might not directly coincide with the new block contents.]
|
Yes
|
Add, modify, or remove local block variables
|
Yes
|
Yes
|
Add, modify, or remove private block parameters
|
Yes
|
Yes
|
Add a required parameter to a nonprivate block
|
No
|
No
|
Add an optional parameter
|
Yes
|
Yes
|
Remove an optional or a required parameter
|
Yes [Extra arguments that are passed from the caller are ignored, making this change possible.]
|
Yes
|
Rename an optional parameter
|
Yes [This change is equivalent to removing and adding an optional parameter. However, the callers might see unexpected results as the originally passed parameter value is now ignored and replaced with the default value.]
|
Yes
|
Rename a required parameter from a nonprivate block
|
No
|
No
|
Change a parameter from being optional to being required in a nonprivate block
|
No
|
No
|
Change a parameter from being required to being optional
|
Yes
|
Yes
|
Change the displayMode attribute of a parameter
|
Yes
|
Yes
|
Change the prompt attribute of a parameter
|
Yes
|
Yes
|