FileAnnotationLoader (@Nullable AbstractVcs vcs, @Nullable final FilePath path, @Nullable final VcsRevisionNumber revisionNumber) { if (vcs == null || path == null || revisionNumber == null) return null; if (revisionNumber instanceof TextRevisionNumber || revisionNumber == VcsRevisionNumber.NULL) { return null; } AnnotationProvider annotationProvider = vcs.getAnnotationProvider(); if (!(annotationProvider instanceof AnnotationProviderEx)) return null; if (!((AnnotationProviderEx)annotationProvider).isAnnotationValid(path, revisionNumber)) return null; return new FileAnnotationLoader(vcs) { @Override public FileAnnotation compute() throws VcsException { return ((AnnotationProviderEx)annotationProvider).annotate(path, revisionNumber); } }; }