<?xml version="1.0"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

     http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!--
    Ignore some differences that are not relevant to the external API 
 -->
<differences>
<!--
  <difference>
    <className>**/example/*Remote</className>
    <differenceType>...</differenceType>
    <field>my*</field>
    <method>MyObject* method(int, java.lang.String)</method>
    <from>...</from>
    <to>...</to>
  </difference>
-->
  <!-- dropped Serializable -->
  <difference>
    <className>**/*</className>
    <differenceType>4001</differenceType>
    <to>java/io/Serializable</to>
  </difference>
  <!-- We no longer want to implement the deprecated Constants class -->
  <difference>
    <className>**/*</className>
    <differenceType>4001</differenceType>
    <to>org/apache/commons/bcel6/Constants</to>
  </difference>
  <!-- We no longer want to implement the deprecated InstructionConstants class -->
  <difference>
    <className>**/*</className>
    <differenceType>4001</differenceType>
    <to>org/apache/commons/bcel6/generic/InstructionConstants</to>
  </difference>
  <!-- Method added to an interface is not binary incompat -->
  <difference>
    <className>**/*</className>
    <differenceType>7012</differenceType>
    <method>*</method>
  </difference>
  <!--  ignore method now non-final informational reports -->
  <difference>
    <className>**/*</className>
    <differenceType>7015</differenceType>
    <method>*</method>
  </difference>
</differences>
