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

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


The following commit(s) were added to refs/heads/v4 by this push:
     new a5e350950d7 CAUSEWAY-3892: simplified Stacktrace Rendering
a5e350950d7 is described below

commit a5e350950d7a16a4a4c0ccc40c8d7199cd9405c5
Author: Andi Huber <[email protected]>
AuthorDate: Thu Aug 14 19:20:05 2025 +0200

    CAUSEWAY-3892: simplified Stacktrace Rendering
---
 .../applib/services/error/ErrorDetails.java        |  20 ++--
 .../{StackTraceDetail.java => ErrorFormatter.java} |  49 +++++-----
 .../viewer/commons/model/error/ExceptionModel.java |  93 ++++++-------------
 .../wicket/ui/errors/ExceptionStackTracePanel.css  | 101 ---------------------
 .../wicket/ui/errors/ExceptionStackTracePanel.html |   8 +-
 .../wicket/ui/errors/ExceptionStackTracePanel.java |  46 +++++++---
 .../wicket/ui/errors/StackTraceListView.java       |  48 ----------
 .../viewer/wicket/ui/pages/error/ErrorPage.css     |  21 -----
 .../viewer/wicket/ui/pages/error/ErrorPage.java    |   9 --
 9 files changed, 93 insertions(+), 302 deletions(-)

diff --git 
a/api/applib/src/main/java/org/apache/causeway/applib/services/error/ErrorDetails.java
 
b/api/applib/src/main/java/org/apache/causeway/applib/services/error/ErrorDetails.java
index 092aa067914..59b99cbba09 100644
--- 
a/api/applib/src/main/java/org/apache/causeway/applib/services/error/ErrorDetails.java
+++ 
b/api/applib/src/main/java/org/apache/causeway/applib/services/error/ErrorDetails.java
@@ -20,50 +20,44 @@
 
 import java.util.List;
 
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
 /**
  * Details of the error (obtained from the thrown exception), passed as part 
of the request to the
  * {@link ErrorReportingService}.
  * @implNote a class has been used here so that additional fields might be 
added in the future.
- * @since 2.0 {@index}
+ * @since 2.0 revised for 4.0 {@index}
  */
-@Getter
-@AllArgsConstructor
-public class ErrorDetails {
-
+public record ErrorDetails(
     /**
      * The main message to be displayed to the end-user.
      * <p>
      * The service is responsible for translating this into the language of 
the end-user (it can use 
xref:refguide:applib-svc:LocaleProvider.adoc[`LocaleProvider`] if required).
      */
-    private final String mainMessage;
+    String mainMessage,
 
     /**
      * Whether this message has already been recognized by an {@link 
org.apache.causeway.applib.services.exceprecog.ExceptionRecognizer} 
implementation.
      * <p>
      * Generally this converts potentially non-recoverable (fatal) exceptions 
into recoverable exceptions (warnings) as well providing an alternative 
mechanism for generating user-friendly error messages.
      */
-    private final boolean recognized;
+    boolean recognized,
 
     /**
      * Whether the cause of the exception was due to a lack of privileges.
      * <p>
      * In such cases the UI restricts the information shown to the end-user, 
to avoid leaking potentially sensitive information
      */
-    private final boolean authorizationCause;
+    boolean authorizationCause,
 
     /**
      * The stack trace of the exception, including the trace of any exceptions 
in the causal chain.
      * <p>
      * These technical details are hidden from the user and only shown for 
non-recoverable exceptions.
      */
-    private final List<String> stackTraceDetailListCombined;
+    List<String> stackTraceDetailListCombined,
 
     /**
      * The stack trace, broken out by exception cause.
      */
-    private final List<List<String>> stackTraceDetailPerCause;
+    List<List<String>> stackTraceDetailPerCause) {
 
 }
diff --git 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/StackTraceDetail.java
 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/ErrorFormatter.java
similarity index 51%
rename from 
viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/StackTraceDetail.java
rename to 
viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/ErrorFormatter.java
index cc53c91ab84..a8eb080680d 100644
--- 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/StackTraceDetail.java
+++ 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/ErrorFormatter.java
@@ -18,30 +18,22 @@
  */
 package org.apache.causeway.viewer.commons.model.error;
 
-import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
 
-public record StackTraceDetail(
-        Type type,
-        String line) implements Serializable {
+public interface ErrorFormatter {
 
-    public enum Type {
-        EXCEPTION_CLASS_NAME,
-        EXCEPTION_MESSAGE,
-        STACKTRACE_ELEMENT,
-        LITERAL
+    default String formatClass(Class<? extends Throwable> errorClass) {
+        return errorClass.getName();
     }
 
-    public static StackTraceDetail exceptionClassName(final Throwable cause) {
-        return new 
StackTraceDetail(StackTraceDetail.Type.EXCEPTION_CLASS_NAME, 
cause.getClass().getName());
+    default String formatMessage(String errorMessage) {
+        return errorMessage;
     }
 
-    public static StackTraceDetail exceptionMessage(final Throwable cause) {
-        return new StackTraceDetail(StackTraceDetail.Type.EXCEPTION_MESSAGE, 
cause.getMessage());
-    }
-
-    public static StackTraceDetail element(final StackTraceElement el) {
-        var buf = new StringBuilder();
-        buf.append("    ")
+    default String formatElement(StackTraceElement el) {
+        return new StringBuilder()
             .append(el.getClassName())
             .append("#")
             .append(el.getMethodName())
@@ -49,17 +41,22 @@ public static StackTraceDetail element(final 
StackTraceElement el) {
             .append(el.getFileName())
             .append(":")
             .append(el.getLineNumber())
-            .append(")\n");
-
-        return new StackTraceDetail(StackTraceDetail.Type.STACKTRACE_ELEMENT, 
buf.toString());
+            .append(")\n")
+            .toString();
     }
 
-    public static StackTraceDetail spacer() {
-        return new StackTraceDetail(Type.LITERAL, "");
+    default List<String> chainJoiningLines() {
+        return List.of("", "caused By:", "");
     }
 
-    public static StackTraceDetail causedBy() {
-        return new StackTraceDetail(Type.LITERAL, "Caused by:");
+    default List<String> toLines(Throwable cause) {
+        var lines = new ArrayList<String>();
+        lines.add(formatClass(cause.getClass()));
+        lines.add(formatMessage(cause.getMessage()));
+        Stream.of(cause.getStackTrace())
+            .map(this::formatElement)
+            .forEach(lines::add);
+        return lines;
     }
 
-}
\ No newline at end of file
+}
diff --git 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/ExceptionModel.java
 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/ExceptionModel.java
index f932d3d15b0..70209ff178f 100644
--- 
a/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/ExceptionModel.java
+++ 
b/viewers/commons/model/src/main/java/org/apache/causeway/viewer/commons/model/error/ExceptionModel.java
@@ -19,9 +19,9 @@
 package org.apache.causeway.viewer.commons.model.error;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
-import java.util.function.Function;
 
 import org.apache.causeway.applib.exceptions.UnrecoverableException;
 import org.apache.causeway.applib.services.error.ErrorDetails;
@@ -29,7 +29,6 @@
 import org.apache.causeway.applib.services.error.Ticket;
 import org.apache.causeway.applib.services.exceprecog.Recognition;
 import org.apache.causeway.commons.internal.base._Casts;
-import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.commons.internal.exceptions._Exceptions;
 import org.apache.causeway.core.metamodel.context.MetaModelContext;
 import org.apache.causeway.core.metamodel.spec.feature.ObjectMember;
@@ -43,8 +42,7 @@
 public record ExceptionModel(
     ExceptionType exceptionType,
     String mainMessage,
-    List<StackTraceDetail> stackTraceDetailList,
-    List<List<StackTraceDetail>> stackTraceDetailLists) implements 
Serializable {
+    List<Throwable> causalChain) implements Serializable {
 
     private static final String MAIN_MESSAGE_IF_NOT_RECOGNIZED = "Sorry, an 
unexpected error occurred.";
 
@@ -92,7 +90,7 @@ public static ExceptionModel create(
             }
         }
 
-        return new ExceptionModel(exceptionType, mainMessage, 
asStackTrace(ex), asStackTraces(ex));
+        return new ExceptionModel(exceptionType, mainMessage, 
_Exceptions.getCausalChain(ex));
     }
 
     public boolean isRecognized() {
@@ -110,80 +108,43 @@ public boolean isAuthorizationException() {
         return exceptionType==ExceptionType.AUTHORIZATION_EXCEPTION;
     }
 
-    public List<StackTraceDetail> getStackTrace() {
-        return stackTraceDetailList;
+    public ErrorDetails asErrorDetails() {
+        return asErrorDetails(new ErrorFormatter() {});
     }
-    public List<List<StackTraceDetail>> getStackTraces() {
-        return stackTraceDetailLists;
-    }
-
-    public ErrorDetails asErrorDetails(Function<StackTraceDetail, String> 
formatter) {
-        final boolean recognized = isRecognized();
-        final boolean authorizationException = isAuthorizationException();
-
-        final List<String> stackDetailList = stackTraceDetailList
-            .stream()
-            .map(formatter)
-            .toList();
 
-        final List<List<StackTraceDetail>> stackTraces = getStackTraces();
-        final List<List<String>> stackDetailLists = _Lists.newArrayList();
-        for (List<StackTraceDetail> trace : stackTraces) {
-            stackDetailLists.add(trace.stream()
-                .map(formatter)
+    public ErrorDetails asErrorDetails(ErrorFormatter formatter) {
+        return new ErrorDetails(
+            mainMessage,
+            isRecognized(),
+            isAuthorizationException(),
+            flatten(causalChain, formatter),
+            causalChain.stream()
+                .map(formatter::toLines)
                 .toList());
-        }
-
-        return new ErrorDetails(mainMessage, recognized, 
authorizationException, stackDetailList, stackDetailLists);
     }
 
     // -- HELPER
 
-    private static <T extends Exception> T causalChainOf(final Exception ex, 
final Class<T> exType) {
-        final List<Throwable> causalChain = _Exceptions.getCausalChain(ex);
-        for (Throwable cause : causalChain) {
-            if(exType.isAssignableFrom(cause.getClass())) {
-                return _Casts.uncheckedCast(cause);
+    private List<String> flatten(List<Throwable> causalChain, ErrorFormatter 
formatter) {
+        var lines = new ArrayList<String>();
+        int count = 0;
+        for(var throwable : causalChain) {
+            if(count>0) {
+                lines.addAll(formatter.chainJoiningLines());
             }
+            lines.addAll(formatter.toLines(throwable));
+            count++;
         }
-        return null;
+        return lines;
     }
 
-    private static List<StackTraceDetail> asStackTrace(final Throwable ex) {
-        List<StackTraceDetail> stackTrace = _Lists.newArrayList();
-        List<Throwable> causalChain = _Exceptions.getCausalChain(ex);
-        boolean firstTime = true;
-        for(Throwable cause: causalChain) {
-            if(!firstTime) {
-                stackTrace.add(StackTraceDetail.spacer());
-                stackTrace.add(StackTraceDetail.causedBy());
-                stackTrace.add(StackTraceDetail.spacer());
-            } else {
-                firstTime = false;
+    private static <T extends Exception> T causalChainOf(final Exception ex, 
final Class<T> exType) {
+        for (Throwable cause : _Exceptions.getCausalChain(ex)) {
+            if(exType.isAssignableFrom(cause.getClass())) {
+                return _Casts.uncheckedCast(cause);
             }
-            append(cause, stackTrace);
-        }
-        return stackTrace;
-    }
-
-    private static List<List<StackTraceDetail>> asStackTraces(final Throwable 
ex) {
-        List<List<StackTraceDetail>> stackTraces = _Lists.newArrayList();
-
-        List<Throwable> causalChain = _Exceptions.getCausalChain(ex);
-        for(Throwable cause: causalChain) {
-            List<StackTraceDetail> stackTrace = _Lists.newArrayList();
-            append(cause, stackTrace);
-            stackTraces.add(stackTrace);
-        }
-        return stackTraces;
-    }
-
-    private static void append(final Throwable cause, final 
List<StackTraceDetail> stackTrace) {
-        stackTrace.add(StackTraceDetail.exceptionClassName(cause));
-        stackTrace.add(StackTraceDetail.exceptionMessage(cause));
-        for (StackTraceElement el : cause.getStackTrace()) {
-            stackTrace.add(StackTraceDetail.element(el));
         }
+        return null;
     }
 
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.css
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.css
deleted file mode 100644
index 521283c3199..00000000000
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.css
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
- .exceptionStackTracePanel .errorInfo {
-    margin-left: 50px;
-    margin-right: 50px;
-    padding-top: 50px;
-}
-
-
-.exceptionStackTracePanel .mainMessage {
-    background:#FFFFFF;
-    border-radius:4px;
-    -moz-border-radius:4px;
-    -webkit-border-radius:4px;
-    padding: 15px;
-    display: block;
-    text-align:center;
-    font-size:1.2em;
-}
-
- .exceptionStackTracePanel .errorDetail {
-    margin-top: 30px; 
-}
-
-.exceptionStackTracePanel .heading {
-    border-radius:4px;
-    -moz-border-radius:4px;
-    -webkit-border-radius:4px;
-    background-color:#F0EFEA;
-
-    display:block;
-    font-style:normal !important;
-
-    padding:1px 6px 1px 6px;
-}
-
-.exceptionStackTracePanel .heading span {
-    display:block;
-    font-style:normal !important;
-    padding:3px 3px 3px 3px;
-    font-size: 0.8em;
-    font-weight:bold;
-}
-
-.exceptionStackTracePanel .heading:hover {
-    background-color:#FFFFFF;
-    cursor: pointer;
-}
-
-.exceptionStackTracePanel h3 {
-    font-size: larger;
-}
-
-.exceptionStackTracePanel .exceptionMessage {
-    margin-top: 30px; 
-}
-
-.exceptionStackTracePanel .exceptionStackTrace .caused_by_label {
-    margin-top: 30px;
-    font-style:normal !important;
-    font-size: 0.8em;
-    font-weight:bold;
-    color: #46423C;
-}
-
-.exceptionStackTracePanel .exceptionStackTrace .exception_class_name {
-    margin-top: 15px;
-    font-size: 1.2em;
-    font-weight:bold;
-    color: #46423C;
-}
-
-.exceptionStackTracePanel .exceptionStackTrace .exception_message {
-    margin-top: 10px;
-    margin-bottom: 10px;
-    font-style: italic;
-    font-size: 1.0em;
-    color: #00477F;
-}
-
-.exceptionStackTracePanel .exceptionStackTrace .stacktrace_element{
-    margin-left: 30px;
-}
- 
\ No newline at end of file
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
index 3d64fd42609..2c8fa4354ed 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
@@ -50,12 +50,8 @@ <h2 class="mainMessage">
                         </div>
                         <div class="content card-body">
                             <div class="exceptionStackTrace">
-                                <h3>Stack trace:</h3>
-                                <ul>
-                                    <li wicket:id="stackTraceElement">
-                                        <span 
wicket:id="stackTraceElementLine">[stack trace element line]</span>
-                                    </li>
-                                </ul>
+                                <div wicket:id="stackTraceMarkup">
+                                </div>
                             </div>
                         </div>
                     </div>
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
index f754d61fbd3..dec85777403 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
@@ -18,8 +18,9 @@
  */
 package org.apache.causeway.viewer.wicket.ui.errors;
 
+import java.util.stream.Stream;
+
 import org.apache.wicket.AttributeModifier;
-import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
 import org.apache.wicket.markup.ComponentTag;
 import org.apache.wicket.markup.head.IHeaderResponse;
@@ -30,11 +31,12 @@
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
+
 import org.apache.causeway.applib.services.error.ErrorReportingService;
 import org.apache.causeway.applib.services.error.Ticket;
+import org.apache.causeway.commons.functional.IndexedConsumer;
 import org.apache.causeway.commons.functional.Try;
 import org.apache.causeway.viewer.commons.model.error.ExceptionModel;
-import org.apache.causeway.viewer.commons.model.error.StackTraceDetail;
 import org.apache.causeway.viewer.wicket.model.models.PageType;
 import org.apache.causeway.viewer.wicket.model.models.UiObjectWkt;
 import 
org.apache.causeway.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
@@ -53,8 +55,7 @@ public class ExceptionStackTracePanel
     private static final String ID_MAIN_MESSAGE = "mainMessage";
     private static final String ID_EXCEPTION_DETAIL_DIV = "exceptionDetailDiv";
     private static final String ID_TICKET_MARKUP = "ticketMarkup";
-    private static final String ID_STACK_TRACE_ELEMENT = "stackTraceElement";
-    private static final String ID_LINE = "stackTraceElementLine";
+    private static final String ID_STACKTRACE_MARKUP = "stackTraceMarkup";
 
     private static final JavaScriptResourceReference DIV_TOGGLE_JS =
             new JavaScriptResourceReference(ExceptionStackTracePanel.class, 
"div-toggle.js");
@@ -85,7 +86,7 @@ public ExceptionStackTracePanel(
 
         var ticketOptional = lookupService(ErrorReportingService.class)
             .map(errorReportingService->
-                
errorReportingService.reportError(exceptionModel.asErrorDetails(StackTraceDetail::line)));
+                
errorReportingService.reportError(exceptionModel.asErrorDetails()));
 
         var mainMessage = ticketOptional
             .map(Ticket::getUserMessage)
@@ -111,18 +112,14 @@ public ExceptionStackTracePanel(
         if(suppressExceptionDetail) {
             WktComponents.permanentlyHide(this, ID_EXCEPTION_DETAIL_DIV);
         } else {
-            MarkupContainer container = new 
WebMarkupContainer(ID_EXCEPTION_DETAIL_DIV) {
+            var container = Wkt.add(this, new 
WebMarkupContainer(ID_EXCEPTION_DETAIL_DIV) {
                 private static final long serialVersionUID = 1L;
                 @Override
                 public void renderHead(final IHeaderResponse response) {
                     
response.render(JavaScriptReferenceHeaderItem.forReference(DIV_TOGGLE_JS));
                 }
-            };
-            container.add(new StackTraceListView(
-                    ID_STACK_TRACE_ELEMENT,
-                    ExceptionStackTracePanel.ID_LINE,
-                    exceptionModel.getStackTrace()));
-            add(container);
+            });
+            Wkt.markupAdd(container, ID_STACKTRACE_MARKUP, 
convertToHtml(exceptionModel));
         }
 
         final BreadcrumbModelProvider session = (BreadcrumbModelProvider) 
getSession();
@@ -147,4 +144,29 @@ public void renderHead(final IHeaderResponse response) {
         add(link);
     }
 
+    // -- HELPER
+
+    private static String convertToHtml(ExceptionModel exceptionModel) {
+        var html = new StringBuilder();
+        exceptionModel.causalChain().forEach(IndexedConsumer.zeroBased((i, 
cause)->{
+            if(i>0) html.append("<hr>");
+            html.append("<div>%s<b>%s</b>: %s</div>".formatted(
+                i>0 ? "Caused by: " : "",
+                cause.getClass().getName(),
+                
org.springframework.web.util.HtmlUtils.htmlEscape(cause.getMessage())));
+
+            Stream.of(cause.getStackTrace()).forEach(el->{
+                html.append("""
+                    <div style="margin-left: 1rem">at %s#%s(%s:%d)</div>"""
+                    .formatted(
+                        el.getClassName(),
+                        el.getMethodName(),
+                        el.getFileName(),
+                        el.getLineNumber()));
+            });
+
+        }));
+        return html.toString();
+    }
+
 }
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/StackTraceListView.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/StackTraceListView.java
deleted file mode 100644
index e29bbdf07fa..00000000000
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/errors/StackTraceListView.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.apache.causeway.viewer.wicket.ui.errors;
-
-import java.util.List;
-
-import org.apache.wicket.behavior.AttributeAppender;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-
-import org.apache.causeway.viewer.commons.model.error.StackTraceDetail;
-import org.apache.causeway.viewer.wicket.ui.util.Wkt;
-
-public final class StackTraceListView
-extends ListView<StackTraceDetail> {
-
-    private static final long serialVersionUID = 1L;
-    private final String idLine;
-
-    public StackTraceListView(final String id, final String idLine,
-            final 
List<org.apache.causeway.viewer.commons.model.error.StackTraceDetail> list) {
-        super(id, list);
-        this.idLine = idLine;
-    }
-
-    @Override
-    protected void populateItem(final ListItem<StackTraceDetail> item) {
-        final StackTraceDetail detail = item.getModelObject();
-        item.add(new AttributeAppender("class", 
detail.type().name().toLowerCase()));
-        Wkt.labelAdd(item, idLine, detail.line());
-    }
-}
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.css
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.css
deleted file mode 100644
index 5412494892a..00000000000
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.css
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *        http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-
-
-
diff --git 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
index 841e1908a62..0399e050f0e 100644
--- 
a/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
+++ 
b/viewers/wicket/ui/src/main/java/org/apache/causeway/viewer/wicket/ui/pages/error/ErrorPage.java
@@ -18,14 +18,10 @@
  */
 package org.apache.causeway.viewer.wicket.ui.pages.error;
 
-import java.util.List;
-
 import 
org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 
 import org.apache.causeway.applib.services.user.UserMemento;
-import org.apache.causeway.commons.internal.collections._Lists;
 import org.apache.causeway.viewer.commons.model.error.ExceptionModel;
-import org.apache.causeway.viewer.commons.model.error.StackTraceDetail;
 import org.apache.causeway.viewer.wicket.model.util.PageParameterUtils;
 import org.apache.causeway.viewer.wicket.ui.errors.ExceptionStackTracePanel;
 import org.apache.causeway.viewer.wicket.ui.pages.PageAbstract;
@@ -49,11 +45,6 @@ public ErrorPage(final ExceptionModel exceptionModel) {
         var pageClassRegistry = 
super.getServiceRegistry().lookupServiceElseFail(PageClassRegistry.class);
 
         themeDiv.add(new ExceptionStackTracePanel(pageClassRegistry, 
ID_EXCEPTION_STACK_TRACE, exceptionModel));
-
-    }
-
-    protected List<String> transform(final List<StackTraceDetail> stackTrace) {
-        return _Lists.map(stackTrace, StackTraceDetail::line);
     }
 
 }

Reply via email to