#Signature file v4.1
#Version 0.35

CLSS public abstract interface java.io.Serializable

CLSS public java.lang.Exception
cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
cons public init()
cons public init(java.lang.String)
cons public init(java.lang.String,java.lang.Throwable)
cons public init(java.lang.Throwable)
supr java.lang.Throwable
hfds serialVersionUID

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 java.lang.Throwable
cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
cons public init()
cons public init(java.lang.String)
cons public init(java.lang.String,java.lang.Throwable)
cons public init(java.lang.Throwable)
intf java.io.Serializable
meth public final java.lang.Throwable[] getSuppressed()
meth public final void addSuppressed(java.lang.Throwable)
meth public java.lang.StackTraceElement[] getStackTrace()
meth public java.lang.String getLocalizedMessage()
meth public java.lang.String getMessage()
meth public java.lang.String toString()
meth public java.lang.Throwable fillInStackTrace()
meth public java.lang.Throwable getCause()
meth public java.lang.Throwable initCause(java.lang.Throwable)
meth public void printStackTrace()
meth public void printStackTrace(java.io.PrintStream)
meth public void printStackTrace(java.io.PrintWriter)
meth public void setStackTrace(java.lang.StackTraceElement[])
supr java.lang.Object
hfds CAUSE_CAPTION,EMPTY_THROWABLE_ARRAY,NULL_CAUSE_MESSAGE,SELF_SUPPRESSION_MESSAGE,SUPPRESSED_CAPTION,SUPPRESSED_SENTINEL,UNASSIGNED_STACK,backtrace,cause,detailMessage,serialVersionUID,stackTrace,suppressedExceptions
hcls PrintStreamOrWriter,SentinelHolder,WrappedPrintStream,WrappedPrintWriter

CLSS public org.netbeans.modules.php.api.executable.InvalidPhpExecutableException
cons public init(java.lang.String)
supr java.lang.Exception
hfds serialVersionUID

CLSS public final org.netbeans.modules.php.api.executable.PhpExecutable
cons public init(java.lang.String)
fld public final static org.netbeans.api.extexecution.ExecutionDescriptor DEFAULT_EXECUTION_DESCRIPTOR
fld public final static org.netbeans.api.extexecution.ExecutionDescriptor$InputProcessorFactory2 ANSI_STRIPPING_FACTORY
meth public java.lang.Integer debug(org.openide.filesystems.FileObject) throws java.util.concurrent.ExecutionException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Integer debug(org.openide.filesystems.FileObject,org.netbeans.api.extexecution.ExecutionDescriptor) throws java.util.concurrent.ExecutionException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Integer debug(org.openide.filesystems.FileObject,org.netbeans.api.extexecution.ExecutionDescriptor,org.netbeans.api.extexecution.ExecutionDescriptor$InputProcessorFactory2) throws java.util.concurrent.ExecutionException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public java.lang.Integer runAndWait(java.lang.String) throws java.util.concurrent.ExecutionException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Integer runAndWait(org.netbeans.api.extexecution.ExecutionDescriptor,java.lang.String) throws java.util.concurrent.ExecutionException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Integer runAndWait(org.netbeans.api.extexecution.ExecutionDescriptor,org.netbeans.api.extexecution.ExecutionDescriptor$InputProcessorFactory2,java.lang.String) throws java.util.concurrent.ExecutionException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getCommand()
meth public java.lang.String getExecutable()
meth public java.lang.String toString()
meth public java.util.List<java.lang.String> getParameters()
meth public java.util.concurrent.Future<java.lang.Integer> run()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public java.util.concurrent.Future<java.lang.Integer> run(org.netbeans.api.extexecution.ExecutionDescriptor)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.util.concurrent.Future<java.lang.Integer> run(org.netbeans.api.extexecution.ExecutionDescriptor,org.netbeans.api.extexecution.ExecutionDescriptor$InputProcessorFactory2)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.php.api.executable.PhpExecutable additionalParameters(java.util.List<java.lang.String>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.php.api.executable.PhpExecutable displayName(java.lang.String)
meth public org.netbeans.modules.php.api.executable.PhpExecutable environmentVariables(java.util.Map<java.lang.String,java.lang.String>)
meth public org.netbeans.modules.php.api.executable.PhpExecutable executableName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.php.api.executable.PhpExecutable fileOutput(java.io.File,java.lang.String,boolean)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.php.api.executable.PhpExecutable noDebugConfig(boolean)
meth public org.netbeans.modules.php.api.executable.PhpExecutable noInfo(boolean)
meth public org.netbeans.modules.php.api.executable.PhpExecutable optionsSubcategory(java.lang.String)
meth public org.netbeans.modules.php.api.executable.PhpExecutable redirectErrorStream(boolean)
meth public org.netbeans.modules.php.api.executable.PhpExecutable validationHandler(org.netbeans.modules.php.api.executable.PhpExecutableValidator$ValidationHandler)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.php.api.executable.PhpExecutable viaAutodetection(boolean)
meth public org.netbeans.modules.php.api.executable.PhpExecutable viaPhpInterpreter(boolean)
meth public org.netbeans.modules.php.api.executable.PhpExecutable warnUser(boolean)
meth public org.netbeans.modules.php.api.executable.PhpExecutable workDir(java.io.File)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds DUMMY_PROJECT,LOGGER,additionalParameters,command,displayName,environmentVariables,executable,executableName,fileOutput,fileOutputOnly,fullCommand,noDebugConfig,noInfo,optionsSubcategory,outputCharset,parameters,redirectErrorStream,validationHandler,viaAutodetection,viaPhpInterpreter,warnUser,workDir
hcls DummyProject,InfoInputProcessor,RedirectOutputProcessor

CLSS public final org.netbeans.modules.php.api.executable.PhpExecutableValidator
innr public abstract interface static ValidationHandler
meth public static boolean isValidCommand(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public static java.lang.String validateCommand(java.lang.String,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public static java.lang.String validateCommand(java.lang.String,org.netbeans.modules.php.api.executable.PhpExecutableValidator$ValidationHandler)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object

CLSS public abstract interface static org.netbeans.modules.php.api.executable.PhpExecutableValidator$ValidationHandler
 outer org.netbeans.modules.php.api.executable.PhpExecutableValidator
meth public abstract java.lang.String validate(java.lang.String)

CLSS public final org.netbeans.modules.php.api.executable.PhpInterpreter
fld public final static java.util.regex.Pattern[] LINE_PATTERNS
meth public java.lang.String getInterpreter()
meth public java.util.List<java.lang.String> getParameters()
meth public static org.netbeans.modules.php.api.executable.PhpInterpreter getCustom(java.lang.String) throws org.netbeans.modules.php.api.executable.InvalidPhpExecutableException
meth public static org.netbeans.modules.php.api.executable.PhpInterpreter getDefault() throws org.netbeans.modules.php.api.executable.InvalidPhpExecutableException
supr java.lang.Object
hfds executable

CLSS public abstract interface org.netbeans.modules.php.spi.executable.DebugStarter
innr public final static Properties
meth public abstract boolean isAlreadyRunning()
meth public abstract void start(org.netbeans.api.project.Project,java.util.concurrent.Callable<org.openide.util.Cancellable>,org.netbeans.modules.php.spi.executable.DebugStarter$Properties)
meth public abstract void stop()

CLSS public final static org.netbeans.modules.php.spi.executable.DebugStarter$Properties
 outer org.netbeans.modules.php.spi.executable.DebugStarter
innr public final static Builder
meth public boolean isCloseSession()
meth public java.lang.String getEncoding()
meth public java.util.List<org.openide.util.Pair<java.lang.String,java.lang.String>> getPathMapping()
meth public org.openide.filesystems.FileObject getStartFile()
meth public org.openide.util.Pair<java.lang.String,java.lang.Integer> getDebugProxy()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
supr java.lang.Object
hfds closeSession,debugProxy,encoding,pathMapping,startFile

CLSS public final static org.netbeans.modules.php.spi.executable.DebugStarter$Properties$Builder
 outer org.netbeans.modules.php.spi.executable.DebugStarter$Properties
cons public init()
meth public org.netbeans.modules.php.spi.executable.DebugStarter$Properties build()
meth public org.netbeans.modules.php.spi.executable.DebugStarter$Properties$Builder setCloseSession(boolean)
meth public org.netbeans.modules.php.spi.executable.DebugStarter$Properties$Builder setDebugProxy(org.openide.util.Pair<java.lang.String,java.lang.Integer>)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.php.spi.executable.DebugStarter$Properties$Builder setEncoding(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.php.spi.executable.DebugStarter$Properties$Builder setPathMapping(java.util.List<org.openide.util.Pair<java.lang.String,java.lang.String>>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.php.spi.executable.DebugStarter$Properties$Builder setStartFile(org.openide.filesystems.FileObject)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds closeSession,debugProxy,encoding,pathMapping,startFile

