This is the mail archive of the frysk-cvs@sources.redhat.com mailing list for the frysk project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[SCM] master: Eliminate duplicate jnixx objects in jni.so.


The branch, master has been updated
       via  263254a7939cf7db35ef7d85cc781e88bca232b0 (commit)
       via  e7ca5bfd19d38d59e76e05923f9967292c4f4083 (commit)
      from  7dd6af4f54fc1403a55014883ddc6cd73985f688 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email.

- Log -----------------------------------------------------------------
commit 263254a7939cf7db35ef7d85cc781e88bca232b0
Author: Andrew Cagney <cagney@redhat.com>
Date:   Wed May 7 00:30:23 2008 -0400

    Eliminate duplicate jnixx objects in jni.so.
    
    frysk-common/ChangeLog
    2008-05-06  Andrew Cagney  <cagney@redhat.com>
    
    	* Makefile.gen.sh (generate_jnixx_sources): Delete.
    	(files.jnixx): New; eliminate duplicate jnixx files.
    	(jni): Depend on ${GEN_DIRNAME}.jar.
    
    frysk-sys/frysk/jnixx/ChangeLog
    2008-05-07  Andrew Cagney  <cagney@redhat.com>
    
    	* print.cxx: Include Errno-jni.hxx.
    	* exceptions.cxx: Include Errno-jni.hxx.
    	* Main.java: Move jnixx::exception definition to ...
    	* jnixx.hxx (jnixx::exception): ... here.

commit e7ca5bfd19d38d59e76e05923f9967292c4f4083
Author: Andrew Cagney <cagney@redhat.com>
Date:   Tue May 6 23:15:57 2008 -0400

    Generate inlined C++.
    
    frysk-sys/frysk/jnixx/ChangeLog
    2008-05-06  Andrew Cagney  <cagney@redhat.com>
    
    	Generate inlined C++ headers.
    	* ClassWalker.java: Replace WalkClass.
    	* ClassVisitor.java: Replace ClassWalker.
    	* PrintDefinitions.java: Delete; split into ...
    	* PrintCxxDefinitions.java: New; ... this ...
    	* PrintHxxDefinitions.java: New; ... and this.
    	* Main.java: Use.
    	* PrintDeclarations.java: Extend ClassWalker.
    	* PrintNamespaces.java: Extend ClassWalker.
    	* Printer.java: Update.
    	* jnixx.hxx: Simplify.
    	* PrintIncludes.java: Delete.
    
    frysk-sys/frysk/rsl/ChangeLog
    2008-05-06  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/Log.cxx: Replace jnixx::object with java::lang::Object.
    	* jni/Log.hxx: Ditto.
    
    frysk-sys/frysk/sys/ChangeLog
    2008-05-06  Andrew Cagney  <cagney@redhat.com>
    
    	* jni/PseudoTerminal.cxx: Update, jboolean -> bool.

-----------------------------------------------------------------------

Summary of changes:
 frysk-common/ChangeLog                             |    6 +
 frysk-common/Makefile.gen.sh                       |  101 ++++-----
 frysk-sys/frysk/jnixx/ChangeLog                    |   20 ++
 .../jnixx/{WalkClass.java => ClassVisitor.java}    |   49 +++--
 frysk-sys/frysk/jnixx/ClassWalker.java             |   61 +++++-
 frysk-sys/frysk/jnixx/Main.java                    |   67 ++----
 ...PrintIncludes.java => PrintCxxDefinitions.java} |  123 +++++++----
 frysk-sys/frysk/jnixx/PrintDeclarations.java       |  141 +++++++++---
 ...ntDefinitions.java => PrintHxxDefinitions.java} |  234 ++++++++------------
 frysk-sys/frysk/jnixx/PrintNamespaces.java         |   75 +++----
 frysk-sys/frysk/jnixx/Printer.java                 |  132 +++++++----
 frysk-sys/frysk/jnixx/exceptions.cxx               |    3 +-
 frysk-sys/frysk/jnixx/jnixx.hxx                    |   75 +------
 frysk-sys/frysk/jnixx/print.cxx                    |    4 +-
 frysk-sys/frysk/rsl/ChangeLog                      |    5 +
 frysk-sys/frysk/rsl/jni/Log.cxx                    |   14 +-
 frysk-sys/frysk/rsl/jni/Log.hxx                    |   14 +-
 frysk-sys/frysk/sys/ChangeLog                      |    4 +
 frysk-sys/frysk/sys/jni/PseudoTerminal.cxx         |    2 +-
 19 files changed, 606 insertions(+), 524 deletions(-)
 rename frysk-sys/frysk/jnixx/{WalkClass.java => ClassVisitor.java} (65%)
 rename frysk-sys/frysk/jnixx/{PrintIncludes.java => PrintCxxDefinitions.java} (52%)
 rename frysk-sys/frysk/jnixx/{PrintDefinitions.java => PrintHxxDefinitions.java} (56%)

First 500 lines of diff:
diff --git a/frysk-common/ChangeLog b/frysk-common/ChangeLog
index bb3411a..a4b1758 100644
--- a/frysk-common/ChangeLog
+++ b/frysk-common/ChangeLog
@@ -1,3 +1,9 @@
+2008-05-06  Andrew Cagney  <cagney@redhat.com>
+
+	* Makefile.gen.sh (generate_jnixx_sources): Delete.
+	(files.jnixx): New; eliminate duplicate jnixx files.
+	(jni): Depend on ${GEN_DIRNAME}.jar.
+
 2008-05-02  Andrew Cagney  <cagney@redhat.com>
 
 	* Makefile.gen.sh (generate_jnixx_sources): Order build so that
diff --git a/frysk-common/Makefile.gen.sh b/frysk-common/Makefile.gen.sh
index 928c119..e45f312 100755
--- a/frysk-common/Makefile.gen.sh
+++ b/frysk-common/Makefile.gen.sh
@@ -137,6 +137,15 @@ else
     mv files.tmp files.list
 fi
 
+# It is assumed that each file is of the form DIRNAME/BASENAME.SUFFIX,
+# pre-process each into: FILE DIRNAME BASENAME SUFFIX
+
+sed -e 's,^\(\(.*\)/\([^/]*\)\.\([a-zA-Z-]*\)\),\1 \2 \3 \4,' \
+    -e 's,-in$,,' \
+    -e 's,-sh$,,' \
+    < files.list \
+    > files.base
+
 #
 
 echo Creating Makefile.gen from directories ${dirs} ...
@@ -666,29 +675,30 @@ jnixx_sources = \$(wildcard \$(root_srcdir)/frysk-sys/frysk/jnixx/*.java)
 # If any of the JNI sources change, re-generate everything.
 \$(JNIXX_BUILT): \$(jnixx_sources)
 EOF
-generate_jnixx_sources () {
-    local file=$1
-    local d=$2
-    local b=$3
-    local suffix=$4
-    local sources=$5
-    local _file=`echo $file | tr '[/.]' '[__]'`
-    sed -n \
-	-e 's,#include "\(.*\)-jni\.hxx".*,include - \1,p' \
-	-e 's,#include \([A-Z][A-Z0-9_]*\).*,minclude \1 -,p' \
-	-e 's,#define \([A-Z0-9_]*\) "\(.*\)-jni\.hxx".*,define \1 \2,p' \
-	< $file > $$.tmp
-    while read action m h j; do
-	echo "# file=$file action=$action m=$m h=$h"
-	if test "$action" = "minclude" ; then
-            # Assume file defining macro depends on this file
-	    automake_variable $m = \$\($_file\)
-	elif has_java_source ${h} ; then
-	    j=`echo ${h} | tr '[_]' '[/]'`
-	    cat <<EOF
+print_header "jnixx"
+rm -f files.jnixx
+while read file dir base suffix ; do
+    case "$file" in
+	*/jni/*.cxx | */jni/*.cxx-in | */jni/*.cxx-sh | */jnixx/*.cxx )
+	sed -n \
+	    -e 's,#include "\(.*\)-jni\.hxx".*,include - \1,p' \
+	    -e 's,#include \([A-Z][A-Z0-9_]*\).*,minclude \1 -,p' \
+	    -e 's,#define \([A-Z0-9_]*\) "\(.*\)-jni\.hxx".*,define \1 \2,p' \
+	    < $file
+	;;
+    esac
+done < files.base | sort -u > files.jnixx
+while read action m h j; do
+    echo "# action=$action m=$m h=$h"
+    if test "$action" = "minclude" ; then
+        # Assume file defining macro depends on this file
+	automake_variable $m = \$\($_file\)
+    elif has_java_source ${h} ; then
+	j=`echo ${h} | tr '[_]' '[/]'`
+	automake_variable lib${GEN_MAKENAME}_jni_a_SOURCES += ${h}-jni.cxx
+	cat <<EOF
 JNIXX_BUILT += ${h}-jni.hxx
 JNIXX_BUILT += ${h}-jni.cxx
-${sources} += ${h}-jni.cxx
 ${h}-jni.o: ${h}-jni.hxx
 # Require all code to be generated before compiling so that
 # any indirectly included headers are present.
@@ -696,24 +706,24 @@ ${h}-jni.o: | \$(JNIXX_BUILT)
 ${h}-jni.hxx: $j.java
 ${h}-jni.cxx: $j.java
 EOF
-	    case $action in
-		include)
-		    case "$suffix" in
-			cxx) echo "$d/$b.o: ${h}-jni.hxx" ;;
-			hxx) # remember what this file includes
-			    automake_variable $_file += ${h}-jni.hxx ;;
-		    esac
-		    ;;
-		define)
-		    echo "$d/$b.o: ${h}-jni.hxx"
+	case $action in
+	    include)
+		case "$suffix" in
+		    cxx) echo "$d/$b.o: ${h}-jni.hxx" ;;
+		    hxx) # remember what this file includes
+			automake_variable $_file += ${h}-jni.hxx ;;
+		esac
+		;;
+	    define)
+		echo "$d/$b.o: ${h}-jni.hxx"
 		    # Assume file using this macro is a dependency.
-		    echo "$d/$b.o: \$($m)"
-		    ;;
-	    esac
-	fi
-    done < $$.tmp
-    rm -f $$.tmp
-}
+		echo "$d/$b.o: \$($m)"
+		;;
+	esac
+    fi
+done < files.jnixx
+rm -f $$.tmp
+
 
 # For any java file that contains "native" declarations, generate a
 # jni header.
@@ -940,15 +950,6 @@ done
 # generation rules to each file type.  There are no smarts, each file
 # type gets all operations listed explicitly.
 
-# It is assumed that each file is of the form DIRNAME/BASENAME.SUFFIX,
-# pre-process each into: FILE DIRNAME BASENAME SUFFIX
-
-sed -e 's,^\(\(.*\)/\([^/]*\)\.\([a-zA-Z-]*\)\),\1 \2 \3 \4,' \
-    -e 's,-in$,,' \
-    -e 's,-sh$,,' \
-    < files.list \
-    > files.base
-
 print_header "bulk processing"
 
 while read file dir base suffix ; do
@@ -967,10 +968,8 @@ while read file dir base suffix ; do
 	    generate_cni_header $file $dir $base $suffix
 	    generate_compile $file $dir $base $suffix ${sources}
 	    ;;
-	*/jni/*.cxx | */jni/*.cxx-in | */jni/*.cxx-sh)
+	*/jni/*.cxx | */jni/*.cxx-in | */jni/*.cxx-sh | */jnixx/*.cxx )
 	    generate_jni_dependency $file $dir $base $suffix
-	    generate_jnixx_sources $file $dir $base $suffix \
-		lib${GEN_MAKENAME}_jni_a_SOURCES
 	    generate_compile $file $dir $base $suffix \
 		lib${GEN_MAKENAME}_jni_a_SOURCES
 	    ;;
@@ -994,6 +993,6 @@ lib${GEN_MAKENAME}_jni_so_SOURCES =
 solib_PROGRAMS += lib${GEN_DIRNAME}-jni.so
 lib${GEN_DIRNAME}-jni.so: lib${GEN_DIRNAME}-jni.a
 .PHONY: jni
-jni: lib${GEN_DIRNAME}-jni.so
+jni: lib${GEN_DIRNAME}-jni.so ${GEN_DIRNAME}.jar
 EOF
 fi
diff --git a/frysk-sys/frysk/jnixx/ChangeLog b/frysk-sys/frysk/jnixx/ChangeLog
index b38a94c..5efff6c 100644
--- a/frysk-sys/frysk/jnixx/ChangeLog
+++ b/frysk-sys/frysk/jnixx/ChangeLog
@@ -1,5 +1,25 @@
+2008-05-07  Andrew Cagney  <cagney@redhat.com>
+
+	* print.cxx: Include Errno-jni.hxx.
+	* exceptions.cxx: Include Errno-jni.hxx.
+	* Main.java: Move jnixx::exception definition to ...
+	* jnixx.hxx (jnixx::exception): ... here.
+	
 2008-05-06  Andrew Cagney  <cagney@redhat.com>
 
+	Generate inlined C++ headers.
+	* ClassWalker.java: Replace WalkClass.
+	* ClassVisitor.java: Replace ClassWalker.
+	* PrintDefinitions.java: Delete; split into ...
+	* PrintCxxDefinitions.java: New; ... this ...
+	* PrintHxxDefinitions.java: New; ... and this.
+	* Main.java: Use.
+	* PrintDeclarations.java: Extend ClassWalker.
+	* PrintNamespaces.java: Extend ClassWalker.
+	* Printer.java: Update.
+	* jnixx.hxx: Simplify.
+	* PrintIncludes.java: Delete.
+	
 	* jnixx.hxx (jnixx::env): Add <Type>Array methods.
 	* PrintDefinitions.java: Don't cast primitive array results.
 
diff --git a/frysk-sys/frysk/jnixx/WalkClass.java b/frysk-sys/frysk/jnixx/ClassVisitor.java
similarity index 65%
rename from frysk-sys/frysk/jnixx/WalkClass.java
rename to frysk-sys/frysk/jnixx/ClassVisitor.java
index a76996d..2a883d0 100644
--- a/frysk-sys/frysk/jnixx/WalkClass.java
+++ b/frysk-sys/frysk/jnixx/ClassVisitor.java
@@ -43,21 +43,40 @@ import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Constructor;
 
-class WalkClass {
-    static void visit(Class klass, ClassWalker walker) {
-	if (walker.acceptClass(klass)) {
-	    Constructor[] constructors = klass.getDeclaredConstructors();
-	    for (int i = 0; i < constructors.length; i++) {
-		walker.acceptConstructor(constructors[i]);
-	    }
-	    Field[] fields = klass.getDeclaredFields();
-	    for (int i = 0; i < fields.length; i++) {
-		walker.acceptField(fields[i]);
-	    }
-	    Method[] methods = klass.getDeclaredMethods();
-	    for (int i = 0; i < methods.length; i++) {
-		walker.acceptMethod(methods[i]);
-	    }
+abstract class ClassVisitor {
+    void visit(Class klass) {
+	acceptComponent(klass.getComponentType());
+	Class[] interfaces = klass.getInterfaces();
+	for (int i = 0; i < interfaces.length; i++) {
+	    acceptInterface(interfaces[i]);
+	}
+	Constructor[] constructors = klass.getDeclaredConstructors();
+	for (int i = 0; i < constructors.length; i++) {
+	    Constructor constructor = constructors[i];
+	    if (constructor.isSynthetic())
+		continue;
+	    acceptConstructor(constructor);
+	}
+	Field[] fields = klass.getDeclaredFields();
+	for (int i = 0; i < fields.length; i++) {
+	    Field field = fields[i];
+	    if (field.isSynthetic())
+		continue;
+	    acceptField(field);
+	}
+	Method[] methods = klass.getDeclaredMethods();
+	for (int i = 0; i < methods.length; i++) {
+	    Method method = methods[i];
+	    if (method.isSynthetic())
+		continue;
+	    acceptMethod(method);
 	}
     }
+
+    abstract void acceptInterface(Class constructor);
+    abstract void acceptConstructor(Constructor constructor);
+    abstract void acceptField(Field field);
+    abstract void acceptMethod(Method method);
+    abstract void acceptComponent(Class klass);
+    abstract void acceptNested(Class klass);
 }
diff --git a/frysk-sys/frysk/jnixx/ClassWalker.java b/frysk-sys/frysk/jnixx/ClassWalker.java
index 244b0bb..ae85ca3 100644
--- a/frysk-sys/frysk/jnixx/ClassWalker.java
+++ b/frysk-sys/frysk/jnixx/ClassWalker.java
@@ -42,16 +42,59 @@ package frysk.jnixx;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Constructor;
+import java.util.Set;
+import java.util.HashSet;
 
-interface ClassWalker {
-
+abstract class ClassWalker {
+    private final Set visited = new HashSet();
+    private void walk(Class[] klasses) {
+	for (int i = 0; i < klasses.length; i++) {
+	    walk(klasses[i]);
+	}
+    }
+    private final ClassVisitor visitor = new ClassVisitor() {
+	    void acceptComponent(Class klass) {
+	    }
+	    void acceptInterface(Class klass) {
+		walk(klass);
+	    }
+	    void acceptConstructor(Constructor constructor) {
+		walk(constructor.getParameterTypes());
+	    }
+	    void acceptField(Field field) {
+		walk(field.getType());
+	    }
+	    void acceptMethod(Method method) {
+		walk(method.getReturnType());
+		walk(method.getParameterTypes());
+	    }
+	    void acceptNested(Class klass) {
+		walk(klass);
+	    }
+	};
+    void walk(Class klass) {
+	if (klass == null)
+	    return;
+	if (visited.contains(klass))
+	    return;
+	visited.add(klass);
+	walk(klass.getSuperclass());
+	if (klass.isArray()) {
+	    acceptArray(klass);
+	} else if (klass.isPrimitive()) {
+	    acceptPrimitive(klass);
+	} else if (klass.isInterface()) {
+	    acceptInterface(klass);
+	} else {
+	    acceptClass(klass);
+	}
+	visitor.visit(klass);
+    }
     /**
-     * Returns true to indicate the need to walk this classes
-     * internals.
+     * Accept/visit the specified class.
      */
-    boolean acceptClass(Class klass);
-    void acceptConstructor(Constructor constructor);
-    void acceptField(Field field);
-    void acceptMethod(Method method);
-
+    abstract void acceptArray(Class klass);
+    abstract void acceptPrimitive(Class klass);
+    abstract void acceptClass(Class klass);
+    abstract void acceptInterface(Class klass);
 }
diff --git a/frysk-sys/frysk/jnixx/Main.java b/frysk-sys/frysk/jnixx/Main.java
index 43ee1ab..e2a6453 100644
--- a/frysk-sys/frysk/jnixx/Main.java
+++ b/frysk-sys/frysk/jnixx/Main.java
@@ -41,66 +41,35 @@ package frysk.jnixx;
 
 class Main {
 
-    static void printHxxBody(Printer p, Class klass,
-			     PrintNamespaces printNamespaces) {
-	Class parent = klass.getSuperclass();
-	p.println();
-	WalkClass.visit(klass, printNamespaces);
-	p.println();
-	p.print("struct ");
-	p.printQualifiedCxxName(klass);
-	p.print(" : public ");
-	if (parent == Object.class) {
-	    p.print("jnixx::object");
-	} else if (parent == null) {
-	    p.print("jnixx::interface");
-	} else {
-	    p.printQualifiedCxxName(parent);
-	}
-	while(p.dent(0, "{", "};")) {
-	    // Constructor.
-	    p.printUnqualifiedCxxName(klass);
-	    p.print("(jobject o)");
-	    p.print(" : ");
-	    if (parent == Object.class) {
-		p.print("jnixx::object(o)");
-	    } else if (parent == null) {
-		p.print("jnixx::interface(o)");
-	    } else {
-		p.printQualifiedCxxName(parent);
-		p.print("(o)");
-	    }
-	    p.println(" { }");
-	    // Static get-class method - a class knows its own class.
-	    p.println("static jclass Class(jnixx::env& env);");
-	    WalkClass.visit(klass, new PrintDeclarations(p));
-	    p.println();
-	}
-    }
-
     private static void printHxxFile(Printer p, Class klass) {
 	String header = klass.getName().replaceAll("\\.", "_") + "_jni_hxx";
 	p.println("#ifndef " + header);
 	p.println("#define " + header);
 	p.println();
+	p.println("#include <jni.h>");
+	p.println("#include <stdarg.h>");
+	p.println();
+	p.println("namespace jnixx {");
+	p.println("  struct exception;");
+	p.println("  struct env;");
+	p.println("}");
+	new PrintNamespaces(p).walk(klass);
+	new PrintDeclarations(p).walk(klass);
+	p.println();
 	p.println("#include \"frysk/jnixx/jnixx.hxx\"");
-	Class parent = klass.getSuperclass();
-	if (parent != Object.class) {
-	    p.println();
-	    p.print("#include \"");
-	    p.printHeaderFileName(parent);
-	    p.print("\"");
-	    p.println();
-	}
-	printHxxBody(p, klass, new PrintNamespaces(p));
+	new PrintHxxDefinitions(p).walk(klass);
 	p.println();
 	p.println("#endif");
     }
 
     private static void printCxxFile(Printer p, Class klass) {
-	p.println("#include \"frysk/jnixx/jnixx.hxx\"");
-	WalkClass.visit(klass, new PrintIncludes(p, new PrintNamespaces(p)));
-	WalkClass.visit(klass, new PrintDefinitions(p));
+	p.print("#include \"");
+	p.printHeaderFileName(klass);
+	p.println("\"");
+	p.print("jclass ");
+	p.printQualifiedCxxName(klass);
+	p.println("::_class$;");
+	new PrintCxxDefinitions(p).visit(klass);
     }
 
     public static void main(String[] args) throws ClassNotFoundException {
diff --git a/frysk-sys/frysk/jnixx/PrintIncludes.java b/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java
similarity index 52%
rename from frysk-sys/frysk/jnixx/PrintIncludes.java
rename to frysk-sys/frysk/jnixx/PrintCxxDefinitions.java
index 3a4a746..9325b32 100644
--- a/frysk-sys/frysk/jnixx/PrintIncludes.java
+++ b/frysk-sys/frysk/jnixx/PrintCxxDefinitions.java
@@ -39,67 +39,100 @@
 
 package frysk.jnixx;
 
-import java.lang.reflect.Field;
 import java.lang.reflect.Method;
-import java.util.HashSet;
+import java.lang.reflect.Field;
 import java.lang.reflect.Constructor;
+import java.lang.reflect.Modifier;
 
-class PrintIncludes implements ClassWalker {
+class PrintCxxDefinitions extends ClassVisitor {
 
     private final Printer p;
-    private final PrintNamespaces printNamespaces;
-    PrintIncludes(Printer p, PrintNamespaces printNamespaces) {
+    PrintCxxDefinitions(Printer p) {
 	this.p = p;
-	this.printNamespaces = printNamespaces;
     }
 
-    /**
-     * Print #includes for any non system headers..
-     */
-    private void printCxxInclude(Class klass) {
-	while (klass.isArray()) {
-	    klass = klass.getComponentType();
+
+    private void printNativeMethodDefinition(Method method) {
+	boolean isStatic = Modifier.isStatic(method.getModifiers());
+	p.println();
+	while (p.dent(0, "extern \"C\" {", "};")) {
+	    p.print("JNIEXPORT ");
+	    p.printJniType(method.getReturnType());
+	    p.print(" JNICALL ");
+	    p.printJniName(method);
+	    p.print("(");
+	    p.printFormalJniParameters(method, false);
+	    p.println(");");
 	}
-	if (klass.isPrimitive())
-	    return;
-	if (klass.getName().startsWith("java."))
-	    return;
-	if (printedNamespaces.contains(klass))
-	    return;
-	Class superclass = klass.getSuperclass();
-	if (superclass != null) {
-	    printCxxInclude(superclass);
+	p.println();
+	p.printJniType(method.getReturnType());
+	p.println();
+	p.printJniName(method);
+	p.print("(");
+	p.printFormalJniParameters(method, true);
+	p.print(")");
+	while (p.dent(0, "{", "};")) {
+	    p.println("try {");
+	    {
+		p.indent();
+		p.println("jnixx::env env = jnixx::env(jni);");
+		Class returnType = method.getReturnType();
+		if (returnType != Void.TYPE) {
+		    p.printCxxType(returnType);
+		    p.print(" ret = ");
+		}
+		if (isStatic) {
+		    p.printQualifiedCxxName(method);
+		} else {
+		    p.printCxxType(method.getDeclaringClass());
+		    p.print("(object).");
+		    p.print(method.getName());
+		}


hooks/post-receive
--
frysk system monitor/debugger


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]