【问题标题】:How to mass annotate constructor arguments?如何批量注释构造函数参数?
【发布时间】:2024-04-26 09:25:01
【问题描述】:

我遇到了一个问题,我想通过 jackson 使我们项目中的很多类可反序列化。问题是大多数类看起来像这样:

public class FinalFieds{

    private final String field;
    private final String secondField;

    public FinalFieds(String field, String secondField)
    {
        this.field = field;
        this.secondField = secondField;
    }

    public String getField()
    {
        return field;
    }

    public String getSecondField()
    {
        return secondField;
    }
}

所以我发现在杰克逊你可以做这样的事情:

public FinalFieds(@JsonProperty("field") String field, @JsonProperty("secondField") String secondField)

而且效果很好。问题是我无法在 intellij 中进行结构替换来为我工作。当我尝试:

我所有的比赛都在“未分类的比赛”部分。 此外,当我尝试替换时,Intellij 只是从类中删除了一个构造函数。

知道我做错了什么还是 intellij 中的一个已知错误?

即使是一个过于复杂的正则表达式也可以帮助我替换它(对于单参数构造函数,我可以自己创建它;问题是我们在这些类中的构造函数具有多参数构造函数)。

【问题讨论】:

  • 你总是可以自己写一个小程序,解析(松散地)你所有的java文件,找到构造函数并重写它们。
  • 当然我可以写一个程序,但这需要时间,我宁愿使用我过于复杂的 IDE,因为当你不能用你的代码做你想做的事情时,拥有复杂的 IDE 有什么意义。我希望结构搜索和替换能在这里帮助我...... :(
  • 也许有一天我们过于复杂的 IDE 可以为我们编写所有代码。
  • 不,谢谢 :P 但是为我们做一些繁重的工作会很好。我很感谢 Intellij Idea 的所有功能,我只是想知道这个全能的“结构搜索和替换”是否有好处。

标签: java regex intellij-idea structural-search


【解决方案1】:

这是一个错误或缺少的功能,具体取决于您如何看待它。 https://youtrack.jetbrains.com/issue/IDEA-141143

但是,可以分两步完成。首先搜索你要注解的构造函数参数:

class $Class$ implements OurCommonInterface {
  $Class$($Type$ $parameter$);
}

$parameter$ 最小值:1 最大值:unlimitedThis variable is target of the search 已选中。

然后将参数替换为作用域Previous Search Results中带注解的参数:

$Type$ $parameter$

替换模板:

@JsonProperty("$parameter$") $Type$ $parameter$

【讨论】: