JDT API를 사용하면 다른 플러그인이 일부 Java 요소에서 코드 지원 또는 코드 선택을 수행할 수 있습니다. 이 오퍼레이션을 허용하는 요소는 ICodeAssist를 구현합니다.
오퍼레이션에는 두 가지 종류가 있습니다.
Java 모델에는 이 인터페이스를 구현하는 두 개의 요소, IClassFile과 ICompilationUnit가 있습니다. 코드 완료 및 코드 선택은 소스를 첨부한 경우 클래스 파일의 결과에만 응답합니다.
코드 completion을 프로그래밍하여 수행하는 유일한 방법은 ICodeAssist.codeComplete를 호출하는 방법입니다. 컴파일 단위에서 원하는 코드 completion 다음에 오프셋을 지정합니다. 가능한 completion을 허용하려면 ICompletionRequestor 인스턴스도 제공해야 합니다.
ICompletionRequestor의 각 메소드는 코드 completion과 관련하여 다른 종류의 제안을 허용합니다. 각 메소드의 매개변수에는 제안된 요소(이름, 선언 유형 등), 컴파일 단위에서 제안된 삽입 위치 및 해당 검색 능력을 설명하는 텍스트가 포함됩니다.
completion 요청자는 다음 요소 삽입을 포함하여 서로 다른 유형의 많은 completion을 허용할 수 있습니다.
completion 요청자는 또한 컴파일 오류를 허용할 수 있어야 합니다.
플러그인이 모든 종류의 코드 completion에 관심이 있는 것이 아닐 경우, CompletionRequestorAdapter를 사용하여 관심이 있는 completion 종류만 구현하도록 할 수 있습니다. 다음 예제는 클래스 completion을 허용하는 데만 사용되는 어댑터를 보여줍니다.
// Get the compilation unit ICompilationUnit unit = ...; // Get the offset int offset = ...; // Create the requester ICompletionRequestor requestor = new CompletionRequestorAdapter() { public void acceptClass( char[] packageName, char[] className, char[] completionName, int modifiers, int completionStart, int completionEnd, int relevance) { System.out.println("propose a class named " + new String(className)); } }; // Compute proposals unit.codeComplete(offset, requestor);
여러 가지 가능한 completion이 있을 수 있으므로 제시된 completion의 검색 능력을 다른 제안사항과 비교하는 데 검색 능력 개념을 사용합니다. 검색 능력은 양의 정수로 표시됩니다. 다른 제안사항의 값에 상대적으로 사용되는 점을 제외하고 값에는 암시적 의미가 없습니다. 코드 completion 후보의 검색 능력은 예상하는 표현식 유형의 영향을 받을 수 있습니다. 변수 유형, 캐스트 유형, 리턴 유형과 같은 주변 코드에 있는 유형에 관련이 있기 때문입니다. completion에서의 예상 접두부 또는 접미부 존재 여부도 검색 능력에 영향을 줍니다.
JDT 코어 플러그인은 코드 completion의 동작을 제어하는 옵션을 정의합니다. 이러한 옵션은 기타 플러그인으로 변경할 수 있습니다.
추가 옵션을 사용하여 필드, static 필드, 로컬 변수 및 메소드 인수에 제안된 completion 이름의 접두부 및 접미부를 지정할 수 있습니다.
코드 지원 옵션 및 기본값에 대한 자세한 정보는 JDT 코어 코드 지원 옵션을 참조하십시오.
코드 selection은 컴파일 단위에서 텍스트 범위(보통 선택된 텍스트)로 표시되는 Java 요소를 찾는 데 사용됩니다. 프로그램에 따라 코드 selection을 수행하려면, ICodeAssist.codeSelect를 호출해야 합니다. selection의 시작 색인 위치와 해당 길이를 제공해야 합니다. 결과는 Java 요소의 배열입니다. 대부분의 경우 배열에는 하나의 요소만 있지만 선택이 모호한 경우에는 가능한 모든 요소가 리턴됩니다.
다음 예에서 코드 선택은 컴파일 단위로 호출됩니다.
// Get the compilation unit
ICompilationUnit unit = ...;
// Get the offset and length
int offset = ...;
int length = ...;
// perform selection
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("the selected element is " + element[0].getElementName());
selection 길이를 0으로 지정할 경우, selection은 지정된 오프셋을 에워싸는 완전한 토큰을 찾아서 계산합니다. 다음의 메소드 예제를 고려해 보십시오.
public void fooMethod(Object) {
}