Commit 52aa7e1e authored by Andy Wilkinson's avatar Andy Wilkinson

Include source of NoSuchMethodError in its failure analysis

Closes gh-15995
parent 971b608f
/* /*
* Copyright 2012-2018 the original author or authors. * Copyright 2012-2019 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
...@@ -93,11 +93,19 @@ class NoSuchMethodFailureAnalyzer extends AbstractFailureAnalyzer<NoSuchMethodEr ...@@ -93,11 +93,19 @@ class NoSuchMethodFailureAnalyzer extends AbstractFailureAnalyzer<NoSuchMethodEr
List<URL> candidates, URL actual) { List<URL> candidates, URL actual) {
StringWriter description = new StringWriter(); StringWriter description = new StringWriter();
PrintWriter writer = new PrintWriter(description); PrintWriter writer = new PrintWriter(description);
writer.print("An attempt was made to call the method "); writer.println("An attempt was made to call a method that does not"
writer.print(cause.getMessage()); + " exist. The attempt was made from the following location:");
writer.print(" but it does not exist. Its class, "); writer.println();
writer.print(className); writer.print(" ");
writer.println(", is available from the following locations:"); writer.println(cause.getStackTrace()[0]);
writer.println();
writer.println("The following method did not exist:");
writer.println();
writer.print(" ");
writer.println(cause.getMessage());
writer.println();
writer.println("The method's class, " + className
+ ", is available from the following locations:");
writer.println(); writer.println();
for (URL candidate : candidates) { for (URL candidate : candidates) {
writer.print(" "); writer.print(" ");
......
...@@ -44,8 +44,11 @@ public class NoSuchMethodFailureAnalyzerTests { ...@@ -44,8 +44,11 @@ public class NoSuchMethodFailureAnalyzerTests {
assertThat(failure).isNotNull(); assertThat(failure).isNotNull();
FailureAnalysis analysis = new NoSuchMethodFailureAnalyzer().analyze(failure); FailureAnalysis analysis = new NoSuchMethodFailureAnalyzer().analyze(failure);
assertThat(analysis).isNotNull(); assertThat(analysis).isNotNull();
System.out.println(analysis.getDescription());
assertThat(analysis.getDescription()) assertThat(analysis.getDescription())
.contains("the method javax.servlet.ServletContext.addServlet" .contains(NoSuchMethodFailureAnalyzerTests.class.getName()
+ ".createFailure(")
.contains("javax.servlet.ServletContext.addServlet"
+ "(Ljava/lang/String;Ljavax/servlet/Servlet;)" + "(Ljava/lang/String;Ljavax/servlet/Servlet;)"
+ "Ljavax/servlet/ServletRegistration$Dynamic;") + "Ljavax/servlet/ServletRegistration$Dynamic;")
.contains("class, javax.servlet.ServletContext,"); .contains("class, javax.servlet.ServletContext,");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment