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 2022/10/05 05:30:54 UTC
[isis] branch master updated: ISIS-2297: fixes potential NPE (sonar)
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 91c24e212c ISIS-2297: fixes potential NPE (sonar)
91c24e212c is described below
commit 91c24e212c248d19d3d95077ddd28d16f64990de
Author: Andi Huber <ah...@apache.org>
AuthorDate: Wed Oct 5 07:30:49 2022 +0200
ISIS-2297: fixes potential NPE (sonar)
---
.../interactions/managed/nonscalar/DataRow.java | 7 +++--
.../metamodel/object/_ManagedObjectSpecified.java | 2 +-
.../SpecificationLoaderTest_nonScalar.java | 34 +++++++++++++---------
.../viewer/wicket/model/models/ValueModel.java | 6 ++--
.../actionresponse/ActionResultResponseType.java | 34 ++++++++++++----------
5 files changed, 46 insertions(+), 37 deletions(-)
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java
index 18149bb1fa..642258ff87 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/interactions/managed/nonscalar/DataRow.java
@@ -25,6 +25,7 @@ import org.apache.isis.commons.internal.binding._Bindables.BooleanBindable;
import org.apache.isis.core.metamodel.object.ManagedObject;
import lombok.Getter;
+import lombok.NonNull;
public class DataRow {
@@ -33,7 +34,9 @@ public class DataRow {
@Getter private final BooleanBindable selectToggle;
@Getter private final DataTableModel parentTable;
- public DataRow(final DataTableModel parentTable, final ManagedObject rowElement) {
+ public DataRow(
+ final @NonNull DataTableModel parentTable,
+ final @NonNull ManagedObject rowElement) {
this.parentTable = parentTable;
this.rowElement = rowElement;
@@ -56,7 +59,7 @@ public class DataRow {
return rowElement;
}
- public ManagedObject getCellElement(final DataColumn column) {
+ public ManagedObject getCellElement(final @NonNull DataColumn column) {
return column.getPropertyMetaModel().get(getRowElement());
}
diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java
index 00e11aaa64..1f3e9b23ac 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/object/_ManagedObjectSpecified.java
@@ -113,7 +113,7 @@ implements ManagedObject {
: null);
}
- private ObjectMemento mementoForPacked(@Nullable final PackedManagedObject packedAdapter) {
+ private ObjectMemento mementoForPacked(@NonNull final PackedManagedObject packedAdapter) {
val listOfMementos = packedAdapter.unpack().stream()
.map(this::mementoForScalar)
.collect(Collectors.toCollection(ArrayList::new)); // ArrayList is serializable
diff --git a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_nonScalar.java b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_nonScalar.java
index f07adfbff9..8fd8f1538a 100644
--- a/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_nonScalar.java
+++ b/core/metamodel/src/test/java/org/apache/isis/core/metamodel/specloader/SpecificationLoaderTest_nonScalar.java
@@ -21,6 +21,8 @@ package org.apache.isis.core.metamodel.specloader;
import java.util.Optional;
import java.util.Vector;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -33,13 +35,16 @@ import org.apache.isis.core.metamodel.facets.actcoll.typeof.TypeOfFacet;
import org.apache.isis.core.metamodel.facets.collections.CollectionFacet;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
+import lombok.val;
+
class SpecificationLoaderTest_nonScalar {
- class ArrayTest extends SpecificationLoaderTestAbstract {
+ @Nested @Disabled("reflection on plain array objects does not work") //FIXME
+ static class ArrayTest extends SpecificationLoaderTestAbstract {
@Override
- protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
- return reflector.loadSpecification(ReflectorTestPojo[].class);
+ protected ObjectSpecification loadSpecification(final SpecificationLoader specLoader) {
+ return specLoader.loadSpecification(ReflectorTestPojo[].class);
}
@Test void testType() throws Exception {
@@ -51,25 +56,25 @@ class SpecificationLoaderTest_nonScalar {
}
@Test @Override public void testCollectionFacet() throws Exception {
- final Facet facet = specification.getFacet(CollectionFacet.class);
- assertNotNull(facet);
+ val collectionFacet = specification.getFacet(CollectionFacet.class);
+ assertNotNull(collectionFacet);
}
@Test @Override public void testTypeOfFacet() throws Exception {
- final TypeOfFacet facet = specification.getFacet(TypeOfFacet.class);
- assertNotNull(facet);
- assertEquals(Optional.of(ReflectorTestPojo[].class), facet.value().getContainerType());
- assertEquals(ReflectorTestPojo.class, facet.value().getElementType());
+ val typeOfFacet = specification.getFacet(TypeOfFacet.class);
+ assertNotNull(typeOfFacet);
+ assertEquals(Optional.of(ReflectorTestPojo[].class), typeOfFacet.value().getContainerType());
+ assertEquals(ReflectorTestPojo.class, typeOfFacet.value().getElementType());
}
}
-
+ @Nested
static class CanTest extends SpecificationLoaderTestAbstract {
@Override
- protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
- return reflector.loadSpecification(Can.class);
+ protected ObjectSpecification loadSpecification(final SpecificationLoader specLoader) {
+ return specLoader.loadSpecification(Can.class);
}
@Test void testType() throws Exception {
@@ -94,11 +99,12 @@ class SpecificationLoaderTest_nonScalar {
}
+ @Nested
static class VectorTest extends SpecificationLoaderTestAbstract {
@Override
- protected ObjectSpecification loadSpecification(final SpecificationLoader reflector) {
- return reflector.loadSpecification(Vector.class);
+ protected ObjectSpecification loadSpecification(final SpecificationLoader specLoader) {
+ return specLoader.loadSpecification(Vector.class);
}
@Test void testType() throws Exception {
diff --git a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
index 37413b6e7f..e8a81965fe 100644
--- a/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
+++ b/viewers/wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/ValueModel.java
@@ -18,8 +18,6 @@
*/
package org.apache.isis.viewer.wicket.model.models;
-import org.springframework.lang.Nullable;
-
import org.apache.isis.core.metamodel.context.MetaModelContext;
import org.apache.isis.core.metamodel.object.ManagedObject;
import org.apache.isis.core.metamodel.objectmanager.memento.ObjectMemento;
@@ -42,7 +40,7 @@ extends ModelAbstract<ManagedObject> {
public static ValueModel of(
final @NonNull MetaModelContext commonContext,
final @NonNull ObjectMember objectMember,
- final @Nullable ManagedObject valueAdapter) {
+ final @NonNull ManagedObject valueAdapter) {
return new ValueModel(commonContext, objectMember, valueAdapter);
}
@@ -53,7 +51,7 @@ extends ModelAbstract<ManagedObject> {
private ValueModel(
final MetaModelContext commonContext,
final @NonNull ObjectMember objectMember,
- final @Nullable ManagedObject valueAdapter) {
+ final @NonNull ManagedObject valueAdapter) {
super(commonContext);
this.objectMemberMemento = ObjectMemberMemento.forMember(objectMember);
adapterMemento = valueAdapter.getMemento().orElseThrow();
diff --git a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
index e03ee8ee97..de98b3f8f0 100644
--- a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
+++ b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/actionresponse/ActionResultResponseType.java
@@ -22,6 +22,7 @@ import java.net.URL;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.request.IRequestHandler;
+import org.springframework.lang.Nullable;
import org.apache.isis.applib.value.Blob;
import org.apache.isis.applib.value.Clob;
@@ -47,6 +48,7 @@ import org.apache.isis.viewer.wicket.ui.pages.standalonecollection.StandaloneCol
import org.apache.isis.viewer.wicket.ui.pages.value.ValuePage;
import org.apache.isis.viewer.wicket.ui.pages.voidreturn.VoidReturnPage;
+import lombok.NonNull;
import lombok.SneakyThrows;
import lombok.Value;
import lombok.val;
@@ -57,7 +59,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
determineScalarAdapter(actionModel.getMetaModelContext(), resultAdapter); // intercepts collections
return toEntityPage(resultAdapter);
@@ -75,7 +77,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
_Assert.assertTrue(resultAdapter instanceof PackedManagedObject);
@@ -93,7 +95,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
final var commonContext = actionModel.getMetaModelContext();
final var valueModel = ValueModel.of(commonContext, actionModel.getAction(), resultAdapter);
@@ -107,7 +109,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
final Object value = resultAdapter.getPojo();
IRequestHandler handler =
@@ -120,7 +122,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
final Object value = resultAdapter.getPojo();
IRequestHandler handler =
@@ -133,7 +135,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
final LocalResourcePath localResPath = (LocalResourcePath)resultAdapter.getPojo();
final var webAppContextPath = actionModel.getMetaModelContext().getWebAppContextPath();
@@ -146,7 +148,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
// open URL server-side redirect
final LocalResourcePath localResPath = (LocalResourcePath)resultAdapter.getPojo();
@@ -160,7 +162,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
final URL url = (URL)resultAdapter.getPojo();
return ActionResultResponse
@@ -172,7 +174,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @NonNull ManagedObject resultAdapter,
final Can<ManagedObject> args) {
// open URL server-side redirect
final Object value = resultAdapter.getPojo();
@@ -186,7 +188,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @Nullable ManagedObject resultAdapter, // arg is not used
final Can<ManagedObject> args) {
final var commonContext = actionModel.getMetaModelContext();
final VoidModel voidModel = new VoidModel(commonContext);
@@ -199,7 +201,7 @@ public enum ActionResultResponseType {
public ActionResultResponse interpretResult(
final ActionModel actionModel,
final AjaxRequestTarget target,
- final ManagedObject resultAdapter,
+ final @Nullable ManagedObject resultAdapter, // arg is not used
final Can<ManagedObject> args) {
val signInPage = actionModel.getMetaModelContext()
.lookupServiceElseFail(PageClassRegistry.class)
@@ -224,15 +226,15 @@ public enum ActionResultResponseType {
public static ActionResultResponse determineAndInterpretResult(
final ActionModel model,
final AjaxRequestTarget targetIfAny,
- final ManagedObject resultAdapter,
+ final @Nullable ManagedObject resultAdapter,
final Can<ManagedObject> args) {
val typeAndAdapter = determineFor(resultAdapter, targetIfAny);
- return typeAndAdapter.type
+ return typeAndAdapter.type // mapped to VOID if adapter is unspecified or null
.interpretResult(model, targetIfAny, typeAndAdapter.resultAdapter, args);
}
- public static ActionResultResponse toEntityPage(final ManagedObject entityOrViewmodel) {
+ public static ActionResultResponse toEntityPage(final @NonNull ManagedObject entityOrViewmodel) {
entityOrViewmodel.invalidateBookmark();
return ActionResultResponse.toPage(EntityPage.class, entityOrViewmodel.getBookmark().orElseThrow());
}
@@ -240,8 +242,8 @@ public enum ActionResultResponseType {
// -- HELPER
private static ManagedObject determineScalarAdapter(
- final MetaModelContext commonContext,
- final ManagedObject resultAdapter) {
+ final @NonNull MetaModelContext commonContext,
+ final @NonNull ManagedObject resultAdapter) {
if (resultAdapter.getSpecification().isSingular()) {
return resultAdapter;