/opt/hudson/home/jobs/1-1-site-deploy-perf/workspace/ks-1.1-perf/ks-common/ks-common-impl/target/classes/home/tomcat/.m2/repository/org/apache/maven/reporting/maven-reporting-impl/2.0/maven-reporting-impl-2.0.jar/home/tomcat/.m2/repository/org/codehaus/plexus/plexus-utils/1.5.1/plexus-utils-1.5.1.jar/home/tomcat/.m2/repository/commons-validator/commons-validator/1.1.4/commons-validator-1.1.4.jar/home/tomcat/.m2/repository/oro/oro/2.0.7/oro-2.0.7.jar/home/tomcat/.m2/repository/doxia/doxia-core/1.0-alpha-4/doxia-core-1.0-alpha-4.jar/home/tomcat/.m2/repository/org/apache/maven/shared/maven-doxia-tools/1.0/maven-doxia-tools-1.0.jar/home/tomcat/.m2/repository/commons-io/commons-io/1.4/commons-io-1.4.jar/home/tomcat/.m2/repository/org/apache/maven/doxia/doxia-decoration-model/1.0-alpha-11/doxia-decoration-model-1.0-alpha-11.jar/home/tomcat/.m2/repository/org/codehaus/plexus/plexus-i18n/1.0-beta-7/plexus-i18n-1.0-beta-7.jar/home/tomcat/.m2/repository/com/google/code/findbugs/findbugs-ant/1.3.9/findbugs-ant-1.3.9.jar/home/tomcat/.m2/repository/com/google/code/findbugs/findbugs/1.3.9/findbugs-1.3.9.jar/home/tomcat/.m2/repository/com/google/code/findbugs/bcel/1.3.9/bcel-1.3.9.jar/home/tomcat/.m2/repository/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.jar/home/tomcat/.m2/repository/com/google/code/findbugs/jFormatString/1.3.9/jFormatString-1.3.9.jar/home/tomcat/.m2/repository/com/google/code/findbugs/annotations/1.3.9/annotations-1.3.9.jar/home/tomcat/.m2/repository/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar/home/tomcat/.m2/repository/xml-apis/xml-apis/1.0.b2/xml-apis-1.0.b2.jar/home/tomcat/.m2/repository/jaxen/jaxen/1.1.1/jaxen-1.1.1.jar/home/tomcat/.m2/repository/jdom/jdom/1.0/jdom-1.0.jar/home/tomcat/.m2/repository/xerces/xercesImpl/2.6.2/xercesImpl-2.6.2.jar/home/tomcat/.m2/repository/xom/xom/1.0/xom-1.0.jar/home/tomcat/.m2/repository/xerces/xmlParserAPIs/2.6.2/xmlParserAPIs-2.6.2.jar/home/tomcat/.m2/repository/xalan/xalan/2.6.0/xalan-2.6.0.jar/home/tomcat/.m2/repository/com/ibm/icu/icu4j/2.6.1/icu4j-2.6.1.jar/home/tomcat/.m2/repository/asm/asm/3.1/asm-3.1.jar/home/tomcat/.m2/repository/asm/asm-analysis/3.1/asm-analysis-3.1.jar/home/tomcat/.m2/repository/asm/asm-tree/3.1/asm-tree-3.1.jar/home/tomcat/.m2/repository/asm/asm-commons/3.1/asm-commons-3.1.jar/home/tomcat/.m2/repository/asm/asm-util/3.1/asm-util-3.1.jar/home/tomcat/.m2/repository/asm/asm-xml/3.1/asm-xml-3.1.jar/home/tomcat/.m2/repository/commons-lang/commons-lang/2.4/commons-lang-2.4.jar/home/tomcat/.m2/repository/jgoodies/plastic/1.2.0/plastic-1.2.0.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/gmaven-mojo/1.0-rc-3/gmaven-mojo-1.0-rc-3.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/runtime/gmaven-runtime-api/1.0-rc-3/gmaven-runtime-api-1.0-rc-3.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/feature/gmaven-feature-api/1.0-rc-3/gmaven-feature-api-1.0-rc-3.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/runtime/gmaven-runtime-default/1.0-rc-3/gmaven-runtime-default-1.0-rc-3.jar/home/tomcat/.m2/repository/org/slf4j/slf4j-api/1.5.0/slf4j-api-1.5.0.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/runtime/gmaven-runtime-1.5/1.0-rc-3/gmaven-runtime-1.5-1.0-rc-3.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/feature/gmaven-feature-support/1.0-rc-3/gmaven-feature-support-1.0-rc-3.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/runtime/gmaven-runtime-support/1.0-rc-3/gmaven-runtime-support-1.0-rc-3.jar/home/tomcat/.m2/repository/org/codehaus/groovy/maven/gmaven-common/1.0-rc-3/gmaven-common-1.0-rc-3.jar/home/tomcat/.m2/repository/com/thoughtworks/qdox/qdox/1.6.3/qdox-1.6.3.jar/home/tomcat/.m2/repository/org/codehaus/groovy/groovy-all-minimal/1.5.6/groovy-all-minimal-1.5.6.jar/home/tomcat/.m2/repository/org/apache/ant/ant/1.7.1/ant-1.7.1.jar/home/tomcat/.m2/repository/org/apache/ant/ant-launcher/1.7.1/ant-launcher-1.7.1.jar/home/tomcat/.m2/repository/jline/jline/0.9.94/jline-0.9.94.jar/home/tomcat/.m2/repository/org/codehaus/plexus/plexus-resources/1.0-alpha-4/plexus-resources-1.0-alpha-4.jar/opt/java/apache-maven-2.2.1/lib/maven-2.2.1-uber.jar/home/tomcat/.m2/repository/org/kuali/student/common/ks-common-api/1.1.0-M10-SNAPSHOT/ks-common-api-1.1.0-M10-SNAPSHOT.jar/home/tomcat/.m2/repository/org/kuali/student/common/ks-common-util/1.1.0-M10-SNAPSHOT/ks-common-util-1.1.0-M10-SNAPSHOT.jar/home/tomcat/.m2/repository/javax/persistence/persistence-api/1.0/persistence-api-1.0.jar/home/tomcat/.m2/repository/javax/transaction/jta/1.0.1B/jta-1.0.1B.jar/home/tomcat/.m2/repository/net/sf/ehcache/ehcache/1.4.1/ehcache-1.4.1.jar/home/tomcat/.m2/repository/net/sf/jsr107cache/jsr107cache/1.0/jsr107cache-1.0.jar/home/tomcat/.m2/repository/backport-util-concurrent/backport-util-concurrent/3.1/backport-util-concurrent-3.1.jar/home/tomcat/.m2/repository/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar/home/tomcat/.m2/repository/commons-collections/commons-collections/3.2/commons-collections-3.2.jar/home/tomcat/.m2/repository/org/slf4j/slf4j-api/1.6.0/slf4j-api-1.6.0.jar/home/tomcat/.m2/repository/org/slf4j/slf4j-log4j12/1.6.0/slf4j-log4j12-1.6.0.jar/home/tomcat/.m2/repository/log4j/log4j/1.2.14/log4j-1.2.14.jar/home/tomcat/.m2/repository/org/springframework/spring-core/2.5.6/spring-core-2.5.6.jar/home/tomcat/.m2/repository/org/springframework/spring-aop/2.5.6/spring-aop-2.5.6.jar/home/tomcat/.m2/repository/aopalliance/aopalliance/1.0/aopalliance-1.0.jar/home/tomcat/.m2/repository/org/springframework/spring-beans/2.5.6/spring-beans-2.5.6.jar/home/tomcat/.m2/repository/org/springframework/spring-orm/2.5.6/spring-orm-2.5.6.jar/home/tomcat/.m2/repository/org/springframework/spring-context/2.5.6/spring-context-2.5.6.jar/home/tomcat/.m2/repository/org/springframework/spring-tx/2.5.6/spring-tx-2.5.6.jar/home/tomcat/.m2/repository/org/springframework/spring-webmvc/2.5.6/spring-webmvc-2.5.6.jar/home/tomcat/.m2/repository/org/springframework/spring-context-support/2.5.6/spring-context-support-2.5.6.jar/home/tomcat/.m2/repository/org/springframework/spring-web/2.5.6/spring-web-2.5.6.jar/home/tomcat/.m2/repository/org/aspectj/aspectjrt/1.5.4/aspectjrt-1.5.4.jar/home/tomcat/.m2/repository/org/apache/velocity/velocity-tools/2.0/velocity-tools-2.0.jar/home/tomcat/.m2/repository/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar/home/tomcat/.m2/repository/commons-digester/commons-digester/1.8/commons-digester-1.8.jar/home/tomcat/.m2/repository/commons-chain/commons-chain/1.1/commons-chain-1.1.jar/home/tomcat/.m2/repository/commons-validator/commons-validator/1.3.1/commons-validator-1.3.1.jar/home/tomcat/.m2/repository/oro/oro/2.0.8/oro-2.0.8.jar/home/tomcat/.m2/repository/sslext/sslext/1.2-0/sslext-1.2-0.jar/home/tomcat/.m2/repository/org/apache/struts/struts-core/1.3.8/struts-core-1.3.8.jar/home/tomcat/.m2/repository/antlr/antlr/2.7.7/antlr-2.7.7.jar/home/tomcat/.m2/repository/org/apache/struts/struts-taglib/1.3.8/struts-taglib-1.3.8.jar/home/tomcat/.m2/repository/org/apache/struts/struts-tiles/1.3.8/struts-tiles-1.3.8.jar/home/tomcat/.m2/repository/org/apache/velocity/velocity/1.6.4/velocity-1.6.4.jar/home/tomcat/.m2/repository/commons-lang/commons-lang/2.3/commons-lang-2.3.jar/home/tomcat/.m2/repository/logkit/logkit/2.0/logkit-2.0.jar/home/tomcat/.m2/repository/org/antlr/antlr-runtime/3.1.1/antlr-runtime-3.1.1.jar/home/tomcat/.m2/repository/org/kuali/rice/rice-api/1.0.3/rice-api-1.0.3.jar/home/tomcat/.m2/repository/org/apache/geronimo/specs/geronimo-ws-metadata_2.0_spec/1.1.2/geronimo-ws-metadata_2.0_spec-1.1.2.jar/home/tomcat/.m2/repository/org/apache/geronimo/specs/geronimo-annotation_1.0_spec/1.1.1/geronimo-annotation_1.0_spec-1.1.1.jar/opt/hudson/home/jobs/1-1-site-deploy-perf/workspace/ks-1.1-perf/ks-common/ks-common-impl/src/main/java/opt/hudson/home/jobs/1-1-site-deploy-perf/workspace/ks-1.1-perf/ks-common/ks-common-impl/targetInefficient use of keySet iterator instead of entrySet iteratorMethod org.kuali.student.common.validator.BeanConstraintDataProvider.initialize(Object) makes inefficient use of keySet iterator instead of entrySet iteratorAt BeanConstraintDataProvider.java:[lines 28-102]In class org.kuali.student.common.validator.BeanConstraintDataProviderIn method org.kuali.student.common.validator.BeanConstraintDataProvider.initialize(Object)At BeanConstraintDataProvider.java:[line 57]Redundant comparison of non-null value to nullRedundant comparison of non-null value to null in org.kuali.student.common.validator.DefaultValidatorImpl.validateField(FieldDefinition, ObjectStructureDefinition, ConstraintDataProvider, Stack)At DefaultValidatorImpl.java:[lines 41-867]In class org.kuali.student.common.validator.DefaultValidatorImplIn method org.kuali.student.common.validator.DefaultValidatorImpl.validateField(FieldDefinition, ObjectStructureDefinition, ConstraintDataProvider, Stack)Return value of org.kuali.student.common.validator.ConstraintDataProvider.getValue(String)Redundant null check at DefaultValidatorImpl.java:[line 219]Inconsistent synchronizationInconsistent synchronization of org.kuali.student.common.validator.ValidatorFactory.customValidators; locked 60% of timeAt ValidatorFactory.java:[lines 18-80]In class org.kuali.student.common.validator.ValidatorFactoryIn ValidatorFactory.javaField org.kuali.student.common.validator.ValidatorFactory.customValidatorsSynchronized 60% of the timeUnsynchronized access at ValidatorFactory.java:[line 42]Unsynchronized access at ValidatorFactory.java:[line 46]Synchronized access at ValidatorFactory.java:[line 28]Synchronized access at ValidatorFactory.java:[line 29]Synchronized access at ValidatorFactory.java:[line 32]Synchronized access at ValidatorFactory.java:[line 18]Method with Boolean return type returns explicit nullorg.kuali.student.common.validator.ValidatorUtils.getBoolean(Object) has Boolean return type and returns explicit nullAt ValidatorUtils.java:[lines 24-222]In class org.kuali.student.common.validator.ValidatorUtilsIn method org.kuali.student.common.validator.ValidatorUtils.getBoolean(Object)At ValidatorUtils.java:[line 179]Inefficient use of keySet iterator instead of entrySet iteratorMethod org.kuali.student.common.validator.old.BeanConstraintDataProvider.initialize(Object) makes inefficient use of keySet iterator instead of entrySet iteratorAt BeanConstraintDataProvider.java:[lines 27-88]In class org.kuali.student.common.validator.old.BeanConstraintDataProviderIn method org.kuali.student.common.validator.old.BeanConstraintDataProvider.initialize(Object)At BeanConstraintDataProvider.java:[line 48]Redundant comparison of non-null value to nullRedundant comparison of non-null value to null in org.kuali.student.common.validator.old.Validator.validateField(Field, Type, State, ObjectStructure, ConstraintDataProvider, Stack)At Validator.java:[lines 45-1027]In class org.kuali.student.common.validator.old.ValidatorIn method org.kuali.student.common.validator.old.Validator.validateField(Field, Type, State, ObjectStructure, ConstraintDataProvider, Stack)Return value of org.kuali.student.common.validator.old.ConstraintDataProvider.getValue(String)Redundant null check at Validator.java:[line 265]Nullcheck of value previously dereferencedNullcheck of value at line 452 of value previously dereferenced in org.kuali.student.common.validator.old.Validator.processConstraint(List, ConstraintSelector, Field, Type, State, ObjectStructure, Object, ConstraintDataProvider, Validator$BaseConstraintBean, Stack)At Validator.java:[lines 45-1027]In class org.kuali.student.common.validator.old.ValidatorIn method org.kuali.student.common.validator.old.Validator.processConstraint(List, ConstraintSelector, Field, Type, State, ObjectStructure, Object, ConstraintDataProvider, Validator$BaseConstraintBean, Stack)Value loaded from valueAt Validator.java:[line 435]Redundant null check at Validator.java:[line 452]Method with Boolean return type returns explicit nullorg.kuali.student.common.validator.old.ValidatorUtils.getBoolean(Object) has Boolean return type and returns explicit nullAt ValidatorUtils.java:[lines 26-216]In class org.kuali.student.common.validator.old.ValidatorUtilsIn method org.kuali.student.common.validator.old.ValidatorUtils.getBoolean(Object)At ValidatorUtils.java:[line 176]Class is Serializable, but doesn't define serialVersionUIDorg.kuali.student.core.assembly.data.Data is Serializable; consider declaring a serialVersionUIDAt Data.java:[lines 30-1112]In class org.kuali.student.core.assembly.data.DataAt Data.java:[lines 30-1112]toString method may return nullorg.kuali.student.core.assembly.data.Data$DataValue.toString() may return nullAt Data.java:[lines 72-95]In class org.kuali.student.core.assembly.data.Data$DataValueIn method org.kuali.student.core.assembly.data.Data$DataValue.toString()At Data.java:[line 93]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.assembly.data.Data$DateValue.get() may expose internal representation by returning Data$DateValue.valueAt Data.java:[lines 104-127]In class org.kuali.student.core.assembly.data.Data$DateValueIn method org.kuali.student.core.assembly.data.Data$DateValue.get()In Data.javaField org.kuali.student.core.assembly.data.Data$DateValue.valueAt Data.java:[line 114]May expose internal representation by incorporating reference to mutable objectnew org.kuali.student.core.assembly.data.Data$DateValue(Date) may expose internal representation by storing an externally mutable object into Data$DateValue.valueAt Data.java:[lines 104-127]In class org.kuali.student.core.assembly.data.Data$DateValueIn method new org.kuali.student.core.assembly.data.Data$DateValue(Date)In Data.javaField org.kuali.student.core.assembly.data.Data$DateValue.valueLocal variable named valueAt Data.java:[line 109]toString method may return nullorg.kuali.student.core.assembly.data.Data$DateValue.toString() may return nullAt Data.java:[lines 104-127]In class org.kuali.student.core.assembly.data.Data$DateValueIn method org.kuali.student.core.assembly.data.Data$DateValue.toString()At Data.java:[line 125]toString method may return nullorg.kuali.student.core.assembly.data.Data$DoubleValue.toString() may return nullAt Data.java:[lines 136-159]In class org.kuali.student.core.assembly.data.Data$DoubleValueIn method org.kuali.student.core.assembly.data.Data$DoubleValue.toString()At Data.java:[line 157]toString method may return nullorg.kuali.student.core.assembly.data.Data$FloatValue.toString() may return nullAt Data.java:[lines 168-191]In class org.kuali.student.core.assembly.data.Data$FloatValueIn method org.kuali.student.core.assembly.data.Data$FloatValue.toString()At Data.java:[line 189]toString method may return nullorg.kuali.student.core.assembly.data.Data$IntegerValue.toString() may return nullAt Data.java:[lines 256-279]In class org.kuali.student.core.assembly.data.Data$IntegerValueIn method org.kuali.student.core.assembly.data.Data$IntegerValue.toString()At Data.java:[line 277]toString method may return nullorg.kuali.student.core.assembly.data.Data$LongValue.toString() may return nullAt Data.java:[lines 295-318]In class org.kuali.student.core.assembly.data.Data$LongValueIn method org.kuali.student.core.assembly.data.Data$LongValue.toString()At Data.java:[line 316]toString method may return nullorg.kuali.student.core.assembly.data.Data$ShortValue.toString() may return nullAt Data.java:[lines 341-364]In class org.kuali.student.core.assembly.data.Data$ShortValueIn method org.kuali.student.core.assembly.data.Data$ShortValue.toString()At Data.java:[line 362]toString method may return nullorg.kuali.student.core.assembly.data.Data$TimeValue.toString() may return nullAt Data.java:[lines 494-517]In class org.kuali.student.core.assembly.data.Data$TimeValueIn method org.kuali.student.core.assembly.data.Data$TimeValue.toString()At Data.java:[line 515]toString method may return nullorg.kuali.student.core.assembly.data.Data$TimestampValue.toString() may return nullAt Data.java:[lines 462-485]In class org.kuali.student.core.assembly.data.Data$TimestampValueIn method org.kuali.student.core.assembly.data.Data$TimestampValue.toString()At Data.java:[line 483]Suspicious reference comparisonSuspicious comparison of Integer references in org.kuali.student.core.assembly.dictionary.MetadataFormatter.calcLength(Metadata)At MetadataFormatter.java:[lines 30-605]In class org.kuali.student.core.assembly.dictionary.MetadataFormatterIn method org.kuali.student.core.assembly.dictionary.MetadataFormatter.calcLength(Metadata)At Integer.java:[lines 37-1194]Actual type IntegerReturn value of org.kuali.student.core.assembly.data.MetadataInterrogator.getLargestMinLength()Return value of org.kuali.student.core.assembly.data.MetadataInterrogator.getSmallestMaxLength()At MetadataFormatter.java:[line 594]Load of known null valueLoad of known null value in org.kuali.student.core.assembly.dictionary.MetadataServiceImpl.processCaseConstraint(ConstraintMetadata, CaseConstraint, String, String, String)At MetadataServiceImpl.java:[lines 48-677]In class org.kuali.student.core.assembly.dictionary.MetadataServiceImplIn method org.kuali.student.core.assembly.dictionary.MetadataServiceImpl.processCaseConstraint(ConstraintMetadata, CaseConstraint, String, String, String)At MetadataServiceImpl.java:[line 370]Possible null pointer dereference on path that might be infeasiblePossible null pointer dereference of paramType on path that might be infeasible in org.kuali.student.core.assembly.dictionary.MetadataServiceImpl.matchesType(String, String)At MetadataServiceImpl.java:[lines 48-677]In class org.kuali.student.core.assembly.dictionary.MetadataServiceImplIn method org.kuali.student.core.assembly.dictionary.MetadataServiceImpl.matchesType(String, String)Value loaded from paramTypeDereferenced at MetadataServiceImpl.java:[line 562]Known null at MetadataServiceImpl.java:[line 551]Known null at MetadataServiceImpl.java:[line 559]Method concatenates strings using + in a loopMethod org.kuali.student.core.assembly.dictionary.MetadataServiceImpl.addLookupstoMetadata(String, Metadata, String) concatenates strings using + in a loopAt MetadataServiceImpl.java:[lines 48-677]In class org.kuali.student.core.assembly.dictionary.MetadataServiceImplIn method org.kuali.student.core.assembly.dictionary.MetadataServiceImpl.addLookupstoMetadata(String, Metadata, String)At MetadataServiceImpl.java:[line 593]Method invokes inefficient Number constructor; use static valueOf insteadMethod org.kuali.student.core.assembly.dictionary.MetadataServiceImpl$RecursionCounter.increment(String) invokes inefficient new Integer(int) constructor; use Integer.valueOf(int) insteadAt MetadataServiceImpl.java:[lines 56-80]In class org.kuali.student.core.assembly.dictionary.MetadataServiceImpl$RecursionCounterIn method org.kuali.student.core.assembly.dictionary.MetadataServiceImpl$RecursionCounter.increment(String)Called method new Integer(int)Should call Integer.valueOf(int) insteadAt MetadataServiceImpl.java:[line 65]Dead store to local variableDead store to value in org.kuali.student.core.assembly.dictionary.old.MetadataServiceImpl.convertDefaultValue(Data$DataType, Object)At MetadataServiceImpl.java:[lines 58-483]In class org.kuali.student.core.assembly.dictionary.old.MetadataServiceImplIn method org.kuali.student.core.assembly.dictionary.old.MetadataServiceImpl.convertDefaultValue(Data$DataType, Object)Local variable named valueAt MetadataServiceImpl.java:[line 437]Another occurrence at MetadataServiceImpl.java:[line 440]Another occurrence at MetadataServiceImpl.java:[line 443]Another occurrence at MetadataServiceImpl.java:[line 448]Another occurrence at MetadataServiceImpl.java:[line 455]Another occurrence at MetadataServiceImpl.java:[line 459]Another occurrence at MetadataServiceImpl.java:[line 462]Method invokes inefficient Number constructor; use static valueOf insteadMethod org.kuali.student.core.assembly.dictionary.old.MetadataServiceImpl$RecursionCounter.increment(String) invokes inefficient new Integer(int) constructor; use Integer.valueOf(int) insteadAt MetadataServiceImpl.java:[lines 64-88]In class org.kuali.student.core.assembly.dictionary.old.MetadataServiceImpl$RecursionCounterIn method org.kuali.student.core.assembly.dictionary.old.MetadataServiceImpl$RecursionCounter.increment(String)Called method new Integer(int)Should call Integer.valueOf(int) insteadAt MetadataServiceImpl.java:[line 73]Redundant nullcheck of value known to be nullRedundant nullcheck of metadata which is known to be null in org.kuali.student.core.assembly.transform.TransformationManager.transform(Data, Class)At TransformationManager.java:[lines 14-168]In class org.kuali.student.core.assembly.transform.TransformationManagerIn method org.kuali.student.core.assembly.transform.TransformationManager.transform(Data, Class)Value loaded from metadataRedundant null check at TransformationManager.java:[line 59]Redundant nullcheck of value known to be nullRedundant nullcheck of metadata which is known to be null in org.kuali.student.core.assembly.transform.TransformationManager.transform(Data, Class, Map)At TransformationManager.java:[lines 14-168]In class org.kuali.student.core.assembly.transform.TransformationManagerIn method org.kuali.student.core.assembly.transform.TransformationManager.transform(Data, Class, Map)Value loaded from metadataRedundant null check at TransformationManager.java:[line 79]Method may fail to clean up stream or resourceMethod org.kuali.student.core.dictionary.service.impl.DictionaryCreator.execute(Class, String) may fail to clean up java.io.OutputStreamAt DictionaryCreator.java:[lines 22-325]In class org.kuali.student.core.dictionary.service.impl.DictionaryCreatorIn method org.kuali.student.core.dictionary.service.impl.DictionaryCreator.execute(Class, String)At OutputStream.java:[lines 29-135]Reference type java.io.OutputStream1 instances of obligation remainingObligation to clean up resource created at DictionaryCreator.java:[line 68] is not dischargedPath continues at DictionaryCreator.java:[line 73]Path continues at DictionaryCreator.java:[line 74]Path continues at DictionaryCreator.java:[line 75]Path continues at DictionaryCreator.java:[line 77]Path continues at DictionaryCreator.java:[line 78]Path continues at DictionaryCreator.java:[line 80]Path continues at DictionaryCreator.java:[line 83]Path continues at DictionaryCreator.java:[line 88]Path continues at DictionaryCreator.java:[line 89]Remaining obligations: {OutputStream x 1}Method may fail to close streamorg.kuali.student.core.dictionary.service.impl.DictionaryCreator.execute(Class, String) may fail to close streamAt DictionaryCreator.java:[lines 22-325]In class org.kuali.student.core.dictionary.service.impl.DictionaryCreatorIn method org.kuali.student.core.dictionary.service.impl.DictionaryCreator.execute(Class, String)At OutputStream.java:[lines 29-135]Need to close java.io.OutputStream At DictionaryCreator.java:[line 68]Comparator doesn't implement Serializableorg.kuali.student.core.dictionary.service.impl.DictionaryFormatter$FieldDefinitionNameComparator implements Comparator but not SerializableAt DictionaryFormatter.java:[lines 220-225]In class org.kuali.student.core.dictionary.service.impl.DictionaryFormatter$FieldDefinitionNameComparatorAt DictionaryFormatter.java:[lines 220-225]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl.getDictionaryContext() may expose internal representation by returning DictionaryServiceImpl.dictionaryContextAt DictionaryServiceImpl.java:[lines 20-63]In class org.kuali.student.core.dictionary.service.impl.DictionaryServiceImplIn method org.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl.getDictionaryContext()In DictionaryServiceImpl.javaField org.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl.dictionaryContextAt DictionaryServiceImpl.java:[line 58]May expose internal representation by incorporating reference to mutable objectnew org.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl(String[]) may expose internal representation by storing an externally mutable object into DictionaryServiceImpl.dictionaryContextAt DictionaryServiceImpl.java:[lines 20-63]In class org.kuali.student.core.dictionary.service.impl.DictionaryServiceImplIn method new org.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl(String[])In DictionaryServiceImpl.javaField org.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl.dictionaryContextLocal variable named dictionaryContextAt DictionaryServiceImpl.java:[line 32]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl.setDictionaryContext(String[]) may expose internal representation by storing an externally mutable object into DictionaryServiceImpl.dictionaryContextAt DictionaryServiceImpl.java:[lines 20-63]In class org.kuali.student.core.dictionary.service.impl.DictionaryServiceImplIn method org.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl.setDictionaryContext(String[])In DictionaryServiceImpl.javaField org.kuali.student.core.dictionary.service.impl.DictionaryServiceImpl.dictionaryContextLocal variable named dictionaryContextAt DictionaryServiceImpl.java:[line 62]Double assignment of local variable Double assignment of os in org.kuali.student.core.dictionary.service.impl.DictionaryTesterHelper.doTestOnClass(String, ApplicationContext)At DictionaryTesterHelper.java:[lines 29-163]In class org.kuali.student.core.dictionary.service.impl.DictionaryTesterHelperIn method org.kuali.student.core.dictionary.service.impl.DictionaryTesterHelper.doTestOnClass(String, ApplicationContext)Local variable named osAt DictionaryTesterHelper.java:[line 137]Dead store to local variableDead store to pattern in org.kuali.student.core.dictionary.service.impl.DictionaryValidator.validateValidChars(FieldDefinition, ValidCharsConstraint)At DictionaryValidator.java:[lines 25-402]In class org.kuali.student.core.dictionary.service.impl.DictionaryValidatorIn method org.kuali.student.core.dictionary.service.impl.DictionaryValidator.validateValidChars(FieldDefinition, ValidCharsConstraint)Local variable named patternAt DictionaryValidator.java:[line 311]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl.getDictionaryContext() may expose internal representation by returning DictionaryServiceSpringImpl.dictionaryContextAt DictionaryServiceSpringImpl.java:[lines 40-94]In class org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImplIn method org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl.getDictionaryContext()In DictionaryServiceSpringImpl.javaField org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl.dictionaryContextAt DictionaryServiceSpringImpl.java:[line 89]May expose internal representation by incorporating reference to mutable objectnew org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl(String[]) may expose internal representation by storing an externally mutable object into DictionaryServiceSpringImpl.dictionaryContextAt DictionaryServiceSpringImpl.java:[lines 40-94]In class org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImplIn method new org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl(String[])In DictionaryServiceSpringImpl.javaField org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl.dictionaryContextLocal variable named dictionaryContextAt DictionaryServiceSpringImpl.java:[line 52]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl.setDictionaryContext(String[]) may expose internal representation by storing an externally mutable object into DictionaryServiceSpringImpl.dictionaryContextAt DictionaryServiceSpringImpl.java:[lines 40-94]In class org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImplIn method org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl.setDictionaryContext(String[])In DictionaryServiceSpringImpl.javaField org.kuali.student.core.dictionary.service.impl.old.DictionaryServiceSpringImpl.dictionaryContextLocal variable named dictionaryContextAt DictionaryServiceSpringImpl.java:[line 93]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.entity.BaseType.getEffectiveDate() may expose internal representation by returning BaseType.effectiveDateAt BaseType.java:[lines 15-60]In class org.kuali.student.core.entity.BaseTypeIn method org.kuali.student.core.entity.BaseType.getEffectiveDate()In BaseType.javaField org.kuali.student.core.entity.BaseType.effectiveDateAt BaseType.java:[line 39]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.entity.BaseType.getExpirationDate() may expose internal representation by returning BaseType.expirationDateAt BaseType.java:[lines 15-60]In class org.kuali.student.core.entity.BaseTypeIn method org.kuali.student.core.entity.BaseType.getExpirationDate()In BaseType.javaField org.kuali.student.core.entity.BaseType.expirationDateAt BaseType.java:[line 47]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.entity.BaseType.setEffectiveDate(Date) may expose internal representation by storing an externally mutable object into BaseType.effectiveDateAt BaseType.java:[lines 15-60]In class org.kuali.student.core.entity.BaseTypeIn method org.kuali.student.core.entity.BaseType.setEffectiveDate(Date)In BaseType.javaField org.kuali.student.core.entity.BaseType.effectiveDateLocal variable named effectiveDateAt BaseType.java:[line 43]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.entity.BaseType.setExpirationDate(Date) may expose internal representation by storing an externally mutable object into BaseType.expirationDateAt BaseType.java:[lines 15-60]In class org.kuali.student.core.entity.BaseTypeIn method org.kuali.student.core.entity.BaseType.setExpirationDate(Date)In BaseType.javaField org.kuali.student.core.entity.BaseType.expirationDateLocal variable named expirationDateAt BaseType.java:[line 51]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.entity.Meta.getCreateTime() may expose internal representation by returning Meta.createTimeAt Meta.java:[lines 26-82]In class org.kuali.student.core.entity.MetaIn method org.kuali.student.core.entity.Meta.getCreateTime()In Meta.javaField org.kuali.student.core.entity.Meta.createTimeAt Meta.java:[line 53]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.entity.Meta.getUpdateTime() may expose internal representation by returning Meta.updateTimeAt Meta.java:[lines 26-82]In class org.kuali.student.core.entity.MetaIn method org.kuali.student.core.entity.Meta.getUpdateTime()In Meta.javaField org.kuali.student.core.entity.Meta.updateTimeAt Meta.java:[line 69]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.entity.Meta.setCreateTime(Date) may expose internal representation by storing an externally mutable object into Meta.createTimeAt Meta.java:[lines 26-82]In class org.kuali.student.core.entity.MetaIn method org.kuali.student.core.entity.Meta.setCreateTime(Date)In Meta.javaField org.kuali.student.core.entity.Meta.createTimeLocal variable named createTimeAt Meta.java:[line 57]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.entity.Meta.setUpdateTime(Date) may expose internal representation by storing an externally mutable object into Meta.updateTimeAt Meta.java:[lines 26-82]In class org.kuali.student.core.entity.MetaIn method org.kuali.student.core.entity.Meta.setUpdateTime(Date)In Meta.javaField org.kuali.student.core.entity.Meta.updateTimeLocal variable named updateTimeAt Meta.java:[line 73]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.entity.Version.getCurrentVersionEnd() may expose internal representation by returning Version.currentVersionEndAt Version.java:[lines 11-78]In class org.kuali.student.core.entity.VersionIn method org.kuali.student.core.entity.Version.getCurrentVersionEnd()In Version.javaField org.kuali.student.core.entity.Version.currentVersionEndAt Version.java:[line 41]May expose internal representation by returning reference to mutable objectorg.kuali.student.core.entity.Version.getCurrentVersionStart() may expose internal representation by returning Version.currentVersionStartAt Version.java:[lines 11-78]In class org.kuali.student.core.entity.VersionIn method org.kuali.student.core.entity.Version.getCurrentVersionStart()In Version.javaField org.kuali.student.core.entity.Version.currentVersionStartAt Version.java:[line 33]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.entity.Version.setCurrentVersionEnd(Date) may expose internal representation by storing an externally mutable object into Version.currentVersionEndAt Version.java:[lines 11-78]In class org.kuali.student.core.entity.VersionIn method org.kuali.student.core.entity.Version.setCurrentVersionEnd(Date)In Version.javaField org.kuali.student.core.entity.Version.currentVersionEndLocal variable named currentVersionEndAt Version.java:[line 45]May expose internal representation by incorporating reference to mutable objectorg.kuali.student.core.entity.Version.setCurrentVersionStart(Date) may expose internal representation by storing an externally mutable object into Version.currentVersionStartAt Version.java:[lines 11-78]In class org.kuali.student.core.entity.VersionIn method org.kuali.student.core.entity.Version.setCurrentVersionStart(Date)In Version.javaField org.kuali.student.core.entity.Version.currentVersionStartLocal variable named currentVersionStartAt Version.java:[line 37]Method call passes null for nonnull parameterMethod call in org.kuali.student.core.search.service.impl.CrossSearchManager.meetsCriteria(Map, CrossSearchTypeInfo, JoinCriteriaInfo) passes null for nonnull parameter of compare(CrossSearchManager$DataType, String, String, JoinComparisonInfo$ComparisonType)At CrossSearchManager.java:[lines 56-507]In class org.kuali.student.core.search.service.impl.CrossSearchManagerIn method org.kuali.student.core.search.service.impl.CrossSearchManager.meetsCriteria(Map, CrossSearchTypeInfo, JoinCriteriaInfo)Called method org.kuali.student.core.search.service.impl.CrossSearchManager.compare(CrossSearchManager$DataType, String, String, JoinComparisonInfo$ComparisonType)Argument 2 might be null but must not be nullValue loaded from leftResultValueMethod invoked at CrossSearchManager.java:[line 321]Known null at CrossSearchManager.java:[line 296]Known null at CrossSearchManager.java:[line 297]Method call passes null for nonnull parameterMethod call in org.kuali.student.core.search.service.impl.CrossSearchManager.meetsCriteria(Map, CrossSearchTypeInfo, JoinCriteriaInfo) passes null for nonnull parameter of compare(CrossSearchManager$DataType, String, String, JoinComparisonInfo$ComparisonType)At CrossSearchManager.java:[lines 56-507]In class org.kuali.student.core.search.service.impl.CrossSearchManagerIn method org.kuali.student.core.search.service.impl.CrossSearchManager.meetsCriteria(Map, CrossSearchTypeInfo, JoinCriteriaInfo)Called method org.kuali.student.core.search.service.impl.CrossSearchManager.compare(CrossSearchManager$DataType, String, String, JoinComparisonInfo$ComparisonType)Argument 2 might be null but must not be nullValue loaded from leftResultValueMethod invoked at CrossSearchManager.java:[line 321]Known null at CrossSearchManager.java:[line 318]Method call passes null for nonnull parameterMethod call in org.kuali.student.core.search.service.impl.CrossSearchManager.meetsCriteria(Map, CrossSearchTypeInfo, JoinCriteriaInfo) passes null for nonnull parameter of compare(CrossSearchManager$DataType, String, String, JoinComparisonInfo$ComparisonType)At CrossSearchManager.java:[lines 56-507]In class org.kuali.student.core.search.service.impl.CrossSearchManagerIn method org.kuali.student.core.search.service.impl.CrossSearchManager.meetsCriteria(Map, CrossSearchTypeInfo, JoinCriteriaInfo)Called method org.kuali.student.core.search.service.impl.CrossSearchManager.compare(CrossSearchManager$DataType, String, String, JoinComparisonInfo$ComparisonType)Argument 3 might be null but must not be nullValue loaded from rightResultValueMethod invoked at CrossSearchManager.java:[line 321]Known null at CrossSearchManager.java:[line 318]Method call passes null for nonnull parameterMethod call in org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow) passes null for nonnull parameter of Integer.parseInt(String)At CrossSearchManager.java:[lines 161-225]In class org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparatorIn method org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow)Called method Integer.parseInt(String)Argument 1 might be null but must not be nullValue loaded from v1Method invoked at CrossSearchManager.java:[line 194]Known null at CrossSearchManager.java:[line 179]Method call passes null for nonnull parameterMethod call in org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow) passes null for nonnull parameter of Integer.parseInt(String)At CrossSearchManager.java:[lines 161-225]In class org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparatorIn method org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow)Called method Integer.parseInt(String)Argument 1 might be null but must not be nullValue loaded from v2Method invoked at CrossSearchManager.java:[line 195]Known null at CrossSearchManager.java:[line 185]Method call passes null for nonnull parameterMethod call in org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow) passes null for nonnull parameter of java.text.DateFormat.parse(String)At CrossSearchManager.java:[lines 161-225]In class org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparatorIn method org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow)Called method java.text.DateFormat.parse(String)Argument 1 might be null but must not be nullValue loaded from v1Method invoked at CrossSearchManager.java:[line 206]Known null at CrossSearchManager.java:[line 198]Method call passes null for nonnull parameterMethod call in org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow) passes null for nonnull parameter of java.text.DateFormat.parse(String)At CrossSearchManager.java:[lines 161-225]In class org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparatorIn method org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator.compare(SearchResultRow, SearchResultRow)Called method java.text.DateFormat.parse(String)Argument 1 might be null but must not be nullValue loaded from v2Method invoked at CrossSearchManager.java:[line 207]Known null at CrossSearchManager.java:[line 198]Comparator doesn't implement Serializableorg.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparator implements Comparator but not SerializableAt CrossSearchManager.java:[lines 161-225]In class org.kuali.student.core.search.service.impl.CrossSearchManager$SearchResultRowComparatorAt CrossSearchManager.java:[lines 161-225]Unused fieldUnused field: org.kuali.student.core.search.service.impl.SearchConfigFormatter.osAt SearchConfigFormatter.java:[lines 12-247]In class org.kuali.student.core.search.service.impl.SearchConfigFormatterIn SearchConfigFormatter.javaField org.kuali.student.core.search.service.impl.SearchConfigFormatter.osIn SearchConfigFormatter.javaUnread fieldUnread field: org.kuali.student.core.search.service.impl.SearchConfigValidator.queryMapAt SearchConfigValidator.java:[lines 18-27]In class org.kuali.student.core.search.service.impl.SearchConfigValidatorIn SearchConfigValidator.javaField org.kuali.student.core.search.service.impl.SearchConfigValidator.queryMapAt SearchConfigValidator.java:[line 20]Unread fieldUnread field: org.kuali.student.core.search.service.impl.SearchConfigValidator.searchInfoTypeMapAt SearchConfigValidator.java:[lines 18-27]In class org.kuali.student.core.search.service.impl.SearchConfigValidatorIn SearchConfigValidator.javaField org.kuali.student.core.search.service.impl.SearchConfigValidator.searchInfoTypeMapAt SearchConfigValidator.java:[line 19]Malicious code vulnerabilityDodgyBad practiceCorrectnessPerformanceMultithreaded correctnessExperimentalMethod with Boolean return type returns explicit null
<p>
A method that returns either Boolean.TRUE, Boolean.FALSE or null is an accident waiting to happen.
This method can be invoked as though it returned a value of type boolean, and
the compiler will insert automatic unboxing of the Boolean value. If a null value is returned,
this will result in a NullPointerException.
</p>
Inconsistent synchronization
<p> The fields of this class appear to be accessed inconsistently with respect
to synchronization. This bug report indicates that the bug pattern detector
judged that
</p>
<ul>
<li> The class contains a mix of locked and unlocked accesses,</li>
<li> At least one locked access was performed by one of the class's own methods, and</li>
<li> The number of unsynchronized field accesses (reads and writes) was no more than
one third of all accesses, with writes being weighed twice as high as reads</li>
</ul>
<p> A typical bug matching this bug pattern is forgetting to synchronize
one of the methods in a class that is intended to be thread-safe.</p>
<p> You can select the nodes labeled "Unsynchronized access" to show the
code locations where the detector believed that a field was accessed
without synchronization.</p>
<p> Note that there are various sources of inaccuracy in this detector;
for example, the detector cannot statically detect all situations in which
a lock is held. Also, even when the detector is accurate in
distinguishing locked vs. unlocked accesses, the code in question may still
be correct.</p>
Double assignment of local variable
<p> This method contains a double assignment of a local variable; e.g.
</p>
<pre>
public void foo() {
int x,y;
x = x = 17;
}
</pre>
<p>Assigning the same value to a variable twice is useless, and may indicate a logic error or typo.</p>
Comparator doesn't implement Serializable
<p> This class implements the <code>Comparator</code> interface. You
should consider whether or not it should also implement the <code>Serializable</code>
interface. If a comparator is used to construct an ordered collection
such as a <code>TreeMap</code>, then the <code>TreeMap</code>
will be serializable only if the comparator is also serializable.
As most comparators have little or no state, making them serializable
is generally easy and good defensive programming.
</p>
Inefficient use of keySet iterator instead of entrySet iterator
<p> This method accesses the value of a Map entry, using a key that was retrieved from
a keySet iterator. It is more efficient to use an iterator on the entrySet of the map, to avoid the
Map.get(key) lookup.</p>
Class is Serializable, but doesn't define serialVersionUID
<p> This class implements the <code>Serializable</code> interface, but does
not define a <code>serialVersionUID</code> field.
A change as simple as adding a reference to a .class object
will add synthetic fields to the class,
which will unfortunately change the implicit
serialVersionUID (e.g., adding a reference to <code>String.class</code>
will generate a static field <code>class$java$lang$String</code>).
Also, different source code to bytecode compilers may use different
naming conventions for synthetic variables generated for
references to class objects or inner classes.
To ensure interoperability of Serializable across versions,
consider adding an explicit serialVersionUID.</p>
May expose internal representation by returning reference to mutable object
<p> Returning a reference to a mutable object value stored in one of the object's fields
exposes the internal representation of the object.
If instances
are accessed by untrusted code, and unchecked changes to
the mutable object would compromise security or other
important properties, you will need to do something different.
Returning a new copy of the object is better approach in many situations.</p>
Unused field
<p> This field is never used. Consider removing it from the class.</p>
Nullcheck of value previously dereferenced
<p> A value is checked here to see whether it is null, but this value can't
be null because it was previously dereferenced and if it were null a null pointer
exception would have occurred at the earlier dereference.
Essentially, this code and the previous dereference
disagree as to whether this value is allowed to be null. Either the check is redundant
or the previous dereference is erroneous.</p>
toString method may return null
<p>
This toString method seems to return null in some circumstances. A liberal reading of the
spec could be interpreted as allowing this, but it is probably a bad idea and could cause
other code to break. Return the empty string or some other appropriate string rather than null.
</p>
Suspicious reference comparison
<p> This method compares two reference values using the == or != operator,
where the correct way to compare instances of this type is generally
with the equals() method.
It is possible to create distinct instances that are equal but do not compare as == since
they are different objects.
Examples of classes which should generally
not be compared by reference are java.lang.Integer, java.lang.Float, etc.</p>
May expose internal representation by incorporating reference to mutable object
<p> This code stores a reference to an externally mutable object into the
internal representation of the object.
If instances
are accessed by untrusted code, and unchecked changes to
the mutable object would compromise security or other
important properties, you will need to do something different.
Storing a copy of the object is better approach in many situations.</p>
Method may fail to clean up stream or resource
<p>
This method may fail to clean up (close, dispose of) a stream,
database object, or other
resource requiring an explicit cleanup operation.
</p>
<p>
In general, if a method opens a stream or other resource,
the method should use a try/finally block to ensure that
the stream or resource is cleaned up before the method
returns.
</p>
<p>
This bug pattern is essentially the same as the
OS_OPEN_STREAM and ODR_OPEN_DATABASE_RESOURCE
bug patterns, but is based on a different
(and hopefully better) static analysis technique.
We are interested is getting feedback about the
usefulness of this bug pattern.
To send feedback, either:
</p>
<ul>
<li>send email to findbugs@cs.umd.edu</li>
<li>file a bug report: <a href="http://findbugs.sourceforge.net/reportingBugs.html">http://findbugs.sourceforge.net/reportingBugs.html</a></li>
</ul>
<p>
In particular,
the false-positive suppression heuristics for this
bug pattern have not been extensively tuned, so
reports about false positives are helpful to us.
</p>
<p>
See Weimer and Necula, <i>Finding and Preventing Run-Time Error Handling Mistakes</i>, for
a description of the analysis technique.
</p>
Unread field
<p> This field is never read. Consider removing it from the class.</p>
Redundant comparison of non-null value to null
<p> This method contains a reference known to be non-null with another reference
known to be null.</p>
Method may fail to close stream
<p> The method creates an IO stream object, does not assign it to any
fields, pass it to other methods that might close it,
or return it, and does not appear to close
the stream on all paths out of the method. This may result in
a file descriptor leak. It is generally a good
idea to use a <code>finally</code> block to ensure that streams are
closed.</p>
Method call passes null for nonnull parameter
<p>
This method call passes a null value for a nonnull method parameter.
Either the parameter is annotated as a parameter that should
always be nonnull, or analysis has shown that it will always be
dereferenced.
</p>
Method invokes inefficient Number constructor; use static valueOf instead
<p>
Using <code>new Integer(int)</code> is guaranteed to always result in a new object whereas
<code>Integer.valueOf(int)</code> allows caching of values to be done by the compiler, class library, or JVM.
Using of cached values avoids object allocation and the code will be faster.
</p>
<p>
Values between -128 and 127 are guaranteed to have corresponding cached instances
and using <code>valueOf</code> is approximately 3.5 times faster than using constructor.
For values outside the constant range the performance of both styles is the same.
</p>
<p>
Unless the class must be compatible with JVMs predating Java 1.5,
use either autoboxing or the <code>valueOf()</code> method when creating instances of
<code>Long</code>, <code>Integer</code>, <code>Short</code>, <code>Character</code>, and <code>Byte</code>.
</p>
Redundant nullcheck of value known to be null
<p> This method contains a redundant check of a known null value against
the constant null.</p>
Load of known null value
<p> The variable referenced at this point is known to be null due to an earlier
check against null. Although this is valid, it might be a mistake (perhaps you
intended to refer to a different variable, or perhaps the earlier check to see if the
variable is null should have been a check to see if it was nonnull).
</p>
Method concatenates strings using + in a loop
<p> The method seems to be building a String using concatenation in a loop.
In each iteration, the String is converted to a StringBuffer/StringBuilder,
appended to, and converted back to a String.
This can lead to a cost quadratic in the number of iterations,
as the growing string is recopied in each iteration. </p>
<p>Better performance can be obtained by using
a StringBuffer (or StringBuilder in Java 1.5) explicitly.</p>
<p> For example:</p>
<pre>
// This is bad
String s = "";
for (int i = 0; i < field.length; ++i) {
s = s + field[i];
}
// This is better
StringBuffer buf = new StringBuffer();
for (int i = 0; i < field.length; ++i) {
buf.append(field[i]);
}
String s = buf.toString();
</pre>
Dead store to local variable
<p>
This instruction assigns a value to a local variable,
but the value is not read or used in any subsequent instruction.
Often, this indicates an error, because the value computed is never
used.
</p>
<p>
Note that Sun's javac compiler often generates dead stores for
final local variables. Because FindBugs is a bytecode-based tool,
there is no easy way to eliminate these false positives.
</p>
Possible null pointer dereference on path that might be infeasible
<p> There is a branch of statement that, <em>if executed,</em> guarantees that
a null value will be dereferenced, which
would generate a <code>NullPointerException</code> when the code is executed.
Of course, the problem might be that the branch or statement is infeasible and that
the null pointer exception can't ever be executed; deciding that is beyond the ability of FindBugs.
Due to the fact that this value had been previously tested for nullness, this is a definite possibility.
</p>
String concatenation in loop using + operatorIncorrect definition of Serializable classQuestionable Boxing of primitive valueInefficient Map IteratorQuestionable use of reference equality rather than calling equalsStoring reference to mutable objectDead local storeUnsatisfied obligation to clean up stream or resourceStream not closed on all pathsInconsistent synchronizationNull pointer dereferenceUnused fieldUnread fieldRedundant comparison to nullSerializable class with no Version IDUseless self-operationMethod returning array may expose internal representationorg.springframework.security.Authenticationorg.springframework.security.context.SecurityContextorg.springframework.security.context.SecurityContextHolderorg.springframework.security.userdetails.UserDetails