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/03/01 13:15:27 UTC

svn commit: r917486 - in /myfaces/extensions/scripting/trunk/core/core/src: main/java/org/apache/myfaces/scripting/core/dependencyScan/ main/java/org/apache/myfaces/scripting/core/dependencyScan/api/ main/java/org/apache/myfaces/scripting/core/dependen...

Author: werpu
Date: Mon Mar  1 12:15:27 2010
New Revision: 917486

URL: http://svn.apache.org/viewvc?rev=917486&view=rev
Log:
https://issues.apache.org/jira/browse/EXTSCRIPT-74

moved all the registries into subregistries within the refresh context
where other engines can register themselves into (Bernhards wish),
the registries are now triggered globally and filter themselves which
changes they want to get.

We also now changed the addDependency to addDependency(engineType, rootClass, currentClass, dependency) to get a better coverage and to eliminate the separate flush cycle.

Added:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/StandardDependencyScanner.java
      - copied, changed from r917484, myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/MasterDependencyRegistry.java   (with props)
Modified:
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/api/DependencyRegistry.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanStrategy.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanVisitor.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/MethodScanVisitor.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/filter/ScanIdentifierFilter.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/DependencyRegistryImpl.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
    myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/RefreshContext.java
    myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java
    myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/FilterTest.java

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java Mon Mar  1 12:15:27 2010
@@ -1,198 +1,15 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
 package org.apache.myfaces.scripting.core.dependencyScan;
 
-import org.apache.myfaces.scripting.core.dependencyScan.core.ClassScanUtils;
-import org.apache.myfaces.scripting.core.dependencyScan.core.ClassScanVisitor;
-import org.apache.myfaces.scripting.core.dependencyScan.core.ExtendedClassReader;
+import org.apache.myfaces.scripting.core.dependencyScan.api.DependencyRegistry;
 import org.apache.myfaces.scripting.core.dependencyScan.registry.ExternalFilterDependencyRegistry;
-import org.objectweb.asm.ClassReader;
-
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Set;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 
 /**
- * @author Werner Punz (latest modification by $Author$)
- * @version $Revision$ $Date$
- *          <p/>
- *          A dependency scanner for
- *          our classes
- *          <p /> this class is thread save on object level
- *          and can be used as a singleton
- *          <p/>
+ * Created by IntelliJ IDEA.
+ * User: werpu2
+ * Date: 01.03.2010
+ * Time: 12:02:20
+ * To change this template use File | Settings | File Templates.
  */
-public class DependencyScanner {
-    final ClassScanVisitor _cp = new ClassScanVisitor();
-    Logger _log = Logger.getLogger(this.getClass().getName());
-
-    public DependencyScanner() {
-
-    }
-
-    public synchronized final void fetchDependencies(ClassLoader loader, Integer engineType, String className, ExternalFilterDependencyRegistry registry) {
-        Set<String> retVal = new HashSet<String>();
-        _cp.setEngineType(engineType);
-
-        investigateInheritanceHierarchy(loader, className, registry);
-        registry.flush(engineType);
-    }
-
-    /**
-     * @param className the class name of the class which has to be investigated for the code dependencies
-     * @return a set of dependencies as string representation of their class names
-     * @deprecated
-     */
-    public synchronized final Set<String> fetchDependencies(ClassLoader loader, String className, final Set<String> whiteList) {
-        return null;
-    }
-
-    /**
-     * this investigates the classes inheritance hierarchy for
-     * more dependencies, for now annotations and interfaces
-     * are omitted since they are not vital to our jsf dependency checks
-     * (maybe in the long run we will add interfaces and annotations as well
-     * but for now we will leave them away for speed reasons)
-     *
-     * @param loader    the classLoader which should be used for the hierarchy scanning
-     * @param className the className which has to be investigated
-     * @param registry  the dependency registry
-     */
-    private void investigateInheritanceHierarchy(ClassLoader loader, String className, ExternalFilterDependencyRegistry registry) {
-        //we now have to fetch the parent hierarchy
-
-        try {
-            Class toCheck = loader.loadClass(className);
-            if (toCheck == null) {
-                return;
-            }
-            scanCurrentClass(loader, className, registry);
-
-            //we scan the hierarchy because we might have compiled-uncompiled-compiled connections, the same goes for the interfaces
-            //the basic stuff can be covered by our class scanning but for more advanced usecase we have to walk the entire hierarchy per class!
-            scanHierarchy(loader, toCheck, registry, true);
-            //our asm code normally covers this but since the scanner has to work outside of asm we do it twice, the same goes for the hierarchy
-            scanInterfaces(loader, toCheck, registry);
-        } catch (ClassNotFoundException e) {
-            _log.log(Level.SEVERE, "DefaultDependencyScanner.investigateInheritanceHierarchy() ", e);
-        }
-    }
-
-    private void scanInterfaces(ClassLoader loader, Class toCheck, ExternalFilterDependencyRegistry registry) {
-        Class[] interfaces = toCheck.getInterfaces();
-        if (interfaces == null || interfaces.length == 0) {
-            return;
-        }
-
-        for (Class currentInterface : interfaces) {
-            if (ClassScanUtils.isStandardNamespace(currentInterface.getName())) {
-                continue;
-            }
-            scanCurrentClass(loader, currentInterface.getName(), registry);
-
-            //We scan also our parent interfaces to get a full coverage
-            //but since interfaces do not implement anything we can cover
-            //the parents
-            scanHierarchy(loader, currentInterface, registry, false);
-        }
-    }
-
-    /**
-     * Scans the interface hierarchy of our class
-     * the normal interface scan is processed already on class level
-     * this method is needed to process our parent interface relationships
-     * before triggering the ASM bytecode processing
-     *
-     * @param loader         the infrastructural classloader
-     * @param toCheck        the class which needs to be checked
-     * @param registry       the dependency registry
-     * @param interfaceCheck if true also interfaces within the hierarchy will be processed, false if not
-     */
-    private void scanInterfaces(ClassLoader loader, Class toCheck, ExternalFilterDependencyRegistry registry, boolean interfaceCheck) {
-        Class parent = toCheck.getSuperclass();
-
-        while (parent != null && !ClassScanUtils.isStandardNamespace(parent.getName())) {
-            if (interfaceCheck) {
-                //we recursively descend into our interfaces
-                scanInterfaces(loader, parent, registry);
-            }
-
-            scanCurrentClass(loader, parent.getName(), registry);
-            parent = parent.getSuperclass();
-
-        }
-    }
-
-    /**
-     * scans the parent child relationship hierarchy
-     * We have to go through the entire hierarchy except for standard
-     * namespaces due to the fact that we have to cover source <->binary<->source
-     * dependencies with binary being binary classes never to be refreshed
-     * <p/>
-     * Note we can optionally do some interface checks here
-     * for now annotations are only processed by the class scanner itself
-     * so we do not process any annotation inheritance on this level
-     * we will add the feature later
-     *
-     * @param loader         the infrastructural classloader
-     * @param toCheck        the class which needs to be checked
-     * @param registry       the dependency registry
-     * @param interfaceCheck if true also interfaces within the hierarchy will be processed, false if not
-     */
-    private void scanHierarchy(ClassLoader loader, Class toCheck, ExternalFilterDependencyRegistry registry, boolean interfaceCheck) {
-        Class parent = toCheck.getSuperclass();
-
-        while (parent != null && !ClassScanUtils.isStandardNamespace(parent.getName())) {
-            if (interfaceCheck) {
-                //we recursively descend into our interfaces, it should not
-                //get any cyclic calls the tainting mechanism should prevent that
-                //and also the descension into parents, determinism should be
-                //enabled by both measures
-                //scanInterfaces(loader, retVal, whiteList, parent);
-            }
-
-            scanCurrentClass(loader, parent.getName(), registry);
-            parent = parent.getSuperclass();
-
-        }
-    }
-
-    /**
-     * scans one level of the inheritance hierarchy
-     *
-     * @param loader           the classLoader which should be used for the hierarchy scanning
-     * @param currentClassName the className which has to be investigated
-     * @param registry         the dependency registry
-     */
-    private void scanCurrentClass(ClassLoader loader, String currentClassName, ExternalFilterDependencyRegistry registry) {
-        _cp.setDependencyRegistry(registry);
-
-        ClassReader cr;
-
-        try {
-            cr = new ExtendedClassReader(loader, currentClassName);
-            cr.accept(_cp, 0);
-        } catch (IOException e) {
-            _log.log(Level.SEVERE, "scanCurrentClass() ", e);
-        }
-    }
-
+public interface DependencyScanner {
+    void fetchDependencies(ClassLoader loader, Integer engineType, String className, DependencyRegistry registry);
 }

Copied: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/StandardDependencyScanner.java (from r917484, myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/StandardDependencyScanner.java?p2=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/StandardDependencyScanner.java&p1=myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java&r1=917484&r2=917486&rev=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/DependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/StandardDependencyScanner.java Mon Mar  1 12:15:27 2010
@@ -18,10 +18,10 @@
  */
 package org.apache.myfaces.scripting.core.dependencyScan;
 
+import org.apache.myfaces.scripting.core.dependencyScan.api.DependencyRegistry;
 import org.apache.myfaces.scripting.core.dependencyScan.core.ClassScanUtils;
 import org.apache.myfaces.scripting.core.dependencyScan.core.ClassScanVisitor;
 import org.apache.myfaces.scripting.core.dependencyScan.core.ExtendedClassReader;
-import org.apache.myfaces.scripting.core.dependencyScan.registry.ExternalFilterDependencyRegistry;
 import org.objectweb.asm.ClassReader;
 
 import java.io.IOException;
@@ -40,32 +40,24 @@
  *          and can be used as a singleton
  *          <p/>
  */
-public class DependencyScanner {
+public class StandardDependencyScanner implements DependencyScanner {
     final ClassScanVisitor _cp = new ClassScanVisitor();
     Logger _log = Logger.getLogger(this.getClass().getName());
 
-    public DependencyScanner() {
+    public StandardDependencyScanner() {
 
     }
 
-    public synchronized final void fetchDependencies(ClassLoader loader, Integer engineType, String className, ExternalFilterDependencyRegistry registry) {
+    public synchronized final void fetchDependencies(ClassLoader loader, Integer engineType, String className, DependencyRegistry registry) {
         Set<String> retVal = new HashSet<String>();
         _cp.setEngineType(engineType);
-
+        _cp.setRootClass(className);
+        _cp.setDependencyRegistry(registry);
         investigateInheritanceHierarchy(loader, className, registry);
         registry.flush(engineType);
     }
 
     /**
-     * @param className the class name of the class which has to be investigated for the code dependencies
-     * @return a set of dependencies as string representation of their class names
-     * @deprecated
-     */
-    public synchronized final Set<String> fetchDependencies(ClassLoader loader, String className, final Set<String> whiteList) {
-        return null;
-    }
-
-    /**
      * this investigates the classes inheritance hierarchy for
      * more dependencies, for now annotations and interfaces
      * are omitted since they are not vital to our jsf dependency checks
@@ -76,7 +68,7 @@
      * @param className the className which has to be investigated
      * @param registry  the dependency registry
      */
-    private void investigateInheritanceHierarchy(ClassLoader loader, String className, ExternalFilterDependencyRegistry registry) {
+    private void investigateInheritanceHierarchy(ClassLoader loader, String className, DependencyRegistry registry) {
         //we now have to fetch the parent hierarchy
 
         try {
@@ -84,7 +76,7 @@
             if (toCheck == null) {
                 return;
             }
-            scanCurrentClass(loader, className, registry);
+            scanCurrentClass(loader, className);
 
             //we scan the hierarchy because we might have compiled-uncompiled-compiled connections, the same goes for the interfaces
             //the basic stuff can be covered by our class scanning but for more advanced usecase we have to walk the entire hierarchy per class!
@@ -96,7 +88,7 @@
         }
     }
 
-    private void scanInterfaces(ClassLoader loader, Class toCheck, ExternalFilterDependencyRegistry registry) {
+    private void scanInterfaces(ClassLoader loader, Class toCheck, DependencyRegistry registry) {
         Class[] interfaces = toCheck.getInterfaces();
         if (interfaces == null || interfaces.length == 0) {
             return;
@@ -106,7 +98,7 @@
             if (ClassScanUtils.isStandardNamespace(currentInterface.getName())) {
                 continue;
             }
-            scanCurrentClass(loader, currentInterface.getName(), registry);
+            scanCurrentClass(loader, currentInterface.getName());
 
             //We scan also our parent interfaces to get a full coverage
             //but since interfaces do not implement anything we can cover
@@ -126,7 +118,7 @@
      * @param registry       the dependency registry
      * @param interfaceCheck if true also interfaces within the hierarchy will be processed, false if not
      */
-    private void scanInterfaces(ClassLoader loader, Class toCheck, ExternalFilterDependencyRegistry registry, boolean interfaceCheck) {
+    private void scanInterfaces(ClassLoader loader, Class toCheck, DependencyRegistry registry, boolean interfaceCheck) {
         Class parent = toCheck.getSuperclass();
 
         while (parent != null && !ClassScanUtils.isStandardNamespace(parent.getName())) {
@@ -135,7 +127,7 @@
                 scanInterfaces(loader, parent, registry);
             }
 
-            scanCurrentClass(loader, parent.getName(), registry);
+            scanCurrentClass(loader, parent.getName());
             parent = parent.getSuperclass();
 
         }
@@ -157,7 +149,7 @@
      * @param registry       the dependency registry
      * @param interfaceCheck if true also interfaces within the hierarchy will be processed, false if not
      */
-    private void scanHierarchy(ClassLoader loader, Class toCheck, ExternalFilterDependencyRegistry registry, boolean interfaceCheck) {
+    private void scanHierarchy(ClassLoader loader, Class toCheck, DependencyRegistry registry, boolean interfaceCheck) {
         Class parent = toCheck.getSuperclass();
 
         while (parent != null && !ClassScanUtils.isStandardNamespace(parent.getName())) {
@@ -169,7 +161,7 @@
                 //scanInterfaces(loader, retVal, whiteList, parent);
             }
 
-            scanCurrentClass(loader, parent.getName(), registry);
+            scanCurrentClass(loader, parent.getName());
             parent = parent.getSuperclass();
 
         }
@@ -180,13 +172,9 @@
      *
      * @param loader           the classLoader which should be used for the hierarchy scanning
      * @param currentClassName the className which has to be investigated
-     * @param registry         the dependency registry
      */
-    private void scanCurrentClass(ClassLoader loader, String currentClassName, ExternalFilterDependencyRegistry registry) {
-        _cp.setDependencyRegistry(registry);
-
+    private void scanCurrentClass(ClassLoader loader, String currentClassName) {
         ClassReader cr;
-
         try {
             cr = new ExtendedClassReader(loader, currentClassName);
             cr.accept(_cp, 0);

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/api/DependencyRegistry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/api/DependencyRegistry.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/api/DependencyRegistry.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/api/DependencyRegistry.java Mon Mar  1 12:15:27 2010
@@ -8,14 +8,17 @@
  * Only classes which pass the whitelisting check will be processed
  */
 public interface DependencyRegistry {
-      /**
+    /**
      * adds a source dependency if it is able to pass the
      * filters
      * A dependency is only allowed to pass if it is able
      * to pass the internal filter list
      *
-     * @param source     the source which includes or casts the dependencies
-     * @param dependency the dependency to be added
+     * @param rootClass             the root class of this scan which all dependencies are referenced from
+     * @param currentlyVisitedClass the source which includes or casts the dependencies
+     * @param dependency            the dependency to be added
      */
-    void addDependency(Integer engineType, String source, String dependency);
+    void addDependency(Integer engineType, String rootClass, String currentlyVisitedClass, String dependency);
+
+    void flush(Integer engineType);
 }

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanStrategy.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanStrategy.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanStrategy.java Mon Mar  1 12:15:27 2010
@@ -30,6 +30,7 @@
  * A scan strategy for scanning class files within our api
  */
 @SuppressWarnings("unused")
+@Deprecated
 public class ClassScanStrategy implements Strategy {
     Set<String> _whiteList;
     DependencyScanner _scanner;

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanVisitor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanVisitor.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanVisitor.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/ClassScanVisitor.java Mon Mar  1 12:15:27 2010
@@ -18,6 +18,7 @@
  */
 package org.apache.myfaces.scripting.core.dependencyScan.core;
 
+import org.apache.myfaces.scripting.core.dependencyScan.api.DependencyRegistry;
 import org.apache.myfaces.scripting.core.dependencyScan.registry.ExternalFilterDependencyRegistry;
 import org.objectweb.asm.*;
 
@@ -35,17 +36,19 @@
  */
 public class ClassScanVisitor implements ClassVisitor {
 
-    ExternalFilterDependencyRegistry _dependencyRegistry;
+    DependencyRegistry _dependencyRegistry;
     String _currentlyVistedClass;
     Integer _engineType;
+    String _rootClass;
     static final Logger _log = Logger.getLogger(ClassScanVisitor.class.getName());
 
     public ClassScanVisitor() {
     }
 
-    public ClassScanVisitor(String _scanIdentifier, ExternalFilterDependencyRegistry registry) {
+    public ClassScanVisitor(String _scanIdentifier, String rootClass, ExternalFilterDependencyRegistry registry) {
         _dependencyRegistry = registry;
         _scanIdentifier = _scanIdentifier;
+        _rootClass = rootClass;
     }
 
     public void visit(int version, int access, String name,
@@ -100,7 +103,7 @@
         }
 
         if (_dependencyRegistry != null) {
-            _dependencyRegistry.addDependency(_engineType, _currentlyVistedClass, className);
+            _dependencyRegistry.addDependency(_engineType, _rootClass, _currentlyVistedClass, className);
         }
 
     }
@@ -113,19 +116,24 @@
         for (Type argumentType : Type.getArgumentTypes(description)) {
             registerDependency(argumentType, "Argument type of the method [" + name + "]");
         }
-        return new MethodScanVisitor(_engineType, _currentlyVistedClass, _dependencyRegistry);
+        return new MethodScanVisitor(_engineType, _rootClass, _currentlyVistedClass, _dependencyRegistry);
     }
 
     public void visitEnd() {
         //_log.info("}");
     }
 
-    public void setDependencyRegistry(ExternalFilterDependencyRegistry dependencyRegistry) {
+    public void setDependencyRegistry(DependencyRegistry dependencyRegistry) {
         _dependencyRegistry = dependencyRegistry;
     }
 
     public void setEngineType(Integer engineType) {
         _engineType = engineType;
     }
+
+    public void setRootClass(String rootClass) {
+        _rootClass = rootClass;
+    }
 }
 
+

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/MethodScanVisitor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/MethodScanVisitor.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/MethodScanVisitor.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/core/MethodScanVisitor.java Mon Mar  1 12:15:27 2010
@@ -18,7 +18,7 @@
  */
 package org.apache.myfaces.scripting.core.dependencyScan.core;
 
-import org.apache.myfaces.scripting.core.dependencyScan.registry.ExternalFilterDependencyRegistry;
+import org.apache.myfaces.scripting.core.dependencyScan.api.DependencyRegistry;
 import org.objectweb.asm.*;
 
 /**
@@ -31,13 +31,15 @@
     // static final Logger log = Logger.getLogger("ClassScanVisitor");
 
     String _currentlyVisitedClass = null;
+    String _rootClass;
     Integer _engineType = null;
-    ExternalFilterDependencyRegistry _dependencyRegistry = null;
+    DependencyRegistry _dependencyRegistry = null;
 
-    public MethodScanVisitor(Integer engineType, String currentlyVisitedClass, ExternalFilterDependencyRegistry registry) {
+    public MethodScanVisitor(Integer engineType, String rootClass, String currentlyVisitedClass, DependencyRegistry registry) {
         _currentlyVisitedClass = currentlyVisitedClass;
         _dependencyRegistry = registry;
         _engineType = engineType;
+        _rootClass = rootClass;
     }
 
     public AnnotationVisitor visitAnnotationDefault() {
@@ -91,7 +93,7 @@
         }
 
         if (_dependencyRegistry != null) {
-            _dependencyRegistry.addDependency(_engineType, _currentlyVisitedClass, className);
+            _dependencyRegistry.addDependency(_engineType, _rootClass, _currentlyVisitedClass, className);
         }
     }
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/filter/ScanIdentifierFilter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/filter/ScanIdentifierFilter.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/filter/ScanIdentifierFilter.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/filter/ScanIdentifierFilter.java Mon Mar  1 12:15:27 2010
@@ -15,7 +15,7 @@
         _engineType = engineType;
     }
 
-    public boolean isAllowed(String identifier, String clazz) {
+    public boolean isAllowed(Integer identifier, String clazz) {
         return _engineType.equals(identifier);  //To change body of implemented methods use File | Settings | File Templates.
     }
 }

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/DependencyRegistryImpl.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/DependencyRegistryImpl.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/DependencyRegistryImpl.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/DependencyRegistryImpl.java Mon Mar  1 12:15:27 2010
@@ -1,11 +1,12 @@
 package org.apache.myfaces.scripting.core.dependencyScan.registry;
 
 import org.apache.myfaces.scripting.core.dependencyScan.api.ClassFilter;
+import org.apache.myfaces.scripting.core.dependencyScan.core.ClassDependencies;
 import org.apache.myfaces.scripting.core.dependencyScan.filter.ScanIdentifierFilter;
 import org.apache.myfaces.scripting.core.dependencyScan.filter.StandardNamespaceFilter;
-import org.apache.myfaces.scripting.core.util.Strategy;
 
-import java.util.*;
+import java.util.LinkedList;
+import java.util.List;
 
 /**
  * registry facade which is used to track our dependencies
@@ -13,13 +14,13 @@
 public class DependencyRegistryImpl implements ExternalFilterDependencyRegistry {
     List<ClassFilter> _filters = new LinkedList<ClassFilter>();
 
-    Map<String, Set<String>> _dependencies = new HashMap<String, Set<String>>();
+    ClassDependencies _dependencMap;
 
-    final Strategy _dependencyTarget;
+    //private volatile Strategy _registrationStrategy;
     final Integer _engineType;
 
-    public DependencyRegistryImpl(Integer engineType, Strategy dependencyTarget) {
-        _dependencyTarget = dependencyTarget;
+    public DependencyRegistryImpl(Integer engineType, ClassDependencies dependencyMap) {
+        _dependencMap = dependencyMap;
         _engineType = engineType;
 
         _filters.add(new ScanIdentifierFilter(_engineType));
@@ -45,8 +46,8 @@
         return true;
     }
 
-    public void addDependency(Integer engineType, String source, String dependency) {
-        if (source.equals(dependency)) {
+    public void addDependency(Integer engineType, String rootClass, String currentlyVisitedClass, String dependency) {
+        if (currentlyVisitedClass.equals(dependency)) {
             return;
         }
 
@@ -60,27 +61,15 @@
         //for now we code it into a list like we used to do before
         //but in the long run we have to directly register
         //to save one step
-        getDependencySet(source).add(dependency);
+        //getDependencySet(source).add(dependency);
+        _dependencMap.addDependency(rootClass,  dependency);
     }
-
-    private Set<String> getDependencySet(String key) {
-        Set<String> retVal = _dependencies.get(key);
-        if (retVal == null) {
-            retVal = new HashSet<String>();
-            _dependencies.put(key, retVal);
-        }
-        return retVal;
-    }
-
-    public Map<String, Set<String>> getDependencies() {
-        return _dependencies;
-    }
-
+    
     /**
      * flush to flush down our stored dependencies into our final map
      */
     public void flush(Integer engineType) {
-        _dependencyTarget.apply(_dependencies);
+        //_registrationStrategy.apply(_dependencies);
     }
-
+   
 }

Added: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/MasterDependencyRegistry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/MasterDependencyRegistry.java?rev=917486&view=auto
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/MasterDependencyRegistry.java (added)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/MasterDependencyRegistry.java Mon Mar  1 12:15:27 2010
@@ -0,0 +1,32 @@
+package org.apache.myfaces.scripting.core.dependencyScan.registry;
+
+import org.apache.myfaces.scripting.core.dependencyScan.api.DependencyRegistry;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+public class MasterDependencyRegistry implements DependencyRegistry {
+
+    Map<Integer, DependencyRegistry> _subRegistries = new ConcurrentHashMap<Integer, DependencyRegistry>();
+
+    public void addDependency(Integer engineType, String rootClass, String currentClass, String dependency) {
+        for (Map.Entry<Integer, DependencyRegistry> entry : _subRegistries.entrySet()) {
+            entry.getValue().addDependency(engineType, rootClass, currentClass, dependency);
+        }
+    }
+
+    public void flush(Integer engineType) {
+        for (Map.Entry<Integer, DependencyRegistry> entry : _subRegistries.entrySet()) {
+            entry.getValue().flush(engineType);
+        }
+    }
+
+    public void addSubregistry(Integer engineType, DependencyRegistry registry) {
+        _subRegistries.put(engineType, registry);
+    }
+
+    public DependencyRegistry getSubregistry(Integer engineType) {
+        return _subRegistries.get(engineType);
+    }
+
+}

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/MasterDependencyRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/core/dependencyScan/registry/MasterDependencyRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/loaders/java/JavaDependencyScanner.java Mon Mar  1 12:15:27 2010
@@ -23,6 +23,7 @@
 import org.apache.myfaces.scripting.api.ScriptingConst;
 import org.apache.myfaces.scripting.api.ScriptingWeaver;
 import org.apache.myfaces.scripting.core.dependencyScan.DependencyScanner;
+import org.apache.myfaces.scripting.core.dependencyScan.StandardDependencyScanner;
 import org.apache.myfaces.scripting.core.dependencyScan.filter.WhitelistFilter;
 import org.apache.myfaces.scripting.core.dependencyScan.registry.DependencyMapRegistrationStrategy;
 import org.apache.myfaces.scripting.core.dependencyScan.registry.DependencyRegistryImpl;
@@ -46,7 +47,7 @@
 
     List<String> _scanPaths = new LinkedList<String>();
 
-    DependencyScanner _depencyScanner = new DependencyScanner();
+    DependencyScanner _depencyScanner = new StandardDependencyScanner();
 
     ScriptingWeaver _weaver;
     Logger log = Logger.getLogger(JavaDependencyScanner.class.getName());
@@ -87,10 +88,22 @@
     }
 
     private final void runScan(final Set<String> possibleDynamicClasses, final ClassLoader loader, String dynamicClass) {
-        Strategy registrationStrategy = new DependencyMapRegistrationStrategy(dynamicClass, WeavingContext.getFileChangedDaemon().getDependencyMap());
-        ExternalFilterDependencyRegistry scanRegistry = new DependencyRegistryImpl(getEngineType(), registrationStrategy);
+
+        //TODO move the strategy fixed into our dependency scan to get this layer out
+        //we wont need it probably anymore anyway
+
+     
+        ExternalFilterDependencyRegistry scanRegistry = (ExternalFilterDependencyRegistry) WeavingContext.getRefreshContext().getDependencyRegistry(getEngineType());
+        if (scanRegistry == null) {
+            scanRegistry = new DependencyRegistryImpl(getEngineType(), WeavingContext.getFileChangedDaemon().getDependencyMap());
+
+        } else {
+            scanRegistry.clearFilters();
+        }
+        //We have to dynamically redjust the filters
         scanRegistry.addFilter(new WhitelistFilter(possibleDynamicClasses));
-        _depencyScanner.fetchDependencies(loader, getEngineType(), dynamicClass, scanRegistry);
+
+        _depencyScanner.fetchDependencies(loader, getEngineType(), dynamicClass, WeavingContext.getRefreshContext().getDependencyRegistry());
     }
 
     protected ClassLoader getClassLoader() {

Modified: myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/RefreshContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/RefreshContext.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/RefreshContext.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/main/java/org/apache/myfaces/scripting/refresh/RefreshContext.java Mon Mar  1 12:15:27 2010
@@ -18,6 +18,8 @@
  */
 package org.apache.myfaces.scripting.refresh;
 
+import org.apache.myfaces.scripting.core.dependencyScan.api.DependencyRegistry;
+import org.apache.myfaces.scripting.core.dependencyScan.registry.MasterDependencyRegistry;
 import org.apache.myfaces.scripting.core.util.WeavingContext;
 
 import javax.faces.context.FacesContext;
@@ -73,8 +75,9 @@
      */
     public final static Boolean COMPILE_SYNC_MONITOR = new Boolean(true);
 
-    private volatile AtomicInteger currentlyRunningRequests = null;
+    private volatile AtomicInteger _currentlyRunningRequests = null;
 
+    private MasterDependencyRegistry _dependencyRegistry = new MasterDependencyRegistry();
 
     public long getPersonalScopedBeanRefresh() {
         return personalScopedBeanRefresh;
@@ -100,6 +103,14 @@
         daemon.getSystemRecompileMap().put(scriptingEngine, recompileRecommended);
     }
 
+    public DependencyRegistry getDependencyRegistry(int scriptingEngine) {
+        return _dependencyRegistry.getSubregistry(scriptingEngine);
+    }
+
+    public void setDependencyRegistries(int scriptingEngine, DependencyRegistry registry) {
+        _dependencyRegistry.addSubregistry(scriptingEngine, registry);
+    }
+
     public boolean isDependencyScanned(int scriptingEngine) {
         FacesContext ctx = FacesContext.getCurrentInstance();
         if (ctx == null) {
@@ -167,11 +178,11 @@
      *         probably deprecred
      */
     public AtomicInteger getCurrentlyRunningRequests() {
-        return currentlyRunningRequests;
+        return _currentlyRunningRequests;
     }
 
     public void setCurrentlyRunningRequests(AtomicInteger currentlyRunning) {
-        currentlyRunningRequests = currentlyRunning;
+        _currentlyRunningRequests = currentlyRunning;
     }
 
     /**
@@ -181,4 +192,11 @@
         WeavingContext.getWeaver();
     }
 
+    public MasterDependencyRegistry getDependencyRegistry() {
+        return _dependencyRegistry;
+    }
+
+    public void setDependencyRegistry(MasterDependencyRegistry dependencyRegistry) {
+        _dependencyRegistry = dependencyRegistry;
+    }
 }

Modified: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/DependencyScannerTest.java Mon Mar  1 12:15:27 2010
@@ -18,7 +18,8 @@
  */
 package org.apache.myfaces.extensions.scripting.dependencyScan;
 
-import org.apache.myfaces.scripting.core.dependencyScan.DependencyScanner;
+import org.apache.myfaces.scripting.api.ScriptingConst;
+import org.apache.myfaces.scripting.core.dependencyScan.StandardDependencyScanner;
 import org.apache.myfaces.scripting.core.dependencyScan.core.ClassDependencies;
 import org.apache.myfaces.scripting.core.dependencyScan.filter.WhitelistFilter;
 import org.apache.myfaces.scripting.core.dependencyScan.registry.DependencyMapRegistrationStrategy;
@@ -51,10 +52,10 @@
     @Test
     public void testClassDependencies2() {
         ClassDependencies dependencyMap = new ClassDependencies();
-        ExternalFilterDependencyRegistry testRegistry = new DependencyRegistryImpl(new DependencyMapRegistrationStrategy(PROBE1, dependencyMap));
+        ExternalFilterDependencyRegistry testRegistry = new DependencyRegistryImpl(ScriptingConst.ENGINE_TYPE_JAVA, dependencyMap);
         testRegistry.addFilter(new WhitelistFilter(DUMMY, PROBE_NAMESPACE));
         long before = System.currentTimeMillis();
-        (new DependencyScanner()).fetchDependencies(Thread.currentThread().getContextClassLoader(), PROBE1, testRegistry);
+        (new StandardDependencyScanner()).fetchDependencies(Thread.currentThread().getContextClassLoader(), ScriptingConst.ENGINE_TYPE_JAVA, PROBE1, testRegistry);
         long after = System.currentTimeMillis();
         log.info("Execution time registry based scan" + (after - before));
 

Modified: myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/FilterTest.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/FilterTest.java?rev=917486&r1=917485&r2=917486&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/FilterTest.java (original)
+++ myfaces/extensions/scripting/trunk/core/core/src/test/java/org/apache/myfaces/extensions/scripting/dependencyScan/FilterTest.java Mon Mar  1 12:15:27 2010
@@ -1,5 +1,6 @@
 package org.apache.myfaces.extensions.scripting.dependencyScan;
 
+import org.apache.myfaces.scripting.api.ScriptingConst;
 import org.apache.myfaces.scripting.core.dependencyScan.filter.StandardNamespaceFilter;
 import org.apache.myfaces.scripting.core.dependencyScan.filter.WhitelistFilter;
 import org.junit.Test;
@@ -19,8 +20,8 @@
     public void testStandardNamespace() {
         StandardNamespaceFilter filter = new StandardNamespaceFilter();
 
-        assertFalse("Standard namespace is not allowed", filter.isAllowed("java.lang.String"));
-        assertTrue("Non Standard namespace is not allowed", filter.isAllowed("booga.looga"));
+        assertFalse("Standard namespace is not allowed", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "java.lang.String"));
+        assertTrue("Non Standard namespace is not allowed", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "booga.looga"));
     }
 
     @Test
@@ -30,13 +31,13 @@
         whiteList.add("booga2");
 
         WhitelistFilter filter = new WhitelistFilter(whiteList);
-        assertTrue("Whitelist test 1", filter.isAllowed("com.booga"));
-        assertTrue("Whitelist test 2", filter.isAllowed("com.booga.booga1"));
-        assertTrue("Whitelist test 3", filter.isAllowed("booga2"));
-
-        assertFalse("Whitelist test 4", filter.isAllowed("com.booga1"));
-        assertFalse("Whitelist test 5", filter.isAllowed("org.booga1"));
-        assertFalse("Whitelist test 6", filter.isAllowed("aaa"));
+        assertTrue("Whitelist test 1", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "com.booga"));
+        assertTrue("Whitelist test 2", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "com.booga.booga1"));
+        assertTrue("Whitelist test 3", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "booga2"));
+
+        assertFalse("Whitelist test 4", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "com.booga1"));
+        assertFalse("Whitelist test 5", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "org.booga1"));
+        assertFalse("Whitelist test 6", filter.isAllowed(ScriptingConst.ENGINE_TYPE_JAVA, "aaa"));
 
     }