gpt4 book ai didi

java - 有没有一种方法可以仅针对其副作用应用重构脚本?

转载 作者:搜寻专家 更新时间:2023-10-30 21:12:45 25 4
gpt4 key购买 nike

我有一个库被更改为引入工厂方法来替换构造函数(原因现在并不重要,在当前情况下主要是为了改进类型推断)。

假设它的 Eclipse 重构脚本(所以我几乎有一个很好的计算机可读的更改描述),有什么方法可以应用该脚本到仅使用该库的项目(即它仅引用该库的编译版本)?

例如,我从这个简单的类开始:

public class MyContainer<T> {
private final T content;

public MyContainer(final T content) {
this.content = content;
}

public T getContent() {
return content;
}
}

现在我引入一个工厂(没有将构造函数设为私有(private),但现在这并不真正相关),工厂方法如下所示:

public static <T> MyContainer<T> holding(T content) {
return new MyContainer<T>(content);
}

当我现在导出迁移脚本时,它看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
<session version="1.0">
<refactoring comment="Introduce factory &apos;holding&apos; in &apos;scratch.MyContainer&apos; for constructor &apos;scratch.MyContainer.MyContainer()&apos;&#x0A;- Original project: &apos;scratch&apos;&#x0A;- Original element: &apos;scratch.MyContainer.MyContainer()&apos;&#x0A;- Factory name: &apos;holding&apos;&#x0A;- Owner class: &apos;scratch.MyContainer&apos;"
description="Introduce factory for &apos;MyContainer&apos;"
element1="/src&lt;scratch{MyContainer.java[MyContainer"
flags="589830" id="org.eclipse.jdt.ui.introduce.factory"
input="/src&lt;scratch{MyContainer.java"
name="holding" project="scratch" protect="false"
selection="89 0" version="1.0"/>
</session>

应该包含足够的信息以将重构应用到另一个通过 jar 文件引用该类(当前版本)的项目。

但是尝试应用重构给我这个错误:

The refatoring 'Introduce Factory' (org.eclipse.jdt.ui.introduce.factory) cannot be performed, since its input 'scratch.MyContainer.java' does not exist.

请注意,它明确提到了 .java,因此它正在寻找源文件并且不满足于将重构应用于二进制类型。

注意:不想修补二进制库。我只是希望将原始构造函数的调用者转换为调用工厂方法。

注 2:搜索和替换在我的特定情况下无济于事。原因是我有两个 构造函数,一个采用Object,另一个采用String。它们应该映射到两个不同的工厂方法,因此我还需要搜索和替换功能来查看参数的类型信息。

注意 3: 甚至手动指定“用此构造函数替换对象 X 的实例化并调用此方法”的方法将不胜感激。

更新: Eclipse bugzilla 上有一个关于 adding a replace invocation refactoring 的 bugzilla 条目.如果“调用”包括通过给定构造函数进行的对象实例化,那么该功能的实现可能 能够解决我的问题。不幸的是,它在过去几年中没有看到任何 Activity (尽管它计划用于 3.2)。

最佳答案

这不是一种仅将重构应用于调用者的方法,但它可以帮助您解决问题。

是否可以向您的项目添加一个与库中具有相同签名的伪造 MyContainer.java 文件,应用您的重构,然后丢弃 java 文件?您甚至可以使用反编译的源,尽管您可能必须自己生成它。

关于java - 有没有一种方法可以仅针对其副作用应用重构脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7566565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com