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 eafca29  ISIS-2340: mitigations (sonar analysis)
eafca29 is described below

commit eafca29440e39cbfd3679e6b23f4d53fae8aa65e
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Tue May 12 09:40:11 2020 +0200

    ISIS-2340: mitigations (sonar analysis)
---
 .../core/metamodel/facets/MethodFinderUtils.java   |  9 ++++---
 .../common/model/gridlayout/UiGridLayout.java      | 29 +++++++++++++---------
 .../resources/InteractionFailureHandler.java       | 15 ++++++-----
 .../isisapplib/IsisBlobOrClobPanelAbstract.java    |  4 +--
 4 files changed, 34 insertions(+), 23 deletions(-)

diff --git 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
index 48b64ef..d8a2c1f 100644
--- 
a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
+++ 
b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/MethodFinderUtils.java
@@ -32,6 +32,7 @@ import java.util.stream.Stream;
 
 import org.apache.isis.applib.services.i18n.TranslatableString;
 import org.apache.isis.core.commons.collections.Can;
+import org.apache.isis.core.commons.internal.base._NullSafe;
 import org.apache.isis.core.commons.internal.reflection._MethodCache;
 import org.apache.isis.core.commons.internal.reflection._Reflect;
 import org.apache.isis.core.metamodel.commons.MethodUtil;
@@ -42,7 +43,9 @@ import static 
org.apache.isis.core.commons.internal.reflection._Reflect.Filter.p
 import lombok.NonNull;
 import lombok.Value;
 import lombok.val;
+import lombok.extern.log4j.Log4j2;
 
+@Log4j2
 public final class MethodFinderUtils {
 
     private MethodFinderUtils() {
@@ -134,8 +137,7 @@ public final class MethodFinderUtils {
     
     public static Stream<Method> streamMethods(final Class<?> type, final 
Can<String> names, final Class<?> returnType) {
         try {
-            final Method[] methods = type.getMethods();
-            return Arrays.stream(methods)
+            return _NullSafe.stream(type.getMethods())
                     .filter(MethodUtil::isPublic)
                     .filter(MethodUtil::isNotStatic)
                     .filter(method -> names.contains(method.getName()))
@@ -143,7 +145,8 @@ public final class MethodFinderUtils {
                                       
returnType.isAssignableFrom(method.getReturnType()))
                     ;
         } catch (final SecurityException e) {
-            return null;
+            log.error("failed to enumerate methods of class %s", type);
+            return Stream.empty();
         }
     }
 
diff --git 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/gridlayout/UiGridLayout.java
 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/gridlayout/UiGridLayout.java
index d97d1f4..2df6633 100644
--- 
a/viewers/common/src/main/java/org/apache/isis/viewer/common/model/gridlayout/UiGridLayout.java
+++ 
b/viewers/common/src/main/java/org/apache/isis/viewer/common/model/gridlayout/UiGridLayout.java
@@ -31,6 +31,8 @@ import org.apache.isis.applib.layout.grid.bootstrap3.BS3Grid;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Row;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3Tab;
 import org.apache.isis.applib.layout.grid.bootstrap3.BS3TabGroup;
+import org.apache.isis.core.commons.internal.base._Lazy;
+import org.apache.isis.core.commons.internal.base._NullSafe;
 import org.apache.isis.core.commons.internal.exceptions._Exceptions;
 import org.apache.isis.core.metamodel.facets.object.grid.GridFacet;
 import org.apache.isis.core.metamodel.spec.ManagedObject;
@@ -60,20 +62,12 @@ public class UiGridLayout {
     }
     
     @NonNull private final ManagedObject managedObject;
-    private Optional<BS3Grid> gridData;
+    private _Lazy<Optional<BS3Grid>> gridData = 
_Lazy.threadSafe(this::initGridData);
     
     public <T> void visit(Visitor<T> visitor) {
         
-        if(gridData==null) {
-            gridData = Optional.ofNullable(
-                    managedObject.getSpecification().getFacet(GridFacet.class))
-            .map(gridFacet->gridFacet.getGrid(managedObject))
-            .filter(grid->grid instanceof BS3Grid)
-            .map(BS3Grid.class::cast);
-        }
-        
         // recursively visit the grid
-        gridData
+        gridData.get()
         .ifPresent(bs3Grid->{
             for(val bs3Row: bs3Grid.getRows()) {
                 visitRow(bs3Row, visitor.rootContainer, visitor);         
@@ -82,6 +76,14 @@ public class UiGridLayout {
         
     }
 
+    private Optional<BS3Grid> initGridData() {
+        return Optional.ofNullable(
+                managedObject.getSpecification().getFacet(GridFacet.class))
+        .map(gridFacet->gridFacet.getGrid(managedObject))
+        .filter(grid->grid instanceof BS3Grid)
+        .map(BS3Grid.class::cast);
+    }
+
     private <T> void visitRow(BS3Row bs3Row, T container, Visitor<T> visitor) {
         
         val uiRow = visitor.newRow(container, bs3Row);
@@ -126,11 +128,14 @@ public class UiGridLayout {
         }
         
         // columns having rows seems not permitted by XML schema
-        for(val bs3Row: bS3Col.getRows()) { 
+        if(_NullSafe.size(bS3Col.getRows())>0) {
             throw _Exceptions.unsupportedOperation();
-            //visitRow(bs3Row, uiCol, visitor);         
         }
         
+//        for(val bs3Row: bS3Col.getRows()) { 
+//            visitRow(bs3Row, uiCol, visitor);         
+//        }
+        
         for(val collectionData : bS3Col.getCollections()) {
             visitor.onCollection(uiCol, collectionData);    
         }
diff --git 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/InteractionFailureHandler.java
 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/InteractionFailureHandler.java
index 2a81a72..94dfed6 100644
--- 
a/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/InteractionFailureHandler.java
+++ 
b/viewers/restfulobjects/viewer/src/main/java/org/apache/isis/viewer/restfulobjects/viewer/resources/InteractionFailureHandler.java
@@ -26,6 +26,7 @@ import 
org.apache.isis.viewer.restfulobjects.applib.JsonRepresentation;
 import org.apache.isis.viewer.restfulobjects.applib.RestfulResponse;
 import 
org.apache.isis.viewer.restfulobjects.rendering.RestfulObjectsApplicationException;
 
+import lombok.NonNull;
 import lombok.val;
 
 public class InteractionFailureHandler {
@@ -71,10 +72,12 @@ public class InteractionFailureHandler {
     }
 
     public static RestfulObjectsApplicationException onParameterListInvalid(
-            @Nullable final InteractionVeto veto, 
-            @Nullable final JsonRepresentation arguments) {
+            @NonNull final InteractionVeto veto, 
+            @NonNull final JsonRepresentation arguments) {
 
-        arguments.mapPut("x-ro-invalidReason", veto.getReason());
+        if(veto!=null) {
+            arguments.mapPut("x-ro-invalidReason", veto.getReason());
+        }
         return RestfulObjectsApplicationException
                 
.createWithBody(RestfulResponse.HttpStatusCode.VALIDATION_FAILED,
                         arguments,
@@ -83,9 +86,9 @@ public class InteractionFailureHandler {
     
     // collect info for each individual param that is not valid
     public static void onParameterInvalid(
-            @Nullable final ManagedParameter managedParameter, 
-            @Nullable final InteractionVeto veto, 
-            @Nullable final JsonRepresentation arguments) {
+            @NonNull final ManagedParameter managedParameter, 
+            @NonNull final InteractionVeto veto, 
+            @NonNull final JsonRepresentation arguments) {
 
         val paramId = managedParameter.getParameter().getId();
         val argRepr = arguments.getRepresentation(paramId);
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
index b0570b5..f2ce1f6 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/isisapplib/IsisBlobOrClobPanelAbstract.java
@@ -268,7 +268,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends 
NamedWithMimeType> e
             final String disabledReason,
             final Optional<AjaxRequestTarget> target) {
 
-        MarkupContainer formComponent = (MarkupContainer) 
getComponentForRegular();
+        final MarkupContainer formComponent = (MarkupContainer) 
getComponentForRegular();
         sync(formComponent, visibility, editability, disabledReason, target);
 
         final Component component = formComponent.get(ID_SCALAR_VALUE);
@@ -337,7 +337,7 @@ public abstract class IsisBlobOrClobPanelAbstract<T extends 
NamedWithMimeType> e
 
     private void addAcceptFilterTo(Component component){
         final String filter = getAcceptFilter();
-        if(filter==null || filter.isEmpty())
+        if(component==null || filter==null || filter.isEmpty())
             return; // ignore
         class AcceptAttributeModel extends Model<String> {
             private static final long serialVersionUID = 1L;

Reply via email to