This module provides functions to check class files (constant pool) and see the dependency to other classes/methods/fields.
listClassRef() returns a java.util.Set object of all classes referenced by the specified class, class file, or JAR file.
listClassRef(Exception)
==> [java.lang.Exception, java.lang.String, java.lang.Throwable]
listClassRef(getResource("java/io/IOException.class"))
==> [java.io.IOException, java.lang.Exception, java.lang.String]
listClassRef("Hello.class")
==> [Hello, java.io.PrintStream, java.lang.Object, java.lang.String, java.lang.System]
listClassRef("depend.jar")
==> [depend.init, java.lang.Object, java.lang.String, pnuts.ext.ModuleBase, pnuts.lang.Context]
use("depend")
function checkDependency(inputs, target){
function toClassName(name) name[0..size(name)-7].replace('/', '.')
classes = set()
targetIncluded = false
for (j: inputs){
if (j == target) targetIncluded = true
readZip(j, function (e, in){
name = e.name
if (name.endsWith(".class")) classes.add(toClassName(name))
})
}
if (!targetIncluded){
readZip(target, function (e, in){
name = e.name
if (name.endsWith(".class")) classes.add(toClassName(name))
})
}
badentry = map()
readZip(target, function (e, in){
name = e.name
if (name.endsWith(".class")){
url = getURL("jar:file:" + jarfile + "!/" + name)
classname = toClassName(name)
for (i: listClassRef(url)) if (!contains(classes, i)) badentry.put(classname, i)
}
})
badentry
}
jarfile = "pnuts-j2me_cdc.jar"
pp = ["btclasses.zip","personal.jar"]
mapFunction(function (k, v) println(k, ": ", v, " is missing"), checkDependency(pp, jarfile))
listMethodRef() returns a java.util.Set object of all method signatures referenced by the specified class, class file, or JAR file.
> printAll(listMethodRef(Exception)) java.lang.Throwable#()V java.lang.Throwable# (Ljava/lang/String;)V java.lang.Throwable# (Ljava/lang/String;Ljava/lang/Throwable;)V java.lang.Throwable# (Ljava/lang/Throwable;)V
listFieldRef() returns a java.util.Set object of all field signatures referenced by the specified class, class file, or JAR file.
> printAll(listFieldRef(class java.io.FileInputStream)) java.io.FileDescriptor#in(Ljava/io/FileDescriptor;) java.io.FileInputStream#channel(Ljava/nio/channels/FileChannel;) java.io.FileInputStream#fd(Ljava/io/FileDescriptor;)