#Signature file v4.1
#Version 1.21.1

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.java.hints.test.api.HintTest
innr public final AppliedFix
innr public final HintOutput
innr public final HintWarning
meth public !varargs org.netbeans.modules.java.hints.test.api.HintTest classpath(java.net.URL[])
meth public org.netbeans.modules.java.hints.test.api.HintTest input(java.lang.String) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest input(java.lang.String,boolean) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest input(java.lang.String,java.lang.String) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest input(java.lang.String,java.lang.String,boolean) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest preference(java.lang.String,boolean)
meth public org.netbeans.modules.java.hints.test.api.HintTest preference(java.lang.String,int)
meth public org.netbeans.modules.java.hints.test.api.HintTest preference(java.lang.String,java.lang.String)
meth public org.netbeans.modules.java.hints.test.api.HintTest setCaretMarker(char)
meth public org.netbeans.modules.java.hints.test.api.HintTest sourceLevel(java.lang.String)
meth public org.netbeans.modules.java.hints.test.api.HintTest$HintOutput run(java.lang.Class<?>) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$HintOutput run(java.lang.Class<?>,java.lang.String) throws java.lang.Exception
meth public static org.netbeans.modules.java.hints.test.api.HintTest create() throws java.lang.Exception
supr java.lang.Object
hfds DEBUGGING_HELPER,EMPTY_SFBQ_RESULT,ERRORS_COMPARATOR,INDEXING_LOGGER,JUNIT_PROPERTIES_FILENAME,JUNIT_PROPERTIES_LOCATION_PROPERTY,NBJUNIT_WORKDIR,buildRoot,cache,caret,caretMarker,checkCompilable,compileClassPath,hintSettings,log,sourceLevel,sourcePath,sourceRoot,testFile,testPreferences,usedPaths,workDir
hcls DeadlockTask,TempPreferences,TestProxyClassPathProvider,TestSourceForBinaryQuery,TestSourceLevelQueryImplementation

CLSS public final org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix
 outer org.netbeans.modules.java.hints.test.api.HintTest
cons public init(org.netbeans.modules.java.hints.test.api.HintTest)
meth public java.lang.String getOutput() throws java.lang.Exception
meth public java.lang.String getOutput(java.lang.String) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix assertCompilable() throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix assertCompilable(java.lang.String) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix assertOutput(java.lang.String) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix assertOutput(java.lang.String,java.lang.String) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix assertVerbatimOutput(java.lang.String) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix assertVerbatimOutput(java.lang.String,java.lang.String) throws java.lang.Exception
supr java.lang.Object

CLSS public final org.netbeans.modules.java.hints.test.api.HintTest$HintOutput
 outer org.netbeans.modules.java.hints.test.api.HintTest
meth public !varargs org.netbeans.modules.java.hints.test.api.HintTest$HintOutput assertContainsWarnings(java.lang.String[])
meth public !varargs org.netbeans.modules.java.hints.test.api.HintTest$HintOutput assertNotContainsWarnings(java.lang.String[])
meth public !varargs org.netbeans.modules.java.hints.test.api.HintTest$HintOutput assertWarnings(java.lang.String[])
meth public org.netbeans.modules.java.hints.test.api.HintTest$HintWarning findWarning(java.lang.String)
supr java.lang.Object
hfds errors,requiresJavaFix

CLSS public final org.netbeans.modules.java.hints.test.api.HintTest$HintWarning
 outer org.netbeans.modules.java.hints.test.api.HintTest
meth public !varargs org.netbeans.modules.java.hints.test.api.HintTest$HintWarning assertFixes(java.lang.String[]) throws java.lang.Exception
meth public !varargs org.netbeans.modules.java.hints.test.api.HintTest$HintWarning assertFixesNotPresent(java.lang.String[]) throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix applyFix() throws java.lang.Exception
meth public org.netbeans.modules.java.hints.test.api.HintTest$AppliedFix applyFix(java.lang.String) throws java.lang.Exception
supr java.lang.Object
hfds requiresJavaFix,warning

