2012-09-15 2 views
0

PDT 플러그인의 확장 기능을 개발합니다. 인터페이스가있는 대화 상자 (클래스가 아님)가 필요합니다. 기본 코드는 같습니다 : 그것은Plugin dev : DLTK/PDT 플러그인의 인터페이스 만 검색하는 방법은 무엇입니까?

OpenTypeSelectionDialog2 dialog = new OpenTypeSelectionDialog2(
    DLTKUIPlugin.getActiveWorkbenchShell(), 
    multi, 
    PlatformUI.getWorkbench().getProgressService(), 
    null, 
    type, 
    PHPUILanguageToolkit.getInstance()); 

잘 작동하지만 클래스와 인터페이스 함께 (입력 변수)를 얻는다. 어떤 방법으로 그것을 걸러 낼 수 있습니까? PDT에서 이런 종류의 메커니즘을 찾을 수 없지만 클래스와 인터페이스는 올바르게 인식됩니다 (이름 옆의 아이콘).

답변

0

나는 그것이 최선의 해결책인지는 모르지만 잘 작동하는지는 잘 모른다.

int falseFlags = 0; 
int trueFlags = 0; 

IDLTKSearchScope scope = SearchEngine.createSearchScope(getScriptFolder().getScriptProject()); 

trueFlags = PHPFlags.AccInterface; 

OpenTypeSelectionDialog2 dialog = new OpenTypeSelectionDialog2(
    DLTKUIPlugin.getActiveWorkbenchShell(), 
    multi, 
    PlatformUI.getWorkbench().getProgressService(), 
    scope, 
    IDLTKSearchConstants.TYPE, 
    new PHPTypeSelectionExtension(trueFlags, falseFlags), 
    PHPUILanguageToolkit.getInstance()); 

그리고 PHPTypeSelectionExtension은 다음과 같습니다

public class PHPTypeSelectionExtension extends TypeSelectionExtension { 

/** 
* @see PHPFlags 
*/ 
private int trueFlags = 0; 
private int falseFlags = 0; 

public PHPTypeSelectionExtension() { 
} 

public PHPTypeSelectionExtension(int trueFlags, int falseFlags) { 
    super(); 
    this.trueFlags = trueFlags; 
    this.falseFlags = falseFlags; 
} 

@Override 
public ITypeInfoFilterExtension getFilterExtension() { 
    return new ITypeInfoFilterExtension() { 
     @Override 
     public boolean select(ITypeInfoRequestor typeInfoRequestor) { 
      if (falseFlags != 0 && (falseFlags & typeInfoRequestor.getModifiers()) != 0) { 

       // Try to filter by black list. 
       return false; 
      } else if (trueFlags == 0 || (trueFlags & typeInfoRequestor.getModifiers()) != 0) { 

       // Try to filter by white list, if trueFlags == 0 this is fine 'couse we pass black list. 
       return true; 
      } else { 

       // Rest is filter out. 
       return false; 
      } 
     } 
    }; 
} 

@SuppressWarnings("restriction") 
@Override 
public ISelectionStatusValidator getSelectionValidator() { 
    return new TypedElementSelectionValidator(new Class[] {IType.class, INamespace.class}, false); 
} 

}