From 88a0514ec78595f96c7c4f6d2914b36f182762bb Mon Sep 17 00:00:00 2001 From: Geraldine Van der Auwera Date: Mon, 23 Nov 2015 17:53:19 -0500 Subject: [PATCH] Fix bug where gatkdocs of RodWalkers reported default LocusWalker downsampling settings --- .../help/WalkerDocumentationHandler.java | 36 +++++++++++++++---- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/help/WalkerDocumentationHandler.java b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/help/WalkerDocumentationHandler.java index 8bdcfb502..8e3881cdb 100644 --- a/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/help/WalkerDocumentationHandler.java +++ b/public/gatk-tools-public/src/main/java/org/broadinstitute/gatk/tools/walkers/help/WalkerDocumentationHandler.java @@ -228,13 +228,17 @@ public class WalkerDocumentationHandler extends GenericDocumentationHandler { */ private HashMap getDownSamplingSettings(Class myClass, HashMap dsSettings) { // - // Retrieve annotation - if (myClass.isAnnotationPresent(Downsample.class)) { - final Annotation thisAnnotation = myClass.getAnnotation(Downsample.class); - if(thisAnnotation instanceof Downsample) { - final Downsample dsAnnotation = (Downsample) thisAnnotation; - dsSettings.put("by", dsAnnotation.by().toString()); - dsSettings.put("to_cov", dsAnnotation.toCoverage()); + // Check for RODWalker first + if (!checkForRODWalker(myClass).equals("yes")) { + // + // Retrieve annotation + if (myClass.isAnnotationPresent(Downsample.class)) { + final Annotation thisAnnotation = myClass.getAnnotation(Downsample.class); + if(thisAnnotation instanceof Downsample) { + final Downsample dsAnnotation = (Downsample) thisAnnotation; + dsSettings.put("by", dsAnnotation.by().toString()); + dsSettings.put("to_cov", dsAnnotation.toCoverage()); + } } } return dsSettings; @@ -320,6 +324,24 @@ public class WalkerDocumentationHandler extends GenericDocumentationHandler { return getWalkerType(mySuperClass); } + /** + * Utility function that checks whether an instance of class c is a subclass of RODWalker. + * + * @param myClass the class to query for the annotation + * @return "yes" or "no" (can't use a Boolean because of the recursion) + */ + private String checkForRODWalker(Class myClass) { + // + // Look up superclasses recursively until we find either RODWalker or (Walker or Object) + final Class mySuperClass = myClass.getSuperclass(); + if (mySuperClass.getSimpleName().equals("RodWalker")) { + return "yes"; + } else if (mySuperClass.getSimpleName().equals("Object") || mySuperClass.getSimpleName().equals("Walker")) { + return ""; + } + return checkForRODWalker(mySuperClass); + } + /** * Utility function that finds the values of ReadFilters annotation applied to an instance of class c. *