代码之家  ›  专栏  ›  技术社区  ›  Boris Pavlović

如何搜索项目中返回Collection接口实现的所有方法?

  •  9
  • Boris Pavlović  · 技术社区  · 17 年前

    8 回复  |  直到 17 年前
        1
  •  10
  •   Boris Pavlović    17 年前

    在Eclipse帮助中发现了以下内容:

    要搜索具有特定返回类型的方法,请按如下方式使用“*”:

    1. Java搜索选项卡。
    2. 区分大小写的复选框。
    3. 方法和声明,然后 单击“搜索”。

    它可以帮助查找返回特定类型但不返回某些接口实现的所有方法。

        2
  •  5
  •   Oege de Moor    17 年前

    import default
    
    class CollectionType extends RefType {
      CollectionType() {
        this.getASupertype*().hasQualifiedName("java.util","Collection")
      }
    }
    
    from Method m
    where m.getType() instanceof CollectionType
          and
          m.fromSource()
    select m
    

    也就是说,我们首先定义CollectionType的含义:所有具有java.util.的类型。集合作为超类型。getASupertype后面有一颗星,因为我们想应用该操作零次或多次。接下来,我们只需选择那些返回类型为CollectionType并且出现在源代码中的方法。

    继续,试试看:-)将查询进一步细化为那些应该返回CollectionType但可能返回null的方法是一个简单的练习。所有这些都可以交互完成,在开发查询时自动完成,并不断检查以帮助您正确完成。您可以通过多种不同的方式查看结果,并轻松地在分析结果和代码之间导航。

    -Oege [披露:我是Semmle的首席执行官]

        3
  •  4
  •   nicity    16 年前

    在IntelliJ IDEA中调用Structural Search,选择现有模板“类的方法”。 该操作将添加以下模板:

    class $Class$ { 
      $ReturnType$ $MethodName$($ParameterType$ $Parameter$);
    }
    

    对于“MethodName”变量,指定它是搜索的目标。 开始搜索,享受:)

        4
  •  1
  •   joel.neely    17 年前

    我不知道如何找到所有返回类型为的方法 java.util.的任意实现。收藏(包括您自己定义的收藏)。

    1. 对于任何 特定 收藏兴趣类型。

    2. ,拖动“java.util.” 省略该包前缀后面的类

        5
  •  1
  •   Scott Stanchfield    17 年前

    插件时间!我想出了一个能完成大部分工作的东西。。。

    Grab

    http://javadude.com/misc/collectionmarker.zip

    http://javadude.com/misc/collectionmarker-source.zip (如果有兴趣)

    将collectionmarker.zip解压缩到eclipse目录中(eclipse目录应包含插件目录)

    重新启动eclipse

    工具栏上将有两个小eclipse图标——一个清除标记,一个添加标记。

    此插件搜索您工作区中的所有内容;它忽略选择。(它很快就脏了)

    希望这能有所帮助! --斯科特

        6
  •  0
  •   starblue    17 年前

    如果现有的用户界面无法做到这一点,您始终可以使用反射来遍历代码。这不是那么多工作,只是几个嵌套的循环。

        7
  •  0
  •   Chii    17 年前

    intellij IDEA具有基于结构/表达式的搜索,因此通过搜索所有返回Collection的方法,您至少可以获得一些接近的结果。

        8
  •  0
  •   Torsten Marek    17 年前

    PMD 可以检查一下,也可以 SemmleCode