Class MutableStaticFields

All Implemented Interfaces:
Detector, Priorities, org.apache.bcel.classfile.Visitor

public class MutableStaticFields extends BytecodeScanningDetector
  • Field Details

    • COLLECTION_SUPERCLASSES

      private static final Set<String> COLLECTION_SUPERCLASSES
    • MUTABLE_COLLECTION_CLASSES

      private static final Set<String> MUTABLE_COLLECTION_CLASSES
    • MUTABLE_COLLECTION_METHODS

      private static final Map<String,Map<String,MutableStaticFields.AllowedParameter>> MUTABLE_COLLECTION_METHODS
    • seen

    • publicClass

      boolean publicClass
    • mutableCollectionJustCreated

      boolean mutableCollectionJustCreated
    • zeroOnTOS

      boolean zeroOnTOS
    • emptyArrayOnTOS

      boolean emptyArrayOnTOS
    • inStaticInitializer

      boolean inStaticInitializer
    • packageName

      String packageName
    • readAnywhere

      Set<XField> readAnywhere
    • unsafeValue

      Set<XField> unsafeValue
    • mutableCollection

      Set<XField> mutableCollection
    • notFinal

      Set<XField> notFinal
    • outsidePackage

      Set<XField> outsidePackage
    • needsRefactoringToBeFinal

      Set<XField> needsRefactoringToBeFinal
    • writtenInMethod

      Set<XField> writtenInMethod
    • writtenTwiceInMethod

      Set<XField> writtenTwiceInMethod
    • firstFieldUse

    • bugReporter

      private final BugReporter bugReporter
    • isEclipseNLS

      private boolean isEclipseNLS
      Eclipse uses reflection to initialize NLS message bundles. Classes which using this mechanism are usually extending org.eclipse.osgi.util.NLS class and contains lots of public static String fields which are used as message Constants. Unfortunately these fields cannot be final, so FB reports tons of warnings for such Eclipse classes.
  • Constructor Details

    • MutableStaticFields

      public MutableStaticFields(BugReporter bugReporter)
  • Method Details

    • extractPackage

      static String extractPackage(String c)
    • visit

      public void visit(org.apache.bcel.classfile.JavaClass obj)
      Overrides:
      visit in class BetterVisitor
    • visit

      public void visit(org.apache.bcel.classfile.Method obj)
      Overrides:
      visit in class BetterVisitor
    • visit

      public void visit(org.apache.bcel.classfile.Code obj)
      Overrides:
      visit in class DismantleBytecode
    • sawOpcode

      public void sawOpcode(int seen)
      Overrides:
      sawOpcode in class DismantleBytecode
    • isCollection

      private boolean isCollection(String signature)
    • interesting

      private boolean interesting(XField f)
    • visit

      public void visit(org.apache.bcel.classfile.Field obj)
      Overrides:
      visit in class BetterVisitor
    • report

      public void report()
      Description copied from interface: Detector
      This method is called after all classes to be visited. It should be used by any detectors which accumulate information over all visited classes to generate results.
      Specified by:
      report in interface Detector
      Overrides:
      report in class BytecodeScanningDetector