?? checkapi.prl
字號(hào):
## Released to public domain by Donald Anderson dda@world.std.com# No warranties.## Perl script to check for matching of JNI interfaces to implementation.# We check all .cpp arguments and .h arguments and make sure that for# each .h declaration (marked by JNIEXPORT keyword), there is a .cpp# definition for the same function (also marked by JNIEXPORT keyword),# and vice versa. Definitions and declarations are determined solely# by whether they are in a .h or .cpp file - we don't do any further# analysis.## Some additions made to help with Berkeley DB sources:## Berkeley DB Java sources use JAVADB_*_ACCESS #defines# to quickly define routine access functions.foreach $file (<@ARGV>) { # glob allows direct use from Win* makefiles open (FILE, $file) || die "$file: cannot open\n"; $dot_h = 0; if ($file =~ /.*[hH]$/) { $dot_h = 1; } $in_def = 0;nextline: while (<FILE>) { chop; if (/JNIEXPORT/ || /^JAVADB_.*_ACCESS/) { $in_def = 1; $def = ""; } if ($in_def == 1) { $def .= " $_"; } if (/\)/) { $line = ""; $in_def = 0; if ($def eq "") { next nextline; } $_ = $def; # remove comments s@/\*[^*]*\*/@@g; s@[ ][ ]*@ @g; s@^[ ]@@g; s@[ ]$@@g; s@JNIEnv *\* *@JNIEnv @g; s@([,*()]) @\1@g; s@ ([,*()])@\1@g; s/JAVADB_WO_ACCESS_METHOD/JAVADB_WO_ACCESS/; if (/^JAVADB_.*_ACCESS/) { s@ *@ @g; s@_ACCESS_STRING\(([^,]*),@_ACCESS(\1,jstring,@; s@_ACCESS_BEFORE_APPINIT@_ACCESS@; s@_ACCESS\(@,normal,@; s@JAVADB_@@; s@\)@,@; @vars = split(/,/); $get = 0; $set = 0; if (@vars[0] eq "RW") { $get = 1; $set = 1; } if (@vars[0] eq "RO") { $get = 1; } if (@vars[0] eq "WO") { $set = 1; } if ($get == 0 && $set == 0) { print "Invalid use of JAVADB_ macro\n"; } if ($set == 1) { $line = "JNIEXPORT void JNICALL Java_com_sleepycat_db_@vars[2]_set_1@vars[4](JNIEnv,jobject,@vars[3])"; } if ($get == 1) { $line2 = "JNIEXPORT @vars[3] JNICALL Java_com_sleepycat_db_@vars[2]_get_1@vars[4](JNIEnv,jobject)"; } } else { s@([,(][a-zA-Z0-9_]*) [a-zA-Z0-9_]*@\1@g; s@;$@@g; $line = $_; } $def = ""; if ($line ne "") { if ($lines{$line} eq "") { $lines{$line} = 0; } if ($dot_h == 1) { $lines{$line} += 1; } else { $lines{$line} -= 1; } $line = ""; } if ($line2 ne "") { if ($lines{$line2} eq "") { $lines{$line2} = 0; } if ($dot_h == 1) { $lines{$line2} += 1; } else { $lines{$line2} -= 1; } $line2 = ""; } } } close (FILE);}$status = 0;foreach $key (sort keys %lines) { if ($lines{$key} != 0) { if ($lines{$key} > 0) { print "Missing .cpp implementation: $lines${key}\n"; $status = 1; } else { print "Missing .h declaration: $lines${key}\n"; $status = 1; } }}exit ($status);
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -