private void findJavaAnnotation() {
    fPosition = null;
    fAnnotation = null;
    fHasCorrection = false;

    AbstractMarkerAnnotationModel model = getAnnotationModel();
    IAnnotationAccessExtension annotationAccess = getAnnotationAccessExtension();

    IDocument document = getDocument();
    if (model == null) return;

    boolean hasAssistLightbulb =
        fStore.getBoolean(PreferenceConstants.EDITOR_QUICKASSIST_LIGHTBULB);

    Iterator iter = model.getAnnotationIterator();
    int layer = Integer.MIN_VALUE;

    while (iter.hasNext()) {
      Annotation annotation = (Annotation) iter.next();
      if (annotation.isMarkedDeleted()) continue;

      int annotationLayer = layer;
      if (annotationAccess != null) {
        annotationLayer = annotationAccess.getLayer(annotation);
        if (annotationLayer < layer) continue;
      }

      Position position = model.getPosition(annotation);
      if (!includesRulerLine(position, document)) continue;

      boolean isReadOnly =
          fTextEditor instanceof ITextEditorExtension
              && ((ITextEditorExtension) fTextEditor).isEditorInputReadOnly();
      if (!isReadOnly
          && (((hasAssistLightbulb && annotation instanceof AssistAnnotation)
              || JavaCorrectionProcessor.hasCorrections(annotation)))) {
        fPosition = position;
        fAnnotation = annotation;
        fHasCorrection = true;
        layer = annotationLayer;
        continue;
      } else if (!fHasCorrection) {
        AnnotationPreference preference =
            fAnnotationPreferenceLookup.getAnnotationPreference(annotation);
        if (preference == null) continue;

        String key = preference.getVerticalRulerPreferenceKey();
        if (key == null) continue;

        if (fStore.getBoolean(key)) {
          fPosition = position;
          fAnnotation = annotation;
          layer = annotationLayer;
        }
      }
    }
  }