Skip to content

Commit b0e3364

Browse files
committed
Add <record>s and <class>es to the second pass if superclass undefined
There are cases when a class is defined before its superclass. An example is GInitiallyUnowned. Try parsing these again just like methods if there is a superclass declared, but the superclass is not defined yet.
1 parent e2ad74c commit b0e3364

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

src/gir2java/GirParser.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -481,17 +481,28 @@ private void parseRecordOrClass(Element root, ParsingContext context) {
481481
//Normal struct, children are members
482482
try {
483483
System.out.println("Normal struct " + name + " becomes class " + className);
484+
String superclassName = root.getAttributeValue("parent");
485+
ConvertedType superclassConvType = null;
486+
if (superclassName != null) {
487+
superclassConvType = context.lookupType(superclassName);
488+
if (superclassConvType == null) {
489+
Set<ParsingSnapshot> snapshots =
490+
(Set<ParsingSnapshot>) context.getExtra(Constants.CONTEXT_EXTRA_SNAPSHOTS);
491+
492+
snapshots.add(new ParsingSnapshot(context, root));
493+
return;
494+
}
495+
}
496+
484497
parsedClass = cm._class(className);
485498

486499
parsedClass.init().add(cm.ref(BridJ.class).staticInvoke("register"));
487500

488-
String superclassName = root.getAttributeValue("parent");
489-
ConvertedType superclassConvType = context.lookupType(superclassName);
490501
if (superclassConvType == null) {
491502
parsedClass._extends(StructObject.class);
492503
} else {
493504
parsedClass._extends((JClass)superclassConvType.getJType());
494-
System.out.println("className extends " + superclassConvType.getType() + " " + superclassConvType.getCtype() + " " + superclassConvType.getJType());
505+
System.out.println(className + " extends " + superclassConvType);
495506
}
496507

497508

0 commit comments

Comments
 (0)