Skip to content

Compilation error when generating mappings for a nested class in the unnamed package #2435

@mjustin

Description

@mjustin

Bit of an edge case, but while testing out another issue I discovered that MapStruct will cause a compilation error when using a nested class within the unnamed package. It works fine if with non-nested classes in the unnamed package, however. The error is due to an invalid import statement of the nested package member.

Source

// This class is in the unnamed package
import org.mapstruct.Mapper;

public class UnnamedPackageNestedMapperIssue {
    @Mapper
    public interface NestedUnnamedPackageMapper {
        Target map(Source source);
    }

    public static class Source {
        private String property;

        public String getProperty() { return property; }
        public void setProperty(String property) { this.property = property; }
    }

    public static class Target {
        private String property;

        public String getProperty() { return property; }
        public void setProperty(String property) { this.property = property; }
    }
}

MapStruct generated code

import UnnamedPackageNestedMapperIssue.NestedUnnamedPackageMapper;
import UnnamedPackageNestedMapperIssue.Source;
import UnnamedPackageNestedMapperIssue.Target;
import javax.annotation.processing.Generated;

@Generated(
    value = "org.mapstruct.ap.MappingProcessor",
    date = "2021-05-07T12:56:29-0500",
    comments = "version: 1.4.2.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-6.8.jar, environment: Java 11.0.9.1 (AdoptOpenJDK)"
)
public class UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl implements NestedUnnamedPackageMapper {

    @Override
    public Target map(Source source) {
        if ( source == null ) {
            return null;
        }

        Target target = new Target();

        target.setProperty( source.getProperty() );

        return target;
    }
}

Gradle build output

/Path/To/build/generated/sources/annotationProcessor/java/main/Path/To/build/generated/sources/annotationProcessor/java/main/UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl.java:2: error: package UnnamedPackageNestedMapperIssue does not exist
import UnnamedPackageNestedMapperIssue.NestedUnnamedPackageMapper;
                                      ^
/Path/To/build/generated/sources/annotationProcessor/java/main/UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl.java:3: error: package UnnamedPackageNestedMapperIssue does not exist
import UnnamedPackageNestedMapperIssue.Source;
                                      ^
/Path/To/build/generated/sources/annotationProcessor/java/main/UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl.java:4: error: package UnnamedPackageNestedMapperIssue does not exist
import UnnamedPackageNestedMapperIssue.Target;
                                      ^
/Path/To/build/generated/sources/annotationProcessor/java/main/UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl.java:12: error: cannot find symbol
public class UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl implements NestedUnnamedPackageMapper {
                                                                                       ^
  symbol: class NestedUnnamedPackageMapper
/Path/To/build/generated/sources/annotationProcessor/java/main/UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl.java:15: error: cannot find symbol
    public Target map(Source source) {
                      ^
  symbol:   class Source
  location: class UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl
/Path/To/build/generated/sources/annotationProcessor/java/main/UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl.java:15: error: cannot find symbol
    public Target map(Source source) {
           ^
  symbol:   class Target
  location: class UnnamedPackageNestedMapperIssue$NestedUnnamedPackageMapperImpl
6 errors

The compilation failure is due to the following import statements:

import UnnamedPackageNestedMapperIssue.NestedUnnamedPackageMapper;
import UnnamedPackageNestedMapperIssue.Source;
import UnnamedPackageNestedMapperIssue.Target;

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugup-for-grabsIssues targeted for community contribution

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions