#Signature file v4.1
#Version 0.62

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
 anno 0 java.lang.Deprecated(boolean forRemoval=true, java.lang.String since="9")
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 final org.netbeans.modules.php.composer.api.Composer
meth public java.io.File getWorkDir()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public java.util.concurrent.Future<java.lang.Integer> init(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public java.util.concurrent.Future<java.lang.Integer> install(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public java.util.concurrent.Future<java.lang.Integer> installDev(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public java.util.concurrent.Future<java.lang.Integer> installNoDev(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public java.util.concurrent.Future<java.lang.Integer> selfUpdate()
meth public java.util.concurrent.Future<java.lang.Integer> update(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public java.util.concurrent.Future<java.lang.Integer> updateDev(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public java.util.concurrent.Future<java.lang.Integer> updateNoDev(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public java.util.concurrent.Future<java.lang.Integer> validate(org.netbeans.modules.php.api.phpmodule.PhpModule)
meth public org.netbeans.modules.php.composer.api.Composer setWorkDir(java.io.File)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.modules.php.composer.api.Composer getDefault() throws org.netbeans.modules.php.api.executable.InvalidPhpExecutableException
supr java.lang.Object
hfds composer

