You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2018/01/22 09:00:41 UTC

[isis] branch master updated: ISIS-1844 make any unchecked casts explicit

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git


The following commit(s) were added to refs/heads/master by this push:
     new b240cc3  ISIS-1844 make any unchecked casts explicit
b240cc3 is described below

commit b240cc3a5c339df2231bc8b75c930e0ec6c91f94
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Jan 22 10:00:40 2018 +0100

    ISIS-1844 make any unchecked casts explicit
---
 .../org/apache/isis/applib/ModuleOrBuilderAbstract.java   |  2 +-
 .../apache/isis/applib/fixturescripts/FixtureScript.java  | 15 ++++++++-------
 .../org/apache/isis/applib/services/jaxb/JaxbService.java |  5 +++--
 .../services/queryresultscache/QueryResultsCache.java     |  4 ++--
 .../main/java/org/apache/isis/applib/util/JaxbUtil.java   |  2 +-
 .../java/org/apache/isis/applib/util/ObjectContracts.java |  8 ++------
 6 files changed, 17 insertions(+), 19 deletions(-)

diff --git a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
index a0a6ecf..ab4b31d 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/ModuleOrBuilderAbstract.java
@@ -128,7 +128,7 @@ abstract class ModuleOrBuilderAbstract<B extends ModuleOrBuilderAbstract<B>> {
     // -- HELPER
     
     @SuppressWarnings("unchecked") //[ahuber] it's safe to assume this object is an instance of B
-	private B self() {
+	protected B self() {
     	return (B) this;
     }
 
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
index 872f7ad..da8cef9 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScript.java
@@ -49,6 +49,7 @@ import org.apache.isis.applib.services.sessmgmt.SessionManagementService;
 import org.apache.isis.applib.services.user.UserService;
 import org.apache.isis.applib.services.wrapper.WrapperFactory;
 import org.apache.isis.applib.services.xactn.TransactionService;
+import org.apache.isis.applib.util.Casts;
 
 @ViewModelLayout(named="Script")
 public abstract class FixtureScript 
@@ -627,7 +628,7 @@ public abstract class FixtureScript
                     return childFixtureScript;
                 } else {
                     trace(childFixtureScript, As.SKIP);
-                    return (T)previouslyExecutedScript;
+                    return Casts.uncheckedCast(previouslyExecutedScript);
                 }
 
             case EXECUTE_ONCE_BY_VALUE:
@@ -675,7 +676,7 @@ public abstract class FixtureScript
                 return childFixtureScript;
             } else {
                 trace(childFixtureScript, As.SKIP);
-                return (T)previouslyExecutedScript;
+                return Casts.uncheckedCast(previouslyExecutedScript);
             }
         }
 
@@ -771,11 +772,11 @@ public abstract class FixtureScript
         }
         @Programmatic
         public <T> T getUserData(final Class<T> cls) {
-            return (T) userData.get(cls);
+            return Casts.uncheckedCast(userData.get(cls));
         }
         @Programmatic
         public <T> T clearUserData(final Class<T> cls) {
-            return (T) userData.remove(cls);
+            return Casts.uncheckedCast(userData.remove(cls));
         }
 
     }
@@ -790,7 +791,7 @@ public abstract class FixtureScript
     }
 
     private <T> T valueFor(final String parameterName, final ExecutionContext ec, final T defaultValue) {
-        final Class<T> cls = (Class<T>) defaultValue.getClass();
+        final Class<T> cls = Casts.uncheckedCast(defaultValue.getClass());
 
         final T value = readParam(parameterName, ec, cls);
         if(value != null) { return (T) value; }
@@ -818,7 +819,7 @@ public abstract class FixtureScript
         Method method;
         try {
             method = this.getClass().getMethod("get" + uppercase(parameterName));
-            value = (T)method.invoke(this);
+            value = Casts.uncheckedCast(method.invoke(this));
         } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ignored) {
 
         }
@@ -827,7 +828,7 @@ public abstract class FixtureScript
         if (cls == Boolean.class || cls == boolean.class) {
             try {
                 method = this.getClass().getMethod("is" + uppercase(parameterName));
-                value = (T)method.invoke(this);
+                value = Casts.uncheckedCast(method.invoke(this));
             } catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException ignored) {
 
             }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
index 2a359e3..566679c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/jaxb/JaxbService.java
@@ -34,6 +34,7 @@ import org.apache.isis.applib.DomainObjectContainer;
 import org.apache.isis.applib.NonRecoverableException;
 import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.services.dto.Dto_downloadXsd;
+import org.apache.isis.applib.util.Casts;
 import org.apache.isis.applib.util.Streams;
 
 import com.google.common.collect.Maps;
@@ -132,7 +133,7 @@ public interface JaxbService {
         public <T> T fromXml(final Class<T> domainClass, final String xml, final Map<String, Object> unmarshallerProperties) {
             try {
                 final JAXBContext context = JAXBContext.newInstance(domainClass);
-                return (T) fromXml(context, xml, unmarshallerProperties);
+                return Casts.uncheckedCast(fromXml(context, xml, unmarshallerProperties));
 
             } catch (final JAXBException ex) {
                 throw new NonRecoverableException("Error unmarshalling XML to class '" + domainClass.getName() + "'", ex);
@@ -177,7 +178,7 @@ public interface JaxbService {
                     String annotationExceptionMessages = null;
                     try {
                         final Method getErrorsMethod = exClass.getMethod("getErrors");
-                        errors = (List<? extends Exception>) getErrorsMethod.invoke(ex);
+                        errors = Casts.uncheckedCast(getErrorsMethod.invoke(ex));
                         
                         annotationExceptionMessages = ": " + 
                         Streams.stream(errors)
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
index 7c3f7ea..91ee4e3 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/queryresultscache/QueryResultsCache.java
@@ -35,6 +35,7 @@ import org.apache.isis.applib.annotation.Programmatic;
 import org.apache.isis.applib.fixturescripts.events.FixturesInstalledEvent;
 import org.apache.isis.applib.fixturescripts.events.FixturesInstallingEvent;
 import org.apache.isis.applib.services.WithTransactionScope;
+import org.apache.isis.applib.util.Casts;
 
 /**
  * This service (API and implementation) provides a mechanism by which idempotent query results can be cached for the duration of an interaction.
@@ -154,7 +155,6 @@ public class QueryResultsCache implements WithTransactionScope {
     }
 
     @Programmatic
-    @SuppressWarnings("unchecked")
     public <T> T execute(final Callable<T> callable, final Key cacheKey) {
         if(control.isFixturesInstalling()) {
             try {
@@ -171,7 +171,7 @@ public class QueryResultsCache implements WithTransactionScope {
             final Value<?> cacheValue = cache.get(cacheKey);
             logHitOrMiss(cacheKey, cacheValue);
             if(cacheValue != null) {
-                return (T) cacheValue.getResult();
+                return Casts.uncheckedCast(cacheValue.getResult());
             }
 
             // cache miss, so get the result...
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
index b2cd974..00a43bc 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/JaxbUtil.java
@@ -49,7 +49,7 @@ public class JaxbUtil {
         Unmarshaller un = null;
         try {
             un = getJaxbContext(dtoClass).createUnmarshaller();
-            return (T) un.unmarshal(reader);
+            return Casts.uncheckedCast(un.unmarshal(reader));
         } catch (JAXBException e) {
             throw new RuntimeException(e);
         }
diff --git a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
index 0c55ff1..a40236e 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/util/ObjectContracts.java
@@ -41,7 +41,6 @@ public class ObjectContracts {
      * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #compare(Object, Object, String...) varargs} overloaded version of this method.
      */
     @Deprecated
-    @SuppressWarnings("unchecked")
     public static <T> int compare(final T p, final T q, final String propertyNames) {
         final Iterable<String> propertyNamesIter = csvToIterable(propertyNames);
         return compare(p, q, propertyNamesIter);
@@ -53,7 +52,6 @@ public class ObjectContracts {
      * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
      */
     @Deprecated
-    @SuppressWarnings("unchecked")
     public static <T> int compare(final T p, final T q, final String... propertyNames) {
         final Iterable<String> propertyNamesIter = varargsToIterable(propertyNames);
         return compare(p, q, propertyNamesIter);
@@ -70,8 +68,8 @@ public class ObjectContracts {
         final Iterable<Clause> clauses = clausesFor(propertyNamesIter);
         ComparisonChain chain = ComparisonChain.start();
         for (final Clause clause : clauses) {
-            final Comparable<T> propertyValueOfP = (Comparable<T>) clause.getValueOf(p);
-            final Comparable<T> propertyValueOfQ = (Comparable<T>) clause.getValueOf(q);
+            final Comparable<T> propertyValueOfP = Casts.uncheckedCast(clause.getValueOf(p));
+            final Comparable<T> propertyValueOfQ = Casts.uncheckedCast(clause.getValueOf(q));
             chain = chain.compare(propertyValueOfP, propertyValueOfQ, clause.getDirection().getOrdering());
         }
         return chain.result();
@@ -85,7 +83,6 @@ public class ObjectContracts {
      * @param propertyNames - the property name or names, CSV format.  If multiple properties, use the {@link #compareBy(String...)} varargs} overloaded version of this method.
      */
     @Deprecated
-    @SuppressWarnings("unchecked")
     public static <T> Comparator<T> compareBy(final String propertyNames){
         return (p, q) -> compare(p, q, propertyNames);
     }
@@ -94,7 +91,6 @@ public class ObjectContracts {
      * @deprecated - please be aware that this utility heavily uses reflection.  We don't actually intend to deprecate this method (it's useful while prototyping), but we wanted to bring this to your attention!
      */
     @Deprecated
-    @SuppressWarnings("unchecked")
     public static <T> Comparator<T> compareBy(final String... propertyNames){
         return (p, q) -> compare(p, q, propertyNames);
     }

-- 
To stop receiving notification emails like this one, please contact
ahuber@apache.org.