Description
Discovered when generating code for systemd dbus interfaces
package org.freedesktop.systemd1;
import PresetUnitFilesWithModeChangesStruct; //ERROR IS HERE
import java.util.List;
import org.freedesktop.dbus.Tuple;
import org.freedesktop.dbus.annotations.Position;
/**
* Auto-generated class.
*/
public class PresetUnitFilesWithModeTuple extends Tuple {
@Position(0)
private boolean carriesInstallInfo;
@Position(1)
private List<PresetUnitFilesWithModeChangesStruct> changes;
The other generated class, for reference
package org.freedesktop.systemd1;
import org.freedesktop.dbus.Struct;
import org.freedesktop.dbus.annotations.Position;
/**
* Auto-generated class.
*/
public class PresetUnitFilesWithModeChangesStruct extends Struct {
In method org.freedesktop.dbus.utils.generator.ClassBuilderInfo#createClassFileContent(boolean, java.util.Set<java.lang.String>)
, the call to org.freedesktop.dbus.utils.generator.ClassBuilderInfo#getImports
returns a set that contains PresetUnitFilesWithModeChangesStruct
. Notice that it does not have it's package name. The import should be org.freedesktop.systemd1.PresetUnitFilesWithModeChangesStruct
, which would cause the code at org/freedesktop/dbus/utils/generator/ClassBuilderInfo.java:298
.filter(l -> !l.replaceFirst("(.+)\\..+", "$1").equals(getPackageName()))
... to not filter out PresetUnitFilesWithModeChangesStruct
despite it's actual generated class being in the same package.
So it seems like the root issue is that getImports().add(...)
(or addAll()
) is called at some point with a class name that has it's package name removed.
Activity