Skip Headers
SigTest User's Guide
Version 2.2
E19036-01
  Go To Table Of Contents
Contents
Go To Index
Index

Previous
Previous
 
Next
Next
 

D Merge Command Operative Principles

This appendix describes the command operative principles used by the Signature Test tool.

D.1 Merge Command Operative Principles

The Merge command operates according to the following principles, where A and B are input APIs that are combined into the resulting API C:

The basic algorithmic rules for combining two input APIs A and B into a signature file that represents the resulting API C are as follows:

D.1.1 Element Handling by Merge

General rules for handling elements of all kinds during the Merge process are as follows.

  • When there are two different access modifiers select the more visible one.

    For example, if A is a public int foo, and B is protected int foo, then the merge into C results into public int foo.

  • If the elements differ in the final modifier, do not include it. If a class is final, then all of its methods are implicitly final according to Section 8.4.3.3 of The Java Language Specification, 2nd Edition.

  • If corresponding elements differ in the static modifier, then declare a conflict.

Element-specific rules are as follows:

  • If corresponding classes differ in the abstract modifier, then declare a conflict.

  • Apply the following rules for classes or interfaces and nested classes or interfaces, where for the purpose of this description, c1 and c2 are corresponding classes from the input APIs:

    If a superclass of c1 is a subclass of a superclass of c2, use the superclass of c1 as the superclass for the new element. Otherwise, if a superclass of c2 is a subclass of a superclass of c1, use the superclass of c2 as the superclass for the new element. If neither of the previous two conditions are possible, then declare a conflict.

  • For classes or interfaces and nested classes or interfaces, create a combined set of superinterfaces of the corresponding classes and dismiss duplicates. Use the combined set for the new element.

  • For methods and constructors, construct a throws list as follows:

    • In binary compatibility mode, an empty throws list results independently of the source lists.

    • In source compatibility mode, both throws lists are normalized as described in Table 3-3 before they are compared. If the normalized lists are equal, one is used as the result, otherwise, a conflict is declared.

  • Methods that differ in the abstract modifier are not included.

  • If a method result type is not identical a conflict is declared.

  • If a field value type is not identical a conflict is declared.

  • If a field element differs in the volatile modifier, it is included.

  • Process constant field values as follows:

    • If one of the fields has a constant value and other does not, include the constant value in the result field.

    • If both fields have a constant value then declare a conflict if the values are different, otherwise include the value in the result field.