Author: sebb
Date: Tue Dec 4 12:35:18 2007
New Revision: 601076
URL: http://svn.apache.org/viewvc?rev=601076&view=rev
Log:
Add support for including/excluding classes by name matching
[Hack to enable reducing class loading in non-GUI runs]
Modified:
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/reflect/ClassFinder.java
Modified:
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/reflect/ClassFinder.java
URL:
http://svn.apache.org/viewvc/jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/reflect/ClassFinder.java?rev=601076&r1=601075&r2=601076&view=diff
==============================================================================
---
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/reflect/ClassFinder.java
(original)
+++
jakarta/jmeter/trunk/src/jorphan/org/apache/jorphan/reflect/ClassFinder.java
Tue Dec 4 12:35:18 2007
@@ -62,14 +62,21 @@
private static class FilterTreeSet extends TreeSet{
private final Class[] parents; // parent classes to check
private final boolean inner; // are inner classes OK?
+
+ // hack to reduce the need to load every class in non-GUI mode, which
only needs functions
+ // TODO perhaps use BCEL to scan class files instead?
+ private final String contains; // class name should contain this string
+ private final String notContains; // class name should not contain
this string
private final transient ClassLoader contextClassLoader
= Thread.currentThread().getContextClassLoader(); // Potentially
expensive; do it once
- FilterTreeSet(Class []parents, boolean inner){
+ FilterTreeSet(Class []parents, boolean inner, String contains, String
notContains){
super();
this.parents=parents;
this.inner=inner;
+ this.contains=contains;
+ this.notContains=notContains;
}
/**
@@ -84,6 +91,12 @@
public boolean add(Object o){
if (contains(o)) return false;// No need to check it again
String s = (String) o;// we only expect Strings
+ if (contains!=null && s.indexOf(contains) == -1){
+ return false; // It does not contain a required string
+ }
+ if (notContains!=null && s.indexOf(notContains) != -1){
+ return false; // It contains a banned string
+ }
if ((s.indexOf("$") == -1) || inner) { // $NON-NLS-1$
if (isChildOf(parents,s, contextClassLoader)) {
return super.add(s);
@@ -140,6 +153,23 @@
public static List findClassesThatExtend(String[] strPathsOrJars,
final Class[] superClasses, final boolean innerClasses)
throws IOException {
+ return
findClassesThatExtend(strPathsOrJars,superClasses,innerClasses,null,null);
+ }
+
+ /**
+ * Find classes in the provided path(s)/jar(s) that extend the class(es).
+ * @param strPathsOrJars - pathnames or jarfiles to search for classes
+ * @param superClasses - required parent class(es)
+ * @param innerClasses - should we include inner classes?
+ * @param contains - classname should contain this string
+ * @param notContains - classname should not contain this string
+ *
+ * @return List containing discovered classes
+ */
+ public static List findClassesThatExtend(String[] strPathsOrJars,
+ final Class[] superClasses, final boolean innerClasses,
+ String contains, String notContains)
+ throws IOException {
if (log.isDebugEnabled()) {
for (int i = 0; i < superClasses.length ; i++){
@@ -165,7 +195,7 @@
}
}
- Set listClasses = new FilterTreeSet(superClasses, innerClasses);
+ Set listClasses = new FilterTreeSet(superClasses, innerClasses,
contains, notContains);
// first get all the classes
findClassesInPaths(listPaths, listClasses);
if (log.isDebugEnabled()) {
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]