Hi all,
The other day I found a case in a particular class where an argument for
a constructor was actually not used. I found that was really confusing.
So I thought: is there not a way to find these kinds of "bugs"
automatically?
That's how I stumbled upon an open source (LGPL, I think) eclipse plugin
which .. finds bugs for you! It's called 'findbugs'
(http://findbugs.sourceforge.net/). Installation instructions are at
http://findbugs.sourceforge.net/manual/eclipse.html.
It works like this:
- select project
- select "find bugs"
.. and off you go, it finds bugs. In the case of jetspeed it found 566
bugs to be exact, which it categorizes in degrees of seriousness. 73 are
flagged as "high prio ". I attached these problems in a logfile attached
to this mail. I would highly recommend installing that plugin from what
I've seen so far.
The nastiest bugs I found:
- nullpointer dereference
- possible infinite loop
- comparing strings with the == operator
These three are in the logfile.
If anyone knows better plugins, or has suggestions I'm glad to hear
about it.
regards,
Dennis Dam
Severity and Description Path Resource Location
Creation Time Id
H B ES: Comparison of String parameter using == or != in
org.apache.jetspeed.capabilities.impl.CapabilityMapImpl.hasCapability(String)
jetspeed-2/components/capability/src/java/org/apache/jetspeed/capabilities/impl
CapabilityMapImpl.java line 185 1180475631635 7871
H B ES: Comparison of String parameter using == or != in
org.apache.jetspeed.capabilities.impl.CapabilityMapImpl.supportsMediaType(String)
jetspeed-2/components/capability/src/java/org/apache/jetspeed/capabilities/impl
CapabilityMapImpl.java line 231 1180475631635 7872
H B ES: Comparison of String parameter using == or != in
org.apache.jetspeed.serializer.objects.JSPermission.getClassForType(String)
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 80 1180475633214 8301
H B HE: org.apache.jetspeed.capabilities.impl.ClientImpl defines equals and
uses Object.hashCode()
jetspeed-2/components/capability/src/java/org/apache/jetspeed/capabilities/impl
ClientImpl.java line 58 1180475631635 7876
H B HE: org.apache.jetspeed.capabilities.impl.MediaTypeImpl defines equals and
uses Object.hashCode()
jetspeed-2/components/capability/src/java/org/apache/jetspeed/capabilities/impl
MediaTypeImpl.java line 67 1180475631635 7879
H B HE: org.apache.jetspeed.cluster.NodeInformationImpl defines equals and uses
Object.hashCode()
jetspeed-2/components/portal/src/java/org/apache/jetspeed/cluster
NodeInformationImpl.java line 90 1180475631651 7886
H B HE:
org.apache.jetspeed.components.portletregistry.MutablePortletApplicationProxy
defines equals and uses Object.hashCode()
jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletregistry
MutablePortletApplicationProxy.java line 30 1180475631823 7912
H B HE: org.apache.jetspeed.i18n.KeyedMessage defines equals and uses
Object.hashCode() jetspeed-2/jetspeed-api/src/java/org/apache/jetspeed/i18n
KeyedMessage.java line 549 1180475632792 7994
H B HE: org.apache.jetspeed.portlet.webcontent.WebContentHistoryPage defines
equals and uses Object.hashCode()
jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/webcontent
WebContentHistoryPage.java line 65 1180475632948 8109
H B HE: org.apache.jetspeed.portlets.layout.LayoutEvent defines equals and uses
Object.hashCode()
jetspeed-2/layout-portlets/src/java/org/apache/jetspeed/portlets/layout
LayoutEvent.java line 119 1180475632964 8120
H B HE: org.apache.jetspeed.prefs.om.impl.NodeImpl defines equals and uses
Object.hashCode()
jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/om/impl
NodeImpl.java line 243 1180475633073 8211
H B HE: org.apache.jetspeed.profiler.rules.impl.RuleCriterionImpl defines
equals and uses Object.hashCode()
jetspeed-2/components/profiler/src/java/org/apache/jetspeed/profiler/rules/impl
RuleCriterionImpl.java line 56 1180475633104 8216
H B HE: org.apache.jetspeed.security.om.impl.InternalCredentialImpl defines
equals and uses Object.hashCode()
jetspeed-2/components/security/src/java/org/apache/jetspeed/security/om/impl
InternalCredentialImpl.java line 359 1180475633136 8243
H B HE: org.apache.jetspeed.security.om.impl.InternalGroupPrincipalImpl defines
equals and uses Object.hashCode()
jetspeed-2/components/security/src/java/org/apache/jetspeed/security/om/impl
InternalGroupPrincipalImpl.java line 96 1180475633136 8244
H B HE: org.apache.jetspeed.security.om.impl.InternalPermissionImpl defines
equals and uses Object.hashCode()
jetspeed-2/components/security/src/java/org/apache/jetspeed/security/om/impl
InternalPermissionImpl.java line 188 1180475633136 8245
H B HE: org.apache.jetspeed.security.om.impl.InternalRolePrincipalImpl defines
equals and uses Object.hashCode()
jetspeed-2/components/security/src/java/org/apache/jetspeed/security/om/impl
InternalRolePrincipalImpl.java line 96 1180475633136 8246
H B HE: org.apache.jetspeed.security.om.impl.InternalUserPrincipalImpl defines
equals and uses Object.hashCode()
jetspeed-2/components/security/src/java/org/apache/jetspeed/security/om/impl
InternalUserPrincipalImpl.java line 121 1180475633136 8247
H B HE: org.apache.jetspeed.statistics.impl.UserStatsImpl defines equals and
uses Object.hashCode()
jetspeed-2/components/statistics/src/java/org/apache/jetspeed/statistics/impl
UserStatsImpl.java line 112 1180475633261 8343
H B HE: org.apache.jetspeed.util.MimeType defines equals and uses
Object.hashCode()
jetspeed-2/components/portal/src/java/org/apache/jetspeed/util MimeType.java
line 131 1180475633276 8353
H B HE: org.apache.jetspeed.webapp.logging.IsolatedLog4JLogger defines equals
and uses Object.hashCode()
jetspeed-2/components/webapp-logging/src/java/org/apache/jetspeed/webapp/logging
IsolatedLog4JLogger.java line 180 1180475633292 8370
H B Se: Class org.apache.jetspeed.om.impl.LanguageSetImpl defines non-transient
non-serializable instance field classLoader
jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/impl
LanguageSetImpl.java line 46 1180475632886 8040
H B Se: Class
org.apache.jetspeed.om.portlet.impl.PortletApplicationDefinitionImpl defines
non-transient non-serializable instance field oid
jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/portlet/impl
PortletApplicationDefinitionImpl.java line 64 1180475632901 8059
H B Se: Class org.apache.jetspeed.om.portlet.impl.PortletDefinitionImpl defines
non-transient non-serializable instance field oid
jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/portlet/impl
PortletDefinitionImpl.java line 99 1180475632901 8064
H B Se: Class org.apache.jetspeed.om.portlet.impl.PortletDefinitionImpl defines
non-transient non-serializable instance field preferenceSet
jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/portlet/impl
PortletDefinitionImpl.java line 133 1180475632901 8065
H B Se: Class org.apache.jetspeed.om.servlet.impl.WebApplicationDefinitionImpl
defines non-transient non-serializable instance field oid
jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/servlet/impl
WebApplicationDefinitionImpl.java line 59 1180475632917 8072
H B Se: Class org.apache.jetspeed.om.window.impl.PortletWindowImpl defines
non-transient non-serializable instance field portletEntity
jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/window/impl
PortletWindowImpl.java line 41 1180475632917 8075
H B Se: Class org.apache.jetspeed.security.PolicyWrapper defines non-transient
non-serializable instance field policy
jetspeed-2/components/security/src/java/org/apache/jetspeed/security
PolicyWrapper.java line 35 1180475633136 8238
H B Se: The field
org.apache.jetspeed.portalsite.impl.PortalSiteSessionContextImpl.folderPageHistory
is transient but isn't set by deserialization
jetspeed-2/components/portal-site/src/java/org/apache/jetspeed/portalsite/impl
PortalSiteSessionContextImpl.java line 102 1180475632948 8101
H B Se: The field
org.apache.jetspeed.portlet.webcontent.WebContentResource.content is transient
but isn't set by deserialization
jetspeed-2/components/web-content/src/java/org/apache/jetspeed/portlet/webcontent
WebContentResource.java line 32 1180475632964 8112
H B Se: The field
org.apache.jetspeed.portlets.profiler.ProfileCriterionForm.fallbackTypes is
transient but isn't set by deserialization
jetspeed-2/applications/j2-admin/src/java/org/apache/jetspeed/portlets/profiler
ProfileCriterionForm.java line 73 1180475632979 8132
H B Se: The field
org.apache.jetspeed.portlets.profiler.ProfileCriterionForm.resolvers is
transient but isn't set by deserialization
jetspeed-2/applications/j2-admin/src/java/org/apache/jetspeed/portlets/profiler
ProfileCriterionForm.java line 50 1180475632979 8133
H B Se: The field
org.apache.jetspeed.portlets.profiler.ProfileRuleForm.classnames is transient
but isn't set by deserialization
jetspeed-2/applications/j2-admin/src/java/org/apache/jetspeed/portlets/profiler
ProfileRuleForm.java line 44 1180475632995 8136
H B Se: The field org.apache.portals.gems.browser.DatabaseBrowserIterator.log
is transient but isn't set by deserialization
jetspeed-2/applications/gems/src/java/org/apache/portals/gems/browser
DatabaseBrowserIterator.java line 37 1180475633308 8394
H C EC: Call to equals() comparing unrelated class and interface in
org.apache.jetspeed.decoration.DecorationFactoryImpl.getDecoration(Page,
Fragment, RequestContext)
jetspeed-2/components/portal/src/java/org/apache/jetspeed/decoration
DecorationFactoryImpl.java line 142 1180475632120 7944
H C EC: Call to equals() comparing unrelated class and interface in
org.apache.jetspeed.portlets.rpad.RepositoryConfigHandler.endElement(String,
String, String)
jetspeed-2/applications/j2-admin/src/java/org/apache/jetspeed/portlets/rpad
RepositoryConfigHandler.java line 129 1180475633011 8158
H C HE: org.apache.jetspeed.webapp.logging.IsolatedLog4JLogger doesn't define a
hashCode() method but is used in a hashed data structure
jetspeed-2/components/webapp-logging/src/java/org/apache/jetspeed/webapp/logging
IsolatedLog4JLogger.java line 143 1180475633292 8371
H C IL: There is an apparent infinite recursive loop in
org.apache.jetspeed.om.preference.impl.PrefsPreference.cloneValues()
jetspeed-2/components/registry/src/java/org/apache/jetspeed/om/preference/impl
PrefsPreference.java line 464 1180475632901 8068
H C MF: Field GetPortletsAction.log masks field in superclass
org.apache.jetspeed.layout.impl.BasePortletAction
jetspeed-2/components/portal/src/java/org/apache/jetspeed/layout/impl
GetPortletsAction.java line 58 1180475632792 7998
H C MF: Field TestSSOComponent.gms masks field in superclass
org.apache.jetspeed.security.util.test.AbstractSecurityTestcase
jetspeed-2/components/sso/src/test/org/apache/jetspeed/sso
TestSSOComponent.java line 76 1180475633245 8321
H C MF: Field TestSSOComponent.ums masks field in superclass
org.apache.jetspeed.security.util.test.AbstractSecurityTestcase
jetspeed-2/components/sso/src/test/org/apache/jetspeed/sso
TestSSOComponent.java line 73 1180475633245 8322
H C Nm: VERY confusing to have methods
org.apache.jetspeed.om.page.TestPageObjectModel.setup() and
junit.framework.TestCase.setUp()
jetspeed-2/components/page-manager/src/test/org/apache/jetspeed/om/page
TestPageObjectModel.java line 60 1180475632886 8045
H C NP: ? could be null and is guaranteed to be dereferenced in
org.apache.jetspeed.locator.JetspeedTemplateLocator.locateTemplate(LocatorDescriptor,
String) jetspeed-2/components/locator/src/java/org/apache/jetspeed/locator
JetspeedTemplateLocator.java line 212 1180475632854 8010
H C NP: Null pointer dereference of pa in
org.apache.jetspeed.portlets.palm.PortletApplicationLifecycleManager.processAction(ActionRequest,
ActionResponse)
jetspeed-2/applications/j2-admin/src/java/org/apache/jetspeed/portlets/palm
PortletApplicationLifecycleManager.java line 121 1180475632964 8125
H C RCN: Nullcheck of document at line 505 of value previously dereferenced in
org.apache.jetspeed.page.document.psml.CastorFileSystemDocumentHandler.unmarshallDocument(Class,
String, String)
jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/document/psml
CastorFileSystemDocumentHandler.java line 466 1180475632932
8088
H C UMAC: Uncallable method
org.apache.jetspeed.serializer.objects.JSNVPElement$1.isReferencable() defined
in anonymous class
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSNVPElement.java line 1 1180475633214 8300
H D DLS: Dead store to applicationScopeAttribute in
org.apache.jetspeed.demo.simple.AttributeScopeServlet.processAction(ActionRequest,
ActionResponse)
jetspeed-2/applications/demo/src/java/org/apache/jetspeed/demo/simple
AttributeScopeServlet.java line 120 1180475632464 7950
H D DLS: Dead store to lastGuess in
org.apache.jetspeed.demo.simple.PickANumberPortlet.doView(RenderRequest,
RenderResponse)
jetspeed-2/applications/demo/src/java/org/apache/jetspeed/demo/simple
PickANumberPortlet.java line 151 1180475632526 7958
H D ST: Write to static field
org.apache.jetspeed.components.portletentity.PortletEntityImpl.pac from
instance method
org.apache.jetspeed.components.portletentity.PersistenceBrokerPortletEntityAccess.setEntityAccessProxy(PortletEntityAccessComponent)
jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletentity
PersistenceBrokerPortletEntityAccess.java line 102
1180475631651 7900
H D ST: Write to static field
org.apache.jetspeed.components.portletentity.PortletEntityImpl.rcc from
instance method
org.apache.jetspeed.components.portletentity.PersistenceBrokerPortletEntityAccess.PersistenceBrokerPortletEntityAccess(PortletRegistry,
RequestContextComponent, boolean)
jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletentity
PersistenceBrokerPortletEntityAccess.java line 96 1180475631651 7898
H D ST: Write to static field
org.apache.jetspeed.components.portletentity.PortletEntityImpl.rcc from
instance method
org.apache.jetspeed.components.portletentity.PersistenceBrokerPortletEntityAccess.PersistenceBrokerPortletEntityAccess(PortletRegistry,
RequestContextComponent)
jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletentity
PersistenceBrokerPortletEntityAccess.java line 88 1180475631651 7896
H D ST: Write to static field
org.apache.jetspeed.components.portletentity.PortletEntityImpl.registry from
instance method
org.apache.jetspeed.components.portletentity.PersistenceBrokerPortletEntityAccess.PersistenceBrokerPortletEntityAccess(PortletRegistry,
RequestContextComponent, boolean)
jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletentity
PersistenceBrokerPortletEntityAccess.java line 95 1180475631651 7899
H D ST: Write to static field
org.apache.jetspeed.components.portletentity.PortletEntityImpl.registry from
instance method
org.apache.jetspeed.components.portletentity.PersistenceBrokerPortletEntityAccess.PersistenceBrokerPortletEntityAccess(PortletRegistry,
RequestContextComponent)
jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletentity
PersistenceBrokerPortletEntityAccess.java line 87 1180475631651 7897
H D ST: Write to static field
org.apache.jetspeed.components.portletentity.PortletEntityImpl.registry from
instance method
org.apache.jetspeed.components.portletentity.PersistenceBrokerPortletEntityAccess.PersistenceBrokerPortletEntityAccess(PortletRegistry)
jetspeed-2/components/registry/src/java/org/apache/jetspeed/components/portletentity
PersistenceBrokerPortletEntityAccess.java line 80 1180475631651 7895
H D ST: Write to static field
org.apache.jetspeed.prefs.impl.PreferencesFactoryImpl.prefsProvider from
instance method
org.apache.jetspeed.prefs.impl.PreferencesFactoryImpl.setPrefsProvider(PreferencesProvider)
jetspeed-2/components/prefs/src/java/org/apache/jetspeed/prefs/impl
PreferencesFactoryImpl.java line 97 1180475633073 8207
H D ST: Write to static field
org.apache.jetspeed.security.impl.LoginModuleProxyImpl.loginModuleProxy from
instance method
org.apache.jetspeed.security.impl.LoginModuleProxyImpl.LoginModuleProxyImpl(UserManager,
String)
jetspeed-2/components/security/src/java/org/apache/jetspeed/security/impl
LoginModuleProxyImpl.java line 59 1180475633136 8239
H D ST: Write to static field
org.apache.jetspeed.services.JetspeedPortletServices.singleton from instance
method
org.apache.jetspeed.services.JetspeedPortletServices.JetspeedPortletServices(Map)
jetspeed-2/commons/src/java/org/apache/jetspeed/services
JetspeedPortletServices.java line 50 1180475633229 8314
H D ST: Write to static field
org.apache.jetspeed.sso.TestSSOComponent.ssoBroker from instance method
org.apache.jetspeed.sso.TestSSOComponent.setUp()
jetspeed-2/components/sso/src/test/org/apache/jetspeed/sso
TestSSOComponent.java line 87 1180475633245 8323
H P Dm: org.apache.jetspeed.engine.JetspeedEngine.shutdown() forces garbage
collection; extremely dubious except in benchmarking code
jetspeed-2/components/portal/src/java/org/apache/jetspeed/engine
JetspeedEngine.java line 174 1180475632667 7975
H V MS: org.apache.jetspeed.om.folder.psml.FolderMetaDataImpl.DOCUMENT_TYPE
isn't final but should be
jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/om/folder/psml
FolderMetaDataImpl.java line 41 1180475632886 8036
H V MS:
org.apache.jetspeed.page.impl.DatabasePageManagerCache.transactionedOperations
isn't final but should be
jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page/impl
DatabasePageManagerCache.java line 428 1180475632932 8093
H V MS: org.apache.jetspeed.page.PageManagerUtils.log isn't final but should be
jetspeed-2/components/page-manager/src/java/org/apache/jetspeed/page
PageManagerUtils.java line 46 1180475632932 8083
H V MS:
org.apache.jetspeed.security.spi.impl.PasswordHistoryInterceptor.HISTORICAL_PASSWORD_CREDENTIAL
isn't final but should be
jetspeed-2/components/security/src/java/org/apache/jetspeed/security/spi/impl
PasswordHistoryInterceptor.java line 58 1180475633136 8249
H V MS: org.apache.jetspeed.serializer.objects.JSPermission.TYPE_FOLDER isn't
final but should be
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 63 1180475633214 8302
H V MS: org.apache.jetspeed.serializer.objects.JSPermission.TYPE_FRAGMENT isn't
final but should be
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 65 1180475633214 8303
H V MS: org.apache.jetspeed.serializer.objects.JSPermission.TYPE_PAGE isn't
final but should be
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 67 1180475633214 8304
H V MS: org.apache.jetspeed.serializer.objects.JSPermission.TYPE_PORTAL isn't
final but should be
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 74 1180475633214 8305
H V MS: org.apache.jetspeed.serializer.objects.JSPermission.TYPE_PORTALRESOURCE
isn't final but should be
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 69 1180475633214 8306
H V MS:
org.apache.jetspeed.serializer.objects.JSPermission.TYPE_PORTALRESOURCECOLLECTION
isn't final but should be
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 71 1180475633214 8307
H V MS: org.apache.jetspeed.serializer.objects.JSPermission.TYPE_UNKNOWN isn't
final but should be
jetspeed-2/components/serializer/src/java/org/apache/jetspeed/serializer/objects
JSPermission.java line 76 1180475633214 8308
H V MS: org.apache.portals.gems.util.ValidationHelper.AMERICAN_DATE_FORMAT
isn't final but should be
jetspeed-2/applications/gems/src/java/org/apache/portals/gems/util
ValidationHelper.java line 35 1180475633308 8399
H V MS: org.apache.portals.gems.util.ValidationHelper.AMERICAN_DATETIME_FORMAT
isn't final but should be
jetspeed-2/applications/gems/src/java/org/apache/portals/gems/util
ValidationHelper.java line 36 1180475633308 8398
H V MS: org.apache.portals.gems.util.ValidationHelper.EUROPEAN_DATE_FORMAT
isn't final but should be
jetspeed-2/applications/gems/src/java/org/apache/portals/gems/util
ValidationHelper.java line 33 1180475633308 8401
H V MS: org.apache.portals.gems.util.ValidationHelper.EUROPEAN_DATETIME_FORMAT
isn't final but should be
jetspeed-2/applications/gems/src/java/org/apache/portals/gems/util
ValidationHelper.java line 34 1180475633308 8400
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]