在Java标准库中使用免费的方法

我正在研究需要关于方法调用的副作用信息的Java程序的分析。 对于标准库类,我想编译一个只读参数的方法列表。 也就是说,不修改它们的参数的方法,或者任何可以从它们的参数中获得的方法。 我可以从javadocs中推断出很多,但这需要时间。

任何人都可以提出一个更简单的参考或方法来确定标准方法调用是否修改其参数? 通过每个javadoc条目阅读真的是最好的方式?

谢谢!

编辑:奖金将是确定对对象没有副作用的方法。 例如,stack.pop()会反过来,而stack.size()不会。


那么,只需要基本类型/字符串/对象/泛型类型作为参数的所有方法应该满足你,没有进一步考虑。 对于java.lang和java.util,这应该覆盖大部分方法。

但是你最好限制你想要处理的包,因为标准的jdk为所有任务和目的提供了庞大的类库。

编辑
对于声明为E extends ModifiableObject泛型类型来说有些模糊,所以请亲自看看。


您可以尝试针对JDK的源代码运行类型推断引擎。

也许Java的论文类型限定词推断可能是有用的。 (虽然全文看起来并不在线)


我们的DMS软件再造工具包是一个通用的可定制程序分析和转换工具。 它有一个Java前端解析Java并产生符号表,类继承关系,控制和数据流信息。

根据这些信息,可以计算关于方法M是直接修改参数还是从参数可达的任何内容的本地信息。 一个调用图可以被构造,任何被M直接或间接调用的方法X修改。这实际上就是你的答案。 您必须将其应用于感兴趣的代码的源代码,在您的情况下,即Java标准库。

即使提供了所有提供的信息,配置DMS执行此操作也不是微不足道的。 OTOH,这个答案会非常精确(模保守的假设和反思),可重复,并且易于应用于您选择的任何方法。 通过Javadocs手动执行此操作可能非常耗时并且容易出错。

链接地址: http://www.djcxy.com/p/1423.html

上一篇: effect free methods in the Java Standard Library

下一篇: Javascript 3d Graphing utility?