#Signature file v4.1
#Version 1.104

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.bugzilla.api.NBBugzillaUtils
cons public init()
meth public static boolean isNbRepository(java.net.URL)
meth public static char[] getNBPassword()
meth public static java.lang.String getNBUsername()
meth public static org.netbeans.modules.bugtracking.api.Repository findNBRepository()
meth public static void attachFiles(java.lang.String,java.lang.String,java.lang.String[],java.lang.String[],java.io.File[])
meth public static void openIssue(java.lang.String)
meth public static void reportAnIssue()
meth public static void saveNBPassword(char[])
meth public static void saveNBUsername(java.lang.String)
supr java.lang.Object

