You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2010/05/25 16:03:50 UTC
svn commit: r948047 -
/myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/api/BaseWeaver.java
Author: werpu
Date: Tue May 25 14:03:49 2010
New Revision: 948047
URL: http://svn.apache.org/viewvc?rev=948047&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-133
Modified:
myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/api/BaseWeaver.java
Modified: myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/api/BaseWeaver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/api/BaseWeaver.java?rev=948047&r1=948046&r2=948047&view=diff
==============================================================================
--- myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/api/BaseWeaver.java (original)
+++ myfaces/extensions/scripting/branches/1_0_final_prepare/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/api/BaseWeaver.java Tue May 25 14:03:49 2010
@@ -30,6 +30,7 @@ import org.apache.myfaces.extensions.scr
import javax.faces.context.FacesContext;
import java.io.File;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -450,12 +451,20 @@ public abstract class BaseWeaver impleme
* at the next refresh the second step of the registration cycle should pick the new class up
*
*/
- if (_annotationScanner != null && FacesContext.getCurrentInstance() != null && retVal != null) {
- _annotationScanner.scanClass(retVal);
+ try {
+ if (!scanAnnotation.containsKey(retVal.getName()) && _annotationScanner != null && FacesContext.getCurrentInstance() != null && retVal != null) {
+ scanAnnotation.put(retVal.getName(), "");
+ _annotationScanner.scanClass(retVal);
+ }
+ } finally {
+ scanAnnotation.remove(retVal.getName());
}
return retVal;
}
+ //blocker to prevent recursive calls to the annotation scan which can be triggered by subsequent calls of scanAnnotation and loadClass
+ //a simple boolean check does not suffice here because scanClass might trigger subsequent calls to other classes
+ Map<String, String> scanAnnotation = new ConcurrentHashMap<String, String>();
private void recompileRefresh() {
synchronized (RefreshContext.COMPILE_SYNC_MONITOR) {