From a967281b84af5b786444b8702f775adf0c0a52a7 Mon Sep 17 00:00:00 2001 From: Matthew Hague <matthew.hague@rhul.ac.uk> Date: Fri, 22 Oct 2021 19:51:20 +0100 Subject: [PATCH] Improve error reporting in method decl checker --- .../uk/ac/rhul/cs/javatester/CodeTester.java | 39 +++++++++++-------- .../uk/ac/rhul/cs/javatester/UnitTests.java | 2 +- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java b/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java index 154d676..251af0d 100644 --- a/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java +++ b/src/main/java/uk/ac/rhul/cs/javatester/CodeTester.java @@ -461,7 +461,7 @@ public class CodeTester { Class<?> returnType, String methodName, Class<?>... params - ) throws BaseTester.FailedTestException, NoSuchMethodException { + ) throws BaseTester.FailedTestException { String staticString = isStatic ? "static " : ""; String className = getClassString(klass); @@ -469,24 +469,29 @@ public class CodeTester { getClassString(returnType) + " " + methodName + "(" + getClassParamsString(params) + ") "; - Method m = invasiveGetMethod(klass, methodName, params); + String baseErr = + "Could not find " + staticString + "method in " + className + + " with signature \n\n " + + methodSig; - if (!m.getReturnType().equals(returnType)) { - throw new BaseTester.FailedTestException( - "Could not find " + staticString + "method in " + className + - " with signature \n\n " + - methodSig + "\n\n" + - "A similar method was found, but the return types do not match." - ); - } + try { + Method m = invasiveGetMethod(klass, methodName, params); - if (isStatic != Modifier.isStatic(m.getModifiers())) { - throw new BaseTester.FailedTestException( - "Could not find " + staticString + "method in " + className + - " with signature\n\n " + - methodSig + "\n\n" + - "A similar method was found, but check whether it should be static or not." - ); + if (!m.getReturnType().equals(returnType)) { + throw new BaseTester.FailedTestException( + baseErr + "\n\n" + + "A similar method was found, but the return types do not match." + ); + } + + if (isStatic != Modifier.isStatic(m.getModifiers())) { + throw new BaseTester.FailedTestException( + baseErr + "\n\n" + + "A similar method was found, but check whether it should be static or not." + ); + } + } catch (NoSuchMethodException e) { + throw new BaseTester.FailedTestException(baseErr); } } diff --git a/src/test/java/uk/ac/rhul/cs/javatester/UnitTests.java b/src/test/java/uk/ac/rhul/cs/javatester/UnitTests.java index 6c36f6e..ea885a3 100644 --- a/src/test/java/uk/ac/rhul/cs/javatester/UnitTests.java +++ b/src/test/java/uk/ac/rhul/cs/javatester/UnitTests.java @@ -355,7 +355,7 @@ public class UnitTests { BaseTester tester = new BaseTester(ASSIGNMENT) { @SuppressWarnings("unused") public boolean testCheckMethod() - throws BaseTester.FailedTestException, NoSuchMethodException { + throws BaseTester.FailedTestException { CodeTester ct = new CodeTester(); Class<?> klass = ct.loadClass(ASSIGNMENT); ct.checkMethodSignature( -- GitLab