2016-06-22 14 views
3

다소 큰 (+/- 500k 라인) 코드베이스가 있습니다. 하나의 매개 변수를 사용하는 모든 메서드 호출을 찾고 그 매개 변수가 특정 형식 인 것을 찾고 있습니다. 라고IntelliJ를 사용하여 특정 매개 변수 유형으로 모든 메서드 호출 찾기

public class Foo { } 
public class Bar { } 

public class Doer{ 
    public void doSomethingFoo(Foo foo) { } 
    public void doSomethingObject(Object object) { } 
} 

public class Usage { 
    Doer doer = new Doer(); 
    public doSomething() { 
    Foo anObject = new Foo(); 
    Bar bar = new Bar(); 

    doer.doSomethingFoo(anObject); 
    doer.doSomethingObject(anObject); 

    doer.doSomethingObject(bar); 
    } 
} 

doer.doSomethingFoo(anObject) 모두 이후 및 doer.doSomethingObject(anObject), 모두 그 문은 검색에서 반환해야합니다

이 내가 방법을 찾을 수 있도록하려면, 의미하는 바는 다음과 같이 요구한다. 마찬가지로 doer.doSomethingObject(bar)은 반환되지 않습니다. 물론, doer이 있다는 것을 나는 모른다.

IntelliJ의 구조 검색을 사용하려고합니다. 나는 다음과 같은 매개 변수를 사용하여, 다음과 같은 템플릿 $Instance$.$Method$($Parameter$)을 사용했습니다 :

$Instance$ -> Text/regexp = .* 
$Method$ -> Text/regexp = .* 
$Parameter$ -> Text/regexp = Foo 
       Minimum count = 1  // Minimum one Foo parameter 
       Maximum count = 1  // Maximum one Foo parameter 

foo (대소 문자 구분, 분명히)라는 이름의 매개 변수가 모두를 반환합니다. 그래서 나는 아마 여기 뭔가 잘못하고 있습니다. 근데 뭐? 유일한 매개 변수의 유형이 Foo 인 모든 메소드에 대한 모든 호출을 얻으려면 어떻게해야합니까?

답변

1

거의 다 왔어. 지금해야 할 일은 $ Parameter $의 Expression type (regexp)Foo으로 설정하고 Text/regexp은 비워 두십시오. 또한 Apply constraint within type hierarchy 체크 박스를 사용하여 Foo의 하위 클래스를 찾을 수도 있습니다.

모든 변수의 Text/regexp을 비워 둘 수 있습니다. 이것은 .*과 같습니다.

+0

이것은 훌륭합니다! 그러나, 나는 정말로 그것을 스스로 발견 할 수 있다고 생각하지 않는다. 텍스트는 실제로 그 옵션이하는 것에 관해 명시 적으로 보이지 않는다. –

+0

어떤 텍스트를 보았습니까? 아마도 우리는 그것들을 향상시킬 수 있을까요? –

+0

음, 하나의 "text/regexp for java expression type"에 대해. "자바 표현 유형"은 완전히 불분명하다. 나는 그 근거만으로 그것을 기각했다. 나는 영어가 모국어가 아니며, 완성되었습니다. 실제로 "메서드의 형식 인수 형식에 대한 text/regexp"를 테스트했습니다.이 메서드는 원했던 것처럼 보이지만 doer.doSomethingObject (foo) 호출을 얻을 수 없습니다. "자바 표현 유형"들어, "자바 인수 클래스 또는 인터페이스"같은 것을 사용하십시오. 나는 "타입"이 무엇인지는 알고 있지만, 특히 여기서는 "Ctrl + N"이 "클래스 이름을 입력하십시오"라고 말하면서 그것을 읽으 려하지 않을 것이고 인터페이스도 반환 할 것입니다. –