Hello,

The throw clauses in question are on protected methods. If a user had
overridden these and then thrown an exception, they may have to modify
their source in order to compile against 2.8. Is this ok from the
point of view of our backwards compatibility guarantees?

Regards,
Matt J

On Sun, Jun 19, 2022 at 2:26 AM Gary Gregory <garydgreg...@gmail.com> wrote:
>
> This change is incorrect, binary compatibility was NOT broken as the JLS
> specifies that:
>
> "Changes to the throws clause of methods or constructors do not break
> compatibility with pre-existing binaries; these clauses are checked only at
> compile time."
>
> See
> https://docs.oracle.com/javase/specs/jls/se8/html/jls-13.html#jls-13.4.21
>
> The Maven default goal runs JApiCmp which checks this.
>
> This free us to clean up our code.
>
> If a user is actually reconciling sources, then, yes, they may have to
> adjust call sites, which ok. Binary compatibility is maintained.
>
> Gary
>
> On Sat, Jun 18, 2022, 23:59 <mattjuntu...@apache.org> wrote:
>
> > This is an automated email from the ASF dual-hosted git repository.
> >
> > mattjuntunen pushed a commit to branch master
> > in repository
> > https://gitbox.apache.org/repos/asf/commons-configuration.git
> >
> >
> > The following commit(s) were added to refs/heads/master by this push:
> >      new 2e39ef6b fixing binary incompatibilities with v2.7
> > 2e39ef6b is described below
> >
> > commit 2e39ef6b3909425db1ccf6c1bb58d76f953b5f9a
> > Author: Matt Juntunen <mattjuntu...@apache.org>
> > AuthorDate: Sat Jun 18 23:59:17 2022 -0400
> >
> >     fixing binary incompatibilities with v2.7
> > ---
> >  .../apache/commons/configuration2/YAMLConfiguration.java  | 15
> > ++++++++-------
> >  .../configuration2/builder/ConfigurationBuilderEvent.java |  2 +-
> >  .../org/apache/commons/configuration2/event/Event.java    |  2 +-
> >  .../commons/configuration2/interpol/ConstantLookup.java   |  4 ++--
> >  4 files changed, 12 insertions(+), 11 deletions(-)
> >
> > diff --git
> > a/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
> > b/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
> > index 705c2a21..4732e3f3 100644
> > ---
> > a/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
> > +++
> > b/src/main/java/org/apache/commons/configuration2/YAMLConfiguration.java
> > @@ -17,6 +17,12 @@
> >
> >  package org.apache.commons.configuration2;
> >
> > +import java.io.IOException;
> > +import java.io.InputStream;
> > +import java.io.Reader;
> > +import java.io.Writer;
> > +import java.util.Map;
> > +
> >  import org.apache.commons.configuration2.ex.ConfigurationException;
> >  import org.apache.commons.configuration2.ex.ConfigurationRuntimeException;
> >  import org.apache.commons.configuration2.io.InputStreamSupport;
> > @@ -27,12 +33,6 @@ import org.yaml.snakeyaml.Yaml;
> >  import org.yaml.snakeyaml.constructor.Constructor;
> >  import org.yaml.snakeyaml.representer.Representer;
> >
> > -import java.io.IOException;
> > -import java.io.InputStream;
> > -import java.io.Reader;
> > -import java.io.Writer;
> > -import java.util.Map;
> > -
> >  /**
> >   * <p>
> >   * A specialized hierarchical configuration class that is able to parse
> > YAML documents.
> > @@ -84,7 +84,8 @@ public class YAMLConfiguration extends
> > AbstractYAMLBasedConfiguration implements
> >          dump(out, options);
> >      }
> >
> > -    public void dump(final Writer out, final DumperOptions options) {
> > +    public void dump(final Writer out, final DumperOptions options)
> > +            throws ConfigurationException, IOException {
> >          final Yaml yaml = new Yaml(options);
> >
> >  yaml.dump(constructMap(getNodeModel().getNodeHandler().getRootNode()),
> > out);
> >      }
> > diff --git
> > a/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java
> > b/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java
> > index 9f944b44..f4aa7f77 100644
> > ---
> > a/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java
> > +++
> > b/src/main/java/org/apache/commons/configuration2/builder/ConfigurationBuilderEvent.java
> > @@ -33,7 +33,7 @@ import org.apache.commons.configuration2.event.EventType;
> >   */
> >  public class ConfigurationBuilderEvent extends Event {
> >
> > -    private static final long serialVersionUID = 1L;
> > +    private static final long serialVersionUID = -7488811456039315104L;
> >
> >      /** The common super type for all events related to configuration
> > builders. */
> >      public static final EventType<ConfigurationBuilderEvent> ANY = new
> > EventType<>(Event.ANY, "BUILDER");
> > diff --git
> > a/src/main/java/org/apache/commons/configuration2/event/Event.java
> > b/src/main/java/org/apache/commons/configuration2/event/Event.java
> > index 11f1bce7..8845c4fe 100644
> > --- a/src/main/java/org/apache/commons/configuration2/event/Event.java
> > +++ b/src/main/java/org/apache/commons/configuration2/event/Event.java
> > @@ -39,7 +39,7 @@ public class Event extends EventObject {
> >       */
> >      public static final EventType<Event> ANY = new EventType<>(null,
> > "ANY");
> >
> > -    private static final long serialVersionUID = 1L;
> > +    private static final long serialVersionUID = -8168310049858198944L;
> >
> >      /**
> >       * Constant for the format used in toString() for a property
> > representation.
> > diff --git
> > a/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java
> > b/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java
> > index 89ecbe13..7351d289 100644
> > ---
> > a/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java
> > +++
> > b/src/main/java/org/apache/commons/configuration2/interpol/ConstantLookup.java
> > @@ -92,9 +92,9 @@ public class ConstantLookup implements Lookup {
> >       * @param className the name of the class
> >       * @param fieldName the name of the member field of that class to read
> >       * @return the field's value
> > -     * @throws ReflectiveOperationException if an error occurs
> > +     * @throws Exception if an error occurs
> >       */
> > -    protected Object resolveField(final String className, final String
> > fieldName) throws ReflectiveOperationException {
> > +    protected Object resolveField(final String className, final String
> > fieldName) throws Exception {
> >          return fetchClass(className).getField(fieldName).get(null);
> >      }
> >
> >
> >

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
For additional commands, e-mail: dev-h...@commons.apache.org

Reply via email to