You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2014/06/18 21:21:21 UTC
svn commit: r1603592 - in /tomcat/tc7.0.x/trunk: ./
java/org/apache/catalina/core/DefaultInstanceManager.java
java/org/apache/catalina/startup/WebAnnotationSet.java
webapps/docs/changelog.xml
Author: markt
Date: Wed Jun 18 19:21:21 2014
New Revision: 1603592
URL: http://svn.apache.org/r1603592
Log:
Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=56611
Refactor code to remove inefficient calls to Method.isAnnotationPresent(). Based on a patch by Jian Mou.
Modified:
tomcat/tc7.0.x/trunk/ (props changed)
tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java
tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
Propchange: tomcat/tc7.0.x/trunk/
------------------------------------------------------------------------------
Merged /tomcat/trunk:r1603591
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java?rev=1603592&r1=1603591&r2=1603592&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/core/DefaultInstanceManager.java Wed Jun 18 19:21:21 2014
@@ -298,38 +298,38 @@ public class DefaultInstanceManager impl
// JNDI is enabled
Field[] fields = Introspection.getDeclaredFields(clazz);
for (Field field : fields) {
+ Resource resourceAnnotation;
+ EJB ejbAnnotation;
+ WebServiceRef webServiceRefAnnotation;
+ PersistenceContext persistenceContextAnnotation;
+ PersistenceUnit persistenceUnitAnnotation;
if (injections != null && injections.containsKey(field.getName())) {
annotations.add(new AnnotationCacheEntry(
field.getName(), null,
injections.get(field.getName()),
AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(Resource.class)) {
- Resource annotation = field.getAnnotation(Resource.class);
- annotations.add(new AnnotationCacheEntry(
- field.getName(), null, annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(EJB.class)) {
- EJB annotation = field.getAnnotation(EJB.class);
- annotations.add(new AnnotationCacheEntry(
- field.getName(), null, annotation.name(),
+ } else if ((resourceAnnotation =
+ field.getAnnotation(Resource.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ resourceAnnotation.name(), AnnotationCacheEntryType.FIELD));
+ } else if ((ejbAnnotation =
+ field.getAnnotation(EJB.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ ejbAnnotation.name(), AnnotationCacheEntryType.FIELD));
+ } else if ((webServiceRefAnnotation =
+ field.getAnnotation(WebServiceRef.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ webServiceRefAnnotation.name(),
AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(WebServiceRef.class)) {
- WebServiceRef annotation =
- field.getAnnotation(WebServiceRef.class);
- annotations.add(new AnnotationCacheEntry(
- field.getName(), null, annotation.name(),
+ } else if ((persistenceContextAnnotation =
+ field.getAnnotation(PersistenceContext.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ persistenceContextAnnotation.name(),
AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(PersistenceContext.class)) {
- PersistenceContext annotation =
- field.getAnnotation(PersistenceContext.class);
- annotations.add(new AnnotationCacheEntry(
- field.getName(), null, annotation.name(),
- AnnotationCacheEntryType.FIELD));
- } else if (field.isAnnotationPresent(PersistenceUnit.class)) {
- PersistenceUnit annotation =
- field.getAnnotation(PersistenceUnit.class);
- annotations.add(new AnnotationCacheEntry(
- field.getName(), null, annotation.name(),
+ } else if ((persistenceUnitAnnotation =
+ field.getAnnotation(PersistenceUnit.class)) != null) {
+ annotations.add(new AnnotationCacheEntry(field.getName(), null,
+ persistenceUnitAnnotation.name(),
AnnotationCacheEntryType.FIELD));
}
}
@@ -356,43 +356,44 @@ public class DefaultInstanceManager impl
continue;
}
}
- if (method.isAnnotationPresent(Resource.class)) {
- Resource annotation = method.getAnnotation(Resource.class);
+ Resource resourceAnnotation;
+ EJB ejbAnnotation;
+ WebServiceRef webServiceRefAnnotation;
+ PersistenceContext persistenceContextAnnotation;
+ PersistenceUnit persistenceUnitAnnotation;
+ if ((resourceAnnotation =
+ method.getAnnotation(Resource.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- annotation.name(),
+ resourceAnnotation.name(),
AnnotationCacheEntryType.SETTER));
- } else if (method.isAnnotationPresent(EJB.class)) {
- EJB annotation = method.getAnnotation(EJB.class);
+ } else if ((ejbAnnotation =
+ method.getAnnotation(EJB.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- annotation.name(),
+ ejbAnnotation.name(),
AnnotationCacheEntryType.SETTER));
- } else if (method.isAnnotationPresent(WebServiceRef.class)) {
- WebServiceRef annotation =
- method.getAnnotation(WebServiceRef.class);
+ } else if ((webServiceRefAnnotation =
+ method.getAnnotation(WebServiceRef.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- annotation.name(),
+ webServiceRefAnnotation.name(),
AnnotationCacheEntryType.SETTER));
- } else if (method.isAnnotationPresent(PersistenceContext.class)) {
- PersistenceContext annotation =
- method.getAnnotation(PersistenceContext.class);
+ } else if ((persistenceContextAnnotation =
+ method.getAnnotation(PersistenceContext.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- annotation.name(),
+ persistenceContextAnnotation.name(),
AnnotationCacheEntryType.SETTER));
- } else if (method.isAnnotationPresent(PersistenceUnit.class)) {
- PersistenceUnit annotation =
- method.getAnnotation(PersistenceUnit.class);
+ } else if ((persistenceUnitAnnotation = method.getAnnotation(PersistenceUnit.class)) != null) {
annotations.add(new AnnotationCacheEntry(
method.getName(),
method.getParameterTypes(),
- annotation.name(),
+ persistenceUnitAnnotation.name(),
AnnotationCacheEntryType.SETTER));
}
}
Modified: tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java?rev=1603592&r1=1603591&r2=1603592&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java (original)
+++ tomcat/tc7.0.x/trunk/java/org/apache/catalina/startup/WebAnnotationSet.java Wed Jun 18 19:21:21 2014
@@ -261,10 +261,9 @@ public class WebAnnotationSet {
Field[] fields = Introspection.getDeclaredFields(classClass);
if (fields != null && fields.length > 0) {
for (Field field : fields) {
- if (field.isAnnotationPresent(Resource.class)) {
- Resource annotation = field.getAnnotation(Resource.class);
- String defaultName =
- classClass.getName() + SEPARATOR + field.getName();
+ Resource annotation = field.getAnnotation(Resource.class);
+ if (annotation != null) {
+ String defaultName = classClass.getName() + SEPARATOR + field.getName();
Class<?> defaultType = field.getType();
addResource(context, annotation, defaultName, defaultType);
}
@@ -279,9 +278,8 @@ public class WebAnnotationSet {
Method[] methods = Introspection.getDeclaredMethods(classClass);
if (methods != null && methods.length > 0) {
for (Method method : methods) {
- if (method.isAnnotationPresent(Resource.class)) {
- Resource annotation = method.getAnnotation(Resource.class);
-
+ Resource annotation = method.getAnnotation(Resource.class);
+ if (annotation != null) {
if (!Introspection.isValidSetter(method)) {
throw new IllegalArgumentException(sm.getString(
"webAnnotationSet.invalidInjection"));
Modified: tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml?rev=1603592&r1=1603591&r2=1603592&view=diff
==============================================================================
--- tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/tc7.0.x/trunk/webapps/docs/changelog.xml Wed Jun 18 19:21:21 2014
@@ -101,6 +101,11 @@
digester rules and documentation for <code>MemoryRealm</code>.
(markt/kkolinko)
</fix>
+ <scode>
+ <bug>56611</bug>: Refactor code to remove inefficient calls to
+ <code>Method.isAnnotationPresent()</code>. Based on a patch by Jian Mou.
+ (markt)
+ </scode>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org