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


Reply via email to