244
245 @Override
246 public Boolean visitStruct(StructTree structTree, JType jt) {
247 //generate nested structs recursively
248 structTree.nestedTypes().forEach(this::generateDecl);
249
250 if (structTree.isAnonymous()) {
251 //skip anonymous
252 return false;
253 }
254 String nativeName = structTree.name();
255 Type type = structTree.type();
256 log.print(Level.FINE, () -> "Create struct: " + nativeName);
257
258 String intf = Utils.toClassName(nativeName);
259 String name = headerClassName + "." + intf;
260
261 log.print(Level.FINE, () -> "Define class " + name + " for native type " + nativeName);
262
263 JavaSourceBuilder jsb = new JavaSourceBuilder(global_jsb.align() + 1);
264 jsb.addAnnotation(false, NATIVE_STRUCT, Map.of("value", structTree.layout().toString()));
265 jsb.interfaceBegin(intf, true, "Struct<" + intf + ">");
266 // fields
267 structTree.fields().forEach(fieldTree -> addField(jsb, fieldTree, type));
268 jsb.interfaceEnd();
269 addClassIfNeeded(headerClassName + "." + intf, jsb);
270
271 return true;
272 }
273
274 @Override
275 public Boolean visitEnum(EnumTree enumTree, JType jt) {
276 // define enum constants in global_cw
277 enumTree.constants().forEach(constant -> addConstant(global_jsb,
278 constant.location(),
279 constant.name(),
280 headerFile.dictionary().lookup(constant.type()),
281 constant.enumConstant().get()));
282
283 if (enumTree.name().isEmpty()) {
|
244
245 @Override
246 public Boolean visitStruct(StructTree structTree, JType jt) {
247 //generate nested structs recursively
248 structTree.nestedTypes().forEach(this::generateDecl);
249
250 if (structTree.isAnonymous()) {
251 //skip anonymous
252 return false;
253 }
254 String nativeName = structTree.name();
255 Type type = structTree.type();
256 log.print(Level.FINE, () -> "Create struct: " + nativeName);
257
258 String intf = Utils.toClassName(nativeName);
259 String name = headerClassName + "." + intf;
260
261 log.print(Level.FINE, () -> "Define class " + name + " for native type " + nativeName);
262
263 JavaSourceBuilder jsb = new JavaSourceBuilder(global_jsb.align() + 1);
264 addNativeLocation(false, jsb, structTree.location());
265 jsb.addAnnotation(false, NATIVE_STRUCT, Map.of("value", structTree.layout().toString()));
266 jsb.interfaceBegin(intf, true, "Struct<" + intf + ">");
267 // fields
268 structTree.fields().forEach(fieldTree -> addField(jsb, fieldTree, type));
269 jsb.interfaceEnd();
270 addClassIfNeeded(headerClassName + "." + intf, jsb);
271
272 return true;
273 }
274
275 @Override
276 public Boolean visitEnum(EnumTree enumTree, JType jt) {
277 // define enum constants in global_cw
278 enumTree.constants().forEach(constant -> addConstant(global_jsb,
279 constant.location(),
280 constant.name(),
281 headerFile.dictionary().lookup(constant.type()),
282 constant.enumConstant().get()));
283
284 if (enumTree.name().isEmpty()) {
|