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/23 10:57:47 UTC
[isis] 10/10: ISIS-1841 refactoring switch statements
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch ISIS-1846_internal_utils
in repository https://gitbox.apache.org/repos/asf/isis.git
commit 8e8b5f1a8e4780b467ab31a7d909f89e499244a9
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Jan 23 11:37:42 2018 +0100
ISIS-1841 refactoring switch statements
such that unmatched cases always throw an exception (internal error)
---
.../isis/applib/fixturescripts/FixtureScript.java | 3 +-
.../isis/applib/fixturescripts/FixtureScripts.java | 3 ++
.../applib/internal/exceptions/_Exceptions.java | 36 +++++++++++++++++++---
.../layout/menubars/bootstrap3/BS3MenuBars.java | 5 +++
.../isis/applib/services/bookmark/Bookmark.java | 5 +--
.../isis/applib/services/dto/DtoMappingHelper.java | 6 ++--
.../services/eventbus/AbstractDomainEvent.java | 26 ++++++++++++++--
.../apache/isis/schema/utils/CommonDtoUtils.java | 11 ++-----
.../isis/core/metamodel/adapter/oid/Oid.java | 9 ++++--
.../AuditableFacetForDomainObjectAnnotation.java | 5 ++-
10 files changed, 87 insertions(+), 22 deletions(-)
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 955cb50..7167a07 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
@@ -37,6 +37,7 @@ import org.apache.isis.applib.fixtures.FixtureType;
import org.apache.isis.applib.fixtures.InstallableFixture;
import org.apache.isis.applib.internal.base._Casts;
import org.apache.isis.applib.internal.base._Strings;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.services.factory.FactoryService;
import org.apache.isis.applib.services.registry.ServiceRegistry;
import org.apache.isis.applib.services.repository.RepositoryService;
@@ -642,7 +643,7 @@ public abstract class FixtureScript
return childFixtureScript;
default:
- throw new IllegalArgumentException("Execution strategy: '" + executionStrategy + "' not recognized");
+ throw _Exceptions.unmatchedCase("Execution strategy: '%s' not recognized", executionStrategy);
}
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
index a3dde31..2a6d52c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/fixturescripts/FixtureScripts.java
@@ -42,6 +42,7 @@ import org.apache.isis.applib.annotation.Parameter;
import org.apache.isis.applib.annotation.ParameterLayout;
import org.apache.isis.applib.annotation.Programmatic;
import org.apache.isis.applib.annotation.RestrictTo;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.services.bookmark.BookmarkService;
import org.apache.isis.applib.services.classdiscovery.ClassDiscoveryService;
import org.apache.isis.applib.services.fixturespec.FixtureScriptsDefault;
@@ -461,6 +462,8 @@ public abstract class FixtureScripts extends AbstractService {
break;
case IGNORE:
return null;
+ default:
+ throw _Exceptions.unmatchedCase(getNonPersistedObjectsStrategy());
}
}
final FixtureResult fixtureResult = new FixtureResult();
diff --git a/core/applib/src/main/java/org/apache/isis/applib/internal/exceptions/_Exceptions.java b/core/applib/src/main/java/org/apache/isis/applib/internal/exceptions/_Exceptions.java
index b47a88d..c28e5f4 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/internal/exceptions/_Exceptions.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/internal/exceptions/_Exceptions.java
@@ -19,8 +19,11 @@
package org.apache.isis.applib.internal.exceptions;
+import java.util.Objects;
import java.util.stream.Stream;
+import javax.annotation.Nullable;
+
import org.apache.isis.applib.internal.base._NullSafe;
/**
@@ -37,19 +40,44 @@ public final class _Exceptions {
private _Exceptions(){}
- public static final RuntimeException unmatchedCase(Object _case) {
- return new RuntimeException("internal error: unmatched case in switch statement: "+_case);
+ // -- FRAMEWORK INTERNAL ERRORS
+
+ /**
+ * Most likely to be used in switch statements to handle the default case.
+ * @param _case the unmatched case to be reported
+ * @return
+ */
+ public static final IllegalArgumentException unmatchedCase(@Nullable Object _case) {
+ return new IllegalArgumentException("internal error: unmatched case in switch statement: "+_case);
+ }
+
+ /**
+ * Most likely to be used in switch statements to handle the default case.
+ * @param format like in {@link java.lang.String#format(String, Object...)}
+ * @param _case the unmatched case to be reported
+ * @return
+ */
+ public static final IllegalArgumentException unmatchedCase(String format, @Nullable Object _case) {
+ Objects.requireNonNull(format);
+ return new IllegalArgumentException(String.format(format, _case));
}
public static final RuntimeException unexpectedCodeReach() {
return new RuntimeException("internal error: code was reached, that is expected unreachable");
}
- public static final Stream<String> streamStacktraceLines(Throwable e, int maxLines) {
- return _NullSafe.stream(e.getStackTrace())
+ // -- STACKTRACE UTILITITIES
+
+ public static final Stream<String> streamStacktraceLines(@Nullable Throwable ex, int maxLines) {
+ if(ex==null) {
+ return Stream.empty();
+ }
+ return _NullSafe.stream(ex.getStackTrace())
.map(StackTraceElement::toString)
.limit(maxLines);
}
+
+
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
index 8529b0b..e4d5064 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/layout/menubars/bootstrap3/BS3MenuBars.java
@@ -25,6 +25,7 @@ import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import org.apache.isis.applib.annotation.DomainServiceLayout;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.layout.component.ServiceActionLayoutData;
import org.apache.isis.applib.layout.menubars.MenuBars;
@@ -88,6 +89,10 @@ public class BS3MenuBars extends org.apache.isis.applib.layout.menubars.MenuBars
return getSecondary();
case TERTIARY:
return getTertiary();
+ case NOT_SPECIFIED:
+ break;
+ default:
+ throw _Exceptions.unmatchedCase(menuBar);
}
return null;
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
index a1f97e7..0afa0b8 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/bookmark/Bookmark.java
@@ -24,6 +24,7 @@ import java.util.Iterator;
import com.google.common.base.Splitter;
import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.schema.common.v1.BookmarkObjectState;
import org.apache.isis.schema.common.v1.OidDto;
@@ -108,6 +109,7 @@ public class Bookmark implements Serializable {
public static ObjectState from(final BookmarkObjectState objectState) {
if(objectState == null) {
+ // persistent is assumed if not specified
return ObjectState.PERSISTENT;
}
switch (objectState) {
@@ -118,8 +120,7 @@ public class Bookmark implements Serializable {
case PERSISTENT:
return ObjectState.PERSISTENT;
default:
- // persistent is assumed if not specified
- return ObjectState.PERSISTENT;
+ throw _Exceptions.unmatchedCase(objectState);
}
}
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/dto/DtoMappingHelper.java b/core/applib/src/main/java/org/apache/isis/applib/services/dto/DtoMappingHelper.java
index 21c5d74..9a97c6c 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/dto/DtoMappingHelper.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/dto/DtoMappingHelper.java
@@ -21,6 +21,7 @@ import javax.inject.Inject;
import org.apache.isis.applib.annotation.DomainService;
import org.apache.isis.applib.annotation.NatureOfService;
import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.bookmark.BookmarkService;
import org.apache.isis.schema.common.v1.BookmarkObjectState;
@@ -56,9 +57,10 @@ public class DtoMappingHelper {
return BookmarkObjectState.TRANSIENT;
case VIEW_MODEL:
return BookmarkObjectState.VIEW_MODEL;
+ default:
+ throw _Exceptions.unmatchedCase("objectState '%s' not recognized", bookmark.getObjectState());
}
- throw new IllegalArgumentException(
- String.format("objectState '%s' not recognized", bookmark.getObjectState()));
+
}
@Inject
diff --git a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
index e5728cd..ccb1331 100644
--- a/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
+++ b/core/applib/src/main/java/org/apache/isis/applib/services/eventbus/AbstractDomainEvent.java
@@ -20,12 +20,15 @@ package org.apache.isis.applib.services.eventbus;
import java.util.EventObject;
import java.util.Map;
-import com.google.common.collect.Maps;
+
import org.apache.isis.applib.Identifier;
import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.services.i18n.TranslatableString;
import org.apache.isis.applib.util.ObjectContracts;
+import com.google.common.collect.Maps;
+
public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
private static final long serialVersionUID = 1L;
@@ -244,11 +247,20 @@ public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
public void veto(final String reason, final Object... args) {
switch (getEventPhase()) {
case HIDE:
- hide();
+ hide();
+ //TODO [ahuber] REVIEW missing break or intended?
case DISABLE:
disable(String.format(reason, args));
+ //TODO [ahuber] REVIEW missing break or intended?
case VALIDATE:
invalidate(String.format(reason, args));
+ break;
+
+ case EXECUTED:
+ case EXECUTING:
+ break;
+ default:
+ throw _Exceptions.unmatchedCase(getEventPhase());
}
}
/**
@@ -268,10 +280,20 @@ public abstract class AbstractDomainEvent<S> extends java.util.EventObject {
switch (getEventPhase()) {
case HIDE:
hide();
+ //TODO [ahuber] missing break or intended?
case DISABLE:
disable(translatableReason);
+ //TODO [ahuber] REVIEW missing break or intended?
case VALIDATE:
invalidate(translatableReason);
+ break;
+
+ case EXECUTED:
+ case EXECUTING:
+ break;
+ default:
+ throw _Exceptions.unmatchedCase(getEventPhase());
+
}
}
//endregion
diff --git a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
index 4291d82..44626b0 100644
--- a/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
+++ b/core/applib/src/main/java/org/apache/isis/schema/utils/CommonDtoUtils.java
@@ -31,6 +31,7 @@ import org.joda.time.LocalDate;
import org.joda.time.LocalDateTime;
import org.joda.time.LocalTime;
import org.apache.isis.applib.internal.base._Casts;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.applib.services.bookmark.BookmarkService;
import org.apache.isis.schema.cmd.v1.ParamDto;
@@ -250,10 +251,7 @@ public final class CommonDtoUtils {
return null;
}
default:
- // should never happen; all cases are listed above
- throw new IllegalArgumentException(String.format(
- "newValueDto(): do not recognize valueType %s (likely a framework error)",
- valueType));
+ throw _Exceptions.unmatchedCase(valueType);
}
}
@@ -329,10 +327,7 @@ public final class CommonDtoUtils {
case VOID:
return null;
default:
- // should never happen; all cases are listed above
- throw new IllegalArgumentException(String.format(
- "getValueDto(...): do not recognize valueType %s (likely a framework error)",
- valueType));
+ throw _Exceptions.unmatchedCase(valueType);
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
index 0d6f59f..5e000cb 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/adapter/oid/Oid.java
@@ -20,6 +20,7 @@
package org.apache.isis.core.metamodel.adapter.oid;
import org.apache.isis.applib.annotation.Value;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.applib.services.bookmark.Bookmark;
import org.apache.isis.core.commons.encoding.Encodable;
import org.apache.isis.core.metamodel.adapter.version.Version;
@@ -94,8 +95,10 @@ public interface Oid extends Encodable {
return VIEWMODEL;
case TRANSIENT:
return TRANSIENT;
- default:
+ case PERSISTENT:
return PERSISTENT;
+ default:
+ throw _Exceptions.unmatchedCase(objectState);
}
}
public Bookmark.ObjectState asBookmarkObjectState() {
@@ -104,8 +107,10 @@ public interface Oid extends Encodable {
return Bookmark.ObjectState.VIEW_MODEL;
case TRANSIENT:
return Bookmark.ObjectState.TRANSIENT;
- default:
+ case PERSISTENT:
return Bookmark.ObjectState.PERSISTENT;
+ default:
+ throw _Exceptions.unmatchedCase(this);
}
}
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
index 378b7a1..3b0319b 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobject/auditing/AuditableFacetForDomainObjectAnnotation.java
@@ -23,6 +23,7 @@ import java.util.List;
import org.apache.isis.applib.annotation.Auditing;
import org.apache.isis.applib.annotation.DomainObject;
+import org.apache.isis.applib.internal.exceptions._Exceptions;
import org.apache.isis.core.commons.config.IsisConfiguration;
import org.apache.isis.core.metamodel.facetapi.FacetHolder;
import org.apache.isis.core.metamodel.facets.object.audit.AuditableFacet;
@@ -47,8 +48,10 @@ public class AuditableFacetForDomainObjectAnnotation extends AuditableFacetAbstr
case ENABLED:
return new AuditableFacetForDomainObjectAnnotation(Enablement.ENABLED, holder);
case AS_CONFIGURED:
- default:
+ case NOT_SPECIFIED:
return new AuditableFacetForDomainObjectAnnotationAsConfigured(holder);
+ default:
+ throw _Exceptions.unmatchedCase(domainObject.auditing());
}
})
.orElse(new AuditableFacetFromConfiguration(holder));
--
To stop receiving notification emails like this one, please contact
ahuber@apache.org.