Skip to content

Commit

Permalink
Issue #195: Add missing imports to tuple classes
Browse files Browse the repository at this point in the history
  • Loading branch information
hypfvieh committed Dec 8, 2022
1 parent 8c679a9 commit 6b22e28
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -353,7 +353,11 @@ private List<String> createClassFileContent(boolean _staticClass, Set<String> _o
// write imports to resulting content if this is not a inner class
if (!_staticClass) {
content.add(2, "");
content.addAll(2, allImports.stream().filter(l -> !l.startsWith("java.lang.")).map(l -> "import " + l + ";").collect(Collectors.toList()));
content.addAll(2, allImports.stream()
.filter(l -> !l.startsWith("java.lang.")) // do not include imports for 'java.lang'
.filter(l -> !l.replaceFirst("(.+)\\..+", "$1").equals(getPackageName())) // do not add imports for classes in same package
.map(l -> "import " + l + ";")
.collect(Collectors.toList()));
}

return content;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -274,6 +274,8 @@ private List<ClassBuilderInfo> extractMethods(Element _methodElement, ClassBuild
List<MemberOrArgument> inputArgs = new ArrayList<>();
List<MemberOrArgument> outputArgs = new ArrayList<>();

List<String> dbusOutputArgTypes = new ArrayList<>();

int unknownArgNameCnt = 0;
for (Element argElm : methodArgs) {
String argType;
Expand Down Expand Up @@ -303,13 +305,14 @@ private List<ClassBuilderInfo> extractMethods(Element _methodElement, ClassBuild
inputArgs.add(new MemberOrArgument(argName, TypeConverter.getProperJavaClass(argType, _clzBldr.getImports())));
} else if ("out".equals(dirAttr)) {
outputArgs.add(new MemberOrArgument(argName, TypeConverter.getProperJavaClass(argType, _clzBldr.getImports()), false));
dbusOutputArgTypes.add(argType);
}
}

String resultType;
if (outputArgs.size() > 1) { // multi-value return
logger.debug("Found method with multiple return values: {}", _methodElement.getAttribute("name"));
resultType = createTuple(outputArgs, _methodElement.getAttribute("name") + "Tuple", _clzBldr, additionalClasses);
resultType = createTuple(outputArgs, _methodElement.getAttribute("name") + "Tuple", _clzBldr, additionalClasses, dbusOutputArgTypes);
} else {
logger.debug("Found method with arguments: {}({})", _methodElement.getAttribute("name"), inputArgs);
resultType = outputArgs.isEmpty() ? "void" : outputArgs.get(0).getFullType(new HashSet<>());
Expand Down Expand Up @@ -407,9 +410,10 @@ private List<ClassBuilderInfo> extractProperties(Element _propertyElement, Class
* @param _className name the tuple class should get
* @param _parentClzBldr parent class where the tuple was required in
* @param _additionalClasses list where the new created tuple class will be added to
* @param _dbusOutputArgTypes Dbus argument names and data types
* @return FQCN of the newly created tuple based class
*/
private String createTuple(List<MemberOrArgument> _outputArgs, String _className, ClassBuilderInfo _parentClzBldr, List<ClassBuilderInfo> _additionalClasses) {
private String createTuple(List<MemberOrArgument> _outputArgs, String _className, ClassBuilderInfo _parentClzBldr, List<ClassBuilderInfo> _additionalClasses, List<String> _dbusOutputArgTypes) {
if (_outputArgs == null || _outputArgs.isEmpty() || _additionalClasses == null) {
return null;
}
Expand All @@ -429,6 +433,15 @@ private String createTuple(List<MemberOrArgument> _outputArgs, String _className
entry.getAnnotations().add("@Position(" + position++ + ")");
cnstrctArgs.add(new MemberOrArgument(entry.getName(), entry.getType()));
}

for (String outputType : _dbusOutputArgTypes) {
if (outputType.contains("<")) {
info.getImports().add(outputType.replaceAll("([^<]+).+", "$1"));
} else {
info.getImports().add(outputType);
}
}

ClassConstructor cnstrct = new ClassConstructor();
cnstrct.getArguments().addAll(cnstrctArgs);

Expand Down Expand Up @@ -630,4 +643,5 @@ public static Map<DbusInterfaceToFqcn, String> toFqcn(String _interfaceName) {
return map;
}
}

}

0 comments on commit 6b22e28

Please sign in to comment.