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) {