From 4cd8e322d921e53e29317a2d7f8c0a0e25ec8f28 Mon Sep 17 00:00:00 2001 From: Mirko Raner Date: Tue, 4 Jun 2024 23:02:27 -0700 Subject: [PATCH 1/2] Issue #293: re-throwing exception instead of returning null --- .../projo/generation/ProjoTemplateFactoryProcessor.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java b/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java index 36281e9..5c1b1ed 100644 --- a/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java +++ b/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java @@ -152,9 +152,13 @@ private Collection getConfiguration(TypeMirror type) { return getClass(type).getDeclaredConstructor().newInstance(); } - catch (@SuppressWarnings("unused") Exception exception) + catch (Exception exception) { - return null; + if (exception instanceof RuntimeException) + { + throw (RuntimeException)exception; + } + throw new RuntimeException(exception); } } From 6200e1f23528fff8c74f84bcdef8c7b97796e5a9 Mon Sep 17 00:00:00 2001 From: Mirko Raner Date: Wed, 5 Jun 2024 23:14:42 -0700 Subject: [PATCH 2/2] Issue #293: fixed similar problem in getClass(TypeMirror); added tests --- .../ProjoTemplateFactoryProcessor.java | 16 +++--- .../ProjoTemplateFactoryProcessorTest.java | 56 +++++++++++++++++++ 2 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 projo-template-generation/src/test/java/pro/projo/generation/ProjoTemplateFactoryProcessorTest.java diff --git a/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java b/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java index 5c1b1ed..c2b3486 100644 --- a/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java +++ b/projo-template-generation/src/main/java/pro/projo/generation/ProjoTemplateFactoryProcessor.java @@ -146,7 +146,7 @@ private FileObject getTemplateFile(Element element) } } - private Collection getConfiguration(TypeMirror type) + Collection getConfiguration(TypeMirror type) { try { @@ -154,15 +154,15 @@ private Collection getConfiguration(TypeMirror type) } catch (Exception exception) { - if (exception instanceof RuntimeException) - { - throw (RuntimeException)exception; - } + if (exception instanceof RuntimeException) + { + throw (RuntimeException)exception; + } throw new RuntimeException(exception); } } - private Class> getClass(TypeMirror type) + Class> getClass(TypeMirror type) { try { @@ -170,9 +170,9 @@ private Class> getClass(TypeMirror Class> configurationClass = (Class>)Class.forName(type.toString()); return configurationClass; } - catch (@SuppressWarnings("unused") ClassNotFoundException classNotFound) + catch (ClassNotFoundException classNotFound) { - return null; + throw new RuntimeException(classNotFound); } } } diff --git a/projo-template-generation/src/test/java/pro/projo/generation/ProjoTemplateFactoryProcessorTest.java b/projo-template-generation/src/test/java/pro/projo/generation/ProjoTemplateFactoryProcessorTest.java new file mode 100644 index 0000000..4386170 --- /dev/null +++ b/projo-template-generation/src/test/java/pro/projo/generation/ProjoTemplateFactoryProcessorTest.java @@ -0,0 +1,56 @@ +// // +// Copyright 2024 Mirko Raner // +// // +// Licensed 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 pro.projo.generation; + +import java.util.ArrayList; +import javax.lang.model.type.TypeMirror; +import org.junit.Test; +import net.florianschoppmann.java.reflect.ReflectionTypes; +import pro.projo.template.annotation.Configuration; + +public class ProjoTemplateFactoryProcessorTest +{ + @Test(expected=RuntimeException.class) + public void testGetConfiguration() + { + ProjoTemplateFactoryProcessor processor = new ProjoTemplateFactoryProcessor(); + TypeMirror type = ReflectionTypes.getInstance().typeMirror(ConstructorThrows.class); + processor.getConfiguration(type); + } + + @Test(expected=RuntimeException.class) + public void testGetClass() + { + class Nested extends ArrayList + { + private static final long serialVersionUID = 3888598709112160435L; + } + ProjoTemplateFactoryProcessor processor = new ProjoTemplateFactoryProcessor(); + TypeMirror type = ReflectionTypes.getInstance().typeMirror(Nested.class); + processor.getClass(type); + } +} + +class ConstructorThrows extends ArrayList +{ + private static final long serialVersionUID = 4201658057355742410L; + + @SuppressWarnings("unused") + public ConstructorThrows() + { + throw new UnsupportedOperationException(); + } +}