【问题标题】:IntelliJ structural search and replace problemsIntelliJ 结构搜索和替换问题
【发布时间】:2011-03-19 03:36:36
【问题描述】:

有没有一种简单的方法来捕获类型?我似乎无法做一些基本的事情,比如并排使用变量表达式,比如$mapType$$mapEnd$ 来做一个简单的替换。这可能有什么原因吗?也就是说,如果我有一个表达式,比如.*\s*.*abc,并且我将它分成两个变量,.*\s*.*abc,则表达式不匹配任何文本。可能出了什么问题?

Example template:
$var1$ = $impl$

Example second template:
$var1$ = $type$$implEnd$

如果$impl$ 是一个完整的正则表达式,将$type$$implEnd$ 与匹配的正则表达式的一半放在一起会导致模式不匹配。可能出了什么问题?

我正在尝试进行这种转换:

List<String,Object> list = new ArrayList<String,Object>();
List<String,Object> list = Lists.newArrayList();

显然,我需要以某种方式捕获“数组”,以及只捕获那些没有参数的类型。

【问题讨论】:

  • SSR 匹配每个变量的一种或多种语言结构,它不会将多个变量($mapType$$mapEnd$)捕获到类型引用(或任何语言词法)中。如果我理解正确,您需要匹配 List $variable$ = new $ListType$() 并相应地替换它。你可能会发现这篇文章很有用jetbrains.com/idea/documentation/ssr.html
  • 这几乎可以工作,但它不保留泛型参数之间的逗号。您链接的文章非常模糊和高级。
  • 您可以根据需要指定多个类型参数,例如 Map。我相信第一个模式中丢失的分号是一个错误。顺便说一句,这篇文章充满了具体的例子(在撰写本文时收集:)
  • 啊,允许某些类型的任意数量的参数会很好。哦,好吧。
  • @nicity:发表您的评论作为答案,我会接受。

标签: java regex replace intellij-idea structural-search


【解决方案1】:

SSR 匹配每个变量的一种或多种语言结构,它不会将多个变量 ($mapType$$mapEnd$) 捕获到类型引用(或任何语言词法)中。 对于像

这样的代码

List&lt;String&gt; someName = new ArrayList&lt;String&gt;();

需要有搜索模式

List&lt;$Type$&gt; $variable$ = new $ListType$&lt;$Type$&gt;()

并相应地替换它。 对于更复杂的泛型表达式,需要考虑几个泛型类型变量,例如Map&lt;$Key$, $Value$&gt; 人们可能会发现这篇文章很有用(许多具体的 SSR 示例模式)

http://www.jetbrains.com/idea/documentation/ssr.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-27
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多