#Signature file v4.1
#Version 1.32

CLSS public abstract com.oracle.js.parser.ir.visitor.NodeVisitor<%0 extends com.oracle.js.parser.ir.LexicalContext>
cons public init({com.oracle.js.parser.ir.visitor.NodeVisitor%0})
fld protected final {com.oracle.js.parser.ir.visitor.NodeVisitor%0} lc
meth protected boolean enterDefault(com.oracle.js.parser.ir.Node)
meth protected com.oracle.js.parser.ir.Node leaveDefault(com.oracle.js.parser.ir.Node)
meth public boolean enterAccessNode(com.oracle.js.parser.ir.AccessNode)
meth public boolean enterBinaryNode(com.oracle.js.parser.ir.BinaryNode)
meth public boolean enterBlock(com.oracle.js.parser.ir.Block)
meth public boolean enterBlockStatement(com.oracle.js.parser.ir.BlockStatement)
meth public boolean enterBreakNode(com.oracle.js.parser.ir.BreakNode)
meth public boolean enterCallNode(com.oracle.js.parser.ir.CallNode)
meth public boolean enterCaseNode(com.oracle.js.parser.ir.CaseNode)
meth public boolean enterCatchNode(com.oracle.js.parser.ir.CatchNode)
meth public boolean enterClassElement(com.oracle.js.parser.ir.ClassElement)
meth public boolean enterClassNode(com.oracle.js.parser.ir.ClassNode)
meth public boolean enterContinueNode(com.oracle.js.parser.ir.ContinueNode)
meth public boolean enterDebuggerNode(com.oracle.js.parser.ir.DebuggerNode)
meth public boolean enterEmptyNode(com.oracle.js.parser.ir.EmptyNode)
meth public boolean enterErrorNode(com.oracle.js.parser.ir.ErrorNode)
meth public boolean enterExportClauseNode(com.oracle.js.parser.ir.ExportClauseNode)
meth public boolean enterExportNode(com.oracle.js.parser.ir.ExportNode)
meth public boolean enterExportSpecifierNode(com.oracle.js.parser.ir.ExportSpecifierNode)
meth public boolean enterExpressionStatement(com.oracle.js.parser.ir.ExpressionStatement)
meth public boolean enterForNode(com.oracle.js.parser.ir.ForNode)
meth public boolean enterFromNode(com.oracle.js.parser.ir.FromNode)
meth public boolean enterFunctionNode(com.oracle.js.parser.ir.FunctionNode)
meth public boolean enterIdentNode(com.oracle.js.parser.ir.IdentNode)
meth public boolean enterIfNode(com.oracle.js.parser.ir.IfNode)
meth public boolean enterImportClauseNode(com.oracle.js.parser.ir.ImportClauseNode)
meth public boolean enterImportNode(com.oracle.js.parser.ir.ImportNode)
meth public boolean enterImportSpecifierNode(com.oracle.js.parser.ir.ImportSpecifierNode)
meth public boolean enterIndexNode(com.oracle.js.parser.ir.IndexNode)
meth public boolean enterJoinPredecessorExpression(com.oracle.js.parser.ir.JoinPredecessorExpression)
meth public boolean enterJsxAttributeNode(com.oracle.js.parser.ir.JsxAttributeNode)
meth public boolean enterJsxElementNode(com.oracle.js.parser.ir.JsxElementNode)
meth public boolean enterLabelNode(com.oracle.js.parser.ir.LabelNode)
meth public boolean enterLiteralNode(com.oracle.js.parser.ir.LiteralNode<?>)
meth public boolean enterNameSpaceImportNode(com.oracle.js.parser.ir.NameSpaceImportNode)
meth public boolean enterNamedImportsNode(com.oracle.js.parser.ir.NamedImportsNode)
meth public boolean enterObjectNode(com.oracle.js.parser.ir.ObjectNode)
meth public boolean enterPropertyNode(com.oracle.js.parser.ir.PropertyNode)
meth public boolean enterReturnNode(com.oracle.js.parser.ir.ReturnNode)
meth public boolean enterRuntimeNode(com.oracle.js.parser.ir.RuntimeNode)
meth public boolean enterSwitchNode(com.oracle.js.parser.ir.SwitchNode)
meth public boolean enterTernaryNode(com.oracle.js.parser.ir.TernaryNode)
meth public boolean enterThrowNode(com.oracle.js.parser.ir.ThrowNode)
meth public boolean enterTryNode(com.oracle.js.parser.ir.TryNode)
meth public boolean enterUnaryNode(com.oracle.js.parser.ir.UnaryNode)
meth public boolean enterVarNode(com.oracle.js.parser.ir.VarNode)
meth public boolean enterWhileNode(com.oracle.js.parser.ir.WhileNode)
meth public boolean enterWithNode(com.oracle.js.parser.ir.WithNode)
meth public com.oracle.js.parser.ir.Node leaveAccessNode(com.oracle.js.parser.ir.AccessNode)
meth public com.oracle.js.parser.ir.Node leaveBinaryNode(com.oracle.js.parser.ir.BinaryNode)
meth public com.oracle.js.parser.ir.Node leaveBlock(com.oracle.js.parser.ir.Block)
meth public com.oracle.js.parser.ir.Node leaveBlockStatement(com.oracle.js.parser.ir.BlockStatement)
meth public com.oracle.js.parser.ir.Node leaveBreakNode(com.oracle.js.parser.ir.BreakNode)
meth public com.oracle.js.parser.ir.Node leaveCallNode(com.oracle.js.parser.ir.CallNode)
meth public com.oracle.js.parser.ir.Node leaveCaseNode(com.oracle.js.parser.ir.CaseNode)
meth public com.oracle.js.parser.ir.Node leaveCatchNode(com.oracle.js.parser.ir.CatchNode)
meth public com.oracle.js.parser.ir.Node leaveClassElement(com.oracle.js.parser.ir.ClassElement)
meth public com.oracle.js.parser.ir.Node leaveClassNode(com.oracle.js.parser.ir.ClassNode)
meth public com.oracle.js.parser.ir.Node leaveContinueNode(com.oracle.js.parser.ir.ContinueNode)
meth public com.oracle.js.parser.ir.Node leaveDebuggerNode(com.oracle.js.parser.ir.DebuggerNode)
meth public com.oracle.js.parser.ir.Node leaveEmptyNode(com.oracle.js.parser.ir.EmptyNode)
meth public com.oracle.js.parser.ir.Node leaveErrorNode(com.oracle.js.parser.ir.ErrorNode)
meth public com.oracle.js.parser.ir.Node leaveExportClauseNode(com.oracle.js.parser.ir.ExportClauseNode)
meth public com.oracle.js.parser.ir.Node leaveExportNode(com.oracle.js.parser.ir.ExportNode)
meth public com.oracle.js.parser.ir.Node leaveExportSpecifierNode(com.oracle.js.parser.ir.ExportSpecifierNode)
meth public com.oracle.js.parser.ir.Node leaveExpressionStatement(com.oracle.js.parser.ir.ExpressionStatement)
meth public com.oracle.js.parser.ir.Node leaveForNode(com.oracle.js.parser.ir.ForNode)
meth public com.oracle.js.parser.ir.Node leaveFromNode(com.oracle.js.parser.ir.FromNode)
meth public com.oracle.js.parser.ir.Node leaveFunctionNode(com.oracle.js.parser.ir.FunctionNode)
meth public com.oracle.js.parser.ir.Node leaveIdentNode(com.oracle.js.parser.ir.IdentNode)
meth public com.oracle.js.parser.ir.Node leaveIfNode(com.oracle.js.parser.ir.IfNode)
meth public com.oracle.js.parser.ir.Node leaveImportClauseNode(com.oracle.js.parser.ir.ImportClauseNode)
meth public com.oracle.js.parser.ir.Node leaveImportNode(com.oracle.js.parser.ir.ImportNode)
meth public com.oracle.js.parser.ir.Node leaveImportSpecifierNode(com.oracle.js.parser.ir.ImportSpecifierNode)
meth public com.oracle.js.parser.ir.Node leaveIndexNode(com.oracle.js.parser.ir.IndexNode)
meth public com.oracle.js.parser.ir.Node leaveJoinPredecessorExpression(com.oracle.js.parser.ir.JoinPredecessorExpression)
meth public com.oracle.js.parser.ir.Node leaveJsxAttributeNode(com.oracle.js.parser.ir.JsxAttributeNode)
meth public com.oracle.js.parser.ir.Node leaveJsxElementNode(com.oracle.js.parser.ir.JsxElementNode)
meth public com.oracle.js.parser.ir.Node leaveLabelNode(com.oracle.js.parser.ir.LabelNode)
meth public com.oracle.js.parser.ir.Node leaveLiteralNode(com.oracle.js.parser.ir.LiteralNode<?>)
meth public com.oracle.js.parser.ir.Node leaveNameSpaceImportNode(com.oracle.js.parser.ir.NameSpaceImportNode)
meth public com.oracle.js.parser.ir.Node leaveNamedImportsNode(com.oracle.js.parser.ir.NamedImportsNode)
meth public com.oracle.js.parser.ir.Node leaveObjectNode(com.oracle.js.parser.ir.ObjectNode)
meth public com.oracle.js.parser.ir.Node leavePropertyNode(com.oracle.js.parser.ir.PropertyNode)
meth public com.oracle.js.parser.ir.Node leaveReturnNode(com.oracle.js.parser.ir.ReturnNode)
meth public com.oracle.js.parser.ir.Node leaveRuntimeNode(com.oracle.js.parser.ir.RuntimeNode)
meth public com.oracle.js.parser.ir.Node leaveSwitchNode(com.oracle.js.parser.ir.SwitchNode)
meth public com.oracle.js.parser.ir.Node leaveTernaryNode(com.oracle.js.parser.ir.TernaryNode)
meth public com.oracle.js.parser.ir.Node leaveThrowNode(com.oracle.js.parser.ir.ThrowNode)
meth public com.oracle.js.parser.ir.Node leaveTryNode(com.oracle.js.parser.ir.TryNode)
meth public com.oracle.js.parser.ir.Node leaveUnaryNode(com.oracle.js.parser.ir.UnaryNode)
meth public com.oracle.js.parser.ir.Node leaveVarNode(com.oracle.js.parser.ir.VarNode)
meth public com.oracle.js.parser.ir.Node leaveWhileNode(com.oracle.js.parser.ir.WhileNode)
meth public com.oracle.js.parser.ir.Node leaveWithNode(com.oracle.js.parser.ir.WithNode)
meth public final {com.oracle.js.parser.ir.visitor.NodeVisitor%0} getLexicalContext()
supr java.lang.Object

CLSS public abstract interface java.io.Serializable

CLSS public abstract interface java.lang.Comparable<%0 extends java.lang.Object>
meth public abstract int compareTo({java.lang.Comparable%0})

CLSS public abstract java.lang.Enum<%0 extends java.lang.Enum<{java.lang.Enum%0}>>
cons protected init(java.lang.String,int)
intf java.io.Serializable
intf java.lang.Comparable<{java.lang.Enum%0}>
meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected final void finalize()
meth public final boolean equals(java.lang.Object)
meth public final int compareTo({java.lang.Enum%0})
meth public final int hashCode()
meth public final int ordinal()
meth public final java.lang.Class<{java.lang.Enum%0}> getDeclaringClass()
meth public final java.lang.String name()
meth public java.lang.String toString()
meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String)
supr java.lang.Object

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 abstract interface java.lang.annotation.Annotation
meth public abstract boolean equals(java.lang.Object)
meth public abstract int hashCode()
meth public abstract java.lang.Class<? extends java.lang.annotation.Annotation> annotationType()
meth public abstract java.lang.String toString()

CLSS public abstract interface !annotation java.lang.annotation.Documented
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation

CLSS public abstract interface !annotation java.lang.annotation.Retention
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation
meth public abstract java.lang.annotation.RetentionPolicy value()

CLSS public abstract interface !annotation java.lang.annotation.Target
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation
meth public abstract java.lang.annotation.ElementType[] value()

CLSS public abstract interface org.netbeans.modules.csl.api.ElementHandle
innr public static UrlHandle
meth public abstract boolean signatureEquals(org.netbeans.modules.csl.api.ElementHandle)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public abstract java.lang.String getIn()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public abstract java.lang.String getMimeType()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public abstract java.lang.String getName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public abstract java.util.Set<org.netbeans.modules.csl.api.Modifier> getModifiers()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public abstract org.netbeans.modules.csl.api.ElementKind getKind()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public abstract org.netbeans.modules.csl.api.OffsetRange getOffsetRange(org.netbeans.modules.csl.spi.ParserResult)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public abstract org.openide.filesystems.FileObject getFileObject()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()

CLSS public final org.netbeans.modules.javascript2.model.api.Index
fld public final static java.lang.String FIELD_ARRAY_TYPES = "array"
fld public final static java.lang.String FIELD_ASSIGNMENTS = "assign"
fld public final static java.lang.String FIELD_BASE_NAME = "bn"
fld public final static java.lang.String FIELD_BASE_NAME_INSENSITIVE = "bni"
fld public final static java.lang.String FIELD_FLAG = "flag"
fld public final static java.lang.String FIELD_FQ_NAME = "fqn"
fld public final static java.lang.String FIELD_OFFSET = "offset"
fld public final static java.lang.String FIELD_PARAMETERS = "param"
fld public final static java.lang.String FIELD_RETURN_TYPES = "return"
fld public final static java.lang.String FIELD_USAGE = "usage"
fld public final static java.lang.String[] TERMS_BASIC_INFO
meth public !varargs java.util.Collection<? extends org.netbeans.modules.parsing.spi.indexing.support.IndexResult> findByFqn(java.lang.String,java.lang.String[])
meth public !varargs java.util.Collection<? extends org.netbeans.modules.parsing.spi.indexing.support.IndexResult> query(java.lang.String,java.lang.String,org.netbeans.modules.parsing.spi.indexing.support.QuerySupport$Kind,java.lang.String[])
meth public java.util.Collection<org.netbeans.modules.javascript2.model.api.IndexedElement> getGlobalVar(java.lang.String)
meth public java.util.Collection<org.netbeans.modules.javascript2.model.api.IndexedElement> getProperties(java.lang.String)
meth public java.util.Collection<org.netbeans.modules.javascript2.model.api.IndexedElement> getPropertiesWithPrefix(java.lang.String,java.lang.String)
meth public java.util.Collection<org.netbeans.modules.javascript2.model.api.IndexedElement> getUsagesFromExpression(java.util.List<java.lang.String>)
meth public static org.netbeans.modules.javascript2.model.api.Index get(java.util.Collection<org.openide.filesystems.FileObject>)
meth public static org.netbeans.modules.javascript2.model.api.Index get(org.openide.filesystems.FileObject)
supr java.lang.Object
hfds AVERAGE_BASIC_INFO_SIZE,CACHE_INDEX_RESULT_LARGE,CACHE_INDEX_RESULT_SMALL,INDEX_CACHE,INVALIDATE_LISTENER,LOCK,LOG,MAX_CACHE_VALUE_SIZE,MAX_ENTRIES_CACHE_INDEX_RESULT,MAX_FIND_PROPERTIES_RECURSION,QUERY_STATS,READ_LOCK,WRITE_LOCK,cacheHit,cacheMiss,querySupport,updateCache
hcls CacheKey,CacheValue,StatsKey,StatsValue

CLSS public org.netbeans.modules.javascript2.model.api.IndexedElement
cons public init(org.openide.filesystems.FileObject,java.lang.String,java.lang.String,boolean,boolean,org.netbeans.modules.javascript2.model.api.JsElement$Kind,org.netbeans.modules.csl.api.OffsetRange,java.util.Set<org.netbeans.modules.csl.api.Modifier>,java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>,boolean)
fld public final static char ANONYMOUS_POSFIX = 'A'
fld public final static char OBJECT_POSFIX = 'O'
fld public final static char PARAMETER_POSTFIX = 'P'
innr public static Flag
innr public static FunctionIndexedElement
intf org.netbeans.modules.javascript2.model.api.JsElement
meth public boolean isAnonymous()
meth public boolean isDeclared()
meth public boolean isPlatform()
meth public boolean signatureEquals(org.netbeans.modules.csl.api.ElementHandle)
meth public int getOffset()
meth public java.lang.String getFQN()
meth public java.lang.String getIn()
meth public java.lang.String getMimeType()
meth public java.lang.String getName()
meth public java.lang.String getSourceLabel()
meth public java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> getAssignments()
meth public java.util.Set<org.netbeans.modules.csl.api.Modifier> getModifiers()
meth public org.netbeans.modules.csl.api.ElementKind getKind()
meth public org.netbeans.modules.csl.api.OffsetRange getOffsetRange()
meth public org.netbeans.modules.csl.api.OffsetRange getOffsetRange(org.netbeans.modules.csl.spi.ParserResult)
meth public org.netbeans.modules.javascript2.model.api.JsElement$Kind getJSKind()
meth public org.openide.filesystems.FileObject getFileObject()
meth public static java.lang.String getFQN(org.netbeans.modules.parsing.spi.indexing.support.IndexResult)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> getArrayTypes(org.netbeans.modules.parsing.spi.indexing.support.IndexResult)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> getAssignments(org.netbeans.modules.parsing.spi.indexing.support.IndexResult)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> getReturnTypes(org.netbeans.modules.parsing.spi.indexing.support.IndexResult)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> getTypes(org.netbeans.modules.parsing.spi.indexing.support.IndexResult,java.lang.String)
meth public static org.netbeans.modules.javascript2.model.api.IndexedElement create(org.netbeans.modules.parsing.spi.indexing.support.IndexResult)
supr java.lang.Object
hfds assignments,fileObject,fqn,isAnonymous,isDeclared,isPlatform,jsKind,modifiers,name,offsetRange

CLSS public static org.netbeans.modules.javascript2.model.api.IndexedElement$Flag
 outer org.netbeans.modules.javascript2.model.api.IndexedElement
cons public init()
meth public static boolean isAnonymous(int)
meth public static boolean isDeclared(int)
meth public static boolean isGlobal(int)
meth public static boolean isPlatform(int)
meth public static int getFlag(org.netbeans.modules.javascript2.model.api.JsObject)
meth public static java.util.Set<org.netbeans.modules.csl.api.Modifier> getModifiers(int)
meth public static org.netbeans.modules.javascript2.model.api.JsElement$Kind getJsKind(int)
supr java.lang.Object
hfds ANONYMOUS,ANONYMOUS_OBJECT,ARROW_FUNCTION,CALLBACK,CONSTANT,CONSTRUCTOR,DECLARED,DEPRICATED,FIELD,FILE,FUNCTION,GENERATOR,GLOBAL,METHOD,OBJECT,OBJECT_LITERAL,PARAMETER,PLATFORM,PRIVATE,PRIVILAGE,PROPERTY,PROPERTY_GETTER,PROPERTY_SETTER,PUBLIC,STATIC,VARIABLE

CLSS public static org.netbeans.modules.javascript2.model.api.IndexedElement$FunctionIndexedElement
 outer org.netbeans.modules.javascript2.model.api.IndexedElement
cons public init(org.openide.filesystems.FileObject,java.lang.String,java.lang.String,org.netbeans.modules.csl.api.OffsetRange,int,java.util.LinkedHashMap<java.lang.String,java.util.Collection<java.lang.String>>,java.util.Collection<java.lang.String>,java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>)
meth public java.util.Collection<java.lang.String> getReturnTypes()
meth public java.util.LinkedHashMap<java.lang.String,java.util.Collection<java.lang.String>> getParameters()
supr org.netbeans.modules.javascript2.model.api.IndexedElement
hfds parameters,returnTypes

CLSS public abstract interface org.netbeans.modules.javascript2.model.api.JsArray
intf org.netbeans.modules.javascript2.model.api.JsObject
meth public abstract java.util.Collection<? extends org.netbeans.modules.javascript2.types.api.TypeUsage> getTypesInArray()

CLSS public abstract interface org.netbeans.modules.javascript2.model.api.JsElement
innr public final static !enum Kind
intf org.netbeans.modules.csl.api.ElementHandle
meth public abstract boolean isDeclared()
meth public abstract boolean isPlatform()
meth public abstract int getOffset()
meth public abstract java.lang.String getSourceLabel()
meth public abstract org.netbeans.modules.csl.api.OffsetRange getOffsetRange()
meth public abstract org.netbeans.modules.javascript2.model.api.JsElement$Kind getJSKind()

CLSS public final static !enum org.netbeans.modules.javascript2.model.api.JsElement$Kind
 outer org.netbeans.modules.javascript2.model.api.JsElement
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind ANONYMOUS_OBJECT
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind ARROW_FUNCTION
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind BLOCK
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind CALLBACK
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind CATCH_BLOCK
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind CLASS
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind CONSTANT
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind CONSTRUCTOR
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind FIELD
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind FILE
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind FUNCTION
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind GENERATOR
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind METHOD
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind OBJECT
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind OBJECT_LITERAL
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind PARAMETER
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind PROPERTY
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind PROPERTY_GETTER
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind PROPERTY_SETTER
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind VARIABLE
fld public final static org.netbeans.modules.javascript2.model.api.JsElement$Kind WITH_OBJECT
meth public boolean isFunction()
meth public boolean isPropertyGetterSetter()
meth public int getId()
meth public static org.netbeans.modules.javascript2.model.api.JsElement$Kind fromId(int)
meth public static org.netbeans.modules.javascript2.model.api.JsElement$Kind valueOf(java.lang.String)
meth public static org.netbeans.modules.javascript2.model.api.JsElement$Kind[] values()
supr java.lang.Enum<org.netbeans.modules.javascript2.model.api.JsElement$Kind>
hfds LOOKUP,id

CLSS public abstract interface org.netbeans.modules.javascript2.model.api.JsFunction
intf org.netbeans.modules.javascript2.model.api.JsObject
intf org.netbeans.modules.javascript2.types.api.DeclarationScope
meth public abstract java.util.Collection<? extends org.netbeans.modules.javascript2.model.api.JsObject> getParameters()
meth public abstract java.util.Collection<? extends org.netbeans.modules.javascript2.types.api.TypeUsage> getReturnTypes()
meth public abstract org.netbeans.modules.javascript2.model.api.JsObject getParameter(java.lang.String)
meth public abstract void addReturnType(org.netbeans.modules.javascript2.types.api.TypeUsage)

CLSS public abstract interface org.netbeans.modules.javascript2.model.api.JsObject
intf org.netbeans.modules.javascript2.model.api.JsElement
meth public abstract boolean containsOffset(int)
meth public abstract boolean hasExactName()
meth public abstract boolean isAnonymous()
meth public abstract boolean isDeprecated()
meth public abstract boolean isVirtual()
meth public abstract boolean moveProperty(java.lang.String,org.netbeans.modules.javascript2.model.api.JsObject)
meth public abstract int getAssignmentCount()
meth public abstract java.lang.String getFullyQualifiedName()
meth public abstract java.util.Collection<? extends org.netbeans.modules.javascript2.types.api.TypeUsage> getAssignmentForOffset(int)
meth public abstract java.util.Collection<? extends org.netbeans.modules.javascript2.types.api.TypeUsage> getAssignments()
meth public abstract java.util.List<org.netbeans.modules.javascript2.model.api.Occurrence> getOccurrences()
meth public abstract java.util.Map<java.lang.String,? extends org.netbeans.modules.javascript2.model.api.JsObject> getProperties()
meth public abstract org.netbeans.modules.csl.api.Documentation getDocumentation()
meth public abstract org.netbeans.modules.javascript2.model.api.JsObject getParent()
meth public abstract org.netbeans.modules.javascript2.model.api.JsObject getProperty(java.lang.String)
meth public abstract org.netbeans.modules.javascript2.types.api.Identifier getDeclarationName()
meth public abstract void addAssignment(org.netbeans.modules.javascript2.types.api.TypeUsage,int)
meth public abstract void addOccurrence(org.netbeans.modules.csl.api.OffsetRange)
meth public abstract void addProperty(java.lang.String,org.netbeans.modules.javascript2.model.api.JsObject)
meth public abstract void clearAssignments()
meth public abstract void setAnonymous(boolean)
meth public abstract void setDocumentation(org.netbeans.modules.csl.api.Documentation)

CLSS public abstract interface org.netbeans.modules.javascript2.model.api.JsReference
intf org.netbeans.modules.javascript2.model.api.JsObject
meth public abstract org.netbeans.modules.javascript2.model.api.JsObject getOriginal()

CLSS public abstract interface org.netbeans.modules.javascript2.model.api.JsWith
intf org.netbeans.modules.javascript2.model.api.JsObject
meth public abstract java.util.Collection<? extends org.netbeans.modules.javascript2.model.api.JsWith> getInnerWiths()
meth public abstract java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> getTypes()
meth public abstract org.netbeans.modules.javascript2.model.api.JsWith getOuterWith()

CLSS public final org.netbeans.modules.javascript2.model.api.Model
innr public abstract interface static Printer
meth public java.util.Collection<? extends org.netbeans.modules.javascript2.model.api.JsObject> getVariables(int)
meth public java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> getReturnTypesFromFrameworks(java.lang.String,int)
meth public java.util.List<org.netbeans.modules.javascript2.types.api.Identifier> getNodeName(com.oracle.js.parser.ir.Node)
meth public org.netbeans.modules.javascript2.model.api.JsObject findVariable(java.lang.String,int)
meth public org.netbeans.modules.javascript2.model.api.JsObject getDeclarationObject(int)
meth public org.netbeans.modules.javascript2.model.api.JsObject getGlobalObject()
meth public static java.util.Collection<org.netbeans.modules.javascript2.model.api.JsObject> readModel(java.io.BufferedReader,org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String,java.net.URL) throws java.io.IOException
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.modules.javascript2.model.api.Model getModel(org.netbeans.modules.csl.spi.ParserResult,boolean)
meth public static void writeObject(org.netbeans.modules.javascript2.model.api.Model$Printer,org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.types.spi.ParserResult)
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public void resolve()
meth public void writeModel(org.netbeans.modules.javascript2.model.api.Model$Printer)
meth public void writeModel(org.netbeans.modules.javascript2.model.api.Model$Printer,boolean)
meth public void writeObject(org.netbeans.modules.javascript2.model.api.Model$Printer,org.netbeans.modules.javascript2.model.api.JsObject,boolean)
supr java.lang.Object
hfds LOGGER,OBJECT_PATTERN,PROPERTIES_COMPARATOR,RETURN_TYPES_COMPARATOR,RETURN_TYPE_PATTERN,assertFired,occurrenceBuilder,parserResult,resolveWithObjects,returnTypesFromFrameworks,visitor
hcls ParsingState

CLSS public abstract interface static org.netbeans.modules.javascript2.model.api.Model$Printer
 outer org.netbeans.modules.javascript2.model.api.Model
meth public abstract void println(java.lang.String)

CLSS public org.netbeans.modules.javascript2.model.api.ModelUtils
cons public init()
fld public final static java.lang.String ARGUMENTS = "arguments"
fld public final static java.lang.String CONSTRUCTOR = "constructor"
fld public final static java.lang.String PROTOTYPE = "prototype"
fld public final static java.lang.String THIS = "this"
meth public static boolean hasDeclaredProperty(org.netbeans.modules.javascript2.model.api.JsObject)
meth public static boolean isDescendant(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.model.api.JsObject)
meth public static boolean isGlobal(org.netbeans.modules.javascript2.model.api.JsObject)
meth public static boolean isKnownGLobalType(java.lang.String)
meth public static boolean wasProcessed(org.netbeans.modules.javascript2.model.api.JsObject,java.util.Set<java.lang.String>)
meth public static java.lang.String getDisplayName(java.lang.String)
meth public static java.lang.String getDisplayName(org.netbeans.modules.javascript2.types.api.Type)
meth public static java.lang.String getFQNFromType(org.netbeans.modules.javascript2.types.api.Type)
meth public static java.util.Collection<? extends org.netbeans.modules.javascript2.model.api.JsObject> getVariables(org.netbeans.modules.javascript2.model.api.Model,int)
meth public static java.util.Collection<? extends org.netbeans.modules.javascript2.model.api.JsObject> getVariables(org.netbeans.modules.javascript2.types.api.DeclarationScope)
meth public static java.util.Collection<? extends org.netbeans.modules.javascript2.types.api.TypeUsage> getTypeFromWith(org.netbeans.modules.javascript2.model.api.Model,int)
meth public static java.util.Collection<java.lang.String> findPrototypeChain(java.lang.String,org.netbeans.modules.javascript2.model.api.Index)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.Identifier> getDefinedGlobal(org.netbeans.modules.parsing.api.Snapshot,int)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> resolveSemiTypeOfExpression(org.netbeans.modules.javascript2.model.ModelBuilder,com.oracle.js.parser.ir.Node)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> resolveTypeFromExpression(org.netbeans.modules.javascript2.model.api.Model,org.netbeans.modules.javascript2.model.api.Index,java.util.List<java.lang.String>,int,boolean)
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> resolveTypeFromSemiType(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.types.api.TypeUsage)
meth public static java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> resolveTypes(java.util.Collection<? extends org.netbeans.modules.javascript2.types.api.TypeUsage>,org.netbeans.modules.javascript2.model.api.Model,org.netbeans.modules.javascript2.model.api.Index,boolean)
meth public static java.util.List<? extends org.netbeans.modules.javascript2.model.api.JsObject> getExtendingGlobalObjects(org.openide.filesystems.FileObject)
meth public static java.util.List<java.lang.String> expressionFromType(org.netbeans.modules.javascript2.types.api.TypeUsage)
meth public static java.util.List<java.lang.String> resolveExpressionChain(org.netbeans.modules.parsing.api.Snapshot,int,boolean)
meth public static org.netbeans.modules.csl.api.OffsetRange documentOffsetRange(org.netbeans.modules.javascript2.types.spi.ParserResult,int,int)
meth public static org.netbeans.modules.javascript2.model.JsObjectImpl getJsObject(org.netbeans.modules.javascript2.model.ModelBuilder,java.util.List<org.netbeans.modules.javascript2.types.api.Identifier>,boolean)
meth public static org.netbeans.modules.javascript2.model.api.JsObject findJsObject(org.netbeans.modules.javascript2.model.api.JsObject,int)
meth public static org.netbeans.modules.javascript2.model.api.JsObject findJsObject(org.netbeans.modules.javascript2.model.api.JsObject,int,java.util.Set<java.lang.String>)
meth public static org.netbeans.modules.javascript2.model.api.JsObject findJsObject(org.netbeans.modules.javascript2.model.api.Model,int)
meth public static org.netbeans.modules.javascript2.model.api.JsObject findJsObjectByName(org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String)
meth public static org.netbeans.modules.javascript2.model.api.JsObject findJsObjectByName(org.netbeans.modules.javascript2.model.api.Model,java.lang.String)
meth public static org.netbeans.modules.javascript2.model.api.JsObject findObjectForOffset(java.lang.String,int,org.netbeans.modules.javascript2.model.api.Model)
meth public static org.netbeans.modules.javascript2.model.api.JsObject getGlobalObject(org.netbeans.modules.javascript2.model.api.JsObject)
meth public static org.netbeans.modules.javascript2.model.api.JsObject getJsObjectByName(org.netbeans.modules.javascript2.types.api.DeclarationScope,java.lang.String)
meth public static org.netbeans.modules.javascript2.model.api.JsObject getScopeVariable(org.netbeans.modules.javascript2.types.api.DeclarationScope,java.lang.String)
meth public static org.netbeans.modules.javascript2.types.api.DeclarationScope getDeclarationScope(org.netbeans.modules.javascript2.model.api.JsObject)
meth public static org.netbeans.modules.javascript2.types.api.DeclarationScope getDeclarationScope(org.netbeans.modules.javascript2.model.api.Model,int)
meth public static org.netbeans.modules.javascript2.types.api.DeclarationScope getDeclarationScope(org.netbeans.modules.javascript2.types.api.DeclarationScope,int)
meth public static org.netbeans.modules.javascript2.types.api.TypeUsage createResolvedType(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.types.api.TypeUsage)
meth public static void addDocTypesOccurence(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.doc.spi.JsDocumentationHolder)
meth public static void addUniqueType(java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>,java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>)
meth public static void addUniqueType(java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>,java.util.Set<java.lang.String>,java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>)
meth public static void addUniqueType(java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>,java.util.Set<java.lang.String>,org.netbeans.modules.javascript2.types.api.TypeUsage)
meth public static void addUniqueType(java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage>,org.netbeans.modules.javascript2.types.api.TypeUsage)
meth public static void changeDeclarationScope(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.types.api.DeclarationScope)
meth public static void copyOccurrences(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.model.api.JsObject)
meth public static void moveProperty(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.model.api.JsObject)
supr java.lang.Object
hfds GENERATED_ANONYM_PREFIX,GENERATED_FUNCTION_PREFIX,GLOBAL_DIRECTIVE,KNOWN_TYPES,LOG,MAX_RECURSION_DEEP_RESOLVING_ASSIGNMENTS,deepRA,knownGlobalObjects
hcls State

CLSS public final org.netbeans.modules.javascript2.model.api.Occurrence
cons public !varargs init(org.netbeans.modules.csl.api.OffsetRange,org.netbeans.modules.javascript2.model.api.JsObject[])
meth public boolean equals(java.lang.Object)
meth public int hashCode()
meth public java.util.Collection<? extends org.netbeans.modules.javascript2.model.api.JsObject> getDeclarations()
meth public org.netbeans.modules.csl.api.OffsetRange getOffsetRange()
supr java.lang.Object
hfds declarations,offsetRange

CLSS public final org.netbeans.modules.javascript2.model.spi.FunctionArgument
innr public final static !enum Kind
meth public int getOffset()
meth public int getOrder()
meth public java.lang.Object getValue()
meth public org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind getKind()
supr java.lang.Object
hfds kind,offset,order,value

CLSS public final static !enum org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind
 outer org.netbeans.modules.javascript2.model.spi.FunctionArgument
fld public final static org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind ANONYMOUS_OBJECT
fld public final static org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind ARRAY
fld public final static org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind REFERENCE
fld public final static org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind STRING
fld public final static org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind UNKNOWN
meth public static org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind valueOf(java.lang.String)
meth public static org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind[] values()
supr java.lang.Enum<org.netbeans.modules.javascript2.model.spi.FunctionArgument$Kind>

CLSS public abstract interface org.netbeans.modules.javascript2.model.spi.FunctionInterceptor
innr public abstract interface static !annotation Registration
meth public abstract java.util.Collection<org.netbeans.modules.javascript2.types.api.TypeUsage> intercept(org.netbeans.modules.parsing.api.Snapshot,java.lang.String,org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.types.api.DeclarationScope,org.netbeans.modules.javascript2.model.spi.ModelElementFactory,java.util.Collection<org.netbeans.modules.javascript2.model.spi.FunctionArgument>)
meth public abstract java.util.regex.Pattern getNamePattern()

CLSS public abstract interface static !annotation org.netbeans.modules.javascript2.model.spi.FunctionInterceptor$Registration
 outer org.netbeans.modules.javascript2.model.spi.FunctionInterceptor
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=SOURCE)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
intf java.lang.annotation.Annotation
meth public abstract !hasdefault int priority()

CLSS public abstract interface org.netbeans.modules.javascript2.model.spi.IndexChangeSupport
meth public abstract void addChangeListener(javax.swing.event.ChangeListener)
meth public abstract void removeChangeListener(javax.swing.event.ChangeListener)

CLSS public final org.netbeans.modules.javascript2.model.spi.ModelContainer
cons public init()
meth public org.netbeans.modules.javascript2.model.api.Model getModel(org.netbeans.modules.javascript2.types.spi.ParserResult,boolean)
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOGGER,model

CLSS public final org.netbeans.modules.javascript2.model.spi.ModelElementFactory
meth public org.netbeans.modules.javascript2.model.api.JsFunction newFunction(org.netbeans.modules.javascript2.types.api.DeclarationScope,org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String,java.util.Collection<java.lang.String>)
meth public org.netbeans.modules.javascript2.model.api.JsFunction newFunction(org.netbeans.modules.javascript2.types.api.DeclarationScope,org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String,java.util.Collection<java.lang.String>,java.lang.String)
meth public org.netbeans.modules.javascript2.model.api.JsFunction newFunction(org.netbeans.modules.javascript2.types.api.DeclarationScope,org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String,java.util.Collection<java.lang.String>,org.netbeans.modules.csl.api.OffsetRange,java.lang.String)
meth public org.netbeans.modules.javascript2.model.api.JsFunction newFunction(org.netbeans.modules.javascript2.types.api.DeclarationScope,org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.types.api.Identifier,java.util.List<org.netbeans.modules.javascript2.types.api.Identifier>,org.netbeans.modules.csl.api.OffsetRange)
meth public org.netbeans.modules.javascript2.model.api.JsFunction newFunction(org.netbeans.modules.javascript2.types.api.DeclarationScope,org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.types.api.Identifier,java.util.List<org.netbeans.modules.javascript2.types.api.Identifier>,org.netbeans.modules.csl.api.OffsetRange,java.lang.String)
meth public org.netbeans.modules.javascript2.model.api.JsFunction newGlobalObject(org.openide.filesystems.FileObject,int)
meth public org.netbeans.modules.javascript2.model.api.JsObject loadGlobalObject(java.io.InputStream,java.lang.String,java.net.URL) throws java.io.IOException
meth public org.netbeans.modules.javascript2.model.api.JsObject loadGlobalObject(org.openide.filesystems.FileObject,int,java.lang.String,java.net.URL) throws java.io.IOException
meth public org.netbeans.modules.javascript2.model.api.JsObject newObject(org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String,org.netbeans.modules.csl.api.OffsetRange,boolean)
meth public org.netbeans.modules.javascript2.model.api.JsObject newObject(org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String,org.netbeans.modules.csl.api.OffsetRange,boolean,java.lang.String)
meth public org.netbeans.modules.javascript2.model.api.JsObject newReference(java.lang.String,org.netbeans.modules.javascript2.model.api.JsObject,boolean)
meth public org.netbeans.modules.javascript2.model.api.JsObject newReference(java.lang.String,org.netbeans.modules.javascript2.model.api.JsObject,boolean,boolean)
meth public org.netbeans.modules.javascript2.model.api.JsObject newReference(org.netbeans.modules.javascript2.model.api.JsObject,java.lang.String,org.netbeans.modules.csl.api.OffsetRange,org.netbeans.modules.javascript2.model.api.JsObject,boolean,java.util.Set<org.netbeans.modules.csl.api.Modifier>)
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.javascript2.model.api.JsObject putGlobalProperty(org.netbeans.modules.javascript2.model.api.JsFunction,org.netbeans.modules.javascript2.model.api.JsObject)
meth public org.netbeans.modules.javascript2.types.api.TypeUsage newType(java.lang.String,int,boolean)
supr java.lang.Object
hcls GlobalFunction,GlobalObject,OriginalParentArrayReference,OriginalParentFunctionReference,OriginalParentObjectReference

CLSS public abstract interface org.netbeans.modules.javascript2.model.spi.ModelInterceptor
innr public abstract interface static !annotation Registration
meth public abstract java.util.Collection<org.netbeans.modules.javascript2.model.api.JsObject> interceptGlobal(org.netbeans.modules.javascript2.model.spi.ModelElementFactory,org.openide.filesystems.FileObject)

CLSS public abstract interface static !annotation org.netbeans.modules.javascript2.model.spi.ModelInterceptor$Registration
 outer org.netbeans.modules.javascript2.model.spi.ModelInterceptor
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=SOURCE)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
intf java.lang.annotation.Annotation
meth public abstract !hasdefault int priority()

CLSS public abstract interface org.netbeans.modules.javascript2.model.spi.ObjectInterceptor
innr public abstract interface static !annotation Registration
meth public abstract void interceptGlobal(org.netbeans.modules.javascript2.model.api.JsObject,org.netbeans.modules.javascript2.model.spi.ModelElementFactory)

CLSS public abstract interface static !annotation org.netbeans.modules.javascript2.model.spi.ObjectInterceptor$Registration
 outer org.netbeans.modules.javascript2.model.spi.ObjectInterceptor
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=SOURCE)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
intf java.lang.annotation.Annotation
meth public abstract !hasdefault int priority()

CLSS public org.netbeans.modules.javascript2.model.spi.PathNodeVisitor
cons public init()
cons public init(com.oracle.js.parser.ir.LexicalContext)
meth public boolean enterAccessNode(com.oracle.js.parser.ir.AccessNode)
meth public boolean enterBinaryNode(com.oracle.js.parser.ir.BinaryNode)
meth public boolean enterBlock(com.oracle.js.parser.ir.Block)
meth public boolean enterBlockStatement(com.oracle.js.parser.ir.BlockStatement)
meth public boolean enterBreakNode(com.oracle.js.parser.ir.BreakNode)
meth public boolean enterCallNode(com.oracle.js.parser.ir.CallNode)
meth public boolean enterCaseNode(com.oracle.js.parser.ir.CaseNode)
meth public boolean enterCatchNode(com.oracle.js.parser.ir.CatchNode)
meth public boolean enterClassElement(com.oracle.js.parser.ir.ClassElement)
meth public boolean enterClassNode(com.oracle.js.parser.ir.ClassNode)
meth public boolean enterContinueNode(com.oracle.js.parser.ir.ContinueNode)
meth public boolean enterDebuggerNode(com.oracle.js.parser.ir.DebuggerNode)
meth public boolean enterEmptyNode(com.oracle.js.parser.ir.EmptyNode)
meth public boolean enterErrorNode(com.oracle.js.parser.ir.ErrorNode)
meth public boolean enterExportClauseNode(com.oracle.js.parser.ir.ExportClauseNode)
meth public boolean enterExportNode(com.oracle.js.parser.ir.ExportNode)
meth public boolean enterExportSpecifierNode(com.oracle.js.parser.ir.ExportSpecifierNode)
meth public boolean enterExpressionStatement(com.oracle.js.parser.ir.ExpressionStatement)
meth public boolean enterForNode(com.oracle.js.parser.ir.ForNode)
meth public boolean enterFromNode(com.oracle.js.parser.ir.FromNode)
meth public boolean enterFunctionNode(com.oracle.js.parser.ir.FunctionNode)
meth public boolean enterIdentNode(com.oracle.js.parser.ir.IdentNode)
meth public boolean enterIfNode(com.oracle.js.parser.ir.IfNode)
meth public boolean enterImportClauseNode(com.oracle.js.parser.ir.ImportClauseNode)
meth public boolean enterImportNode(com.oracle.js.parser.ir.ImportNode)
meth public boolean enterImportSpecifierNode(com.oracle.js.parser.ir.ImportSpecifierNode)
meth public boolean enterIndexNode(com.oracle.js.parser.ir.IndexNode)
meth public boolean enterJoinPredecessorExpression(com.oracle.js.parser.ir.JoinPredecessorExpression)
meth public boolean enterLabelNode(com.oracle.js.parser.ir.LabelNode)
meth public boolean enterLiteralNode(com.oracle.js.parser.ir.LiteralNode)
meth public boolean enterNameSpaceImportNode(com.oracle.js.parser.ir.NameSpaceImportNode)
meth public boolean enterNamedImportsNode(com.oracle.js.parser.ir.NamedImportsNode)
meth public boolean enterObjectNode(com.oracle.js.parser.ir.ObjectNode)
meth public boolean enterPropertyNode(com.oracle.js.parser.ir.PropertyNode)
meth public boolean enterReturnNode(com.oracle.js.parser.ir.ReturnNode)
meth public boolean enterRuntimeNode(com.oracle.js.parser.ir.RuntimeNode)
meth public boolean enterSwitchNode(com.oracle.js.parser.ir.SwitchNode)
meth public boolean enterTernaryNode(com.oracle.js.parser.ir.TernaryNode)
meth public boolean enterThrowNode(com.oracle.js.parser.ir.ThrowNode)
meth public boolean enterTryNode(com.oracle.js.parser.ir.TryNode)
meth public boolean enterUnaryNode(com.oracle.js.parser.ir.UnaryNode)
meth public boolean enterVarNode(com.oracle.js.parser.ir.VarNode)
meth public boolean enterWhileNode(com.oracle.js.parser.ir.WhileNode)
meth public boolean enterWithNode(com.oracle.js.parser.ir.WithNode)
meth public com.oracle.js.parser.ir.Node getPreviousFromPath(int)
meth public com.oracle.js.parser.ir.Node leaveAccessNode(com.oracle.js.parser.ir.AccessNode)
meth public com.oracle.js.parser.ir.Node leaveBinaryNode(com.oracle.js.parser.ir.BinaryNode)
meth public com.oracle.js.parser.ir.Node leaveBlock(com.oracle.js.parser.ir.Block)
meth public com.oracle.js.parser.ir.Node leaveBlockStatement(com.oracle.js.parser.ir.BlockStatement)
meth public com.oracle.js.parser.ir.Node leaveBreakNode(com.oracle.js.parser.ir.BreakNode)
meth public com.oracle.js.parser.ir.Node leaveCallNode(com.oracle.js.parser.ir.CallNode)
meth public com.oracle.js.parser.ir.Node leaveCaseNode(com.oracle.js.parser.ir.CaseNode)
meth public com.oracle.js.parser.ir.Node leaveCatchNode(com.oracle.js.parser.ir.CatchNode)
meth public com.oracle.js.parser.ir.Node leaveClassElement(com.oracle.js.parser.ir.ClassElement)
meth public com.oracle.js.parser.ir.Node leaveClassNode(com.oracle.js.parser.ir.ClassNode)
meth public com.oracle.js.parser.ir.Node leaveContinueNode(com.oracle.js.parser.ir.ContinueNode)
meth public com.oracle.js.parser.ir.Node leaveDebuggerNode(com.oracle.js.parser.ir.DebuggerNode)
meth public com.oracle.js.parser.ir.Node leaveEmptyNode(com.oracle.js.parser.ir.EmptyNode)
meth public com.oracle.js.parser.ir.Node leaveErrorNode(com.oracle.js.parser.ir.ErrorNode)
meth public com.oracle.js.parser.ir.Node leaveExportClauseNode(com.oracle.js.parser.ir.ExportClauseNode)
meth public com.oracle.js.parser.ir.Node leaveExportNode(com.oracle.js.parser.ir.ExportNode)
meth public com.oracle.js.parser.ir.Node leaveExportSpecifierNode(com.oracle.js.parser.ir.ExportSpecifierNode)
meth public com.oracle.js.parser.ir.Node leaveExpressionStatement(com.oracle.js.parser.ir.ExpressionStatement)
meth public com.oracle.js.parser.ir.Node leaveForNode(com.oracle.js.parser.ir.ForNode)
meth public com.oracle.js.parser.ir.Node leaveFromNode(com.oracle.js.parser.ir.FromNode)
meth public com.oracle.js.parser.ir.Node leaveFunctionNode(com.oracle.js.parser.ir.FunctionNode)
meth public com.oracle.js.parser.ir.Node leaveIdentNode(com.oracle.js.parser.ir.IdentNode)
meth public com.oracle.js.parser.ir.Node leaveIfNode(com.oracle.js.parser.ir.IfNode)
meth public com.oracle.js.parser.ir.Node leaveImportClauseNode(com.oracle.js.parser.ir.ImportClauseNode)
meth public com.oracle.js.parser.ir.Node leaveImportNode(com.oracle.js.parser.ir.ImportNode)
meth public com.oracle.js.parser.ir.Node leaveImportSpecifierNode(com.oracle.js.parser.ir.ImportSpecifierNode)
meth public com.oracle.js.parser.ir.Node leaveIndexNode(com.oracle.js.parser.ir.IndexNode)
meth public com.oracle.js.parser.ir.Node leaveJoinPredecessorExpression(com.oracle.js.parser.ir.JoinPredecessorExpression)
meth public com.oracle.js.parser.ir.Node leaveLabelNode(com.oracle.js.parser.ir.LabelNode)
meth public com.oracle.js.parser.ir.Node leaveLiteralNode(com.oracle.js.parser.ir.LiteralNode)
meth public com.oracle.js.parser.ir.Node leaveNameSpaceImportNode(com.oracle.js.parser.ir.NameSpaceImportNode)
meth public com.oracle.js.parser.ir.Node leaveNamedImportsNode(com.oracle.js.parser.ir.NamedImportsNode)
meth public com.oracle.js.parser.ir.Node leaveObjectNode(com.oracle.js.parser.ir.ObjectNode)
meth public com.oracle.js.parser.ir.Node leavePropertyNode(com.oracle.js.parser.ir.PropertyNode)
meth public com.oracle.js.parser.ir.Node leaveReturnNode(com.oracle.js.parser.ir.ReturnNode)
meth public com.oracle.js.parser.ir.Node leaveRuntimeNode(com.oracle.js.parser.ir.RuntimeNode)
meth public com.oracle.js.parser.ir.Node leaveSwitchNode(com.oracle.js.parser.ir.SwitchNode)
meth public com.oracle.js.parser.ir.Node leaveTernaryNode(com.oracle.js.parser.ir.TernaryNode)
meth public com.oracle.js.parser.ir.Node leaveThrowNode(com.oracle.js.parser.ir.ThrowNode)
meth public com.oracle.js.parser.ir.Node leaveTryNode(com.oracle.js.parser.ir.TryNode)
meth public com.oracle.js.parser.ir.Node leaveUnaryNode(com.oracle.js.parser.ir.UnaryNode)
meth public com.oracle.js.parser.ir.Node leaveVarNode(com.oracle.js.parser.ir.VarNode)
meth public com.oracle.js.parser.ir.Node leaveWhileNode(com.oracle.js.parser.ir.WhileNode)
meth public com.oracle.js.parser.ir.Node leaveWithNode(com.oracle.js.parser.ir.WithNode)
meth public java.util.List<? extends com.oracle.js.parser.ir.Node> getPath()
meth public void addToPath(com.oracle.js.parser.ir.Node)
meth public void removeFromPathTheLast()
supr com.oracle.js.parser.ir.visitor.NodeVisitor
hfds treePath

CLSS public abstract interface org.netbeans.modules.javascript2.model.spi.PlatformProvider
meth public abstract java.util.List<org.openide.filesystems.FileObject> getPlatformStubs()

CLSS public abstract interface org.netbeans.modules.javascript2.model.spi.QuerySupportFactory
meth public abstract org.netbeans.modules.parsing.spi.indexing.support.QuerySupport get(java.util.Collection<org.openide.filesystems.FileObject>)

CLSS public abstract interface org.netbeans.modules.javascript2.model.spi.TypeNameConvertor
innr public abstract interface static !annotation Registration
meth public abstract java.lang.String getDisplayName(org.netbeans.modules.javascript2.types.api.Type)

CLSS public abstract interface static !annotation org.netbeans.modules.javascript2.model.spi.TypeNameConvertor$Registration
 outer org.netbeans.modules.javascript2.model.spi.TypeNameConvertor
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=SOURCE)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
intf java.lang.annotation.Annotation
meth public abstract !hasdefault int priority()

CLSS public abstract interface org.netbeans.modules.javascript2.types.api.DeclarationScope
meth public abstract java.util.Collection<? extends org.netbeans.modules.javascript2.types.api.DeclarationScope> getChildrenScopes()
meth public abstract org.netbeans.modules.javascript2.types.api.DeclarationScope getParentScope()
meth public abstract void addDeclaredScope(org.netbeans.modules.javascript2.types.api.DeclarationScope)

