#Signature file v4.1
#Version 1.7

CLSS public java.lang.Object
cons public init()
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected void finalize() throws java.lang.Throwable
meth public boolean equals(java.lang.Object)
meth public final java.lang.Class<?> getClass()
meth public final void notify()
meth public final void notifyAll()
meth public final void wait() throws java.lang.InterruptedException
meth public final void wait(long) throws java.lang.InterruptedException
meth public final void wait(long,int) throws java.lang.InterruptedException
meth public int hashCode()
meth public java.lang.String toString()

CLSS public org.netbeans.modules.selenium2.java.api.Utils
cons public init()
fld public final static java.lang.String RUN_SELENIUM_TESTS_REGEXP = "**/*IT.java"
meth public static boolean isSupportEnabled(java.lang.Class,org.openide.filesystems.FileObject[])
meth public static java.lang.Object[] getTestSourceRoots(java.util.Collection<org.netbeans.api.project.SourceGroup>,org.openide.filesystems.FileObject)
meth public static java.lang.String[] getSourceAndTestClassNames(org.openide.filesystems.FileObject,boolean,boolean)
supr java.lang.Object

