Class Section508Compliance

java.lang.Object
edu.umd.cs.findbugs.visitclass.BetterVisitor
edu.umd.cs.findbugs.visitclass.PreorderVisitor
edu.umd.cs.findbugs.visitclass.AnnotationVisitor
edu.umd.cs.findbugs.visitclass.DismantleBytecode
edu.umd.cs.findbugs.BytecodeScanningDetector
com.mebigfatguy.fbcontrib.detect.Section508Compliance
All Implemented Interfaces:
edu.umd.cs.findbugs.Detector, edu.umd.cs.findbugs.Priorities, org.apache.bcel.classfile.Visitor

@CustomUserValue public class Section508Compliance extends edu.umd.cs.findbugs.BytecodeScanningDetector
looks for interfaces that ignore 508 compliance, including not using JLabel.setLabelFor, Using null layouts,
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    private static enum 
     
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private static org.apache.bcel.classfile.JavaClass
     
    private final edu.umd.cs.findbugs.BugReporter
     
    private static ClassNotFoundException
     
    private static org.apache.bcel.classfile.JavaClass
     
    private static final Map<FQMethod,Integer>
     
    private Set<edu.umd.cs.findbugs.ba.XField>
     
    private static org.apache.bcel.classfile.JavaClass
     
    private Map<Integer,edu.umd.cs.findbugs.SourceLineAnnotation>
     
    private edu.umd.cs.findbugs.OpcodeStack
     
    private static org.apache.bcel.classfile.JavaClass
     

    Fields inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode

    codeBytes, lineNumberTable, M_BR, M_CP, M_INT, M_PAD, M_R, M_UINT

    Fields inherited from interface edu.umd.cs.findbugs.Priorities

    EXP_PRIORITY, HIGH_PRIORITY, IGNORE_PRIORITY, LOW_PRIORITY, NORMAL_PRIORITY
  • Constructor Summary

    Constructors
    Constructor
    Description
    Section508Compliance(edu.umd.cs.findbugs.BugReporter bugReporter)
    constructs a S508C detector given the reporter to report bugs on
  • Method Summary

    Modifier and Type
    Method
    Description
    private void
    looks for calls to set a readable string that is generated from a static constant, as these strings are not translatable.
    private void
    processNullLayouts(String className, String methodName)
    looks for containers where a null layout is installed
    private void
    looks for calls to set the color of components where the color isn't from UIManager
    private void
    looks for calls to setSize on components, rather than letting the layout manager set them
    void
    sawOpcode(int seen)
    implements the visitor to find 508 compliance concerns
    void
    visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
    implements the visitor to create and clear the stack
    void
    visitCode(org.apache.bcel.classfile.Code obj)
    implements the visitor to reset the stack
    void
    visitField(org.apache.bcel.classfile.Field obj)
    looks for fields that are JLabels and stores them in a set

    Methods inherited from class edu.umd.cs.findbugs.BytecodeScanningDetector

    getClassContext, report, shouldVisitCode

    Methods inherited from class edu.umd.cs.findbugs.visitclass.DismantleBytecode

    afterOpcode, areOppositeBranches, atCatchBlock, beforeOpcode, getBranchFallThrough, getBranchOffset, getBranchTarget, getClassConstantOperand, getClassDescriptorOperand, getCodeByte, getConstantRefOperand, getDefaultSwitchOffset, getDottedClassConstantOperand, getFieldDescriptorOperand, getIntConstant, getLongConstant, getMaxPC, getMethodDescriptorOperand, getNameConstantOperand, getNextCodeByte, getNextOpcode, getNextPC, getOpcode, getPC, getPrevOpcode, getRefConstantOperand, getRefFieldIsStatic, getRegisterOperand, getSigConstantOperand, getStringConstantOperand, getSwitchLabels, getSwitchOffsets, getXClassOperand, getXFieldOperand, getXMethodOperand, isBranch, isMethodCall, isRegisterLoad, isRegisterStore, isRegisterStore, isReturn, isShift, isSwitch, isWideOpcode, printOpCode, sawBranchTo, sawClass, sawDouble, sawField, sawFloat, sawIMethod, sawInt, sawLong, sawMethod, sawRegister, sawString, visit

    Methods inherited from class edu.umd.cs.findbugs.visitclass.AnnotationVisitor

    getAnnotationParameterAsEnum, getAnnotationParameterAsString, getAnnotationParameterAsStringArray, visitAnnotation, visitAnnotation, visitParameterAnnotation, visitParameterAnnotation, visitSyntheticParameterAnnotation

    Methods inherited from class edu.umd.cs.findbugs.visitclass.PreorderVisitor

    amVisitingMainMethod, asUnsignedByte, doVisitMethod, getClassDescriptor, getClassName, getCode, getConstantPool, getDottedClassName, getDottedFieldSig, getDottedMethodSig, getDottedSuperclassName, getField, getFieldDescriptor, getFieldIsStatic, getFieldName, getFieldSig, getFullyQualifiedFieldName, getFullyQualifiedMethodName, getMethod, getMethodDescriptor, getMethodName, getMethodSig, getMethodVisitOrder, getNumberArguments, getNumberMethodArguments, getPackageName, getSizeOfSurroundingTryBlock, getSizeOfSurroundingTryBlock, getSourceFile, getStringFromIndex, getSuperclassName, getSurroundingCaughtExceptions, getSurroundingCaughtExceptions, getSurroundingCaughtExceptionTypes, getSurroundingTryBlock, getSurroundingTryBlock, getThisClass, getXClass, getXField, getXMethod, hasInterestingClass, hasInterestingMethod, isVisitMethodsInCallOrder, setupVisitorForClass, setVisitMethodsInCallOrder, shouldVisit, toString, visitAfter, visitAfter, visitAnnotationDefault, visitAnnotationEntry, visitBootstrapMethods, visitConstantInvokeDynamic, visitConstantMethodHandle, visitConstantMethodType, visitConstantModule, visitConstantPackage, visitConstantPool, visitEnclosingMethod, visitingField, visitingMethod, visitInnerClasses, visitJavaClass, visitLineNumberTable, visitLocalVariableTable, visitMethodParameters, visitParameterAnnotationEntry, visitStackMap, visitStackMapEntry

    Methods inherited from class edu.umd.cs.findbugs.visitclass.BetterVisitor

    clone, report, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visit, visitCodeException, visitConstantClass, visitConstantDouble, visitConstantFieldref, visitConstantFloat, visitConstantInteger, visitConstantInterfaceMethodref, visitConstantLong, visitConstantMethodref, visitConstantNameAndType, visitConstantString, visitConstantUtf8, visitConstantValue, visitDeprecated, visitExceptionTable, visitInnerClass, visitLineNumber, visitLocalVariable, visitLocalVariableTypeTable, visitMethod, visitSignature, visitSourceFile, visitSynthetic, visitUnknown

    Methods inherited from class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods inherited from interface org.apache.bcel.classfile.Visitor

    visitConstantDynamic, visitMethodParameter, visitModule, visitModuleExports, visitModuleMainClass, visitModuleOpens, visitModulePackages, visitModuleProvides, visitModuleRequires, visitNestHost, visitNestMembers, visitRecord, visitRecordComponent, visitStackMapType
  • Field Details

    • windowClass

      private static org.apache.bcel.classfile.JavaClass windowClass
    • componentClass

      private static org.apache.bcel.classfile.JavaClass componentClass
    • jcomponentClass

      private static org.apache.bcel.classfile.JavaClass jcomponentClass
    • accessibleClass

      private static org.apache.bcel.classfile.JavaClass accessibleClass
    • clsNFException

      private static ClassNotFoundException clsNFException
    • displayTextMethods

      private static final Map<FQMethod,Integer> displayTextMethods
    • bugReporter

      private final edu.umd.cs.findbugs.BugReporter bugReporter
    • stack

      private edu.umd.cs.findbugs.OpcodeStack stack
    • fieldLabels

      private Set<edu.umd.cs.findbugs.ba.XField> fieldLabels
    • localLabels

      private Map<Integer,edu.umd.cs.findbugs.SourceLineAnnotation> localLabels
  • Constructor Details

    • Section508Compliance

      public Section508Compliance(edu.umd.cs.findbugs.BugReporter bugReporter)
      constructs a S508C detector given the reporter to report bugs on
      Parameters:
      bugReporter - the sync of bug reports
  • Method Details

    • visitClassContext

      public void visitClassContext(edu.umd.cs.findbugs.ba.ClassContext classContext)
      implements the visitor to create and clear the stack
      Specified by:
      visitClassContext in interface edu.umd.cs.findbugs.Detector
      Overrides:
      visitClassContext in class edu.umd.cs.findbugs.BytecodeScanningDetector
      Parameters:
      classContext - the context object of the currently visited class
    • visitField

      public void visitField(org.apache.bcel.classfile.Field obj)
      looks for fields that are JLabels and stores them in a set
      Specified by:
      visitField in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitField in class edu.umd.cs.findbugs.visitclass.BetterVisitor
      Parameters:
      obj - the field object of the current field
    • visitCode

      public void visitCode(org.apache.bcel.classfile.Code obj)
      implements the visitor to reset the stack
      Specified by:
      visitCode in interface org.apache.bcel.classfile.Visitor
      Overrides:
      visitCode in class edu.umd.cs.findbugs.visitclass.PreorderVisitor
      Parameters:
      obj - the context object for the currently visited code block
    • sawOpcode

      public void sawOpcode(int seen)
      implements the visitor to find 508 compliance concerns
      Overrides:
      sawOpcode in class edu.umd.cs.findbugs.visitclass.DismantleBytecode
      Parameters:
      seen - the opcode of the currently parsed instruction
    • processFaultyGuiStrings

      private void processFaultyGuiStrings()
      looks for calls to set a readable string that is generated from a static constant, as these strings are not translatable. also looks for setting readable strings that are appended together. This is likely not to be internationalizable.
    • processNullLayouts

      private void processNullLayouts(String className, String methodName)
      looks for containers where a null layout is installed
      Parameters:
      className - class that a method call is made on
      methodName - name of the method that is called
    • processSetColorOps

      private void processSetColorOps(String methodName) throws ClassNotFoundException
      looks for calls to set the color of components where the color isn't from UIManager
      Parameters:
      methodName - the method that is called
      Throws:
      ClassNotFoundException - if the gui component class can't be found
    • processSetSizeOps

      private void processSetSizeOps(String methodName) throws ClassNotFoundException
      looks for calls to setSize on components, rather than letting the layout manager set them
      Parameters:
      methodName - the method that was called on a component
      Throws:
      ClassNotFoundException - if the gui class wasn't found