From d0565702672aae22ee59121ecb3178a12a7fe420 Mon Sep 17 00:00:00 2001 From: Filip Hrisafov Date: Wed, 15 Jan 2020 21:33:11 +0100 Subject: [PATCH] #2001 Avoid NPE when checking whether import type element is nested When the typeToAdd is an array then TypeElement is null and ComponentType is the one that would be imported --- .../ap/internal/model/GeneratedType.java | 11 +++++-- .../mapstruct/ap/test/bugs/_2001/Entity.java | 25 +++++++++++++++ .../ap/test/bugs/_2001/EntityExtra.java | 23 +++++++++++++ .../mapstruct/ap/test/bugs/_2001/Form.java | 23 +++++++++++++ .../ap/test/bugs/_2001/FormExtra.java | 23 +++++++++++++ .../ap/test/bugs/_2001/Issue2001Mapper.java | 17 ++++++++++ .../ap/test/bugs/_2001/Issue2001Test.java | 32 +++++++++++++++++++ 7 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Entity.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/EntityExtra.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Form.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/FormExtra.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Mapper.java create mode 100644 processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Test.java diff --git a/processor/src/main/java/org/mapstruct/ap/internal/model/GeneratedType.java b/processor/src/main/java/org/mapstruct/ap/internal/model/GeneratedType.java index 81ccc779a..a03f9af9a 100644 --- a/processor/src/main/java/org/mapstruct/ap/internal/model/GeneratedType.java +++ b/processor/src/main/java/org/mapstruct/ap/internal/model/GeneratedType.java @@ -288,8 +288,15 @@ public abstract class GeneratedType extends ModelElement { } if ( typeToAdd.getPackageName().equals( packageName ) ) { - if ( !typeToAdd.getTypeElement().getNestingKind().isNested() ) { - return false; + if ( typeToAdd.getTypeElement() != null ) { + if ( !typeToAdd.getTypeElement().getNestingKind().isNested() ) { + return false; + } + } + else if ( typeToAdd.getComponentType() != null ) { + if ( !typeToAdd.getComponentType().getTypeElement().getNestingKind().isNested() ) { + return false; + } } } } diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Entity.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Entity.java new file mode 100644 index 000000000..38ec42ee7 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Entity.java @@ -0,0 +1,25 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2001; + +import java.util.Set; + +/** + * @author Filip Hrisafov + */ +public +class Entity { + + private Set extras; + + public Set getExtras() { + return extras; + } + + public void setExtras(Set extras) { + this.extras = extras; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/EntityExtra.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/EntityExtra.java new file mode 100644 index 000000000..ecd0dbb1f --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/EntityExtra.java @@ -0,0 +1,23 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2001; + +/** + * @author Filip Hrisafov + */ +public +class EntityExtra { + + private String value; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Form.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Form.java new file mode 100644 index 000000000..a3656acec --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Form.java @@ -0,0 +1,23 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2001; + +/** + * @author Filip Hrisafov + */ +public +class Form { + + private FormExtra[] extras; + + public FormExtra[] getExtras() { + return extras; + } + + public void setExtras(FormExtra[] extras) { + this.extras = extras; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/FormExtra.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/FormExtra.java new file mode 100644 index 000000000..2ff150f4f --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/FormExtra.java @@ -0,0 +1,23 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2001; + +/** + * @author Filip Hrisafov + */ +public +class FormExtra { + + private String value; + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Mapper.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Mapper.java new file mode 100644 index 000000000..272d23bb5 --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Mapper.java @@ -0,0 +1,17 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2001; + +import org.mapstruct.Mapper; + +/** + * @author Filip Hrisafov + */ +@Mapper +public interface Issue2001Mapper { + + Form map(Entity entity); +} diff --git a/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Test.java b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Test.java new file mode 100644 index 000000000..7cb89f79e --- /dev/null +++ b/processor/src/test/java/org/mapstruct/ap/test/bugs/_2001/Issue2001Test.java @@ -0,0 +1,32 @@ +/* + * Copyright MapStruct Authors. + * + * Licensed under the Apache License version 2.0, available at http://www.apache.org/licenses/LICENSE-2.0 + */ +package org.mapstruct.ap.test.bugs._2001; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mapstruct.ap.testutil.IssueKey; +import org.mapstruct.ap.testutil.WithClasses; +import org.mapstruct.ap.testutil.runner.AnnotationProcessorTestRunner; + +/** + * @author Filip Hrisafov + */ +@IssueKey("2001") +@RunWith( AnnotationProcessorTestRunner.class ) +@WithClasses( { + Entity.class, + EntityExtra.class, + Form.class, + FormExtra.class, + Issue2001Mapper.class +} ) +public class Issue2001Test { + + @Test + public void shouldCompile() { + + } +}