private void createVerticalRuler(IDocument newInput, Class<SourceViewer> sourceViewerClazz)
      throws SecurityException, NoSuchMethodException, IllegalArgumentException,
          IllegalAccessException, InvocationTargetException, NoSuchFieldException {

    forceCustomAnnotationHover();

    Method declaredMethod2 = sourceViewerClazz.getDeclaredMethod("getVerticalRuler");
    declaredMethod2.setAccessible(true);
    CompositeRuler ruler = (CompositeRuler) declaredMethod2.invoke(sourceViewer);
    boolean hasDecorator = false;

    Iterator<?> iter = (ruler).getDecoratorIterator();
    while (iter.hasNext()) {
      Object obj = iter.next();
      if (obj instanceof AnnotationColumn) {
        hasDecorator = true;
      }
    }

    if (!hasDecorator) {
      AnnotationColumn annotationColumn = new AnnotationColumn();
      annotationColumn.createControl(ruler, ruler.getControl().getParent());
      ruler.addDecorator(0, annotationColumn);
    }
  }