0

我正在做我的项目以创建一个工具,该工具可以找到特定软件的两个版本之间的结构规律(结构规律是源代码中必须遵守的规则)的变化,并检查最新版本是否违反结构规律旧版本的。

我正在使用一种称为EKEKO(针对 Eclipse 工作区的 Clojure 库元编程)的查询语言。我创建了要使用的谓词,并且我可以找到两个版本之间的区别。

但是我的问题是找到一种方法来举例说明:toString旧版本中调用的所有方法都应该有一个新名称,即print. 所以在这种情况下,我需要检查新版本是否符合结构合同(关于名称约定)。

(defn differenceInContract1 
    [?projectName1 ?projectName2 f]
    (def result1 (projectResults ?projectName1 f))
    (def result2 (projectResults ?projectName2 f))

    (def tuple1 (set (map (partial map str) result1)))
    (def tuple2 (set (map (partial map str) result2)))
    (clojure.set/difference tuple1 tuple2))

在前面的代码中,我可以得到项目的两个版本之间的不同。我需要做的是类似于下面的代码:

(defn changeContract
    [?proj1 ?proj2 f1 f2]
    (and (projectResults ?projec1 f1)
         (projectResults ?projec2 f2)))

projectResults 在给定项目上应用 Ekeko 环境并找到指定谓词的结果,在这种情况下(f1 和 f2)。

但是另外,我需要小心比较操作,因为不同项目中的同一个类并不意味着它们是相等的。

有什么想法可以帮助我继续前进吗?提前致谢!

4

0 回答 0