Index: Wrapping/vtkWrapJava.c
===================================================================
RCS file: /cvsroot/VTK/VTK/Wrapping/vtkWrapJava.c,v
retrieving revision 1.60
diff -u -r1.60 vtkWrapJava.c
--- Wrapping/vtkWrapJava.c	8 Oct 2007 14:40:27 -0000	1.60
+++ Wrapping/vtkWrapJava.c	17 May 2008 16:47:16 -0000
@@ -20,6 +20,7 @@
 int numberOfWrappedFunctions = 0;
 FunctionInfo *wrappedFunctions[1000];
 extern FunctionInfo *currentFunction;
+FunctionInfo *currentJNIFunction;
 FileInfo *CurrentData;
 
 void output_proto_vars(FILE *fp, int i)
@@ -711,7 +712,7 @@
 }
 
 
-void outputFunction(FILE *fp, FileInfo *data)
+void outputFunction(FILE *fp, FileInfo *data, FileInfo *dataJNI)
 {
   int i;
   int args_ok = 1;
@@ -841,8 +842,9 @@
       fprintf(fp,"extern \"C\" JNIEXPORT ");
       return_result(fp);
       fprintf(fp," JNICALL Java_vtk_%s_%s_1%i(JNIEnv *env, jobject obj",
-              data->ClassName,currentFunction->Name, numberOfWrappedFunctions);
-      
+              dataJNI->ClassName,currentJNIFunction->Name, numberOfWrappedFunctions);
+            
+
       for (i = 0; i < currentFunction->NumberOfArguments; i++)
           {
             fprintf(fp,",");
@@ -906,7 +908,7 @@
       if (currentFunction->NumberOfArguments == 1 && currentFunction->ArgTypes[0] == 0x5000)
         {
         fprintf(fp,"  op->%sArgDelete(vtkJavaVoidFuncArgDelete);\n",
-                currentFunction->Name);
+                currentJNIFunction->Name);
         }
       
       /* now copy and release any arrays */
@@ -927,10 +929,52 @@
   } /* isAbstract */
 }
 
+
+// For malloc()
+#include <stdlib.h>
+
+/** The JNI add '1' after '_' in names so we have to add too
+*/
+char* addOneafterUnderScore(char* string)
+{
+	int i, j, nbUnderScore;
+	char * stringCorrected;
+	if(string == 0) return string;
+
+	// Compute number of '_'
+	nbUnderScore = 0;
+	for(i = 0 ; string[i] != '\0'; i++)
+	{
+		if(string[i] == '_') nbUnderScore++;
+	}
+
+	stringCorrected = (char*)malloc(sizeof(char)*(i+1+nbUnderScore));
+	
+	for(i = 0, j = 0 ; string[i] != '\0' ; i++, j++)
+	{
+		stringCorrected[j] = string[i];
+		if(stringCorrected[j] == '_')
+      stringCorrected[++j] = '1';
+	}
+  stringCorrected[j] = '\0';
+
+	return stringCorrected;
+}
+
+
 /* print the parsed structures */
 void vtkParseOutput(FILE *fp, FileInfo *data)
 {
   int i;
+  FileInfo dataJNI; // The data adapted to the JNI syntax
+
+	dataJNI.ClassName = addOneafterUnderScore(data->ClassName);
+
+  for(i = 0; i < data->NumberOfSuperClasses; ++i)
+    dataJNI.SuperClasses[i] = addOneafterUnderScore(data->SuperClasses[i]);
+  
+  for(i = 0; i < data->NumberOfFunctions ; ++i)
+	  dataJNI.Functions[i].Name = addOneafterUnderScore(data->Functions[i].Name);
   
   fprintf(fp,"// java wrapper for %s object\n//\n",data->ClassName);
   fprintf(fp,"#define VTK_WRAPPING_CXX\n");
@@ -947,11 +991,12 @@
   for (i = 0; i < data->NumberOfSuperClasses; i++)
     {
     fprintf(fp,"extern \"C\" JNIEXPORT void* %s_Typecast(void *op,char *dType);\n",
-            data->SuperClasses[i]);
+            dataJNI.SuperClasses[i]);
     }
 
-  fprintf(fp,"\nextern \"C\" JNIEXPORT void* %s_Typecast(void *me,char *dType)\n{\n",data->ClassName);
-  if (data->NumberOfSuperClasses > 0)
+  fprintf(fp,"\nextern \"C\" JNIEXPORT void* %s_Typecast(void *me,char *dType)\n{\n",dataJNI.ClassName);
+
+if (data->NumberOfSuperClasses > 0)
     {
     fprintf(fp,"  void* res;\n");
     }
@@ -960,7 +1005,7 @@
   for (i = 0; i < data->NumberOfSuperClasses; i++)
     {
     fprintf(fp,"  if ((res= %s_Typecast(me,dType)) != NULL)",
-            data->SuperClasses[i]);
+            dataJNI.SuperClasses[i]);
     fprintf(fp," { return res; }\n");
     }
   fprintf(fp,"  return NULL;\n");
@@ -972,13 +1017,14 @@
   for (i = 0; i < data->NumberOfFunctions; i++)
     {
     currentFunction = data->Functions + i;
-    outputFunction(fp, data);
+    currentJNIFunction = dataJNI.Functions + i;
+    outputFunction(fp, data, &dataJNI);
     }
 
   if ((!data->NumberOfSuperClasses)&&(data->HasDelete))
     {
     fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKDelete(JNIEnv *env,jobject obj)\n",
-            data->ClassName);
+            dataJNI.ClassName);
     fprintf(fp,"{\n  %s *op;\n",data->ClassName);
     fprintf(fp,"  op = (%s *)vtkJavaGetPointerFromObject(env,obj);\n",
             data->ClassName);
@@ -986,7 +1032,7 @@
     fprintf(fp,"}\n");
     
     fprintf(fp,"\nextern \"C\" JNIEXPORT void JNICALL Java_vtk_%s_VTKRegister(JNIEnv *env,jobject obj)\n",
-            data->ClassName);
+            dataJNI.ClassName);
     fprintf(fp,"{\n  %s *op;\n",data->ClassName);
     fprintf(fp,"  op = (%s *)vtkJavaGetPointerFromObject(env,obj);\n",
             data->ClassName);
@@ -996,7 +1042,7 @@
   if (data->IsConcrete)
     {
     fprintf(fp,"\nextern \"C\" JNIEXPORT jlong JNICALL Java_vtk_%s_VTKInit(JNIEnv *, jobject)",
-            data->ClassName);
+            dataJNI.ClassName);
     fprintf(fp,"\n{");
     fprintf(fp,"\n  %s *aNewOne = %s::New();",data->ClassName, data->ClassName);
     fprintf(fp,"\n  return (jlong)(size_t)(void*)aNewOne;");
@@ -1059,4 +1105,13 @@
     fprintf(fp,"  cbc->Delete();\n");
     fprintf(fp,"  return temp20;\n}\n");
    }
+
+  // Cleaning
+  free(dataJNI.ClassName);
+
+  for(i = 0; i < data->NumberOfSuperClasses; ++i)
+    free(dataJNI.SuperClasses[i]);
+  
+  for(i = 0; i < data->NumberOfFunctions ; ++i)
+    free(dataJNI.Functions[i].Name);
 }
