0

PDT プラグインの拡張機能を開発しています。インターフェイスのみのダイアログが必要です(クラスではありません)。基本的なコードは次のようになります。

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

それは正常に動作しますが、クラスとインターフェイスを一緒に取得します(型変数)。それをフィルタリングする方法はありますか?PDT でこの種のメカニズムを見つけることができませんが、クラスとインターフェイスは正しく認識されます (名前の横にあるアイコン)。

4

1 に答える 1

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);
}

}
于 2012-10-06T12:37:42.867 に答える