如何在Java程序中查找已声明函数的数量

时间:2011-03-22 16:38:25

标签: java

我正在使用Core Java中的项目来识别两个文件之间的相似性,其中一部分是识别声明的函数长度。我已经尝试了以下代码来查找给定类中的声明方法。

import java.lang.reflect.*;
import java.io.*;
import java.lang.String.*;
public class Method1 {
    private int f1(
    Object p, int x) throws NullPointerException
    {
        if (p == null)
        throw new NullPointerException();
        return x;
    }

    public static void main(String args[])throws Exception
    {
        try {
            Class cls = Class.forName("Anu");
            int a;
            Method methlist[]= cls.getDeclaredMethods();
            for (int i = 0; i < methlist.length;i++) {
                Method m = methlist[i];
                System.out.println(methlist[i]);
                System.out.println("name = " + (m.getName()).length());

            }
        }
        catch (Throwable e) {
            System.err.println(e);
        }
    }
} 

但我必须找到一个程序的所有类。我应该将输入作为一个程序,因为必须在每个类中识别声明的方法。辅助它仅在编译给定类时才起作用,即给定类存在类文件。 任何人都可以帮助我识别给定程序中声明的方法。

我必须确定程序中的注释行,请帮助我。

2 个答案:

答案 0 :(得分:0)

你需要写程序来阅读原始代码,因为你不仅可以在那里找到评论。您可以自己解析文本以查找注释和方法签名。

您可以使用google来帮助您执行此操作。

答案 1 :(得分:0)

使用JavaCompiler类,将文件读取为字符串并按如下所示执行:

public class SampleTestCase {

public static void main(String[] args) {
    String str = "public class sample {public static void doSomething() {System.out.println(\"Im here\");}}";
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
    DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>();

    SimpleJavaFileObject obj = new SourceString("sample", str);

    Iterable<? extends JavaFileObject> compilationUnits = Arrays
            .asList(obj);
    CompilationTask task = compiler.getTask(null, null, diagnostics, null,
            null, compilationUnits);

    boolean success = task.call();
    if (success) {
        try {
            Method[] declaredMethods = Class.forName("sample")
                    .getDeclaredMethods();

            for (Method method : declaredMethods) {
                System.out.println(method.getName());
            }
        } catch (ClassNotFoundException e) {
            System.err.println("Class not found: " + e);
        } 
    }
}
}

class SourceString extends SimpleJavaFileObject {
final String code;

SourceString(String name, String code) {
    super(URI.create("string:///" + name.replace('.', '/')
            + Kind.SOURCE.extension), Kind.SOURCE);
    this.code = code;
}

@Override
public CharSequence getCharContent(boolean ignoreEncodingErrors) {
    return code;
}

}