Skip to content

Commit 89e8478

Browse files
Merge pull request #34 from lafoletc/GstTypes.classFor()
Correct regression in GstTypes.classFor()
2 parents fa60951 + 93477ca commit 89e8478

File tree

3 files changed

+16
-13
lines changed

3 files changed

+16
-13
lines changed

src/org/freedesktop/gstreamer/ElementFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,8 @@ private static Element elementFor(Pointer ptr, String factoryName) {
227227
Class<? extends Element> cls = ElementFactory.typeMap.get(factoryName);
228228
if (cls == null) {
229229
cls = (Class<Element>)GstTypes.classFor(Element.getType(ptr));
230+
if (cls == null) cls = Element.class;
231+
230232
ElementFactory.typeMap.put(factoryName, cls);
231233
}
232234
return NativeObject.objectFor(ptr, cls, false);

src/org/freedesktop/gstreamer/lowlevel/GstTypes.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public static void registerType(Class<? extends NativeObject> cls, String gTypeN
4848
* Retrieve the class of a GType
4949
*
5050
* @param gType The type of Class
51-
* @return The Class of the desired type.
51+
* @return The Class of the desired type or null.
5252
*/
5353
public static final Class<? extends NativeObject> classFor(final GType gType) {
5454
final String gTypeName = gType.getTypeName();
@@ -61,7 +61,7 @@ public static final Class<? extends NativeObject> classFor(final GType gType) {
6161

6262
// Search for a parent class registration
6363
GType type = gType.getParentType();
64-
while (!type.equals(GType.OBJECT) && !type.equals(GType.INVALID)) {
64+
while (!type.equals(GType.OBJECT) && !type.equals(GType.POINTER) && !type.equals(GType.INVALID)) {
6565
cls = gtypeNameMap.get(type.getTypeName());
6666
if (cls != null) {
6767
if (GstTypes.logger.isLoggable(Level.FINER)) {
@@ -73,9 +73,8 @@ public static final Class<? extends NativeObject> classFor(final GType gType) {
7373
type = type.getParentType();
7474
}
7575

76-
// Should never appeared
77-
throw new IllegalStateException("Could not find a registered class for " + gType);
78-
76+
// No registered class found for this gType
77+
return null;
7978
}
8079

8180
public static final GType typeFor(Class<? extends NativeObject> cls) {

src/org/freedesktop/gstreamer/lowlevel/NativeObject.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ public static <T extends NativeObject> T objectFor(Pointer ptr, Class<T> cls, in
190190
// exact class match
191191
//
192192
if (gType != null) {
193-
cls = NativeObject.classFor(ptr, gType);
193+
cls = NativeObject.classFor(ptr, gType, cls);
194194
}
195195

196196
try {
@@ -213,13 +213,15 @@ public static <T extends NativeObject> T objectFor(Pointer ptr, Class<T> cls, in
213213
}
214214

215215
@SuppressWarnings("unchecked")
216-
protected static <T extends NativeObject> Class<T> classFor(Pointer ptr, final GType gType) {
217-
Class<? extends NativeObject> cls = GstTypes.classFor(gType);
218-
219-
if (cls.isAnnotationPresent(HasSubtype.class)) {
220-
cls = (Class<T>)SubtypeMapper.subtypeFor(cls, ptr);
221-
}
222-
return (Class<T>)cls;
216+
protected static <T extends NativeObject> Class<T> classFor(Pointer ptr, final GType gType, final Class<T> defaultClass) {
217+
Class<T> cls = (Class<T>)GstTypes.classFor(gType);
218+
if (cls == null) cls = defaultClass;
219+
220+
if (cls.isAnnotationPresent(HasSubtype.class)) {
221+
cls = (Class<T>)SubtypeMapper.subtypeFor(cls, ptr);
222+
}
223+
224+
return cls;
223225
}
224226

225227
@Override

0 commit comments

Comments
 (0)