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;
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
MapStruct generated code
Gradle build output
The compilation failure is due to the following import statements: