如何检测内容辅助是否在 SourceViewer 中打开

How to detect if content assist is open in a SourceViewer

我正在使用 SourceViewerContentAssistant 配置如下:

public class MySourceViewerConfiguration extends TextSourceViewerConfiguration {
  @Override
  public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
    ContentAssistant assistant= new ContentAssistant();
    ...
    return assistant;
  }
}

SourceViewer sourceViewer = ...
sourceViewer.configure( new MySourceViewer() );

如何确定内容辅助当前是否处于活动状态,即提案弹出窗口 window 是否打开?

似乎无法直接查询 SourceViewer 内容辅助是否处于活动状态。

但是,如果在 SourceViewer 投入使用之前足够早地安装完成侦听器,它可以用于跟踪 assist sessions.

例如:

class ContentAssistListener implements ICompletionListener {

  boolean contentAssistActive;

  @Override
  public void assistSessionStarted( ContentAssistEvent event ) {
    contentAssistActive = true;
  }

  @Override
  public void assistSessionEnded( ContentAssistEvent event ) {
    contentAssistActive = false;
  }

  @Override
  public void selectionChanged( ICompletionProposal proposal, boolean smartToggle ) {
  }
}

如果内容辅助当前处于活动状态,contentAssistActive 字段将为 true,否则为 false