Author: rwhitcomb Date: Thu May 7 20:03:24 2020 New Revision: 1877484 URL: http://svn.apache.org/viewvc?rev=1877484&view=rev Log: PIVOT-1032: Several enhancements to ReadOnlySequence triggered by a style error. * Make a "defaultException" method that does some fancy stuff to pinpoint the exact method as well as class name of the unsupported operation. * Change all subclasses to call "defaultException()" instead of relying on the protected message string.
Modified: pivot/trunk/core/src/org/apache/pivot/collections/EnumList.java pivot/trunk/core/src/org/apache/pivot/collections/ReadOnlySequence.java pivot/trunk/core/src/org/apache/pivot/collections/immutable/ImmutableList.java pivot/trunk/wtk/src/org/apache/pivot/wtk/content/CalendarDateSpinnerData.java pivot/trunk/wtk/src/org/apache/pivot/wtk/content/NumericSpinnerData.java Modified: pivot/trunk/core/src/org/apache/pivot/collections/EnumList.java URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/collections/EnumList.java?rev=1877484&r1=1877483&r2=1877484&view=diff ============================================================================== --- pivot/trunk/core/src/org/apache/pivot/collections/EnumList.java (original) +++ pivot/trunk/core/src/org/apache/pivot/collections/EnumList.java Thu May 7 20:03:24 2020 @@ -61,7 +61,7 @@ public class EnumList<E extends Enum<E>> @Override @UnsupportedOperation public void remove() { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw new UnsupportedOperationException(); } } @@ -87,7 +87,7 @@ public class EnumList<E extends Enum<E>> @Override @UnsupportedOperation public void clear() { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override @@ -134,7 +134,7 @@ public class EnumList<E extends Enum<E>> @Override @UnsupportedOperation public void setComparator(final Comparator<E> comparator) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override Modified: pivot/trunk/core/src/org/apache/pivot/collections/ReadOnlySequence.java URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/collections/ReadOnlySequence.java?rev=1877484&r1=1877483&r2=1877484&view=diff ============================================================================== --- pivot/trunk/core/src/org/apache/pivot/collections/ReadOnlySequence.java (original) +++ pivot/trunk/core/src/org/apache/pivot/collections/ReadOnlySequence.java Thu May 7 20:03:24 2020 @@ -17,6 +17,7 @@ package org.apache.pivot.collections; import java.io.Serializable; +import java.util.Arrays; import org.apache.pivot.annotations.UnsupportedOperation; @@ -32,11 +33,26 @@ import org.apache.pivot.annotations.Unsu public abstract class ReadOnlySequence<T> implements Sequence<T>, Serializable { private static final long serialVersionUID = -2547032333033014540L; - /** The message passed to the {@link UnsupportedOperationException} to say this - * sequence is read-only and cannot be modified. + /** The simple name of our (derived) class, for message purposes. */ + private final String simpleClassName = this.getClass().getSimpleName(); + + /** Format of the default exception message. */ + private static final String MSG_FORMAT = + "The \"%1$s\" method is unsupported because %2$s is read-only (immutable)."; + + /** + * @return A new {@link UnsupportedOperationException} with a fancy message + * detailing the method and class name that was in error. */ - protected final String unsupportedOperationMsg = - "A(n) " + this.getClass().getSimpleName() + " is read-only (immutable)."; + public UnsupportedOperationException defaultException() { + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + StackTraceElement[] modifiedStackTrace = Arrays.copyOfRange(stackTrace, 2, stackTrace.length); + String callingMethodName = modifiedStackTrace[0].getMethodName(); + String message = String.format(MSG_FORMAT, callingMethodName, simpleClassName); + UnsupportedOperationException exception = new UnsupportedOperationException(message); + exception.setStackTrace(modifiedStackTrace); + return exception; + } /** * Adding an item to a read-only sequence is unsupported. @@ -45,7 +61,7 @@ public abstract class ReadOnlySequence<T @Override @UnsupportedOperation public final int add(final T item) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } /** @@ -55,7 +71,7 @@ public abstract class ReadOnlySequence<T @Override @UnsupportedOperation public final void insert(final T item, final int index) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } /** @@ -65,7 +81,7 @@ public abstract class ReadOnlySequence<T @Override @UnsupportedOperation public final T update(final int index, final T item) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } /** @@ -75,7 +91,7 @@ public abstract class ReadOnlySequence<T @Override @UnsupportedOperation public final int remove(final T item) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } /** @@ -85,7 +101,7 @@ public abstract class ReadOnlySequence<T @Override @UnsupportedOperation public final Sequence<T> remove(final int index, final int count) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } } Modified: pivot/trunk/core/src/org/apache/pivot/collections/immutable/ImmutableList.java URL: http://svn.apache.org/viewvc/pivot/trunk/core/src/org/apache/pivot/collections/immutable/ImmutableList.java?rev=1877484&r1=1877483&r2=1877484&view=diff ============================================================================== --- pivot/trunk/core/src/org/apache/pivot/collections/immutable/ImmutableList.java (original) +++ pivot/trunk/core/src/org/apache/pivot/collections/immutable/ImmutableList.java Thu May 7 20:03:24 2020 @@ -47,7 +47,7 @@ public final class ImmutableList<T> exte @Override @UnsupportedOperation public void clear() { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override @@ -78,7 +78,7 @@ public final class ImmutableList<T> exte @Override @UnsupportedOperation public void setComparator(final Comparator<T> comparator) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/CalendarDateSpinnerData.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/CalendarDateSpinnerData.java?rev=1877484&r1=1877483&r2=1877484&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/CalendarDateSpinnerData.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/CalendarDateSpinnerData.java Thu May 7 20:03:24 2020 @@ -63,7 +63,7 @@ public class CalendarDateSpinnerData ext @UnsupportedOperation @Override public void remove() { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } } @@ -139,7 +139,7 @@ public class CalendarDateSpinnerData ext @UnsupportedOperation @Override public void clear() { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override @@ -174,7 +174,7 @@ public class CalendarDateSpinnerData ext @UnsupportedOperation @Override public final void setComparator(final Comparator<CalendarDate> comparator) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override Modified: pivot/trunk/wtk/src/org/apache/pivot/wtk/content/NumericSpinnerData.java URL: http://svn.apache.org/viewvc/pivot/trunk/wtk/src/org/apache/pivot/wtk/content/NumericSpinnerData.java?rev=1877484&r1=1877483&r2=1877484&view=diff ============================================================================== --- pivot/trunk/wtk/src/org/apache/pivot/wtk/content/NumericSpinnerData.java (original) +++ pivot/trunk/wtk/src/org/apache/pivot/wtk/content/NumericSpinnerData.java Thu May 7 20:03:24 2020 @@ -67,6 +67,7 @@ public class NumericSpinnerData extends } @Override + @UnsupportedOperation public void remove() { throw new UnsupportedOperationException(); } @@ -180,7 +181,7 @@ public class NumericSpinnerData extends @UnsupportedOperation @Override public void clear() { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override @@ -209,7 +210,7 @@ public class NumericSpinnerData extends @UnsupportedOperation @Override public void setComparator(final Comparator<Integer> comparator) { - throw new UnsupportedOperationException(unsupportedOperationMsg); + throw defaultException(); } @Override