#Signature file v4.1
#Version 1.22

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 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 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,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 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 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 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)

