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;