#Signature file v4.1
#Version 1.13

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=false, 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 abstract interface org.netbeans.modules.cpplite.editor.spi.CProjectConfigurationProvider
innr public static ProjectConfiguration
meth public abstract org.netbeans.modules.cpplite.editor.spi.CProjectConfigurationProvider$ProjectConfiguration getProjectConfiguration()
meth public abstract void addChangeListener(javax.swing.event.ChangeListener)
meth public abstract void removeChangeListener(javax.swing.event.ChangeListener)

CLSS public static org.netbeans.modules.cpplite.editor.spi.CProjectConfigurationProvider$ProjectConfiguration
 outer org.netbeans.modules.cpplite.editor.spi.CProjectConfigurationProvider
cons public init(java.lang.String)
cons public init(java.lang.String,boolean)
cons public init(java.util.List<java.lang.String>)
fld public final java.lang.String commandJsonContent
fld public final java.lang.String commandJsonPath
fld public final java.util.List<java.lang.String> commandJsonCommand
supr java.lang.Object

