标签: automated-refactoring

Eclipse:将静态方法调用转换为静态导入

有没有办法自动转换这个静态方法调用(Arrays.asList):

import java.util.Arrays;
import java.util.List;

public class StaticImport {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("hello", "world");
        System.out.println(list);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令进行此调用static import:

import static java.util.Arrays.asList;

import java.util.List;

public class StaticImport {
    public static void main(String[] args) {
        List<String> list = asList("hello", "world");
        System.out.println(list);
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用此配置代码完成Window » Preferences » Java » Editor » Content Assist » Favorites,如本答案中所述.

我的问题是关于转换现有的静态方法调用.理想情况下,我不想配置"最喜欢的导入".

java eclipse automated-refactoring

44
推荐指数
1
解决办法
6971
查看次数

如何将静态内部类重构为Eclipse中的顶级类?

我无法为以下场景找到正确的重构选项:

我有这样的代码(在Outer.java中):

public class Outer {

    // ... class stuff

    public static class Inner {
        // ... inner class stuff   
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来选择Inner,并将其转换为顶级类,在它自己的.java源文件中.我知道这很容易用复制/粘贴等手动完成,但内部类在很多地方被引用,我希望refactor选项能够处理它所引用的任何地方的变化.

我已经尝试过这个选项,Refactor -> Extract Class...但是对于一个data我不太了解的字段做了一些奇怪的事情.

Eclipse版本是3.5.1 Galileo.

如何将静态内部类重构为顶级类?


编辑:不敢相信我忽略了这样做的选择.感谢您的所有正确答案,给大家+1.我仍然需要接受一个答案,所以如果有更多有用的信息,例如与脚本有关,那么仍然有一个留下答案的目的.

java eclipse automated-refactoring

34
推荐指数
2
解决办法
1万
查看次数

R语言识别代码重新格式化/重构工具?

最近我发现自己在编码风格方面使用了R代码 - 多个作者和个人作者,他们并不严格遵守单一结构.有些任务我想比现在更好地自动化.

我正在寻找一种管理以下任务的工具(或多种工具) - 按照欲望的增加顺序列出,但也有点依赖于存在的怀疑主义.

  • 基本格式.比如将"if(foo)"转换为"if(foo)"并在支撑位置和类似物方面实现一致性.

  • 将"foo $ blah"转换为"foo [["blah"]]"以获取列表访问权限.理想情况下,它至少可以猜测一个对象是否真的是一个列表而不是data.frame并且只能转换列表.

  • 将'='转换为'< - '.是的,这是一个简单的搜索和替换 - 但不是真的.工具(或regexp)需要具有语言感知能力,以便它知道转换"x = 5"而不是"foo(x = 5)".不仅简单地替换符号而且确保赋值运算符两侧的单个空格也是非常好的.

  • 变量重命名,特别是跨功能和文件.例如,假设一个列表有一个元素"foo",我希望能够将它改为"foobar"一次,而不必在整个代码流中追踪该列表的每个用法.我想这将需要该工具能够进行整个控制流程,以便识别诸如在不同函数中作为另一个名称存在的列表之类的事物.

  • 命名约定.我希望能够定义一些标准的命名约定(例如Google或其他)并让它识别所有函数,变量等并转换它们.请注意,这与列表元素之类的内容相关联.

随意列出基本的unix处理命令(例如sed),只要它真的足够智能,至少通常不会搞砸(例如将"foo(x = 5)"转换为"foo(x <-5)" ").

我猜测,如果这样的工具,我会听到它的一个完美的状态现在已经存在了,而且我也意识到,与如R语言,很难做一些这些类型的变化的自动的,但是人们可以做梦吧?有没有人对这些/所有这些有指针?

refactoring r automated-refactoring

27
推荐指数
1
解决办法
1373
查看次数

Java源重构7000个引用

我需要更改整个代码库中使用的方法的签名.

具体来说,该方法void log(String)将需要两个额外的参数(Class c, String methodName),这些参数需要由调用者提供,具体取决于调用它的方法.我不能简单地通过null或类似.

为了了解范围,Eclipse发现了7000个对该方法的引用,因此如果我更改它,整个项目将会失效.我需要几周时间才能手动修复它.

据我所知,Eclipse的Eclipse重构插件不能完成任务,但我真的想让它自动化.
那么,我怎样才能完成工作?

java ide automated-refactoring

21
推荐指数
2
解决办法
1598
查看次数

Refactor Pro与Visual Assist X for C++开发

有两种主要的重构工具可以为Visual Studio安装,提供C++支持.这两个工具的完整版本是250美元,它们似乎提供类似的功能.他们是:

哪个工具更好?

编辑:我对这些工具的初步评估似乎是Refactor Pro/CodeRush有更多的功能,但偶尔也有很多错误.它似乎并不喜欢宏: http://billy-oneal.com/forums/4-9-2010%2010-31-50%20PM.png 这里的视觉辅助的相同的解释: HTTP:// billy- oneal.com/forums/4-10-2010%201-52-24%20AM.png

编辑2:我认为我喜欢CodeRush而不是Visual Assist,但我不确定我是否可以信任CR.CodeRush似乎在解析一些C++结构时遇到了问题,比如上面的宏.但它的UI是很多更精致.例如:http: //billy-oneal.com/forums/4-10-2010%201-37-12%20AM.png

另一方面,Visual Assist X似乎在C++开发人员中有更大的追随者,而且它的代码分析要好得多.它似乎没有像R一样出错!Pro正在不时制作.

我想在这一点上我只需要使用这两种工具,看看哪一种更有用.但是,如果有人用任何一种工具制作恐怖/成功故事,我仍然很好奇.

c++ refactoring automated-refactoring visual-studio

19
推荐指数
2
解决办法
9659
查看次数

用C/C++包来理解重构的代码

我即将开始研究一个涉及重构和修改c&c ++中现有代码的项目.代码是一个膨胀的代码,并且数量巨大.当然,由于代码需要修改,因此我们必须在非常短的时间内开发对代码的理解,因为我们有一些非常紧迫的项目进度表.任何人都可以建议任何有助于实现上述目标的开源工具.总之,我正在寻找的工具可以:

  1. 逆向工程工具,有助于理解设计.
  2. 序列生成器工具将帮助在运行时绘制序列(最有可能我们将能够运行代码,但至少不能在初始阶段)或通过代码检查.
  3. 良好的代码浏览工具,可以研究现有的代码库.
  4. 适合的工具,可以轻松自动重构代码.

请告诉我任何值得关注的经历,偏好或收藏.

[编辑]想出了上面提供帮助的工具列表.这是清单:

  1. Graphviz&doxygen
    从现有代码库生成UML类图

  2. UMLStudio
    为您的OO遗留代码创建对象模型是分析,理解和维护它的最佳方法.UMLStudio可以比任何其他CASE工具更快地将C++,Java,CORBA IDL,PHP 5和Ada 95代码转换为OOA和D表示法.

  3. CodeDrawer for C++
    The CodeDrawer converts source code to visual based diagrams. Class, struct, and any elements of source code can be shown diagrams. It also shows the logics of a function and a method. The CodeDrawer helps understand source code of your project

  4. Imagix
    Reverse engineering and visualization of source code lead to improved program comprehension. Speeds: Learning Unfamiliar Code Change Impact …

c++ refactoring automated-refactoring

19
推荐指数
1
解决办法
6973
查看次数

自动生成非通用接口实现

我有界面

public interface ObjectBuilder<E> {  
   E buildObject();
}
Run Code Online (Sandbox Code Playgroud)

此外,该项目有很多类实现非泛型版本的接口.

class MyClassBuilder implements ObjectBuilder {
    public MyClass buildObject() {/**/}
}
Run Code Online (Sandbox Code Playgroud)

是否可以自动转换所有这些类,以便它们实现了接口的通用版本?

自动重构到这个:

class MyClassBuilder implements ObjectBuilder<MyClass> {
    public MyClass buildObject() {/**/}
}
Run Code Online (Sandbox Code Playgroud)

是否有内置或插件Intellij IDEA?还是在其他IDE?

java generics refactoring intellij-idea automated-refactoring

18
推荐指数
2
解决办法
2051
查看次数

自动重构以向方法调用添加参数名称

我正在进行大规模的重构.

我有很多方法,通过位置参数调用.现在我想通过命名参数调用它们.这些方法存在于几个非继承的类中,并且具有相同的名称,并且它们的签名不同.例:

定义

public class Foo
{
    public static Foo Create(int count, string name)
    {
        ...
    }
}

public class Bar
{
    public static Bar Create(string description, bool yesNo, float factor)
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是我想要替换的电话

public void CreateSomeObjects()
{
    var foo = Foo.Create(123, "foo");
    var bar = Bar.Create("bar", true, 1.23);
}
Run Code Online (Sandbox Code Playgroud)

public void CreateSomeObjects()
{
    var foo = Foo.Create(count: 123, name: "foo");
    var bar = Bar.Create(description: "bar", yesNo: true, factor: 1.23);
}
Run Code Online (Sandbox Code Playgroud)

我使用Visual Studio Premium 2013和Resharper.任何想法如何实现这一目标?(我只需要一个提示,没有完整的解决方案.)

c# resharper refactoring automated-refactoring visual-studio

18
推荐指数
2
解决办法
4384
查看次数

IntelliJ中的简单自定义重构

这个问题是一个跟进这个.

说我有一些课Foo.

class Foo {
    protected String x = "x";

    public String getX() {
        return x;
    }
}
Run Code Online (Sandbox Code Playgroud)

我有一个程序使用Foo并违反了LoD(Demeter法则).

class Bar {
    protected Foo foo;

    public Bar() {
        this.foo = new Foo();
    }

    public Foo getFoo() {
        return foo;
    }
}

public static void main(String [] args) {
    Bar bar = new Bar();
    String x = bar.getFoo().getX(); 
}
Run Code Online (Sandbox Code Playgroud)

我可以通过两个步骤重构此代码以使用LoD.

  1. m bar.getFoo().getX()- > getFooX(bar)(提取到方法,也可以查找和替换出现)
  2. F6 getFooX(bar)- > bar.getFooX()(转到实例方法,也找到并替换出现)

使用的程序Bar不再违反LoD. …

java refactoring intellij-idea law-of-demeter automated-refactoring

16
推荐指数
1
解决办法
1276
查看次数

有没有办法在IntelliJ IDE中的Android项目中提取字符串资源?

当我在Android项目上工作时,我想使用一些神奇的快捷方式将我的字符串提取到strings.xml,并允许我更改密钥.有没有?

如果没有,有没有办法开发新的重构方法并扩展IntelliJ的可能性?

android intellij-idea automated-refactoring

15
推荐指数
1
解决办法
5973
查看次数