#Signature file v4.1
#Version 7.5.0.1

CLSS public abstract interface java.io.Serializable

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.gradle.StartParameter
cons protected init(org.gradle.initialization.BuildLayoutParameters)
cons public init()
fld protected java.io.File gradleHomeDir
fld public final static java.io.File DEFAULT_GRADLE_USER_HOME
fld public final static java.lang.String GRADLE_USER_HOME_PROPERTY_KEY = "gradle.user.home"
intf java.io.Serializable
intf org.gradle.api.logging.configuration.LoggingConfiguration
intf org.gradle.concurrent.ParallelismConfiguration
meth protected org.gradle.StartParameter prepareNewBuild(org.gradle.StartParameter)
meth protected org.gradle.StartParameter prepareNewInstance(org.gradle.StartParameter)
meth public boolean equals(java.lang.Object)
meth public boolean isBuildCacheDebugLogging()
meth public boolean isBuildCacheEnabled()
meth public boolean isBuildProjectDependencies()
meth public boolean isBuildScan()
meth public boolean isConfigureOnDemand()
 anno 0 org.gradle.api.Incubating()
meth public boolean isContinueOnFailure()
meth public boolean isContinuous()
meth public boolean isDryRun()
meth public boolean isExportKeys()
meth public boolean isNoBuildScan()
meth public boolean isOffline()
meth public boolean isParallelProjectExecutionEnabled()
meth public boolean isProfile()
meth public boolean isRefreshDependencies()
meth public boolean isRefreshKeys()
meth public boolean isRerunTasks()
meth public boolean isWriteDependencyLocks()
meth public int getMaxWorkerCount()
meth public int hashCode()
meth public java.io.File getBuildFile()
 anno 0 java.lang.Deprecated()
 anno 0 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public java.io.File getCurrentDir()
meth public java.io.File getGradleUserHomeDir()
meth public java.io.File getProjectCacheDir()
 anno 0 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public java.io.File getProjectDir()
 anno 0 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public java.io.File getSettingsFile()
 anno 0 java.lang.Deprecated()
 anno 0 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public java.lang.String toString()
meth public java.util.List<java.io.File> getAllInitScripts()
meth public java.util.List<java.io.File> getIncludedBuilds()
meth public java.util.List<java.io.File> getInitScripts()
meth public java.util.List<java.lang.String> getLockedDependenciesToUpdate()
meth public java.util.List<java.lang.String> getTaskNames()
meth public java.util.List<java.lang.String> getWriteDependencyVerifications()
meth public java.util.List<org.gradle.TaskExecutionRequest> getTaskRequests()
meth public java.util.Map<java.lang.String,java.lang.String> getProjectProperties()
meth public java.util.Map<java.lang.String,java.lang.String> getSystemPropertiesArgs()
meth public java.util.Set<java.lang.String> getExcludedTaskNames()
meth public org.gradle.StartParameter newBuild()
meth public org.gradle.StartParameter newInstance()
meth public org.gradle.StartParameter setBuildProjectDependencies(boolean)
meth public org.gradle.api.artifacts.verification.DependencyVerificationMode getDependencyVerificationMode()
meth public org.gradle.api.launcher.cli.WelcomeMessageConfiguration getWelcomeMessageConfiguration()
 anno 0 org.gradle.api.Incubating()
meth public org.gradle.api.logging.LogLevel getLogLevel()
meth public org.gradle.api.logging.configuration.ConsoleOutput getConsoleOutput()
meth public org.gradle.api.logging.configuration.ShowStacktrace getShowStacktrace()
meth public org.gradle.api.logging.configuration.WarningMode getWarningMode()
meth public void addInitScript(java.io.File)
meth public void includeBuild(java.io.File)
meth public void setBuildCacheDebugLogging(boolean)
meth public void setBuildCacheEnabled(boolean)
meth public void setBuildFile(java.io.File)
 anno 0 java.lang.Deprecated()
 anno 1 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public void setBuildScan(boolean)
meth public void setConfigureOnDemand(boolean)
 anno 0 org.gradle.api.Incubating()
meth public void setConsoleOutput(org.gradle.api.logging.configuration.ConsoleOutput)
meth public void setContinueOnFailure(boolean)
meth public void setContinuous(boolean)
meth public void setCurrentDir(java.io.File)
 anno 1 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public void setDependencyVerificationMode(org.gradle.api.artifacts.verification.DependencyVerificationMode)
meth public void setDryRun(boolean)
meth public void setExcludedTaskNames(java.lang.Iterable<java.lang.String>)
meth public void setExportKeys(boolean)
meth public void setGradleUserHomeDir(java.io.File)
 anno 1 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public void setIncludedBuilds(java.util.List<java.io.File>)
meth public void setInitScripts(java.util.List<java.io.File>)
meth public void setLockedDependenciesToUpdate(java.util.List<java.lang.String>)
meth public void setLogLevel(org.gradle.api.logging.LogLevel)
meth public void setMaxWorkerCount(int)
meth public void setNoBuildScan(boolean)
meth public void setOffline(boolean)
meth public void setParallelProjectExecutionEnabled(boolean)
meth public void setProfile(boolean)
meth public void setProjectCacheDir(java.io.File)
 anno 1 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public void setProjectDir(java.io.File)
 anno 1 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public void setProjectProperties(java.util.Map<java.lang.String,java.lang.String>)
meth public void setRefreshDependencies(boolean)
meth public void setRefreshKeys(boolean)
meth public void setRerunTasks(boolean)
meth public void setSettingsFile(java.io.File)
 anno 0 java.lang.Deprecated()
 anno 1 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public void setShowStacktrace(org.gradle.api.logging.configuration.ShowStacktrace)
meth public void setSystemPropertiesArgs(java.util.Map<java.lang.String,java.lang.String>)
meth public void setTaskNames(java.lang.Iterable<java.lang.String>)
 anno 1 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public void setTaskRequests(java.lang.Iterable<? extends org.gradle.TaskExecutionRequest>)
meth public void setWarningMode(org.gradle.api.logging.configuration.WarningMode)
meth public void setWelcomeMessageConfiguration(org.gradle.api.launcher.cli.WelcomeMessageConfiguration)
 anno 0 org.gradle.api.Incubating()
meth public void setWriteDependencyLocks(boolean)
meth public void setWriteDependencyVerifications(java.util.List<java.lang.String>)
supr java.lang.Object
hfds buildCacheDebugLogging,buildCacheEnabled,buildFile,buildProjectDependencies,buildScan,configureOnDemand,continueOnFailure,continuous,currentDir,dryRun,excludedTaskNames,gradleUserHomeDir,includedBuilds,initScripts,isExportKeys,isRefreshKeys,lockedDependenciesToUpdate,loggingConfiguration,noBuildScan,offline,parallelismConfiguration,profile,projectCacheDir,projectDir,projectProperties,refreshDependencies,rerunTasks,settingsFile,systemPropertiesArgs,taskRequests,verificationMode,welcomeMessageConfiguration,writeDependencyLocks,writeDependencyVerifications

CLSS public abstract interface org.gradle.TaskExecutionRequest
meth public abstract java.io.File getRootDir()
 anno 0 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public abstract java.lang.String getProjectPath()
 anno 0 org.gradle.internal.impldep.javax.annotation.Nullable()
meth public abstract java.util.List<java.lang.String> getArgs()

CLSS public abstract interface org.gradle.api.logging.configuration.LoggingConfiguration
meth public abstract org.gradle.api.logging.LogLevel getLogLevel()
meth public abstract org.gradle.api.logging.configuration.ConsoleOutput getConsoleOutput()
meth public abstract org.gradle.api.logging.configuration.ShowStacktrace getShowStacktrace()
meth public abstract org.gradle.api.logging.configuration.WarningMode getWarningMode()
meth public abstract void setConsoleOutput(org.gradle.api.logging.configuration.ConsoleOutput)
meth public abstract void setLogLevel(org.gradle.api.logging.LogLevel)
meth public abstract void setShowStacktrace(org.gradle.api.logging.configuration.ShowStacktrace)
meth public abstract void setWarningMode(org.gradle.api.logging.configuration.WarningMode)

CLSS public abstract interface org.gradle.concurrent.ParallelismConfiguration
meth public abstract boolean isParallelProjectExecutionEnabled()
meth public abstract int getMaxWorkerCount()
meth public abstract void setMaxWorkerCount(int)
meth public abstract void setParallelProjectExecutionEnabled(boolean)

