java-gobject-introspection r45 - in trunk: src/org/gnome/gir/compiler src/org/gnome/gir/gobject src/org/gnome/gir/repository stub-examples
- From: walters svn gnome org
- To: svn-commits-list gnome org
- Subject: java-gobject-introspection r45 - in trunk: src/org/gnome/gir/compiler src/org/gnome/gir/gobject src/org/gnome/gir/repository stub-examples
- Date: Mon, 8 Sep 2008 23:32:35 +0000 (UTC)
Author: walters
Date: Mon Sep 8 23:32:35 2008
New Revision: 45
URL: http://svn.gnome.org/viewvc/java-gobject-introspection?rev=45&view=rev
Log:
Require namespace in static initializer; recursively search for proxy parents
This fixes the HelloClutter code.
Modified:
trunk/src/org/gnome/gir/compiler/CodeFactory.java
trunk/src/org/gnome/gir/gobject/GType.java
trunk/src/org/gnome/gir/gobject/NativeObject.java
trunk/src/org/gnome/gir/repository/Repository.java
trunk/stub-examples/Test.java
Modified: trunk/src/org/gnome/gir/compiler/CodeFactory.java
==============================================================================
--- trunk/src/org/gnome/gir/compiler/CodeFactory.java (original)
+++ trunk/src/org/gnome/gir/compiler/CodeFactory.java Mon Sep 8 23:32:35 2008
@@ -1695,7 +1695,12 @@
mv.visitInsn(DUP);
mv.visitMethodInsn(INVOKESPECIAL, internalsInner.internalName, "<init>", "()V");
mv.visitFieldInsn(PUTSTATIC, internals.internalName, "invocationOptions", "Ljava/util/Map;");
- globals.clinit = mv;
+
+ mv.visitMethodInsn(INVOKESTATIC, "org/gnome/gir/repository/Repository", "getDefault", "()Lorg/gnome/gir/repository/Repository;");
+ mv.visitLdcInsn(globals.namespace);
+ mv.visitMethodInsn(INVOKEVIRTUAL, "org/gnome/gir/repository/Repository", "requireNoFail", "(Ljava/lang/String;)V");
+
+ globals.clinit = mv;
}
private void compileNamespaceSingle(String namespace) {
Modified: trunk/src/org/gnome/gir/gobject/GType.java
==============================================================================
--- trunk/src/org/gnome/gir/gobject/GType.java (original)
+++ trunk/src/org/gnome/gir/gobject/GType.java Mon Sep 8 23:32:35 2008
@@ -165,7 +165,7 @@
/* If we haven't yet seen a GType, we do a full search of the repository. This
* is VERY slow right now, so it's cached.
*/
- private static synchronized final Class<?> lookupProxyClass(NativeLong g_type) {
+ public static synchronized final Class<?> lookupProxyClass(NativeLong g_type) {
Class<?> klass = classTypeMap.get(g_type);
if (klass != null)
return klass;
@@ -186,10 +186,15 @@
return lookupProxyClass((NativeLong) this);
}
- public static final Class<?> lookupProxyClass(Pointer ptr) {
+ public static final GType objectPeekType(Pointer ptr) {
Pointer g_class = ptr.getPointer(0);
NativeLong g_type = g_class.getNativeLong(0);
- return lookupProxyClass(g_type);
+ return valueOf(g_type.longValue());
+ }
+
+ public static final Class<?> lookupProxyClass(Pointer ptr) {
+ GType gtype = objectPeekType(ptr);
+ return lookupProxyClass(gtype);
};
/**
@@ -274,6 +279,10 @@
return valueOf(((Number) nativeValue).longValue());
}
+ public GType getParent() {
+ return GObjectAPI.gobj.g_type_parent(this);
+ }
+
public String toString() {
return "GType(" + GObjectAPI.gobj.g_type_name(this) + ")";
}
Modified: trunk/src/org/gnome/gir/gobject/NativeObject.java
==============================================================================
--- trunk/src/org/gnome/gir/gobject/NativeObject.java (original)
+++ trunk/src/org/gnome/gir/gobject/NativeObject.java Mon Sep 8 23:32:35 2008
@@ -238,8 +238,19 @@
}
@SuppressWarnings("unchecked")
+ protected static Class<?> lookupProxyChain(GType gtype) {
+ Class<?> ret = null;
+ while (ret == null && !gtype.equals(GType.OBJECT)) {
+ ret = GType.lookupProxyClass(gtype);
+ gtype = gtype.getParent();
+ }
+ return ret;
+ }
+
+ @SuppressWarnings("unchecked")
protected static <T extends NativeObject> Class<T> classFor(Pointer ptr, Class<T> defaultClass) {
- Class<?> cls = GType.lookupProxyClass(ptr);
+ GType gtype = GType.objectPeekType(ptr);
+ Class<?> cls = lookupProxyChain(gtype);
return (cls != null && defaultClass.isAssignableFrom(cls)) ? (Class<T>) cls : defaultClass;
}
Modified: trunk/src/org/gnome/gir/repository/Repository.java
==============================================================================
--- trunk/src/org/gnome/gir/repository/Repository.java (original)
+++ trunk/src/org/gnome/gir/repository/Repository.java Mon Sep 8 23:32:35 2008
@@ -28,6 +28,14 @@
}
}
+ public void requireNoFail(String namespace) {
+ try {
+ require(namespace);
+ } catch (GErrorException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
public BaseInfo[] getInfos(String namespace) {
int nInfos = GIntrospectionAPI.gi.g_irepository_get_n_infos(this, namespace);
BaseInfo[] ret = new BaseInfo[nInfos];
Modified: trunk/stub-examples/Test.java
==============================================================================
--- trunk/stub-examples/Test.java (original)
+++ trunk/stub-examples/Test.java Mon Sep 8 23:32:35 2008
@@ -103,6 +103,10 @@
put(Library.OPTION_TYPE_MAPPER, new GTypeMapper());
}
};
+
+ static {
+ Repository.getDefault().requireNoFail(namespace);
+ }
};
public static final void init() {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]