#
# Methods added or deprecated by the API upgrade from ISO 19115:2003 to 19115:2014.
# Those changes are not present in GeoAPI 3.0.0 interfaces, so we declare them with
# @Deprecated and @UML annotations in Apache SIS implementation.
#
# This properties file is automatically generated by a comparison between the GeoAPI
# 3.0 and 3.1 JAR files, with minor manual editions.  This file is used for checking
# annotation validity in Apache SIS implementation. This file should be empty in SIS
# branches implementing latest GeoAPI snapshots, and may be non-empty on the main branch
# when the changes are not yet incorporated in a standard release.
#
# Legend:
#   - Method has been deprecated.
#   + Method has been added in an existing class. Shall be followed by a colon and UML identifier.
#   ~ Comment out the next element (e.g. for a method that should have been deleted, but is kept for now).
#
# Example:
# org.opengis.metadata.citation.Telephone=-getVoices -getFacsimiles +getNumber:number +getNumberType:numberType
#
# Above example means that the Telephone interface needs to have its getVoices() and getFacsimiles()
# methods deprecated, and to have getNumber() and getNumberType() methods added in order to comply
# with the changes in the international standard. The UML identifiers of added methods are "number"
# and "numberType" respectively.
#
