You are viewing a plain text version of this content. The canonical link for it is here.
Posted to pylucene-commits@lucene.apache.org by va...@apache.org on 2012/06/26 03:29:52 UTC

svn commit: r1353792 - in /lucene/pylucene/trunk/jcc: ./ _jcc/ _jcc/java/io/ _jcc/java/lang/ _jcc/java/lang/reflect/ _jcc/java/util/ jcc/ jcc/sources/

Author: vajda
Date: Tue Jun 26 01:29:42 2012
New Revision: 1353792

URL: http://svn.apache.org/viewvc?rev=1353792&view=rev
Log:
 - fixed class initialization race bug PYLUCENE-17 (with Patrick J. McNerthney)

Modified:
    lucene/pylucene/trunk/jcc/CHANGES
    lucene/pylucene/trunk/jcc/_jcc/boot.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.h
    lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.h
    lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/String.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/String.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.h
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.h
    lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.h
    lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.cpp
    lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.h
    lucene/pylucene/trunk/jcc/jcc/cpp.py
    lucene/pylucene/trunk/jcc/jcc/python.py
    lucene/pylucene/trunk/jcc/jcc/sources/JArray.cpp
    lucene/pylucene/trunk/jcc/jcc/sources/JArray.h
    lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
    lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h
    lucene/pylucene/trunk/jcc/jcc/sources/JObject.h
    lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
    lucene/pylucene/trunk/jcc/jcc/sources/functions.h
    lucene/pylucene/trunk/jcc/jcc/sources/types.cpp

Modified: lucene/pylucene/trunk/jcc/CHANGES
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/CHANGES?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/CHANGES (original)
+++ lucene/pylucene/trunk/jcc/CHANGES Tue Jun 26 01:29:42 2012
@@ -1,3 +1,8 @@
+Version 2.13 ->
+--------------------
+ - fixed class initialization race bug PYLUCENE-17 (with Patrick J. McNerthney)
+ - 
+
 Version 2.12 -> 2.13
 --------------------
  - fixed bug with name collision between method and static field of same name

Modified: lucene/pylucene/trunk/jcc/_jcc/boot.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/boot.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/boot.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/boot.cpp Tue Jun 26 01:29:42 2012
@@ -39,8 +39,8 @@ PyObject *__initialize__(PyObject *modul
     if (env == NULL)
         return NULL;
 
-    java::lang::Class::initializeClass();
-    java::lang::RuntimeException::initializeClass();
+    java::lang::Class::initializeClass(false);
+    java::lang::RuntimeException::initializeClass(false);
 
     return env;
 }

Modified: lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.cpp Tue Jun 26 01:29:42 2012
@@ -29,8 +29,10 @@ namespace java {
         java::lang::Class *PrintWriter::class$ = NULL;
         jmethodID *PrintWriter::_mids = NULL;
 
-        jclass PrintWriter::initializeClass()
+        jclass PrintWriter::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/io/PrintWriter");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/io/PrintWriter.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static java::lang::Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit PrintWriter(jobject obj) : Writer(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             PrintWriter(Writer writer);
             PrintWriter(const PrintWriter& obj) : Writer(obj) {}

Modified: lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.cpp Tue Jun 26 01:29:42 2012
@@ -29,8 +29,10 @@ namespace java {
         java::lang::Class *StringWriter::class$ = NULL;
         jmethodID *StringWriter::_mids = NULL;
 
-        jclass StringWriter::initializeClass()
+        jclass StringWriter::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/io/StringWriter");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/io/StringWriter.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static java::lang::Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit StringWriter(jobject obj) : Writer(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             StringWriter();
             StringWriter(const StringWriter& obj) : Writer(obj) {}

Modified: lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.cpp Tue Jun 26 01:29:42 2012
@@ -28,8 +28,10 @@ namespace java {
         java::lang::Class *Writer::class$ = NULL;
         jmethodID *Writer::_mids = NULL;
 
-        jclass Writer::initializeClass()
+        jclass Writer::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/io/Writer");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/io/Writer.h Tue Jun 26 01:29:42 2012
@@ -27,10 +27,10 @@ namespace java {
         public:
             static java::lang::Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Writer(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
         };
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.cpp Tue Jun 26 01:29:42 2012
@@ -33,8 +33,10 @@ namespace java {
         Boolean *Boolean::TRUE = NULL;
         Boolean *Boolean::FALSE = NULL;
         
-        jclass Boolean::initializeClass()
+        jclass Boolean::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Boolean");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Boolean.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Boolean(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Boolean(jboolean);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Byte::class$ = NULL;
         jmethodID *Byte::_mids = NULL;
 
-        jclass Byte::initializeClass()
+        jclass Byte::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Byte");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Byte.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Byte(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Byte(jbyte);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Character::class$ = NULL;
         jmethodID *Character::_mids = NULL;
 
-        jclass Character::initializeClass()
+        jclass Character::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Character");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Character.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Character(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Character(jchar);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.cpp Tue Jun 26 01:29:42 2012
@@ -63,8 +63,10 @@ namespace java {
         Class *Class::class$ = NULL;
         jmethodID *Class::_mids = NULL;
 
-        jclass Class::initializeClass()
+        jclass Class::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Class");
@@ -150,7 +152,7 @@ namespace java {
 
         Class Class::forName(const String& className)
         {
-            jclass cls = initializeClass();
+            jclass cls = initializeClass(false);
             jobject obj = env->callStaticObjectMethod(cls, _mids[mid_forName], className.this$);
 
             return Class((jclass) obj);

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Class.h Tue Jun 26 01:29:42 2012
@@ -37,10 +37,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Class(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Class(const Class& obj) : Object(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Double::class$ = NULL;
         jmethodID *Double::_mids = NULL;
         
-        jclass Double::initializeClass()
+        jclass Double::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Double");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Double.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Double(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Double(jdouble);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.cpp Tue Jun 26 01:29:42 2012
@@ -28,8 +28,10 @@ namespace java {
         Class *Exception::class$ = NULL;
         jmethodID *Exception::_mids = NULL;
 
-        jclass Exception::initializeClass()
+        jclass Exception::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Exception");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Exception.h Tue Jun 26 01:29:42 2012
@@ -27,10 +27,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Exception(jobject obj) : Throwable(obj) {
-                initializeClass();
+                initializeClass(false);
             }
         };
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Float::class$ = NULL;
         jmethodID *Float::_mids = NULL;
 
-        jclass Float::initializeClass()
+        jclass Float::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Float");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Float.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Float(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Float(jfloat);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Integer::class$ = NULL;
         jmethodID *Integer::_mids = NULL;
         
-        jclass Integer::initializeClass()
+        jclass Integer::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Integer");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Integer.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Integer(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Integer(jint);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Long::class$ = NULL;
         jmethodID *Long::_mids = NULL;
         
-        jclass Long::initializeClass()
+        jclass Long::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Long");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Long.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Long(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Long(jlong);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.cpp Tue Jun 26 01:29:42 2012
@@ -33,8 +33,10 @@ namespace java {
         Class *Object::class$ = NULL;
         jmethodID *Object::mids$ = NULL;
 
-        jclass Object::initializeClass()
+        jclass Object::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Object");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Object.h Tue Jun 26 01:29:42 2012
@@ -27,11 +27,11 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *mids$;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Object();
             explicit Object(jobject obj) : JObject(obj) {
-                initializeClass();
+                initializeClass(false);
             }
 
             String toString() const;

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.cpp Tue Jun 26 01:29:42 2012
@@ -29,8 +29,10 @@ namespace java {
         Class *RuntimeException::class$ = NULL;
         jmethodID *RuntimeException::_mids = NULL;
 
-        jclass RuntimeException::initializeClass()
+        jclass RuntimeException::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/RuntimeException");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/RuntimeException.h Tue Jun 26 01:29:42 2012
@@ -27,10 +27,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit RuntimeException(jobject obj) : Exception(obj) {
-                initializeClass();
+                initializeClass(false);
             }
         };
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Short::class$ = NULL;
         jmethodID *Short::_mids = NULL;
 
-        jclass Short::initializeClass()
+        jclass Short::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Short");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Short.h Tue Jun 26 01:29:42 2012
@@ -26,10 +26,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Short(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             Short(jshort);
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/String.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/String.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/String.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/String.cpp Tue Jun 26 01:29:42 2012
@@ -32,8 +32,10 @@ namespace java {
         Class *String::class$ = NULL;
         jmethodID *String::_mids = NULL;
 
-        jclass String::initializeClass()
+        jclass String::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/String");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/String.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/String.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/String.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/String.h Tue Jun 26 01:29:42 2012
@@ -27,10 +27,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit String(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
             String();
             String(const String& obj) : Object(obj) {}

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.cpp Tue Jun 26 01:29:42 2012
@@ -33,8 +33,10 @@ namespace java {
         Class *Throwable::class$ = NULL;
         jmethodID *Throwable::_mids = NULL;
 
-        jclass Throwable::initializeClass()
+        jclass Throwable::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/lang/Throwable");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/Throwable.h Tue Jun 26 01:29:42 2012
@@ -33,10 +33,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *_mids;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Throwable(jobject obj) : Object(obj) {
-                initializeClass();
+                initializeClass(false);
             }
 
             void printStackTrace() const;

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.cpp Tue Jun 26 01:29:42 2012
@@ -45,8 +45,10 @@ namespace java {
             Class *Constructor::class$ = NULL;
             jmethodID *Constructor::_mids = NULL;
 
-            jclass Constructor::initializeClass()
+            jclass Constructor::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
                     jclass cls = env->findClass("java/lang/reflect/Constructor");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Constructor.h Tue Jun 26 01:29:42 2012
@@ -33,10 +33,10 @@ namespace java {
             public:
                 static Class *class$;
                 static jmethodID *_mids;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit Constructor(jobject obj) : Object(obj) {
-                    initializeClass();
+                    initializeClass(false);
                 }
                 Constructor(const Constructor& obj) : Object(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.cpp Tue Jun 26 01:29:42 2012
@@ -39,8 +39,10 @@ namespace java {
             Class *Field::class$ = NULL;
             jmethodID *Field::_mids = NULL;
 
-            jclass Field::initializeClass()
+            jclass Field::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
                     jclass cls = env->findClass("java/lang/reflect/Field");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Field.h Tue Jun 26 01:29:42 2012
@@ -31,10 +31,10 @@ namespace java {
             public:
                 static Class *class$;
                 static jmethodID *_mids;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit Field(jobject obj) : Object(obj) {
-                    initializeClass();
+                    initializeClass(false);
                 }
                 Field(const Field& obj) : Object(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.cpp Tue Jun 26 01:29:42 2012
@@ -13,8 +13,10 @@ namespace java {
             java::lang::Class *GenericArrayType::class$ = NULL;
             jmethodID *GenericArrayType::mids$ = NULL;
 
-            jclass GenericArrayType::initializeClass()
+            jclass GenericArrayType::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericArrayType.h Tue Jun 26 01:29:42 2012
@@ -25,11 +25,11 @@ namespace java {
 
                 static java::lang::Class *class$;
                 static jmethodID *mids$;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit GenericArrayType(jobject obj) : java::lang::reflect::Type(obj) {
                     if (obj != NULL)
-                        initializeClass();
+                        initializeClass(false);
                 }
                 GenericArrayType(const GenericArrayType& obj) : java::lang::reflect::Type(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.cpp Tue Jun 26 01:29:42 2012
@@ -14,8 +14,10 @@ namespace java {
             java::lang::Class *GenericDeclaration::class$ = NULL;
             jmethodID *GenericDeclaration::mids$ = NULL;
 
-            jclass GenericDeclaration::initializeClass()
+            jclass GenericDeclaration::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/GenericDeclaration.h Tue Jun 26 01:29:42 2012
@@ -28,11 +28,11 @@ namespace java {
 
                 static java::lang::Class *class$;
                 static jmethodID *mids$;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit GenericDeclaration(jobject obj) : java::lang::Object(obj) {
                     if (obj != NULL)
-                        initializeClass();
+                        initializeClass(false);
                 }
                 GenericDeclaration(const GenericDeclaration& obj) : java::lang::Object(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.cpp Tue Jun 26 01:29:42 2012
@@ -48,8 +48,10 @@ namespace java {
             Class *Method::class$ = NULL;
             jmethodID *Method::_mids = NULL;
 
-            jclass Method::initializeClass()
+            jclass Method::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
                     jclass cls = env->findClass("java/lang/reflect/Method");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Method.h Tue Jun 26 01:29:42 2012
@@ -33,10 +33,10 @@ namespace java {
             public:
                 static Class *class$;
                 static jmethodID *_mids;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit Method(jobject obj) : Object(obj) {
-                    initializeClass();
+                    initializeClass(false);
                 }
                 Method(const Method& obj) : Object(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.cpp Tue Jun 26 01:29:42 2012
@@ -37,8 +37,10 @@ namespace java {
             Class *Modifier::class$ = NULL;
             jmethodID *Modifier::_mids = NULL;
 
-            jclass Modifier::initializeClass()
+            jclass Modifier::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
                     jclass cls = env->findClass("java/lang/reflect/Modifier");
@@ -74,43 +76,43 @@ namespace java {
 
             int Modifier::isPublic(int mod)
             {
-                jclass cls = initializeClass();
+                jclass cls = env->getClass(initializeClass);
                 return (int) env->callStaticBooleanMethod(cls, _mids[mid_isPublic], mod);
             }
 
             int Modifier::isStatic(int mod)
             {
-                jclass cls = initializeClass();
+                jclass cls = env->getClass(initializeClass);
                 return (int) env->callStaticBooleanMethod(cls, _mids[mid_isStatic], mod);
             }
 
             int Modifier::isNative(int mod)
             {
-                jclass cls = initializeClass();
+                jclass cls = env->getClass(initializeClass);
                 return (int) env->callStaticBooleanMethod(cls, _mids[mid_isNative], mod);
             }
 
             int Modifier::isFinal(int mod)
             {
-                jclass cls = initializeClass();
+                jclass cls = env->getClass(initializeClass);
                 return (int) env->callStaticBooleanMethod(cls, _mids[mid_isFinal], mod);
             }
 
             int Modifier::isAbstract(int mod)
             {
-                jclass cls = initializeClass();
+                jclass cls = env->getClass(initializeClass);
                 return (int) env->callStaticBooleanMethod(cls, _mids[mid_isAbstract], mod);
             }
 
             int Modifier::isPrivate(int mod)
             {
-                jclass cls = initializeClass();
+                jclass cls = env->getClass(initializeClass);
                 return (int) env->callStaticBooleanMethod(cls, _mids[mid_isPrivate], mod);
             }
 
             int Modifier::isProtected(int mod)
             {
-                jclass cls = initializeClass();
+                jclass cls = env->getClass(initializeClass);
                 return (int) env->callStaticBooleanMethod(cls, _mids[mid_isProtected], mod);
             }
         }

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Modifier.h Tue Jun 26 01:29:42 2012
@@ -29,11 +29,11 @@ namespace java {
                 explicit Modifier();
             public:
                 explicit Modifier(jobject obj) : Object(obj) {
-                    initializeClass();
+                    initializeClass(false);
                 }
                 static Class *class$;
                 static jmethodID *_mids;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 static int isPublic(int mod);
                 static int isStatic(int mod);

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.cpp Tue Jun 26 01:29:42 2012
@@ -13,8 +13,10 @@ namespace java {
             java::lang::Class *ParameterizedType::class$ = NULL;
             jmethodID *ParameterizedType::mids$ = NULL;
 
-            jclass ParameterizedType::initializeClass()
+            jclass ParameterizedType::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/ParameterizedType.h Tue Jun 26 01:29:42 2012
@@ -27,11 +27,11 @@ namespace java {
 
                 static java::lang::Class *class$;
                 static jmethodID *mids$;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit ParameterizedType(jobject obj) : java::lang::reflect::Type(obj) {
                     if (obj != NULL)
-                        initializeClass();
+                        initializeClass(false);
                 }
                 ParameterizedType(const ParameterizedType& obj) : java::lang::reflect::Type(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.cpp Tue Jun 26 01:29:42 2012
@@ -13,8 +13,10 @@ namespace java {
             java::lang::Class *Type::class$ = NULL;
             jmethodID *Type::mids$ = NULL;
 
-            jclass Type::initializeClass()
+            jclass Type::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/Type.h Tue Jun 26 01:29:42 2012
@@ -21,11 +21,11 @@ namespace java {
 
                 static java::lang::Class *class$;
                 static jmethodID *mids$;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit Type(jobject obj) : java::lang::Object(obj) {
                     if (obj != NULL)
-                        initializeClass();
+                        initializeClass(false);
                 }
                 Type(const Type& obj) : java::lang::Object(obj) {}
             };

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.cpp Tue Jun 26 01:29:42 2012
@@ -15,8 +15,10 @@ namespace java {
             java::lang::Class *TypeVariable::class$ = NULL;
             jmethodID *TypeVariable::mids$ = NULL;
 
-            jclass TypeVariable::initializeClass()
+            jclass TypeVariable::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/TypeVariable.h Tue Jun 26 01:29:42 2012
@@ -31,11 +31,11 @@ namespace java {
 
                 static java::lang::Class *class$;
                 static jmethodID *mids$;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit TypeVariable(jobject obj) : java::lang::reflect::Type(obj) {
                     if (obj != NULL)
-                        initializeClass();
+                        initializeClass(false);
                 }
                 TypeVariable(const TypeVariable& obj) : java::lang::reflect::Type(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.cpp Tue Jun 26 01:29:42 2012
@@ -13,8 +13,10 @@ namespace java {
             java::lang::Class *WildcardType::class$ = NULL;
             jmethodID *WildcardType::mids$ = NULL;
 
-            jclass WildcardType::initializeClass()
+            jclass WildcardType::initializeClass(bool getOnly)
             {
+                if (getOnly)
+                    return (jclass) (class$ == NULL ? NULL : class$->this$);
                 if (!class$)
                 {
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/lang/reflect/WildcardType.h Tue Jun 26 01:29:42 2012
@@ -26,11 +26,11 @@ namespace java {
 
                 static java::lang::Class *class$;
                 static jmethodID *mids$;
-                static jclass initializeClass();
+                static jclass initializeClass(bool);
 
                 explicit WildcardType(jobject obj) : java::lang::reflect::Type(obj) {
                     if (obj != NULL)
-                        initializeClass();
+                        initializeClass(false);
                 }
                 WildcardType(const WildcardType& obj) : java::lang::reflect::Type(obj) {}
 

Modified: lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Enumeration::class$ = NULL;
         jmethodID *Enumeration::mids$ = NULL;
 
-        jclass Enumeration::initializeClass()
+        jclass Enumeration::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/util/Enumeration");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/util/Enumeration.h Tue Jun 26 01:29:42 2012
@@ -30,10 +30,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *mids$;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Enumeration(jobject obj) : JObject(obj) {
-                initializeClass();
+                initializeClass(false);
             }
 
             jboolean hasMoreElements() const;

Modified: lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.cpp (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.cpp Tue Jun 26 01:29:42 2012
@@ -30,8 +30,10 @@ namespace java {
         Class *Iterator::class$ = NULL;
         jmethodID *Iterator::mids$ = NULL;
 
-        jclass Iterator::initializeClass()
+        jclass Iterator::initializeClass(bool getOnly)
         {
+            if (getOnly)
+                return (jclass) (class$ == NULL ? NULL : class$->this$);
             if (!class$)
             {
                 jclass cls = env->findClass("java/util/Iterator");

Modified: lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.h (original)
+++ lucene/pylucene/trunk/jcc/_jcc/java/util/Iterator.h Tue Jun 26 01:29:42 2012
@@ -30,10 +30,10 @@ namespace java {
         public:
             static Class *class$;
             static jmethodID *mids$;
-            static jclass initializeClass();
+            static jclass initializeClass(bool);
 
             explicit Iterator(jobject obj) : JObject(obj) {
-                initializeClass();
+                initializeClass(false);
             }
 
             jboolean hasNext() const;

Modified: lucene/pylucene/trunk/jcc/jcc/cpp.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/cpp.py?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/cpp.py (original)
+++ lucene/pylucene/trunk/jcc/jcc/cpp.py Tue Jun 26 01:29:42 2012
@@ -893,13 +893,14 @@ def header(env, out, cls, typeset, packa
     line(out, indent, 'static jmethodID *mids$;');
     if instanceFields:
         line(out, indent, 'static jfieldID *fids$;');
-    line(out, indent, 'static jclass initializeClass();');
+    line(out, indent, 'static bool live$;');
+    line(out, indent, 'static jclass initializeClass(bool);');
     line(out)
 
     line(out, indent, 'explicit %s(jobject obj) : %s(obj) {',
          cppname(names[-1]), absname(cppnames(superNames)))
     line(out, indent + 1, 'if (obj != NULL)');
-    line(out, indent + 2, 'initializeClass();')
+    line(out, indent + 2, 'env->getClass(initializeClass);')
     line(out, indent, '}')
     line(out, indent, '%s(const %s& obj) : %s(obj) {}',
          cppname(names[-1]), cppname(names[-1]),
@@ -999,6 +1000,7 @@ def code(env, out, cls, superCls, constr
     line(out, indent, 'jmethodID *%s::mids$ = NULL;', cppname(names[-1]))
     if instanceFields:
         line(out, indent, 'jfieldID *%s::fids$ = NULL;', cppname(names[-1]))
+    line(out, indent, 'bool %s::live$ = false;', cppname(names[-1]))
 
     for field in fields:
         fieldType = field.getType()
@@ -1014,11 +1016,13 @@ def code(env, out, cls, superCls, constr
                  typeName, cppname(names[-1]), fieldName)
 
     line(out)
-    line(out, indent, 'jclass %s::initializeClass()', cppname(names[-1]))
+    line(out, indent, 'jclass %s::initializeClass(bool getOnly)',
+         cppname(names[-1]))
     line(out, indent, '{')
-    line(out, indent + 1, 'if (!class$)')
+    line(out, indent + 1, 'if (getOnly)')
+    line(out, indent + 2, 'return (jclass) (live$ ? class$->this$ : NULL);')
+    line(out, indent + 1, 'if (class$ == NULL)')
     line(out, indent + 1, '{')
-    line(out)
     line(out, indent + 2, 'jclass cls = (jclass) env->findClass("%s");',
          className.replace('.', '/'))
 
@@ -1082,6 +1086,7 @@ def code(env, out, cls, superCls, constr
                      cppFieldName, typename(fieldType, cls, False),
                      fieldName, signature(field))
 
+    line(out, indent + 2, "live$ = true;")
     line(out, indent + 1, '}')
     line(out, indent + 1, 'return (jclass) class$->this$;')
     line(out, indent, '}')
@@ -1137,7 +1142,8 @@ def code(env, out, cls, superCls, constr
              cppname(methodName), decls, const)
         line(out, indent, '{')
         if isStatic:
-            line(out, indent + 1, 'jclass cls = initializeClass();');
+            line(out, indent + 1,
+                 'jclass cls = env->getClass(initializeClass);');
         if returnType.isPrimitive():
             line(out, indent + 1,
                  '%senv->call%s%sMethod(%s, %smids$[%smid_%s_%s]%s);',

Modified: lucene/pylucene/trunk/jcc/jcc/python.py
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/python.py?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/python.py (original)
+++ lucene/pylucene/trunk/jcc/jcc/python.py Tue Jun 26 01:29:42 2012
@@ -1075,10 +1075,10 @@ def python(env, out_h, out, cls, superCl
     line(out, indent + 1, 'PyDict_SetItemString(PY_TYPE(%s).tp_dict, "boxfn_", make_descriptor(%s));', names[-1], boxfn_)
 
     if isExtension:
-        line(out, indent + 1, 'jclass cls = %s::initializeClass();',
+        line(out, indent + 1, 'jclass cls = env->getClass(%s::initializeClass);',
              cppname(names[-1]))
     elif fields:
-        line(out, indent + 1, '%s::initializeClass();', cppname(names[-1]))
+        line(out, indent + 1, 'env->getClass(%s::initializeClass);', cppname(names[-1]))
 
     if isExtension:
         count = 0

Modified: lucene/pylucene/trunk/jcc/jcc/sources/JArray.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JArray.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JArray.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JArray.cpp Tue Jun 26 01:29:42 2012
@@ -400,7 +400,7 @@ static int seq_setslice(U *self, Py_ssiz
 }
 
 template<typename T> 
-static jclass initializeClass(void)
+static jclass initializeClass(bool getOnly)
 {
     return env->get_vm_env()->GetObjectClass(JArray<T>((Py_ssize_t) 0).this$);
 }
@@ -717,7 +717,7 @@ template<> int init< jobject,_t_jobjecta
     return 0;
 }
 
-template<> jclass initializeClass<jobject>(void)
+template<> jclass initializeClass<jobject>(bool getOnly)
 {
     jclass cls = env->findClass("java/lang/Object");
     return env->get_vm_env()->GetObjectClass(JArray<jobject>(cls, (Py_ssize_t) 0).this$);

Modified: lucene/pylucene/trunk/jcc/jcc/sources/JArray.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JArray.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JArray.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JArray.h Tue Jun 26 01:29:42 2012
@@ -55,7 +55,7 @@ public:
     }
 
 #ifdef PYTHON
-    JArray<T>(PyObject *sequence) : java::lang::Object(fromPySequence(T::initializeClass(), sequence)) {
+    JArray<T>(PyObject *sequence) : java::lang::Object(fromPySequence(env->getClass(T::initializeClass), sequence)) {
         length = this$ ? env->getArrayLength((jobjectArray) this$) : 0;
     }
 

Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.cpp Tue Jun 26 01:29:42 2012
@@ -60,13 +60,17 @@ JCCEnv::JCCEnv(JavaVM *vm, JNIEnv *vm_en
     if (!mutex)
     {
         mutex = new CRITICAL_SECTION();
-        InitializeCriticalSection(mutex);
+        InitializeCriticalSection(mutex);  // recursive by default
     }
 #else
     if (!mutex)
     {
+        pthread_mutexattr_t attr;
+
+        pthread_mutexattr_init(&attr);
+        pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
         mutex = new pthread_mutex_t();
-        pthread_mutex_init(mutex, NULL);
+        pthread_mutex_init(mutex, &attr);
     }
 #endif
 
@@ -245,7 +249,7 @@ jobject JCCEnv::enumerationNext(jobject 
 
 jboolean JCCEnv::isInstanceOf(jobject obj, getclassfn initializeClass) const
 {
-    return get_vm_env()->IsInstanceOf(obj, (*initializeClass)());
+    return get_vm_env()->IsInstanceOf(obj, getClass(initializeClass));
 }
 
 jclass JCCEnv::findClass(const char *className) const
@@ -386,10 +390,23 @@ jobject JCCEnv::deleteGlobalRef(jobject 
     return NULL;
 }
 
+jclass JCCEnv::getClass(getclassfn initializeClass) const
+{
+    jclass cls = (*initializeClass)(true);
+
+    if (cls == NULL)
+    {
+        lock locked;
+        cls = (*initializeClass)(false);
+    }
+
+    return cls;
+}
+
 jobject JCCEnv::newObject(getclassfn initializeClass, jmethodID **mids,
                           int m, ...)
 {
-    jclass cls = (*initializeClass)();
+    jclass cls = getClass(initializeClass);
     JNIEnv *vm_env = get_vm_env();
     jobject obj;
 

Modified: lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JCCEnv.h Tue Jun 26 01:29:42 2012
@@ -70,7 +70,7 @@ extern JCCEnv *env;
 #define _EXC_PYTHON ((int) 0)
 #define _EXC_JAVA   ((int) 1)
 
-typedef jclass (*getclassfn)(void);
+typedef jclass (*getclassfn)(bool);
 
 class countedRef {
 public:
@@ -152,6 +152,7 @@ public:
     jobject newGlobalRef(jobject obj, int id);
     jobject deleteGlobalRef(jobject obj, int id);
 
+    jclass getClass(getclassfn initializeClass) const;
     jobject newObject(getclassfn initializeClass, jmethodID **mids, int m, ...);
 
     jobjectArray newObjectArray(jclass cls, int size);

Modified: lucene/pylucene/trunk/jcc/jcc/sources/JObject.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/JObject.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/JObject.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/JObject.h Tue Jun 26 01:29:42 2012
@@ -21,7 +21,6 @@
 class _DLL_EXPORT JObject {
 public:
     jobject this$;
-    int id;  /* zero when this$ is a weak ref */
 
     inline explicit JObject(jobject obj)
     {
@@ -83,6 +82,9 @@ public:
 
         return *this;
     }
+
+private:
+    int id;      // zero when this$ is a weak ref */
 };
 
 

Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.cpp Tue Jun 26 01:29:42 2012
@@ -216,7 +216,7 @@ int _parseArgs(PyObject **args, unsigned
                 case 'K':
                   try {
                       getclassfn initializeClass = va_arg(list, getclassfn);
-                      cls = (*initializeClass)();
+                      cls = env->getClass(initializeClass);
                   } catch (int e) {
                       switch (e) {
                         case _EXC_PYTHON:
@@ -238,7 +238,7 @@ int _parseArgs(PyObject **args, unsigned
                * case because of earlier recursion avoidance (JObject(cls)).
                */
               if (!Class::class$)
-                  Class::initializeClass();
+                  env->getClass(Class::initializeClass);
 
               if (array)
               {
@@ -623,7 +623,7 @@ int _parseArgs(PyObject **args, unsigned
                 case 'k':
                 case 'K':
                   getclassfn initializeClass = va_arg(check, getclassfn);
-                  cls = (*initializeClass)();
+                  cls = env->getClass(initializeClass);
                   break;
               }
 

Modified: lucene/pylucene/trunk/jcc/jcc/sources/functions.h
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/functions.h?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/functions.h (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/functions.h Tue Jun 26 01:29:42 2012
@@ -152,7 +152,7 @@ template<class T, class U> PyObject *get
     jobject next;
     OBJ_CALL(next = env->iteratorNext(self->object.this$));
 
-    jclass cls = java::lang::String::initializeClass();
+    jclass cls = env->getClass(java::lang::String::initializeClass);
     if (env->get_vm_env()->IsInstanceOf(next, cls))
         return env->fromJString((jstring) next, 1);
 
@@ -173,7 +173,7 @@ template<class T, class U> PyObject *get
     jobject next;
     OBJ_CALL(next = env->iteratorNext(self->object.this$));
 
-    jclass cls = java::lang::String::initializeClass();
+    jclass cls = env->getClass(java::lang::String::initializeClass);
     if (env->get_vm_env()->IsInstanceOf(next, cls))
         return env->fromJString((jstring) next, 1);
 
@@ -198,7 +198,7 @@ template<class T, class U> PyObject *get
     jobject next;
     OBJ_CALL(next = env->enumerationNext(self->object.this$));
 
-    jclass cls = java::lang::String::initializeClass();
+    jclass cls = env->getClass(java::lang::String::initializeClass);
     if (env->get_vm_env()->IsInstanceOf(next, cls))
         return env->fromJString((jstring) next, 1);
 
@@ -219,7 +219,7 @@ template<class T, class U> PyObject *get
     jobject next;
     OBJ_CALL(next = env->enumerationNext(self->object.this$));
 
-    jclass cls = java::lang::String::initializeClass();
+    jclass cls = env->getClass(java::lang::String::initializeClass);
     if (env->get_vm_env()->IsInstanceOf(next, cls))
         return env->fromJString((jstring) next, 1);
 
@@ -241,7 +241,7 @@ template<class T, class U, class V> PyOb
         return NULL;
     }
         
-    jclass cls = java::lang::String::initializeClass();
+    jclass cls = env->getClass(java::lang::String::initializeClass);
     if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
         return env->fromJString((jstring) next.this$, 0);
 
@@ -259,7 +259,7 @@ template<class T, class U, class V> PyOb
         return NULL;
     }
         
-    jclass cls = java::lang::String::initializeClass();
+    jclass cls = env->getClass(java::lang::String::initializeClass);
     if (env->get_vm_env()->IsInstanceOf(next.this$, cls))
         return env->fromJString((jstring) next.this$, 0);
 

Modified: lucene/pylucene/trunk/jcc/jcc/sources/types.cpp
URL: http://svn.apache.org/viewvc/lucene/pylucene/trunk/jcc/jcc/sources/types.cpp?rev=1353792&r1=1353791&r2=1353792&view=diff
==============================================================================
--- lucene/pylucene/trunk/jcc/jcc/sources/types.cpp (original)
+++ lucene/pylucene/trunk/jcc/jcc/sources/types.cpp Tue Jun 26 01:29:42 2012
@@ -552,10 +552,10 @@ static PyObject *t_descriptor___get__(t_
     {
 #ifdef _java_generics
         if (self->flags & DESCRIPTOR_GENERIC)
-            return t_Class::wrap_Object(Class((*self->access.initializeClass)()), (PyTypeObject *) type);
+            return t_Class::wrap_Object(Class(env->getClass(self->access.initializeClass)), (PyTypeObject *) type);
         else
 #endif
-            return t_Class::wrap_Object(Class((*self->access.initializeClass)()));
+            return t_Class::wrap_Object(Class(env->getClass(self->access.initializeClass)));
     }
 
     Py_RETURN_NONE;