#Signature file v4.1
#Version 1.12

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
hfds name,ordinal

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

