플러그인은 JDT API를 사용하여 메소드 참조, 필드 선언, 인터페이스의 구현자 등과 같은 Java 요소의 작업공간에서 Java 프로젝트를 검색할 수 있습니다.
Java 검색의 시작점은 SearchEngine 클래스입니다. Java 요소에서 특정 패턴을 탐색할 수 있습니다. 검색 패턴은 createPattern을 사용하여 작성될 수 있습니다. 패턴 범위는 createJavaSearchScope을 사용하여 지정됩니다. 패턴 및 범위가 정의되면 search 메소드를 사용하여 결과를 수집합니다.
검색 결과는 SearchRequestor로 보고되며, 이 결과에 액세스하려면 이를 확장해야 합니다.
검색 조작은 검색의 속성을 설명하는 패턴과 조사 범위를 제한하는 범위를 모두 사용합니다.
검색 패턴은 검색 결과를 찾는 방법을 정의합니다. Java 요소(createPatternPattern(IJavaElement, int) 참조) 또는 문자열(createPattern(String, int, int, int) 참조)에서 검색 패턴을 작성할 수 있습니다. 마지막 메소드는 와일드 카드(예: '*')를 지원하고 검색 결과를 확대하는 데 사용할 수 있습니다.
예를 들어, 지정한 메소드에 대한 참조를 검색하는 검색 패턴은 다음과 같이 작성합니다.
// Get the method IMethod method = ...; // Create search pattern SearchPattern pattern = SearchPattern.createPattern(method, IJavaSearchConstants.REFERENCES);
또는 "Obj"로 시작하는 모든 유형의 선언을 검색하는 검색 패턴은 다음과 같이 작성합니다.
// Create search pattern SearchPattern pattern = SearchPattern.createPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE);
다음 검색 패턴을 지원합니다.
지정한 프로젝트에서 또는 지정한 패키지에서의 검색 결과에 관심이 있는 경우 또는 검색 결과가 지정한 유형의 계층 구조에서만 있을 수 있음을 알고 있는 경우 createJavaSearchScope(IJavaElement[]) 또는 createHierarchyScope(IType)을 사용하여 적절한 검색 범위를 작성할 수 있습니다.
예를 들어, 지정한 패키지에 대한 검색 범위는 다음과 같이 작성합니다.
// Get the package IPackageFragment pkg = ...; // Create search scope IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {pkg});
또는 지정한 유형의 계층 구조에 대한 검색 범위는 다음과 같이 작성합니다.
// Get the type IType type = ...; // Create search scope IJavaSearchScope scope = SearchEngine.createHierarchyScope(type);
마지막으로 전체 작업공간에 대한 검색 범위를 작성할 수 있습니다.
// Create search scope IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
검색 패턴과 검색 범위를 작성하고 SearchRequestor를 확장했으면, 다음과 같이 검색 조회를 시작할 수 있습니다.
// Get the search pattern SearchPattern pattern = ...; // Get the search scope IJavaSearchScope scope = ...; // Get the search requestor SearchRequestor requestor = ...; // Search SearchEngine searchEngine = new SearchEngine(); searchEngine.search(pattern, new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, scope, requestor, null);
beginReporting 메소드를 사용하여 검색 요청자에게 검색 시작 알림을 전송합니다. 그런 다음, acceptSearchMatch 메소드를 사용하여 각 검색 결과를 보고합니다. 마지막으로 endReporting은 검색이 종료되었음을 표시합니다.
검색 결과는 acceptSearchMatch 메소드를 사용하여 보고됩니다. 아래의 단락은 검색 일치를 자세히 설명합니다.
검색 결과는 Java 요소(예: 유형 선언)에 해당하거나 Java 요소(예: 메소드 내부 유형에 대한 참조)에 포함될 수 있습니다. 검색 엔진은 항상 검색 결과와 일치하거나 검색 결과를 포함하는 가장 내부의 Java 요소를 찾으려고 합니다. 예를 들어, 메소드에 대한 참조를 검색할 때 초기화 프로그램에서 이러한 참조를 찾을 수 있습니다. 이 메소드 참조를 포함하고 있는 초기화 프로그램은 검색 일치의 요소입니다.
또한 검색 엔진은 Java 요소가 들어 있는 자원을 찾으려고 시도합니다. 따라서 Java 요소가 컴파일 단위에서 메소드인 경우 자원은 해당하는 IFile입니다. 요소가 .jar 파일에 들어 있는 경우 자원은 .jar 파일입니다. 이 경우 .jar 파일은 작업공간에 있습니다. 자원이 외부 .jar 파일이면 자원은 널입니다.
소스 위치는 검색 결과를 포함하는 컴파일 단위와 관련이 있습니다. 검색 결과가 .jar 파일에 들어 있는 경우 소스 위치는 첨부된 소스와 관련이 있습니다. .jar 파일에 첨부된 소스가 없는 경우 소스 위치는 (-1, -1)입니다.
대부분의 경우에 검색 결과는 정확하며, 이것은 지정된 일치사항이 요청한 것임을 검색 엔진이 판별할 수 있음을 의미합니다. 그러나 일부 경우 검색 엔진이 판별할 수 없는데, 이 같은 경우 일치사항은 부정확합니다. 일치사항이 부정확할 수 있는 몇 가지 이유는 다음과 같습니다.