#Signature file v4.1
#Version 2.43.0

CLSS public abstract interface com.sun.source.tree.TreeVisitor<%0 extends java.lang.Object, %1 extends java.lang.Object>
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAnnotatedType(com.sun.source.tree.AnnotatedTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAnnotation(com.sun.source.tree.AnnotationTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitArrayAccess(com.sun.source.tree.ArrayAccessTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitArrayType(com.sun.source.tree.ArrayTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAssert(com.sun.source.tree.AssertTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAssignment(com.sun.source.tree.AssignmentTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitBinary(com.sun.source.tree.BinaryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitBlock(com.sun.source.tree.BlockTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitBreak(com.sun.source.tree.BreakTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCase(com.sun.source.tree.CaseTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCatch(com.sun.source.tree.CatchTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitClass(com.sun.source.tree.ClassTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEnhancedForLoop(com.sun.source.tree.EnhancedForLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitErroneous(com.sun.source.tree.ErroneousTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitIf(com.sun.source.tree.IfTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitImport(com.sun.source.tree.ImportTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitInstanceOf(com.sun.source.tree.InstanceOfTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitIntersectionType(com.sun.source.tree.IntersectionTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitLabeledStatement(com.sun.source.tree.LabeledStatementTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitLambdaExpression(com.sun.source.tree.LambdaExpressionTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitLiteral(com.sun.source.tree.LiteralTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMemberReference(com.sun.source.tree.MemberReferenceTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMemberSelect(com.sun.source.tree.MemberSelectTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMethod(com.sun.source.tree.MethodTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMethodInvocation(com.sun.source.tree.MethodInvocationTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitModifiers(com.sun.source.tree.ModifiersTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitModule(com.sun.source.tree.ModuleTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitNewArray(com.sun.source.tree.NewArrayTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitNewClass(com.sun.source.tree.NewClassTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitOpens(com.sun.source.tree.OpensTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitOther(com.sun.source.tree.Tree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPackage(com.sun.source.tree.PackageTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitReturn(com.sun.source.tree.ReturnTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitSwitch(com.sun.source.tree.SwitchTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitSwitchExpression(com.sun.source.tree.SwitchExpressionTree,{com.sun.source.tree.TreeVisitor%1})
 anno 0 java.lang.Deprecated()
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitSynchronized(com.sun.source.tree.SynchronizedTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitThrow(com.sun.source.tree.ThrowTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTry(com.sun.source.tree.TryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTypeCast(com.sun.source.tree.TypeCastTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTypeParameter(com.sun.source.tree.TypeParameterTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitYield(com.sun.source.tree.YieldTree,{com.sun.source.tree.TreeVisitor%1})
 anno 0 java.lang.Deprecated()

CLSS public com.sun.source.util.TreePathScanner<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
meth public com.sun.source.util.TreePath getCurrentPath()
meth public {com.sun.source.util.TreePathScanner%0} scan(com.sun.source.tree.Tree,{com.sun.source.util.TreePathScanner%1})
meth public {com.sun.source.util.TreePathScanner%0} scan(com.sun.source.util.TreePath,{com.sun.source.util.TreePathScanner%1})
supr com.sun.source.util.TreeScanner<{com.sun.source.util.TreePathScanner%0},{com.sun.source.util.TreePathScanner%1}>
hfds path

CLSS public com.sun.source.util.TreeScanner<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
intf com.sun.source.tree.TreeVisitor<{com.sun.source.util.TreeScanner%0},{com.sun.source.util.TreeScanner%1}>
meth public {com.sun.source.util.TreeScanner%0} reduce({com.sun.source.util.TreeScanner%0},{com.sun.source.util.TreeScanner%0})
meth public {com.sun.source.util.TreeScanner%0} scan(com.sun.source.tree.Tree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} scan(java.lang.Iterable<? extends com.sun.source.tree.Tree>,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAnnotatedType(com.sun.source.tree.AnnotatedTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAnnotation(com.sun.source.tree.AnnotationTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitArrayAccess(com.sun.source.tree.ArrayAccessTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitArrayType(com.sun.source.tree.ArrayTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAssert(com.sun.source.tree.AssertTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAssignment(com.sun.source.tree.AssignmentTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitBinary(com.sun.source.tree.BinaryTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitBlock(com.sun.source.tree.BlockTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitBreak(com.sun.source.tree.BreakTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCase(com.sun.source.tree.CaseTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCatch(com.sun.source.tree.CatchTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitClass(com.sun.source.tree.ClassTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitEnhancedForLoop(com.sun.source.tree.EnhancedForLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitErroneous(com.sun.source.tree.ErroneousTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitInstanceOf(com.sun.source.tree.InstanceOfTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitIntersectionType(com.sun.source.tree.IntersectionTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitLabeledStatement(com.sun.source.tree.LabeledStatementTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitLambdaExpression(com.sun.source.tree.LambdaExpressionTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitLiteral(com.sun.source.tree.LiteralTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMemberReference(com.sun.source.tree.MemberReferenceTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMemberSelect(com.sun.source.tree.MemberSelectTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMethod(com.sun.source.tree.MethodTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMethodInvocation(com.sun.source.tree.MethodInvocationTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitModifiers(com.sun.source.tree.ModifiersTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitModule(com.sun.source.tree.ModuleTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitNewArray(com.sun.source.tree.NewArrayTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitNewClass(com.sun.source.tree.NewClassTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitOpens(com.sun.source.tree.OpensTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitOther(com.sun.source.tree.Tree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitPackage(com.sun.source.tree.PackageTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitReturn(com.sun.source.tree.ReturnTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitSwitch(com.sun.source.tree.SwitchTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitSwitchExpression(com.sun.source.tree.SwitchExpressionTree,{com.sun.source.util.TreeScanner%1})
 anno 0 java.lang.Deprecated()
meth public {com.sun.source.util.TreeScanner%0} visitSynchronized(com.sun.source.tree.SynchronizedTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitThrow(com.sun.source.tree.ThrowTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitTry(com.sun.source.tree.TryTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitTypeCast(com.sun.source.tree.TypeCastTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitTypeParameter(com.sun.source.tree.TypeParameterTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitYield(com.sun.source.tree.YieldTree,{com.sun.source.util.TreeScanner%1})
 anno 0 java.lang.Deprecated()
supr java.lang.Object

CLSS public java.io.IOException
cons public init()
cons public init(java.lang.String)
cons public init(java.lang.String,java.lang.Throwable)
cons public init(java.lang.Throwable)
supr java.lang.Exception
hfds serialVersionUID

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 interface !annotation java.lang.Deprecated
 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=[CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE])
intf java.lang.annotation.Annotation

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.Exception
cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
cons public init()
cons public init(java.lang.String)
cons public init(java.lang.String,java.lang.Throwable)
cons public init(java.lang.Throwable)
supr java.lang.Throwable
hfds serialVersionUID

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 java.lang.Throwable
cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
cons public init()
cons public init(java.lang.String)
cons public init(java.lang.String,java.lang.Throwable)
cons public init(java.lang.Throwable)
intf java.io.Serializable
meth public final java.lang.Throwable[] getSuppressed()
meth public final void addSuppressed(java.lang.Throwable)
meth public java.lang.StackTraceElement[] getStackTrace()
meth public java.lang.String getLocalizedMessage()
meth public java.lang.String getMessage()
meth public java.lang.String toString()
meth public java.lang.Throwable fillInStackTrace()
meth public java.lang.Throwable getCause()
meth public java.lang.Throwable initCause(java.lang.Throwable)
meth public void printStackTrace()
meth public void printStackTrace(java.io.PrintStream)
meth public void printStackTrace(java.io.PrintWriter)
meth public void setStackTrace(java.lang.StackTraceElement[])
supr java.lang.Object
hfds CAUSE_CAPTION,EMPTY_THROWABLE_ARRAY,NULL_CAUSE_MESSAGE,SELF_SUPPRESSION_MESSAGE,SUPPRESSED_CAPTION,SUPPRESSED_SENTINEL,UNASSIGNED_STACK,backtrace,cause,detailMessage,serialVersionUID,stackTrace,suppressedExceptions
hcls PrintStreamOrWriter,SentinelHolder,WrappedPrintStream,WrappedPrintWriter

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 java.util.EventListener

CLSS public java.util.EventObject
cons public init(java.lang.Object)
fld protected java.lang.Object source
intf java.io.Serializable
meth public java.lang.Object getSource()
meth public java.lang.String toString()
supr java.lang.Object
hfds serialVersionUID

CLSS public org.netbeans.api.java.source.BuildArtifactMapper
cons public init()
innr public abstract interface static ArtifactsUpdated
meth public static boolean isCompileOnSaveSupported()
meth public static void addArtifactsUpdatedListener(java.net.URL,org.netbeans.api.java.source.BuildArtifactMapper$ArtifactsUpdated)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static void removeArtifactsUpdatedListener(java.net.URL,org.netbeans.api.java.source.BuildArtifactMapper$ArtifactsUpdated)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object

CLSS public abstract interface static org.netbeans.api.java.source.BuildArtifactMapper$ArtifactsUpdated
 outer org.netbeans.api.java.source.BuildArtifactMapper
meth public abstract void artifactsUpdated(java.lang.Iterable<java.io.File>)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public abstract interface org.netbeans.api.java.source.CancellableTask<%0 extends java.lang.Object>
intf org.netbeans.api.java.source.Task<{org.netbeans.api.java.source.CancellableTask%0}>
meth public abstract void cancel()

CLSS public final org.netbeans.api.java.source.ClassIndex
innr public abstract interface static SearchScopeType
innr public abstract static !enum SearchScope
innr public final static !enum NameKind
innr public final static !enum ResourceType
innr public final static !enum SearchKind
innr public final static Symbols
meth public !varargs static org.netbeans.api.java.source.ClassIndex$SearchScopeType createPackageSearchScope(org.netbeans.api.java.source.ClassIndex$SearchScopeType,java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Iterable<org.netbeans.api.java.source.ClassIndex$Symbols> getDeclaredSymbols(java.lang.String,org.netbeans.api.java.source.ClassIndex$NameKind,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<java.lang.String> getPackageNames(java.lang.String,boolean,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.ModuleElement>> getDeclaredModules(java.lang.String,org.netbeans.api.java.source.ClassIndex$NameKind,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>> getDeclaredTypes(java.lang.String,org.netbeans.api.java.source.ClassIndex$NameKind,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>> getElements(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>,java.util.Set<org.netbeans.api.java.source.ClassIndex$SearchKind>,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>> getElementsForPackage(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.PackageElement>,java.util.Set<org.netbeans.api.java.source.ClassIndex$SearchKind>,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<org.openide.filesystems.FileObject> getResources(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>,java.util.Set<org.netbeans.api.java.source.ClassIndex$SearchKind>,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<org.openide.filesystems.FileObject> getResources(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>,java.util.Set<org.netbeans.api.java.source.ClassIndex$SearchKind>,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>,java.util.Set<org.netbeans.api.java.source.ClassIndex$ResourceType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<org.openide.filesystems.FileObject> getResourcesForPackage(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.PackageElement>,java.util.Set<org.netbeans.api.java.source.ClassIndex$SearchKind>,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public void addClassIndexListener(org.netbeans.api.java.source.ClassIndexListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void removeClassIndexListener(org.netbeans.api.java.source.ClassIndexListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOGGER,bootPath,classPath,depsIndeces,listeners,oldBoot,oldCompile,oldSources,sourceIndeces,sourcePath,spiListener
hcls ClassIndexFactoryImpl,SPIListener

CLSS public final static !enum org.netbeans.api.java.source.ClassIndex$NameKind
 outer org.netbeans.api.java.source.ClassIndex
fld public final static org.netbeans.api.java.source.ClassIndex$NameKind CAMEL_CASE
fld public final static org.netbeans.api.java.source.ClassIndex$NameKind CAMEL_CASE_INSENSITIVE
fld public final static org.netbeans.api.java.source.ClassIndex$NameKind CASE_INSENSITIVE_PREFIX
fld public final static org.netbeans.api.java.source.ClassIndex$NameKind CASE_INSENSITIVE_REGEXP
fld public final static org.netbeans.api.java.source.ClassIndex$NameKind PREFIX
fld public final static org.netbeans.api.java.source.ClassIndex$NameKind REGEXP
fld public final static org.netbeans.api.java.source.ClassIndex$NameKind SIMPLE_NAME
meth public static org.netbeans.api.java.source.ClassIndex$NameKind valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.ClassIndex$NameKind[] values()
supr java.lang.Enum<org.netbeans.api.java.source.ClassIndex$NameKind>

CLSS public final static !enum org.netbeans.api.java.source.ClassIndex$ResourceType
 outer org.netbeans.api.java.source.ClassIndex
fld public final static org.netbeans.api.java.source.ClassIndex$ResourceType BINARY
fld public final static org.netbeans.api.java.source.ClassIndex$ResourceType SOURCE
meth public static org.netbeans.api.java.source.ClassIndex$ResourceType valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.ClassIndex$ResourceType[] values()
supr java.lang.Enum<org.netbeans.api.java.source.ClassIndex$ResourceType>

CLSS public final static !enum org.netbeans.api.java.source.ClassIndex$SearchKind
 outer org.netbeans.api.java.source.ClassIndex
fld public final static org.netbeans.api.java.source.ClassIndex$SearchKind FIELD_REFERENCES
fld public final static org.netbeans.api.java.source.ClassIndex$SearchKind FUNCTIONAL_IMPLEMENTORS
fld public final static org.netbeans.api.java.source.ClassIndex$SearchKind IMPLEMENTORS
fld public final static org.netbeans.api.java.source.ClassIndex$SearchKind METHOD_REFERENCES
fld public final static org.netbeans.api.java.source.ClassIndex$SearchKind TYPE_REFERENCES
meth public static org.netbeans.api.java.source.ClassIndex$SearchKind valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.ClassIndex$SearchKind[] values()
supr java.lang.Enum<org.netbeans.api.java.source.ClassIndex$SearchKind>

CLSS public abstract static !enum org.netbeans.api.java.source.ClassIndex$SearchScope
 outer org.netbeans.api.java.source.ClassIndex
fld public final static org.netbeans.api.java.source.ClassIndex$SearchScope DEPENDENCIES
fld public final static org.netbeans.api.java.source.ClassIndex$SearchScope SOURCE
intf org.netbeans.api.java.source.ClassIndex$SearchScopeType
meth public java.util.Set<? extends java.lang.String> getPackages()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public static org.netbeans.api.java.source.ClassIndex$SearchScope valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.ClassIndex$SearchScope[] values()
supr java.lang.Enum<org.netbeans.api.java.source.ClassIndex$SearchScope>

CLSS public abstract interface static org.netbeans.api.java.source.ClassIndex$SearchScopeType
 outer org.netbeans.api.java.source.ClassIndex
meth public abstract boolean isDependencies()
meth public abstract boolean isSources()
meth public abstract java.util.Set<? extends java.lang.String> getPackages()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()

CLSS public final static org.netbeans.api.java.source.ClassIndex$Symbols
 outer org.netbeans.api.java.source.ClassIndex
meth public java.util.Set<java.lang.String> getSymbols()
meth public org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement> getEnclosingType()
supr java.lang.Object
hfds enclosingType,symbols

CLSS public abstract interface org.netbeans.api.java.source.ClassIndexListener
intf java.util.EventListener
meth public abstract void rootsAdded(org.netbeans.api.java.source.RootsEvent)
meth public abstract void rootsRemoved(org.netbeans.api.java.source.RootsEvent)
meth public abstract void typesAdded(org.netbeans.api.java.source.TypesEvent)
meth public abstract void typesChanged(org.netbeans.api.java.source.TypesEvent)
meth public abstract void typesRemoved(org.netbeans.api.java.source.TypesEvent)

CLSS public final org.netbeans.api.java.source.ClasspathInfo
innr public abstract interface static Provider
innr public final static !enum PathKind
innr public final static Builder
meth public boolean equals(java.lang.Object)
meth public int hashCode()
meth public java.lang.String toString()
meth public org.netbeans.api.java.classpath.ClassPath getClassPath(org.netbeans.api.java.source.ClasspathInfo$PathKind)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ClassIndex getClassIndex()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ClasspathInfo create(java.io.File)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ClasspathInfo create(javax.swing.text.Document)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ClasspathInfo create(org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.api.java.source.ClasspathInfo create(org.openide.filesystems.FileObject)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void addChangeListener(javax.swing.event.ChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void removeChangeListener(javax.swing.event.ChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds bootClassPath,cachedAptSrcClassPath,cachedBootClassPath,cachedCompileClassPath,cachedModuleClassPath,cachedModuleCompilePath,cachedSrcClassPath,compileClassPath,cpListener,filter,fmTx,ignoreExcludes,jfmProvider,listenerList,log,memoryFileManager,moduleBootPath,moduleClassPath,moduleCompilePath,moduleSrcPath,outputClassPath,peerProviders,pgTx,srcClassPath,usagesQuery,useModifiedFiles
hcls ClassPathListener,ClasspathInfoAccessorImpl,Peers

CLSS public final static org.netbeans.api.java.source.ClasspathInfo$Builder
 outer org.netbeans.api.java.source.ClasspathInfo
cons public init(org.netbeans.api.java.classpath.ClassPath)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ClasspathInfo build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ClasspathInfo$Builder setClassPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.api.java.source.ClasspathInfo$Builder setModuleBootPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.api.java.source.ClasspathInfo$Builder setModuleClassPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.api.java.source.ClasspathInfo$Builder setModuleCompilePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.api.java.source.ClasspathInfo$Builder setModuleSourcePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.api.java.source.ClasspathInfo$Builder setSourcePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
supr java.lang.Object
hfds bootPath,classPath,moduleBootPath,moduleClassPath,moduleCompilePath,moduleSourcePath,sourcePath

CLSS public final static !enum org.netbeans.api.java.source.ClasspathInfo$PathKind
 outer org.netbeans.api.java.source.ClasspathInfo
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind BOOT
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind COMPILE
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind MODULE_BOOT
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind MODULE_CLASS
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind MODULE_COMPILE
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind MODULE_SOURCE
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind OUTPUT
fld public final static org.netbeans.api.java.source.ClasspathInfo$PathKind SOURCE
meth public static org.netbeans.api.java.source.ClasspathInfo$PathKind valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.ClasspathInfo$PathKind[] values()
supr java.lang.Enum<org.netbeans.api.java.source.ClasspathInfo$PathKind>

CLSS public abstract interface static org.netbeans.api.java.source.ClasspathInfo$Provider
 outer org.netbeans.api.java.source.ClasspathInfo
meth public abstract org.netbeans.api.java.source.ClasspathInfo getClasspathInfo()

CLSS public final org.netbeans.api.java.source.CodeStyle
innr public final static !enum BracePlacement
innr public final static !enum BracesGenerationStyle
innr public final static !enum InsertionPoint
innr public final static !enum WrapStyle
innr public final static ImportGroups
innr public final static MemberGroups
meth public boolean absoluteLabelIndent()
meth public boolean addLeadingStarInComment()
meth public boolean addOverrideAnnotation()
meth public boolean alignJavadocExceptionDescriptions()
meth public boolean alignJavadocParameterDescriptions()
meth public boolean alignJavadocReturnDescription()
meth public boolean alignMultilineAnnotationArgs()
meth public boolean alignMultilineArrayInit()
meth public boolean alignMultilineAssignment()
meth public boolean alignMultilineBinaryOp()
meth public boolean alignMultilineCallArgs()
meth public boolean alignMultilineDisjunctiveCatchTypes()
meth public boolean alignMultilineExports()
meth public boolean alignMultilineFor()
meth public boolean alignMultilineImplements()
meth public boolean alignMultilineLambdaParams()
meth public boolean alignMultilineMethodParams()
meth public boolean alignMultilineOpens()
meth public boolean alignMultilineParenthesized()
meth public boolean alignMultilineProvides()
meth public boolean alignMultilineTernaryOp()
meth public boolean alignMultilineThrows()
meth public boolean alignMultilineTryResources()
meth public boolean blankLineAfterJavadocDescription()
meth public boolean blankLineAfterJavadocParameterDescriptions()
meth public boolean blankLineAfterJavadocReturnTag()
meth public boolean computeMemberDependencies()
meth public boolean enableBlockCommentFormatting()
meth public boolean enableJavadocFormatting()
meth public boolean expandTabToSpaces()
meth public boolean generateParagraphTagOnBlankLines()
meth public boolean importInnerClasses()
meth public boolean indentCasesFromSwitch()
meth public boolean indentTopLevelClassMembers()
meth public boolean keepGettersAndSettersTogether()
meth public boolean makeLocalVarsFinal()
meth public boolean makeParametersFinal()
meth public boolean placeCatchOnNewLine()
meth public boolean placeElseOnNewLine()
meth public boolean placeFinallyOnNewLine()
meth public boolean placeNewLineAfterModifiers()
meth public boolean placeWhileOnNewLine()
meth public boolean preferLongerNames()
meth public boolean preferStaticImports()
meth public boolean preserveNewLinesInComments()
meth public boolean qualifyFieldAccess()
meth public boolean separateImportGroups()
meth public boolean sortMembersInGroupsAlphabetically()
meth public boolean spaceAfterColon()
meth public boolean spaceAfterComma()
meth public boolean spaceAfterSemi()
meth public boolean spaceAfterTypeCast()
meth public boolean spaceAroundAnnotationValueAssignOps()
meth public boolean spaceAroundAssignOps()
meth public boolean spaceAroundBinaryOps()
meth public boolean spaceAroundLambdaArrow()
meth public boolean spaceAroundMethodReferenceDoubleColon()
meth public boolean spaceAroundTernaryOps()
meth public boolean spaceAroundUnaryOps()
meth public boolean spaceBeforeAnnotationParen()
meth public boolean spaceBeforeArrayInitLeftBrace()
meth public boolean spaceBeforeCatch()
meth public boolean spaceBeforeCatchLeftBrace()
meth public boolean spaceBeforeCatchParen()
meth public boolean spaceBeforeClassDeclLeftBrace()
meth public boolean spaceBeforeColon()
meth public boolean spaceBeforeComma()
meth public boolean spaceBeforeDoLeftBrace()
meth public boolean spaceBeforeElse()
meth public boolean spaceBeforeElseLeftBrace()
meth public boolean spaceBeforeFinally()
meth public boolean spaceBeforeFinallyLeftBrace()
meth public boolean spaceBeforeForLeftBrace()
meth public boolean spaceBeforeForParen()
meth public boolean spaceBeforeIfLeftBrace()
meth public boolean spaceBeforeIfParen()
meth public boolean spaceBeforeMethodCallParen()
meth public boolean spaceBeforeMethodDeclLeftBrace()
meth public boolean spaceBeforeMethodDeclParen()
meth public boolean spaceBeforeModuleDeclLeftBrace()
meth public boolean spaceBeforeSemi()
meth public boolean spaceBeforeStaticInitLeftBrace()
meth public boolean spaceBeforeSwitchLeftBrace()
meth public boolean spaceBeforeSwitchParen()
meth public boolean spaceBeforeSynchronizedLeftBrace()
meth public boolean spaceBeforeSynchronizedParen()
meth public boolean spaceBeforeTryLeftBrace()
meth public boolean spaceBeforeTryParen()
meth public boolean spaceBeforeWhile()
meth public boolean spaceBeforeWhileLeftBrace()
meth public boolean spaceBeforeWhileParen()
meth public boolean spaceWithinAnnotationParens()
meth public boolean spaceWithinArrayIndexBrackets()
meth public boolean spaceWithinArrayInitBrackets()
meth public boolean spaceWithinBraces()
meth public boolean spaceWithinCatchParens()
meth public boolean spaceWithinForParens()
meth public boolean spaceWithinIfParens()
meth public boolean spaceWithinLambdaParens()
meth public boolean spaceWithinMethodCallParens()
meth public boolean spaceWithinMethodDeclParens()
meth public boolean spaceWithinParens()
meth public boolean spaceWithinSwitchParens()
meth public boolean spaceWithinSynchronizedParens()
meth public boolean spaceWithinTryParens()
meth public boolean spaceWithinTypeCastParens()
meth public boolean spaceWithinWhileParens()
meth public boolean specialElseIf()
meth public boolean useFQNs()
meth public boolean useIsForBooleanGetters()
meth public boolean useSingleClassImport()
meth public boolean wrapAfterAssignOps()
meth public boolean wrapAfterBinaryOps()
meth public boolean wrapAfterDisjunctiveCatchBar()
meth public boolean wrapAfterDotInChainedMethodCalls()
meth public boolean wrapAfterLambdaArrow()
meth public boolean wrapAfterTernaryOps()
meth public boolean wrapCommentText()
meth public boolean wrapOneLineComments()
meth public int countForUsingStarImport()
meth public int countForUsingStaticStarImport()
meth public int getBlankLinesAfterAnonymousClassHeader()
meth public int getBlankLinesAfterClass()
meth public int getBlankLinesAfterClassHeader()
meth public int getBlankLinesAfterEnumHeader()
meth public int getBlankLinesAfterFields()
meth public int getBlankLinesAfterImports()
meth public int getBlankLinesAfterMethods()
meth public int getBlankLinesAfterModuleDirectives()
meth public int getBlankLinesAfterModuleHeader()
meth public int getBlankLinesAfterPackage()
meth public int getBlankLinesBeforeAnonymousClassClosingBrace()
meth public int getBlankLinesBeforeClass()
meth public int getBlankLinesBeforeClassClosingBrace()
meth public int getBlankLinesBeforeEnumClosingBrace()
meth public int getBlankLinesBeforeFields()
meth public int getBlankLinesBeforeImports()
meth public int getBlankLinesBeforeMethods()
meth public int getBlankLinesBeforeModuleClosingBrace()
meth public int getBlankLinesBeforeModuleDirectives()
meth public int getBlankLinesBeforePackage()
meth public int getContinuationIndentSize()
meth public int getIndentSize()
meth public int getLabelIndent()
meth public int getMaximumBlankLinesInCode()
meth public int getMaximumBlankLinesInDeclarations()
meth public int getRightMargin()
meth public int getTabSize()
meth public java.lang.String getFieldNamePrefix()
meth public java.lang.String getFieldNameSuffix()
meth public java.lang.String getLocalVarNamePrefix()
meth public java.lang.String getLocalVarNameSuffix()
meth public java.lang.String getParameterNamePrefix()
meth public java.lang.String getParameterNameSuffix()
meth public java.lang.String getStaticFieldNamePrefix()
meth public java.lang.String getStaticFieldNameSuffix()
meth public java.lang.String[] getPackagesForStarImport()
meth public org.netbeans.api.java.source.CodeStyle$BracePlacement getClassDeclBracePlacement()
meth public org.netbeans.api.java.source.CodeStyle$BracePlacement getMethodDeclBracePlacement()
meth public org.netbeans.api.java.source.CodeStyle$BracePlacement getModuleDeclBracePlacement()
meth public org.netbeans.api.java.source.CodeStyle$BracePlacement getOtherBracePlacement()
meth public org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle redundantDoWhileBraces()
meth public org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle redundantForBraces()
meth public org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle redundantIfBraces()
meth public org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle redundantWhileBraces()
meth public org.netbeans.api.java.source.CodeStyle$ImportGroups getImportGroups()
meth public org.netbeans.api.java.source.CodeStyle$InsertionPoint getClassMemberInsertionPoint()
meth public org.netbeans.api.java.source.CodeStyle$MemberGroups getClassMemberGroups()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapAnnotationArgs()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapAnnotations()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapArrayInit()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapAssert()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapAssignOps()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapBinaryOps()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapCaseStatements()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapChainedMethodCalls()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapDisjunctiveCatchTypes()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapDoWhileStatement()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapEnumConstants()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapExportsToKeyword()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapExportsToList()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapExtendsImplementsKeyword()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapExtendsImplementsList()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapFor()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapForStatement()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapIfStatement()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapLambdaArrow()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapLambdaParams()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapMethodCallArgs()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapMethodParams()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapOpensToKeyword()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapOpensToList()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapProvidesWithKeyword()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapProvidesWithList()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapTernaryOps()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapThrowsKeyword()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapThrowsList()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapTryResources()
meth public org.netbeans.api.java.source.CodeStyle$WrapStyle wrapWhileStatement()
meth public static org.netbeans.api.java.source.CodeStyle getDefault(javax.swing.text.Document)
meth public static org.netbeans.api.java.source.CodeStyle getDefault(org.netbeans.api.project.Project)
meth public static org.netbeans.api.java.source.CodeStyle getDefault(org.openide.filesystems.FileObject)
supr java.lang.Object
hfds preferences
hcls Producer

CLSS public final static !enum org.netbeans.api.java.source.CodeStyle$BracePlacement
 outer org.netbeans.api.java.source.CodeStyle
fld public final static org.netbeans.api.java.source.CodeStyle$BracePlacement NEW_LINE
fld public final static org.netbeans.api.java.source.CodeStyle$BracePlacement NEW_LINE_HALF_INDENTED
fld public final static org.netbeans.api.java.source.CodeStyle$BracePlacement NEW_LINE_INDENTED
fld public final static org.netbeans.api.java.source.CodeStyle$BracePlacement SAME_LINE
meth public static org.netbeans.api.java.source.CodeStyle$BracePlacement valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.CodeStyle$BracePlacement[] values()
supr java.lang.Enum<org.netbeans.api.java.source.CodeStyle$BracePlacement>

CLSS public final static !enum org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle
 outer org.netbeans.api.java.source.CodeStyle
fld public final static org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle ELIMINATE
fld public final static org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle GENERATE
fld public final static org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle LEAVE_ALONE
meth public static org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle[] values()
supr java.lang.Enum<org.netbeans.api.java.source.CodeStyle$BracesGenerationStyle>

CLSS public final static org.netbeans.api.java.source.CodeStyle$ImportGroups
 outer org.netbeans.api.java.source.CodeStyle
meth public int getGroupId(java.lang.String,boolean)
meth public java.lang.String toString()
supr java.lang.Object
hfds infos,separateStatic
hcls Info

CLSS public final static !enum org.netbeans.api.java.source.CodeStyle$InsertionPoint
 outer org.netbeans.api.java.source.CodeStyle
fld public final static org.netbeans.api.java.source.CodeStyle$InsertionPoint CARET_LOCATION
fld public final static org.netbeans.api.java.source.CodeStyle$InsertionPoint FIRST_IN_CATEGORY
fld public final static org.netbeans.api.java.source.CodeStyle$InsertionPoint LAST_IN_CATEGORY
fld public final static org.netbeans.api.java.source.CodeStyle$InsertionPoint ORDERED_IN_CATEGORY
meth public static org.netbeans.api.java.source.CodeStyle$InsertionPoint valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.CodeStyle$InsertionPoint[] values()
supr java.lang.Enum<org.netbeans.api.java.source.CodeStyle$InsertionPoint>

CLSS public final static org.netbeans.api.java.source.CodeStyle$MemberGroups
 outer org.netbeans.api.java.source.CodeStyle
meth public int getGroupId(com.sun.source.tree.Tree)
meth public int getGroupId(javax.lang.model.element.Element)
meth public java.lang.String toString()
supr java.lang.Object
hfds infos
hcls Info

CLSS public final static !enum org.netbeans.api.java.source.CodeStyle$WrapStyle
 outer org.netbeans.api.java.source.CodeStyle
fld public final static org.netbeans.api.java.source.CodeStyle$WrapStyle WRAP_ALWAYS
fld public final static org.netbeans.api.java.source.CodeStyle$WrapStyle WRAP_IF_LONG
fld public final static org.netbeans.api.java.source.CodeStyle$WrapStyle WRAP_NEVER
meth public static org.netbeans.api.java.source.CodeStyle$WrapStyle valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.CodeStyle$WrapStyle[] values()
supr java.lang.Enum<org.netbeans.api.java.source.CodeStyle$WrapStyle>

CLSS public final org.netbeans.api.java.source.CodeStyleUtils
meth public static java.lang.String addPrefixSuffix(java.lang.CharSequence,java.lang.String,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public static java.lang.String computeGetterName(java.lang.CharSequence,boolean,boolean,org.netbeans.api.java.source.CodeStyle)
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static java.lang.String computeSetterName(java.lang.CharSequence,boolean,org.netbeans.api.java.source.CodeStyle)
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static java.lang.String getCapitalizedName(java.lang.CharSequence)
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static java.lang.String getDecapitalizedName(java.lang.CharSequence)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.lang.String removePrefixSuffix(java.lang.CharSequence,java.lang.String,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
supr java.lang.Object

CLSS public final org.netbeans.api.java.source.Comment
innr public final static !enum Style
meth public boolean equals(java.lang.Object)
meth public boolean isDocComment()
meth public boolean isNew()
meth public int endPos()
meth public int hashCode()
meth public int indent()
meth public int pos()
meth public java.lang.String getText()
meth public java.lang.String toString()
meth public org.netbeans.api.java.source.Comment$Style style()
meth public static org.netbeans.api.java.source.Comment create(java.lang.String)
meth public static org.netbeans.api.java.source.Comment create(org.netbeans.api.java.source.Comment$Style,int,int,int,java.lang.String)
meth public static org.netbeans.api.java.source.Comment create(org.netbeans.api.java.source.Comment$Style,java.lang.String)
supr java.lang.Object
hfds endPos,indent,pos,style,text

CLSS public final static !enum org.netbeans.api.java.source.Comment$Style
 outer org.netbeans.api.java.source.Comment
fld public final static org.netbeans.api.java.source.Comment$Style BLOCK
fld public final static org.netbeans.api.java.source.Comment$Style JAVADOC
fld public final static org.netbeans.api.java.source.Comment$Style LINE
fld public final static org.netbeans.api.java.source.Comment$Style WHITESPACE
meth public static org.netbeans.api.java.source.Comment$Style valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.Comment$Style[] values()
supr java.lang.Enum<org.netbeans.api.java.source.Comment$Style>

CLSS public final org.netbeans.api.java.source.CommentCollector
 anno 0 java.lang.Deprecated()
meth public static org.netbeans.api.java.source.CommentCollector getInstance()
 anno 0 java.lang.Deprecated()
meth public void collect(org.netbeans.api.java.source.WorkingCopy) throws java.io.IOException
 anno 0 java.lang.Deprecated()
meth public void collect(org.netbeans.api.lexer.TokenSequence<org.netbeans.api.java.lexer.JavaTokenId>,org.netbeans.api.java.source.CompilationInfo)
 anno 0 java.lang.Deprecated()
supr java.lang.Object
hfds instance

CLSS public org.netbeans.api.java.source.CompilationController
meth protected void doInvalidate()
meth public org.netbeans.api.java.source.JavaSource$Phase toPhase(org.netbeans.api.java.source.JavaSource$Phase) throws java.io.IOException
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.CompilationController get(org.netbeans.modules.parsing.spi.Parser$Result)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr org.netbeans.api.java.source.CompilationInfo

CLSS public org.netbeans.api.java.source.CompilationInfo
innr public final static !enum CacheClearPolicy
meth protected void doInvalidate()
meth public com.sun.source.tree.CompilationUnitTree getCompilationUnit()
meth public com.sun.source.util.DocTrees getDocTrees()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.util.TreePath getChangedTree()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 0 org.netbeans.api.annotations.common.CheckReturnValue()
meth public com.sun.source.util.Trees getTrees()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Object getCachedValue(java.lang.Object)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getText()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.util.List<? extends javax.lang.model.element.TypeElement> getTopLevelElements()
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
meth public java.util.List<javax.tools.Diagnostic> getDiagnostics()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public javax.lang.model.SourceVersion getSourceVersion()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public javax.lang.model.util.Elements getElements()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public javax.lang.model.util.Types getTypes()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public javax.swing.text.Document getDocument() throws java.io.IOException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public org.netbeans.api.java.source.ClasspathInfo getClasspathInfo()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ElementUtilities getElementUtilities()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.JavaSource getJavaSource()
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
meth public org.netbeans.api.java.source.JavaSource$Phase getPhase()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.PositionConverter getPositionConverter()
 anno 0 java.lang.Deprecated()
meth public org.netbeans.api.java.source.TreeUtilities getTreeUtilities()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.TypeUtilities getTypeUtilities()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.lexer.TokenHierarchy<?> getTokenHierarchy()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.parsing.api.Snapshot getSnapshot()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.openide.filesystems.FileObject getFileObject()
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
meth public static org.netbeans.api.java.source.CompilationInfo get(org.netbeans.modules.parsing.spi.Parser$Result)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void putCachedValue(java.lang.Object,java.lang.Object,org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds VERIFY_CONFINEMENT,elementUtilities,impl,invalid,javaSource,treeUtilities,trees,typeUtilities

CLSS public final static !enum org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy
 outer org.netbeans.api.java.source.CompilationInfo
fld public final static org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy ON_CHANGE
fld public final static org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy ON_SIGNATURE_CHANGE
fld public final static org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy ON_TASK_END
meth public static org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy[] values()
supr java.lang.Enum<org.netbeans.api.java.source.CompilationInfo$CacheClearPolicy>

CLSS public final org.netbeans.api.java.source.DocTreePathHandle
meth public boolean equals(java.lang.Object)
meth public com.sun.source.doctree.DocTree$Kind getKind()
meth public com.sun.source.util.DocTreePath resolve(org.netbeans.api.java.source.CompilationInfo)
meth public int hashCode()
meth public java.lang.String toString()
meth public org.netbeans.api.java.source.TreePathHandle getTreePathHandle()
meth public static org.netbeans.api.java.source.DocTreePathHandle create(com.sun.source.util.DocTreePath,org.netbeans.api.java.source.CompilationInfo)
supr java.lang.Object
hfds delegate,log
hcls CountingDelegate,Delegate,DocCommentDelegate,DocTreeDelegate

CLSS public final org.netbeans.api.java.source.ElementHandle<%0 extends javax.lang.model.element.Element>
meth public boolean equals(java.lang.Object)
meth public boolean signatureEquals(org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public boolean signatureEquals({org.netbeans.api.java.source.ElementHandle%0})
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public int hashCode()
meth public java.lang.String getBinaryName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getQualifiedName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String toString()
meth public javax.lang.model.element.ElementKind getKind()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static <%0 extends javax.lang.model.element.Element> org.netbeans.api.java.source.ElementHandle<{%%0}> create({%%0})
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.TypeElement> from(org.netbeans.api.java.source.TypeMirrorHandle<? extends javax.lang.model.type.DeclaredType>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.ModuleElement> createModuleElementHandle(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.PackageElement> createPackageElementHandle(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement> createTypeElementHandle(javax.lang.model.element.ElementKind,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public {org.netbeans.api.java.source.ElementHandle%0} resolve(org.netbeans.api.java.source.CompilationInfo)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds NORMALIZATION_CACHE,kind,log,signatures
hcls ElementHandleAccessorImpl

CLSS public final org.netbeans.api.java.source.ElementUtilities
innr public abstract interface static ElementAcceptor
meth public boolean alreadyDefinedIn(java.lang.CharSequence,javax.lang.model.type.ExecutableType,javax.lang.model.element.TypeElement)
meth public boolean hasGetter(javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,org.netbeans.api.java.source.CodeStyle)
meth public boolean hasSetter(javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,org.netbeans.api.java.source.CodeStyle)
meth public boolean implementsMethod(javax.lang.model.element.ExecutableElement)
meth public boolean isEffectivelyFinal(javax.lang.model.element.VariableElement)
meth public boolean isErroneous(javax.lang.model.element.Element)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public boolean isLocal(javax.lang.model.element.Element)
meth public boolean isMemberOf(javax.lang.model.element.Element,javax.lang.model.element.TypeElement)
meth public boolean isOpen(javax.lang.model.element.ModuleElement)
meth public boolean isSynthetic(javax.lang.model.element.Element)
meth public boolean overridesMethod(javax.lang.model.element.ExecutableElement)
meth public java.lang.CharSequence getElementName(javax.lang.model.element.Element,boolean)
meth public java.lang.Iterable<? extends javax.lang.model.element.Element> getLocalMembersAndVars(com.sun.source.tree.Scope,org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.lang.Iterable<? extends javax.lang.model.element.Element> getLocalVars(com.sun.source.tree.Scope,org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.lang.Iterable<? extends javax.lang.model.element.Element> getMembers(javax.lang.model.type.TypeMirror,org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.lang.Iterable<? extends javax.lang.model.element.TypeElement> getGlobalTypes(org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.util.List<? extends javax.lang.model.element.ExecutableElement> findOverridableMethods(javax.lang.model.element.TypeElement)
meth public java.util.List<? extends javax.lang.model.element.ExecutableElement> findUnimplementedMethods(javax.lang.model.element.TypeElement)
meth public java.util.List<? extends javax.lang.model.element.ExecutableElement> findUnimplementedMethods(javax.lang.model.element.TypeElement,boolean)
meth public java.util.Map<? extends javax.lang.model.element.Element,com.sun.source.tree.Scope> findElementsAndOrigins(com.sun.source.tree.Scope,org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public javax.lang.model.element.Element findElement(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public javax.lang.model.element.Element getImplementationOf(javax.lang.model.element.ExecutableElement,javax.lang.model.element.TypeElement)
meth public javax.lang.model.element.ExecutableElement getDescriptorElement(javax.lang.model.element.TypeElement)
meth public javax.lang.model.element.ExecutableElement getOverriddenMethod(javax.lang.model.element.ExecutableElement)
meth public javax.lang.model.element.TypeElement enclosingTypeElement(javax.lang.model.element.Element)
meth public javax.lang.model.element.TypeElement outermostTypeElement(javax.lang.model.element.Element)
meth public static java.lang.String getBinaryName(javax.lang.model.element.TypeElement)
supr java.lang.Object
hfds ALL_ACCEPTOR,NOT_OVERRIDABLE,ctx,delegate,info
hcls ElementNameVisitor

CLSS public abstract interface static org.netbeans.api.java.source.ElementUtilities$ElementAcceptor
 outer org.netbeans.api.java.source.ElementUtilities
meth public abstract boolean accept(javax.lang.model.element.Element,javax.lang.model.type.TypeMirror)

CLSS public final org.netbeans.api.java.source.GeneratorUtilities
meth public !varargs com.sun.source.tree.CompilationUnitTree appendToAnnotationValue(com.sun.source.tree.CompilationUnitTree,javax.lang.model.element.TypeElement,java.lang.String,com.sun.source.tree.ExpressionTree[])
meth public !varargs com.sun.source.tree.ModifiersTree appendToAnnotationValue(com.sun.source.tree.ModifiersTree,javax.lang.model.element.TypeElement,java.lang.String,com.sun.source.tree.ExpressionTree[])
meth public <%0 extends com.sun.source.tree.Tree> {%%0} importComments({%%0},com.sun.source.tree.CompilationUnitTree)
meth public <%0 extends com.sun.source.tree.Tree> {%%0} importFQNs({%%0})
meth public com.sun.source.tree.BlockTree createDefaultLambdaBody(com.sun.source.tree.LambdaExpressionTree,javax.lang.model.element.ExecutableElement)
meth public com.sun.source.tree.ClassTree insertClassMember(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree insertClassMember(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree,int)
meth public com.sun.source.tree.ClassTree insertClassMembers(com.sun.source.tree.ClassTree,java.lang.Iterable<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ClassTree insertClassMembers(com.sun.source.tree.ClassTree,java.util.List<? extends com.sun.source.tree.Tree>,int)
meth public com.sun.source.tree.CompilationUnitTree addImports(com.sun.source.tree.CompilationUnitTree,java.util.Set<? extends javax.lang.model.element.Element>)
meth public com.sun.source.tree.CompilationUnitTree createFromTemplate(org.openide.filesystems.FileObject,java.lang.String,javax.lang.model.element.ElementKind) throws java.io.IOException
meth public com.sun.source.tree.MethodTree createAbstractMethodImplementation(javax.lang.model.element.TypeElement,javax.lang.model.element.ExecutableElement)
meth public com.sun.source.tree.MethodTree createConstructor(com.sun.source.tree.ClassTree,java.lang.Iterable<? extends com.sun.source.tree.VariableTree>)
meth public com.sun.source.tree.MethodTree createConstructor(javax.lang.model.element.TypeElement,java.lang.Iterable<? extends javax.lang.model.element.VariableElement>,javax.lang.model.element.ExecutableElement)
meth public com.sun.source.tree.MethodTree createDefaultConstructor(javax.lang.model.element.TypeElement,java.lang.Iterable<? extends javax.lang.model.element.VariableElement>,javax.lang.model.element.ExecutableElement)
meth public com.sun.source.tree.MethodTree createGetter(com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.MethodTree createGetter(javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement)
meth public com.sun.source.tree.MethodTree createMethod(javax.lang.model.type.DeclaredType,javax.lang.model.element.ExecutableElement)
meth public com.sun.source.tree.MethodTree createOverridingMethod(javax.lang.model.element.TypeElement,javax.lang.model.element.ExecutableElement)
meth public com.sun.source.tree.MethodTree createSetter(com.sun.source.tree.ClassTree,com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.MethodTree createSetter(javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement)
meth public java.util.List<? extends com.sun.source.tree.MethodTree> createAbstractMethodImplementations(javax.lang.model.element.TypeElement,java.lang.Iterable<? extends javax.lang.model.element.ExecutableElement>)
meth public java.util.List<? extends com.sun.source.tree.MethodTree> createAllAbstractMethodImplementations(javax.lang.model.element.TypeElement)
meth public java.util.List<? extends com.sun.source.tree.MethodTree> createOverridingMethods(javax.lang.model.element.TypeElement,java.lang.Iterable<? extends javax.lang.model.element.ExecutableElement>)
meth public static org.netbeans.api.java.source.GeneratorUtilities get(org.netbeans.api.java.source.WorkingCopy)
meth public void copyComments(com.sun.source.tree.Tree,com.sun.source.tree.Tree,boolean)
supr java.lang.Object
hfds CLASS_NAME,DEFAULT_RETURN_TYPE_VALUE,GENERATED_METHOD_BODY,LAMBDA_BODY,METHOD_NAME,METHOD_RETURN_TYPE,OVERRIDDEN_METHOD_BODY,SCRIPT_ENGINE_ATTR,SIMPLE_CLASS_NAME,STRING_OUTPUT_MODE_ATTR,SUPER_METHOD_CALL,copy,manager
hcls ClassMemberComparator,FieldRefVisitor,ImportsComparator

CLSS public abstract org.netbeans.api.java.source.JavaParserResultTask<%0 extends org.netbeans.modules.parsing.spi.Parser$Result>
cons protected init(org.netbeans.api.java.source.JavaSource$Phase)
 anno 1 org.netbeans.api.annotations.common.NonNull()
cons protected init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.modules.parsing.spi.TaskIndexingMode)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public final org.netbeans.api.java.source.JavaSource$Phase getPhase()
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr org.netbeans.modules.parsing.spi.IndexingAwareParserResultTask<{org.netbeans.api.java.source.JavaParserResultTask%0}>
hfds phase

CLSS public final org.netbeans.api.java.source.JavaSource
innr public final static !enum Phase
innr public final static !enum Priority
innr public final static InsufficientMemoryException
meth public !varargs static org.netbeans.api.java.source.JavaSource create(org.netbeans.api.java.source.ClasspathInfo,org.openide.filesystems.FileObject[])
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Collection<org.openide.filesystems.FileObject> getFileObjects()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.util.concurrent.Future<java.lang.Void> runWhenScanFinished(org.netbeans.api.java.source.Task<org.netbeans.api.java.source.CompilationController>,boolean) throws java.io.IOException
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ClasspathInfo getClasspathInfo()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ModificationResult runModificationTask(org.netbeans.api.java.source.Task<org.netbeans.api.java.source.WorkingCopy>) throws java.io.IOException
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.JavaSource create(org.netbeans.api.java.source.ClasspathInfo,java.util.Collection<? extends org.openide.filesystems.FileObject>)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.JavaSource forDocument(javax.swing.text.Document)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.JavaSource forFileObject(org.openide.filesystems.FileObject)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void runUserActionTask(org.netbeans.api.java.source.Task<org.netbeans.api.java.source.CompilationController>,boolean) throws java.io.IOException
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOGGER,cachedCpInfo,classpathInfo,file2JavaSource,files,sources,supportedMIMETypes
hcls JavaSourceAccessorImpl,MultiTask

CLSS public final static org.netbeans.api.java.source.JavaSource$InsufficientMemoryException
 outer org.netbeans.api.java.source.JavaSource
meth public org.openide.filesystems.FileObject getFile()
supr java.io.IOException
hfds fo

CLSS public final static !enum org.netbeans.api.java.source.JavaSource$Phase
 outer org.netbeans.api.java.source.JavaSource
fld public final static org.netbeans.api.java.source.JavaSource$Phase ELEMENTS_RESOLVED
fld public final static org.netbeans.api.java.source.JavaSource$Phase MODIFIED
fld public final static org.netbeans.api.java.source.JavaSource$Phase PARSED
fld public final static org.netbeans.api.java.source.JavaSource$Phase RESOLVED
fld public final static org.netbeans.api.java.source.JavaSource$Phase UP_TO_DATE
meth public static org.netbeans.api.java.source.JavaSource$Phase valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.JavaSource$Phase[] values()
supr java.lang.Enum<org.netbeans.api.java.source.JavaSource$Phase>

CLSS public final static !enum org.netbeans.api.java.source.JavaSource$Priority
 outer org.netbeans.api.java.source.JavaSource
fld public final static org.netbeans.api.java.source.JavaSource$Priority ABOVE_NORMAL
fld public final static org.netbeans.api.java.source.JavaSource$Priority BELOW_NORMAL
fld public final static org.netbeans.api.java.source.JavaSource$Priority HIGH
fld public final static org.netbeans.api.java.source.JavaSource$Priority LOW
fld public final static org.netbeans.api.java.source.JavaSource$Priority MAX
fld public final static org.netbeans.api.java.source.JavaSource$Priority MIN
fld public final static org.netbeans.api.java.source.JavaSource$Priority NORMAL
meth public static org.netbeans.api.java.source.JavaSource$Priority valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.JavaSource$Priority[] values()
supr java.lang.Enum<org.netbeans.api.java.source.JavaSource$Priority>

CLSS public abstract org.netbeans.api.java.source.JavaSourceTaskFactory
cons protected init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
cons protected init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,org.netbeans.modules.parsing.spi.TaskIndexingMode)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth protected abstract java.util.Collection<org.openide.filesystems.FileObject> getFileObjects()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth protected abstract org.netbeans.api.java.source.CancellableTask<org.netbeans.api.java.source.CompilationInfo> createTask(org.openide.filesystems.FileObject)
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth protected final void fileObjectsChanged()
meth protected final void reschedule(org.openide.filesystems.FileObject)
supr java.lang.Object
hfds ACCESSOR2,BEFORE_ADDING_REMOVING_TASKS,FILEOBJECTS_COMPUTATION,LOG,SYNCHRONOUS_EVENTS,WORKER,file2JS,file2Task,filesLock,phase,priority,taskIndexingMode
hcls Accessor2

CLSS public final org.netbeans.api.java.source.ModificationResult
innr public static Difference
meth public int[] getSpan(java.lang.Object)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getResultingSource(org.openide.filesystems.FileObject) throws java.io.IOException
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.util.List<? extends org.netbeans.api.java.source.ModificationResult$Difference> getDifferences(org.openide.filesystems.FileObject)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<? extends org.openide.filesystems.FileObject> getModifiedFileObjects()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<java.io.File> getNewFiles()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.ModificationResult runModificationTask(java.util.Collection<org.netbeans.modules.parsing.api.Source>,org.netbeans.modules.parsing.api.UserTask) throws org.netbeans.modules.parsing.spi.ParseException
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public void commit() throws java.io.IOException
supr java.lang.Object
hfds LOG,committed,creator,diffs,lastCommitted,tag2Span
hcls CreateChange,FilteringReader,FilteringWriter

CLSS public static org.netbeans.api.java.source.ModificationResult$Difference
 outer org.netbeans.api.java.source.ModificationResult
innr public final static !enum Kind
meth public boolean isCommitToGuards()
meth public boolean isExcluded()
meth public java.lang.String getDescription()
meth public java.lang.String getNewText()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getOldText()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String toString()
meth public javax.swing.text.Document openDocument() throws java.io.IOException
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public javax.swing.text.Position getEndPosition()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public javax.swing.text.Position getStartPosition()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ModificationResult$Difference$Kind getKind()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public void exclude(boolean)
meth public void setCommitToGuards(boolean)
supr java.lang.Object
hfds ctxLookup,description,endPos,excluded,ignoreGuards,kind,newText,oldText,sourceFile,startPos,theSource

CLSS public final static !enum org.netbeans.api.java.source.ModificationResult$Difference$Kind
 outer org.netbeans.api.java.source.ModificationResult$Difference
fld public final static org.netbeans.api.java.source.ModificationResult$Difference$Kind CHANGE
fld public final static org.netbeans.api.java.source.ModificationResult$Difference$Kind CREATE
fld public final static org.netbeans.api.java.source.ModificationResult$Difference$Kind INSERT
fld public final static org.netbeans.api.java.source.ModificationResult$Difference$Kind REMOVE
meth public static org.netbeans.api.java.source.ModificationResult$Difference$Kind valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.ModificationResult$Difference$Kind[] values()
supr java.lang.Enum<org.netbeans.api.java.source.ModificationResult$Difference$Kind>

CLSS public final org.netbeans.api.java.source.PositionConverter
meth public int getJavaSourcePosition(int)
meth public int getOriginalPosition(int)
supr java.lang.Object
hfds snapshot

CLSS public final org.netbeans.api.java.source.RootsEvent
meth public java.lang.Iterable<? extends java.net.URL> getRoots()
meth public java.lang.String toString()
supr java.util.EventObject
hfds roots

CLSS public final org.netbeans.api.java.source.ScanUtils
meth public static <%0 extends javax.lang.model.element.Element> {%%0} checkElement(org.netbeans.api.java.source.CompilationInfo,{%%0})
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public static java.util.concurrent.Future<java.lang.Void> postUserActionTask(org.netbeans.api.java.source.JavaSource,org.netbeans.api.java.source.Task<org.netbeans.api.java.source.CompilationController>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.concurrent.Future<java.lang.Void> postUserTask(org.netbeans.modules.parsing.api.Source,org.netbeans.modules.parsing.api.UserTask)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static void signalIncompleteData(org.netbeans.api.java.source.CompilationInfo,org.netbeans.api.java.source.ElementHandle)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public static void waitUserActionTask(org.netbeans.api.java.source.JavaSource,org.netbeans.api.java.source.Task<org.netbeans.api.java.source.CompilationController>) throws java.io.IOException
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static void waitUserTask(org.netbeans.modules.parsing.api.Source,org.netbeans.modules.parsing.api.UserTask) throws org.netbeans.modules.parsing.spi.ParseException
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds retryGuard
hcls FinishedFuture,RetryWhenScanFinished,TaskWrapper

CLSS public org.netbeans.api.java.source.SourceUtils
meth public static boolean checkTypesAssignable(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.type.TypeMirror,javax.lang.model.type.TypeMirror)
meth public static boolean isMainClass(java.lang.String,org.netbeans.api.java.source.ClasspathInfo)
meth public static boolean isMainClass(java.lang.String,org.netbeans.api.java.source.ClasspathInfo,boolean)
meth public static boolean isMainMethod(javax.lang.model.element.ExecutableElement)
meth public static boolean isScanInProgress()
meth public static java.lang.Object getDiagnosticParam(javax.tools.Diagnostic<?>,int)
meth public static java.lang.String getModuleName(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.lang.String getModuleName(java.net.URL,boolean)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static java.lang.String parseModuleName(org.openide.filesystems.FileObject)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.lang.String resolveImport(org.netbeans.api.java.source.CompilationInfo,com.sun.source.util.TreePath,java.lang.String) throws java.io.IOException
meth public static java.lang.String[] getJVMSignature(org.netbeans.api.java.source.ElementHandle<?>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.net.URL getJavadoc(javax.lang.model.element.Element,org.netbeans.api.java.source.ClasspathInfo)
 anno 0 java.lang.Deprecated()
meth public static java.net.URL getPreferredJavadoc(javax.lang.model.element.Element)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Collection<? extends java.net.URL> getJavadoc(javax.lang.model.element.Element)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Collection<? extends javax.lang.model.element.Element> getForwardReferences(com.sun.source.util.TreePath,int,com.sun.source.util.SourcePositions,com.sun.source.util.Trees)
meth public static java.util.Collection<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>> getMainClasses(org.openide.filesystems.FileObject)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Collection<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>> getMainClasses(org.openide.filesystems.FileObject[])
meth public static java.util.List<? extends javax.annotation.processing.Completion> getAttributeValueCompletions(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.element.Element,javax.lang.model.element.AnnotationMirror,javax.lang.model.element.ExecutableElement,java.lang.String)
meth public static java.util.Set<com.sun.source.util.TreePath> computeDuplicates(org.netbeans.api.java.source.CompilationInfo,com.sun.source.util.TreePath,com.sun.source.util.TreePath,java.util.concurrent.atomic.AtomicBoolean)
meth public static java.util.Set<java.lang.String> getModuleNames(org.netbeans.api.java.source.CompilationInfo,java.util.Set<? extends org.netbeans.api.java.source.ClassIndex$SearchScopeType>)
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Set<java.net.URL> getDependentRoots(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Set<java.net.URL> getDependentRoots(java.net.URL,boolean)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static javax.lang.model.element.TypeElement getEnclosingTypeElement(javax.lang.model.element.Element)
 anno 0 java.lang.Deprecated()
meth public static javax.lang.model.element.TypeElement getOutermostEnclosingTypeElement(javax.lang.model.element.Element)
meth public static javax.lang.model.type.TypeMirror getBound(javax.lang.model.type.WildcardType)
meth public static javax.lang.model.type.TypeMirror resolveCapturedType(org.netbeans.api.java.source.CompilationInfo,javax.lang.model.type.TypeMirror)
meth public static javax.lang.model.type.WildcardType resolveCapturedType(javax.lang.model.type.TypeMirror)
meth public static org.netbeans.api.lexer.TokenSequence<org.netbeans.api.java.lexer.JavaTokenId> getJavaTokenSequence(org.netbeans.api.lexer.TokenHierarchy,int)
meth public static org.openide.filesystems.FileObject getFile(javax.lang.model.element.Element,org.netbeans.api.java.source.ClasspathInfo)
meth public static org.openide.filesystems.FileObject getFile(org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>,org.netbeans.api.java.source.ClasspathInfo)
meth public static void waitScanFinished() throws java.lang.InterruptedException
supr java.lang.Object
hfds LOG
hcls CaseInsensitiveMatch,CaseSensitiveMatch,Match

CLSS public abstract interface org.netbeans.api.java.source.Task<%0 extends java.lang.Object>
meth public abstract void run({org.netbeans.api.java.source.Task%0}) throws java.lang.Exception

CLSS public final org.netbeans.api.java.source.TreeMaker
meth public <%0 extends com.sun.source.tree.Tree> {%%0} asNew({%%0})
meth public <%0 extends com.sun.source.tree.Tree> {%%0} asRemoved({%%0})
meth public <%0 extends com.sun.source.tree.Tree> {%%0} asReplacementOf({%%0},com.sun.source.tree.Tree)
meth public <%0 extends com.sun.source.tree.Tree> {%%0} asReplacementOf({%%0},com.sun.source.tree.Tree,boolean)
meth public <%0 extends com.sun.source.tree.Tree> {%%0} setInitialValue({%%0},com.sun.source.tree.ExpressionTree)
meth public <%0 extends com.sun.source.tree.Tree> {%%0} setLabel({%%0},java.lang.CharSequence)
meth public com.sun.source.doctree.AttributeTree Attribute(java.lang.CharSequence,com.sun.source.doctree.AttributeTree$ValueKind,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.AuthorTree Author(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.CommentTree Comment(java.lang.String)
meth public com.sun.source.doctree.DeprecatedTree Deprecated(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.DocCommentTree DocComment(java.util.List<? extends com.sun.source.doctree.DocTree>,java.util.List<? extends com.sun.source.doctree.DocTree>,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.DocRootTree DocRoot()
meth public com.sun.source.doctree.EndElementTree EndElement(java.lang.CharSequence)
meth public com.sun.source.doctree.EntityTree Entity(java.lang.CharSequence)
meth public com.sun.source.doctree.IdentifierTree DocIdentifier(java.lang.CharSequence)
meth public com.sun.source.doctree.InheritDocTree InheritDoc()
meth public com.sun.source.doctree.LinkTree Link(com.sun.source.doctree.ReferenceTree,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.LinkTree LinkPlain(com.sun.source.doctree.ReferenceTree,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.LiteralTree Code(com.sun.source.doctree.TextTree)
meth public com.sun.source.doctree.LiteralTree DocLiteral(com.sun.source.doctree.TextTree)
meth public com.sun.source.doctree.ParamTree Param(boolean,com.sun.source.doctree.IdentifierTree,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.ReferenceTree Reference(com.sun.source.tree.ExpressionTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.Tree>)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public com.sun.source.doctree.ReturnTree DocReturn(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.SeeTree See(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.SerialDataTree SerialData(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.SerialFieldTree SerialField(com.sun.source.doctree.IdentifierTree,com.sun.source.doctree.ReferenceTree,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.SerialTree Serial(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.SinceTree Since(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.StartElementTree StartElement(java.lang.CharSequence,java.util.List<? extends com.sun.source.doctree.DocTree>,boolean)
meth public com.sun.source.doctree.TextTree Text(java.lang.String)
meth public com.sun.source.doctree.ThrowsTree Exception(com.sun.source.doctree.ReferenceTree,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.ThrowsTree Throws(com.sun.source.doctree.ReferenceTree,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.UnknownBlockTagTree UnknownBlockTag(java.lang.CharSequence,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.UnknownInlineTagTree UnknownInlineTag(java.lang.CharSequence,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.ValueTree Value(com.sun.source.doctree.ReferenceTree)
meth public com.sun.source.doctree.VersionTree Version(java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.tree.AnnotationTree Annotation(com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.AnnotationTree TypeAnnotation(com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.AnnotationTree addAnnotationAttrValue(com.sun.source.tree.AnnotationTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.AnnotationTree insertAnnotationAttrValue(com.sun.source.tree.AnnotationTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.AnnotationTree removeAnnotationAttrValue(com.sun.source.tree.AnnotationTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.AnnotationTree removeAnnotationAttrValue(com.sun.source.tree.AnnotationTree,int)
meth public com.sun.source.tree.ArrayAccessTree ArrayAccess(com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ArrayTypeTree ArrayType(com.sun.source.tree.Tree)
meth public com.sun.source.tree.AssertTree Assert(com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.AssignmentTree Assignment(com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.BinaryTree Binary(com.sun.source.tree.Tree$Kind,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.BlockTree Block(java.util.List<? extends com.sun.source.tree.StatementTree>,boolean)
meth public com.sun.source.tree.BlockTree addBlockStatement(com.sun.source.tree.BlockTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.BlockTree createLambdaBody(com.sun.source.tree.LambdaExpressionTree,java.lang.String)
meth public com.sun.source.tree.BlockTree createMethodBody(com.sun.source.tree.MethodTree,java.lang.String)
meth public com.sun.source.tree.BlockTree insertBlockStatement(com.sun.source.tree.BlockTree,int,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.BlockTree removeBlockStatement(com.sun.source.tree.BlockTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.BlockTree removeBlockStatement(com.sun.source.tree.BlockTree,int)
meth public com.sun.source.tree.BreakTree Break(java.lang.CharSequence)
meth public com.sun.source.tree.CaseTree Case(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.StatementTree>)
meth public com.sun.source.tree.CaseTree Case(java.util.List<? extends com.sun.source.tree.ExpressionTree>,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CaseTree CaseMultipleLabels(java.util.List<? extends com.sun.source.tree.ExpressionTree>,java.util.List<? extends com.sun.source.tree.StatementTree>)
meth public com.sun.source.tree.CaseTree addCaseStatement(com.sun.source.tree.CaseTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.CaseTree insertCaseStatement(com.sun.source.tree.CaseTree,int,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.CaseTree removeCaseStatement(com.sun.source.tree.CaseTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.CaseTree removeCaseStatement(com.sun.source.tree.CaseTree,int)
meth public com.sun.source.tree.CatchTree Catch(com.sun.source.tree.VariableTree,com.sun.source.tree.BlockTree)
meth public com.sun.source.tree.ClassTree AnnotationType(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ClassTree Class(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.Tree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ClassTree Enum(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.Tree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ClassTree Interface(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,java.util.List<? extends com.sun.source.tree.Tree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ClassTree addClassImplementsClause(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree addClassMember(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree addClassTypeParameter(com.sun.source.tree.ClassTree,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.ClassTree insertClassImplementsClause(com.sun.source.tree.ClassTree,int,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree insertClassMember(com.sun.source.tree.ClassTree,int,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree insertClassTypeParameter(com.sun.source.tree.ClassTree,int,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.ClassTree removeClassImplementsClause(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree removeClassImplementsClause(com.sun.source.tree.ClassTree,int)
meth public com.sun.source.tree.ClassTree removeClassMember(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree removeClassMember(com.sun.source.tree.ClassTree,int)
meth public com.sun.source.tree.ClassTree removeClassTypeParameter(com.sun.source.tree.ClassTree,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.ClassTree removeClassTypeParameter(com.sun.source.tree.ClassTree,int)
meth public com.sun.source.tree.ClassTree setExtends(com.sun.source.tree.ClassTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>,javax.tools.JavaFileObject)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(com.sun.source.tree.PackageTree,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>,javax.tools.JavaFileObject)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(java.util.List<? extends com.sun.source.tree.AnnotationTree>,com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>,javax.tools.JavaFileObject)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(java.util.List<? extends com.sun.source.tree.AnnotationTree>,org.openide.filesystems.FileObject,java.lang.String,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(org.openide.filesystems.FileObject,java.lang.String,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.CompilationUnitTree addCompUnitImport(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.ImportTree)
meth public com.sun.source.tree.CompilationUnitTree addCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CompilationUnitTree addPackageAnnotation(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.CompilationUnitTree insertCompUnitImport(com.sun.source.tree.CompilationUnitTree,int,com.sun.source.tree.ImportTree)
meth public com.sun.source.tree.CompilationUnitTree insertCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,int,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CompilationUnitTree insertPackageAnnotation(com.sun.source.tree.CompilationUnitTree,int,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitImport(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.ImportTree)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitImport(com.sun.source.tree.CompilationUnitTree,int)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,int)
meth public com.sun.source.tree.CompilationUnitTree removePackageAnnotation(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.CompilationUnitTree removePackageAnnotation(com.sun.source.tree.CompilationUnitTree,int)
meth public com.sun.source.tree.CompoundAssignmentTree CompoundAssignment(com.sun.source.tree.Tree$Kind,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ConditionalExpressionTree ConditionalExpression(com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ContinueTree Continue(java.lang.CharSequence)
meth public com.sun.source.tree.DoWhileLoopTree DoWhileLoop(com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.EmptyStatementTree EmptyStatement()
meth public com.sun.source.tree.EnhancedForLoopTree EnhancedForLoop(com.sun.source.tree.VariableTree,com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.ErroneousTree Erroneous(java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ExportsTree Exports(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.ExpressionStatementTree ExpressionStatement(com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ExpressionTree QualIdent(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.tree.ExpressionTree QualIdent(javax.lang.model.element.Element)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.tree.ForLoopTree ForLoop(java.util.List<? extends com.sun.source.tree.StatementTree>,com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ExpressionStatementTree>,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.ForLoopTree addForLoopInitializer(com.sun.source.tree.ForLoopTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.ForLoopTree addForLoopUpdate(com.sun.source.tree.ForLoopTree,com.sun.source.tree.ExpressionStatementTree)
meth public com.sun.source.tree.ForLoopTree insertForLoopInitializer(com.sun.source.tree.ForLoopTree,int,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.ForLoopTree insertForLoopUpdate(com.sun.source.tree.ForLoopTree,int,com.sun.source.tree.ExpressionStatementTree)
meth public com.sun.source.tree.ForLoopTree removeForLoopInitializer(com.sun.source.tree.ForLoopTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.ForLoopTree removeForLoopInitializer(com.sun.source.tree.ForLoopTree,int)
meth public com.sun.source.tree.ForLoopTree removeForLoopUpdate(com.sun.source.tree.ForLoopTree,com.sun.source.tree.ExpressionStatementTree)
meth public com.sun.source.tree.ForLoopTree removeForLoopUpdate(com.sun.source.tree.ForLoopTree,int)
meth public com.sun.source.tree.IdentifierTree Identifier(java.lang.CharSequence)
meth public com.sun.source.tree.IdentifierTree Identifier(javax.lang.model.element.Element)
meth public com.sun.source.tree.IfTree If(com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.ImportTree Import(com.sun.source.tree.Tree,boolean)
meth public com.sun.source.tree.InstanceOfTree InstanceOf(com.sun.source.tree.ExpressionTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.LabeledStatementTree LabeledStatement(java.lang.CharSequence,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.LambdaExpressionTree LambdaExpression(java.util.List<? extends com.sun.source.tree.VariableTree>,com.sun.source.tree.Tree)
meth public com.sun.source.tree.LambdaExpressionTree addLambdaParameter(com.sun.source.tree.LambdaExpressionTree,com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.LambdaExpressionTree insertLambdaParameter(com.sun.source.tree.LambdaExpressionTree,int,com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.LambdaExpressionTree removeLambdaParameter(com.sun.source.tree.LambdaExpressionTree,com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.LambdaExpressionTree removeLambdaParameter(com.sun.source.tree.LambdaExpressionTree,int)
meth public com.sun.source.tree.LambdaExpressionTree setLambdaBody(com.sun.source.tree.LambdaExpressionTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.LiteralTree Literal(java.lang.Object)
meth public com.sun.source.tree.MemberReferenceTree MemberReference(com.sun.source.tree.MemberReferenceTree$ReferenceMode,com.sun.source.tree.ExpressionTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.MemberSelectTree MemberSelect(com.sun.source.tree.ExpressionTree,java.lang.CharSequence)
meth public com.sun.source.tree.MemberSelectTree MemberSelect(com.sun.source.tree.ExpressionTree,javax.lang.model.element.Element)
meth public com.sun.source.tree.MethodInvocationTree MethodInvocation(java.util.List<? extends com.sun.source.tree.ExpressionTree>,com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.MethodInvocationTree addMethodInvocationArgument(com.sun.source.tree.MethodInvocationTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodInvocationTree addMethodInvocationTypeArgument(com.sun.source.tree.MethodInvocationTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodInvocationTree insertMethodInvocationArgument(com.sun.source.tree.MethodInvocationTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodInvocationTree insertMethodInvocationTypeArgument(com.sun.source.tree.MethodInvocationTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodInvocationTree removeMethodInvocationArgument(com.sun.source.tree.MethodInvocationTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodInvocationTree removeMethodInvocationArgument(com.sun.source.tree.MethodInvocationTree,int)
meth public com.sun.source.tree.MethodInvocationTree removeMethodInvocationTypeArgument(com.sun.source.tree.MethodInvocationTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodInvocationTree removeMethodInvocationTypeArgument(com.sun.source.tree.MethodInvocationTree,int)
meth public com.sun.source.tree.MethodTree Constructor(com.sun.source.tree.ModifiersTree,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,java.util.List<? extends com.sun.source.tree.VariableTree>,java.util.List<? extends com.sun.source.tree.ExpressionTree>,com.sun.source.tree.BlockTree)
meth public com.sun.source.tree.MethodTree Constructor(com.sun.source.tree.ModifiersTree,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,java.util.List<? extends com.sun.source.tree.VariableTree>,java.util.List<? extends com.sun.source.tree.ExpressionTree>,java.lang.String)
meth public com.sun.source.tree.MethodTree Method(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,java.util.List<? extends com.sun.source.tree.VariableTree>,java.util.List<? extends com.sun.source.tree.ExpressionTree>,com.sun.source.tree.BlockTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodTree Method(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,java.util.List<? extends com.sun.source.tree.VariableTree>,java.util.List<? extends com.sun.source.tree.ExpressionTree>,com.sun.source.tree.BlockTree,com.sun.source.tree.ExpressionTree,boolean)
meth public com.sun.source.tree.MethodTree Method(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,java.util.List<? extends com.sun.source.tree.VariableTree>,java.util.List<? extends com.sun.source.tree.ExpressionTree>,java.lang.String,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodTree Method(javax.lang.model.element.ExecutableElement,com.sun.source.tree.BlockTree)
 anno 0 java.lang.Deprecated()
meth public com.sun.source.tree.MethodTree addMethodParameter(com.sun.source.tree.MethodTree,com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.MethodTree addMethodThrows(com.sun.source.tree.MethodTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodTree addMethodTypeParameter(com.sun.source.tree.MethodTree,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.MethodTree insertMethodParameter(com.sun.source.tree.MethodTree,int,com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.MethodTree insertMethodThrows(com.sun.source.tree.MethodTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodTree insertMethodTypeParameter(com.sun.source.tree.MethodTree,int,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.MethodTree removeMethodParameter(com.sun.source.tree.MethodTree,com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.MethodTree removeMethodParameter(com.sun.source.tree.MethodTree,int)
meth public com.sun.source.tree.MethodTree removeMethodThrows(com.sun.source.tree.MethodTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.MethodTree removeMethodThrows(com.sun.source.tree.MethodTree,int)
meth public com.sun.source.tree.MethodTree removeMethodTypeParameter(com.sun.source.tree.MethodTree,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.MethodTree removeMethodTypeParameter(com.sun.source.tree.MethodTree,int)
meth public com.sun.source.tree.ModifiersTree Modifiers(com.sun.source.tree.ModifiersTree,java.util.List<? extends com.sun.source.tree.AnnotationTree>)
meth public com.sun.source.tree.ModifiersTree Modifiers(java.util.Set<javax.lang.model.element.Modifier>)
meth public com.sun.source.tree.ModifiersTree Modifiers(java.util.Set<javax.lang.model.element.Modifier>,java.util.List<? extends com.sun.source.tree.AnnotationTree>)
meth public com.sun.source.tree.ModifiersTree Modifiers(long,java.util.List<? extends com.sun.source.tree.AnnotationTree>)
meth public com.sun.source.tree.ModifiersTree addModifiersAnnotation(com.sun.source.tree.ModifiersTree,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.ModifiersTree addModifiersModifier(com.sun.source.tree.ModifiersTree,javax.lang.model.element.Modifier)
meth public com.sun.source.tree.ModifiersTree insertModifiersAnnotation(com.sun.source.tree.ModifiersTree,int,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.ModifiersTree removeModifiersAnnotation(com.sun.source.tree.ModifiersTree,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.ModifiersTree removeModifiersAnnotation(com.sun.source.tree.ModifiersTree,int)
meth public com.sun.source.tree.ModifiersTree removeModifiersModifier(com.sun.source.tree.ModifiersTree,javax.lang.model.element.Modifier)
meth public com.sun.source.tree.ModuleTree Module(com.sun.source.tree.ModifiersTree,com.sun.source.tree.ModuleTree$ModuleKind,com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.DirectiveTree>)
meth public com.sun.source.tree.ModuleTree addModuleDirective(com.sun.source.tree.ModuleTree,com.sun.source.tree.DirectiveTree)
meth public com.sun.source.tree.ModuleTree insertModuleDirective(com.sun.source.tree.ModuleTree,int,com.sun.source.tree.DirectiveTree)
meth public com.sun.source.tree.ModuleTree removeModuleDirective(com.sun.source.tree.ModuleTree,com.sun.source.tree.DirectiveTree)
meth public com.sun.source.tree.ModuleTree removeModuleDirective(com.sun.source.tree.ModuleTree,int)
meth public com.sun.source.tree.NewArrayTree NewArray(com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.ExpressionTree>,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.NewArrayTree addNewArrayDimension(com.sun.source.tree.NewArrayTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewArrayTree addNewArrayInitializer(com.sun.source.tree.NewArrayTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewArrayTree insertNewArrayDimension(com.sun.source.tree.NewArrayTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewArrayTree insertNewArrayInitializer(com.sun.source.tree.NewArrayTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewArrayTree removeNewArrayDimension(com.sun.source.tree.NewArrayTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewArrayTree removeNewArrayDimension(com.sun.source.tree.NewArrayTree,int)
meth public com.sun.source.tree.NewArrayTree removeNewArrayInitializer(com.sun.source.tree.NewArrayTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewArrayTree removeNewArrayInitializer(com.sun.source.tree.NewArrayTree,int)
meth public com.sun.source.tree.NewClassTree NewClass(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ExpressionTree>,com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ExpressionTree>,com.sun.source.tree.ClassTree)
meth public com.sun.source.tree.NewClassTree addNewClassArgument(com.sun.source.tree.NewClassTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewClassTree addNewClassTypeArgument(com.sun.source.tree.NewClassTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewClassTree insertNewClassArgument(com.sun.source.tree.NewClassTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewClassTree insertNewClassTypeArgument(com.sun.source.tree.NewClassTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewClassTree removeNewClassArgument(com.sun.source.tree.NewClassTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewClassTree removeNewClassArgument(com.sun.source.tree.NewClassTree,int)
meth public com.sun.source.tree.NewClassTree removeNewClassTypeArgument(com.sun.source.tree.NewClassTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.NewClassTree removeNewClassTypeArgument(com.sun.source.tree.NewClassTree,int)
meth public com.sun.source.tree.OpensTree Opens(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.ParameterizedTypeTree ParameterizedType(com.sun.source.tree.Tree,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ParameterizedTypeTree addParameterizedTypeTypeArgument(com.sun.source.tree.ParameterizedTypeTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ParameterizedTypeTree insertParameterizedTypeTypeArgument(com.sun.source.tree.ParameterizedTypeTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ParameterizedTypeTree removeParameterizedTypeTypeArgument(com.sun.source.tree.ParameterizedTypeTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ParameterizedTypeTree removeParameterizedTypeTypeArgument(com.sun.source.tree.ParameterizedTypeTree,int)
meth public com.sun.source.tree.ParenthesizedTree Parenthesized(com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.PrimitiveTypeTree PrimitiveType(javax.lang.model.type.TypeKind)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.tree.ProvidesTree Provides(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.RequiresTree Requires(boolean,boolean,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ReturnTree Return(com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.SwitchTree Switch(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.CaseTree>)
meth public com.sun.source.tree.SwitchTree addSwitchCase(com.sun.source.tree.SwitchTree,com.sun.source.tree.CaseTree)
meth public com.sun.source.tree.SwitchTree insertSwitchCase(com.sun.source.tree.SwitchTree,int,com.sun.source.tree.CaseTree)
meth public com.sun.source.tree.SwitchTree removeSwitchCase(com.sun.source.tree.SwitchTree,com.sun.source.tree.CaseTree)
meth public com.sun.source.tree.SwitchTree removeSwitchCase(com.sun.source.tree.SwitchTree,int)
meth public com.sun.source.tree.SynchronizedTree Synchronized(com.sun.source.tree.ExpressionTree,com.sun.source.tree.BlockTree)
meth public com.sun.source.tree.ThrowTree Throw(com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.Tree SwitchExpression(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.CaseTree>)
meth public com.sun.source.tree.Tree Type(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.tree.Tree Type(javax.lang.model.type.TypeMirror)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.tree.TryTree Try(com.sun.source.tree.BlockTree,java.util.List<? extends com.sun.source.tree.CatchTree>,com.sun.source.tree.BlockTree)
meth public com.sun.source.tree.TryTree Try(java.util.List<? extends com.sun.source.tree.Tree>,com.sun.source.tree.BlockTree,java.util.List<? extends com.sun.source.tree.CatchTree>,com.sun.source.tree.BlockTree)
meth public com.sun.source.tree.TryTree addTryCatch(com.sun.source.tree.TryTree,com.sun.source.tree.CatchTree)
meth public com.sun.source.tree.TryTree insertTryCatch(com.sun.source.tree.TryTree,int,com.sun.source.tree.CatchTree)
meth public com.sun.source.tree.TryTree removeTryCatch(com.sun.source.tree.TryTree,com.sun.source.tree.CatchTree)
meth public com.sun.source.tree.TryTree removeTryCatch(com.sun.source.tree.TryTree,int)
meth public com.sun.source.tree.TypeCastTree TypeCast(com.sun.source.tree.Tree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.TypeParameterTree TypeParameter(java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.ExpressionTree>)
meth public com.sun.source.tree.TypeParameterTree addTypeParameterBound(com.sun.source.tree.TypeParameterTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.TypeParameterTree insertTypeParameterBound(com.sun.source.tree.TypeParameterTree,int,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.TypeParameterTree removeTypeParameterBound(com.sun.source.tree.TypeParameterTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.TypeParameterTree removeTypeParameterBound(com.sun.source.tree.TypeParameterTree,int)
meth public com.sun.source.tree.UnaryTree Unary(com.sun.source.tree.Tree$Kind,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.UnionTypeTree UnionType(java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.UsesTree Uses(com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.VariableTree Variable(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,com.sun.source.tree.Tree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.VariableTree Variable(javax.lang.model.element.VariableElement,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.WhileLoopTree WhileLoop(com.sun.source.tree.ExpressionTree,com.sun.source.tree.StatementTree)
meth public com.sun.source.tree.WildcardTree Wildcard(com.sun.source.tree.Tree$Kind,com.sun.source.tree.Tree)
meth public void addComment(com.sun.source.tree.Tree,org.netbeans.api.java.source.Comment,boolean)
meth public void insertComment(com.sun.source.tree.Tree,org.netbeans.api.java.source.Comment,int,boolean)
meth public void removeComment(com.sun.source.tree.Tree,int,boolean)
supr java.lang.Object
hfds copy,delegate,handler,model
hcls TreePosCleaner

CLSS public final org.netbeans.api.java.source.TreePathHandle
meth public boolean equals(java.lang.Object)
meth public com.sun.source.tree.Tree$Kind getKind()
meth public com.sun.source.util.TreePath resolve(org.netbeans.api.java.source.CompilationInfo)
meth public int hashCode()
meth public java.lang.String toString()
meth public javax.lang.model.element.Element resolveElement(org.netbeans.api.java.source.CompilationInfo)
meth public org.netbeans.api.java.source.ElementHandle getElementHandle()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public org.openide.filesystems.FileObject getFileObject()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public static org.netbeans.api.java.source.TreePathHandle create(com.sun.source.util.TreePath,org.netbeans.api.java.source.CompilationInfo)
meth public static org.netbeans.api.java.source.TreePathHandle create(javax.lang.model.element.Element,org.netbeans.api.java.source.CompilationInfo)
meth public static org.netbeans.api.java.source.TreePathHandle from(org.netbeans.api.java.source.ElementHandle<?>,org.netbeans.api.java.source.ClasspathInfo)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds delegate,log
hcls CountingDelegate,Delegate,ElementDelegate,EmptyDelegate,TreeDelegate

CLSS public final org.netbeans.api.java.source.TreeUtilities
fld public final static java.util.Set<com.sun.source.tree.Tree$Kind> CLASS_TREE_KINDS
meth public !varargs boolean hasError(com.sun.source.tree.Tree,java.lang.String[])
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public boolean isAccessible(com.sun.source.tree.Scope,javax.lang.model.element.Element,javax.lang.model.type.TypeMirror)
meth public boolean isAnnotation(com.sun.source.tree.ClassTree)
 anno 0 java.lang.Deprecated()
meth public boolean isClass(com.sun.source.tree.ClassTree)
 anno 0 java.lang.Deprecated()
meth public boolean isCompileTimeConstantExpression(com.sun.source.util.TreePath)
meth public boolean isEndOfCompoundVariableDeclaration(com.sun.source.tree.Tree)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public boolean isEnum(com.sun.source.tree.ClassTree)
 anno 0 java.lang.Deprecated()
meth public boolean isEnumConstant(com.sun.source.tree.VariableTree)
meth public boolean isInterface(com.sun.source.tree.ClassTree)
 anno 0 java.lang.Deprecated()
meth public boolean isModuleInfo(com.sun.source.tree.CompilationUnitTree)
meth public boolean isPackageInfo(com.sun.source.tree.CompilationUnitTree)
meth public boolean isPartOfCompoundVariableDeclaration(com.sun.source.tree.Tree)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public boolean isStaticContext(com.sun.source.tree.Scope)
meth public boolean isSynthetic(com.sun.source.util.TreePath)
meth public boolean isVarType(com.sun.source.util.TreePath)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.doctree.DocTree translate(com.sun.source.doctree.DocTree,java.util.Map<? extends com.sun.source.doctree.DocTree,? extends com.sun.source.doctree.DocTree>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.tree.BlockTree parseStaticBlock(java.lang.String,com.sun.source.util.SourcePositions[])
meth public com.sun.source.tree.ExpressionTree getReferenceClass(com.sun.source.util.DocTreePath)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.tree.ExpressionTree parseExpression(java.lang.String,com.sun.source.util.SourcePositions[])
meth public com.sun.source.tree.ExpressionTree parseVariableInitializer(java.lang.String,com.sun.source.util.SourcePositions[])
meth public com.sun.source.tree.Scope attributeTreeTo(com.sun.source.tree.Tree,com.sun.source.tree.Scope,com.sun.source.tree.Tree)
meth public com.sun.source.tree.Scope reattributeTreeTo(com.sun.source.tree.Tree,com.sun.source.tree.Scope,com.sun.source.tree.Tree)
meth public com.sun.source.tree.Scope scopeFor(int)
meth public com.sun.source.tree.Scope toScopeWithDisabledAccessibilityChecks(com.sun.source.tree.Scope)
meth public com.sun.source.tree.StatementTree getBreakContinueTarget(com.sun.source.util.TreePath)
meth public com.sun.source.tree.StatementTree parseStatement(java.lang.String,com.sun.source.util.SourcePositions[])
meth public com.sun.source.tree.Tree getBreakContinueTargetTree(com.sun.source.util.TreePath)
meth public com.sun.source.tree.Tree translate(com.sun.source.tree.Tree,java.util.Map<? extends com.sun.source.tree.Tree,? extends com.sun.source.tree.Tree>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public com.sun.source.util.DocTreePath pathFor(com.sun.source.util.DocTreePath,int)
meth public com.sun.source.util.DocTreePath pathFor(com.sun.source.util.DocTreePath,int,com.sun.source.util.DocSourcePositions)
meth public com.sun.source.util.DocTreePath pathFor(com.sun.source.util.TreePath,com.sun.source.doctree.DocCommentTree,int)
meth public com.sun.source.util.TreePath getPathElementOfKind(com.sun.source.tree.Tree$Kind,com.sun.source.util.TreePath)
meth public com.sun.source.util.TreePath getPathElementOfKind(java.util.Set<com.sun.source.tree.Tree$Kind>,com.sun.source.util.TreePath)
meth public com.sun.source.util.TreePath pathFor(com.sun.source.util.TreePath,int)
meth public com.sun.source.util.TreePath pathFor(com.sun.source.util.TreePath,int,com.sun.source.util.SourcePositions)
meth public com.sun.source.util.TreePath pathFor(int)
meth public int[] findBodySpan(com.sun.source.tree.ClassTree)
meth public int[] findMethodParameterSpan(com.sun.source.tree.MethodTree)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public int[] findNameSpan(com.sun.source.doctree.DocCommentTree,com.sun.source.doctree.ReferenceTree)
meth public int[] findNameSpan(com.sun.source.tree.BreakTree)
meth public int[] findNameSpan(com.sun.source.tree.ClassTree)
meth public int[] findNameSpan(com.sun.source.tree.ContinueTree)
meth public int[] findNameSpan(com.sun.source.tree.LabeledStatementTree)
meth public int[] findNameSpan(com.sun.source.tree.MemberReferenceTree)
meth public int[] findNameSpan(com.sun.source.tree.MemberSelectTree)
meth public int[] findNameSpan(com.sun.source.tree.MethodTree)
meth public int[] findNameSpan(com.sun.source.tree.TypeParameterTree)
meth public int[] findNameSpan(com.sun.source.tree.VariableTree)
meth public java.lang.CharSequence decodeIdentifier(java.lang.CharSequence)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.CharSequence encodeIdentifier(java.lang.CharSequence)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.util.List<? extends com.sun.source.tree.Tree> getReferenceParameters(com.sun.source.util.DocTreePath)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.util.List<org.netbeans.api.java.source.Comment> getComments(com.sun.source.tree.Tree,boolean)
meth public java.util.Set<? extends javax.lang.model.element.VariableElement> getUninitializedFields(com.sun.source.util.TreePath)
meth public java.util.Set<javax.lang.model.type.TypeMirror> getUncaughtExceptions(com.sun.source.util.TreePath)
meth public javax.lang.model.element.Name getReferenceName(com.sun.source.util.DocTreePath)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public javax.lang.model.type.TypeMirror attributeTree(com.sun.source.tree.Tree,com.sun.source.tree.Scope)
meth public javax.lang.model.type.TypeMirror parseType(java.lang.String,javax.lang.model.element.TypeElement)
meth public javax.lang.model.type.TypeMirror reattributeTree(com.sun.source.tree.Tree,com.sun.source.tree.Scope)
meth public org.netbeans.api.lexer.TokenSequence<org.netbeans.api.java.lexer.JavaTokenId> tokensFor(com.sun.source.tree.Tree)
meth public org.netbeans.api.lexer.TokenSequence<org.netbeans.api.java.lexer.JavaTokenId> tokensFor(com.sun.source.tree.Tree,com.sun.source.util.SourcePositions)
supr java.lang.Object
hfds ESCAPE_ENCODE,ESCAPE_UNENCODE,EXOTIC_ESCAPE,IGNORE_TOKENS,handler,info
hcls DummyJFO,NBScope,NoImports,ParserSourcePositions,UncaughtExceptionsVisitor,UnrelatedTypeMirrorSet

CLSS public final org.netbeans.api.java.source.TypeMirrorHandle<%0 extends javax.lang.model.type.TypeMirror>
meth public javax.lang.model.type.TypeKind getKind()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static <%0 extends javax.lang.model.type.TypeMirror> org.netbeans.api.java.source.TypeMirrorHandle<{%%0}> create({%%0})
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public {org.netbeans.api.java.source.TypeMirrorHandle%0} resolve(org.netbeans.api.java.source.CompilationInfo)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds element,kind,typeMirrors
hcls PlaceholderType,Visitor

CLSS public final org.netbeans.api.java.source.TypeUtilities
innr public final static !enum TypeNameOptions
meth public !varargs java.lang.CharSequence getTypeName(javax.lang.model.type.TypeMirror,org.netbeans.api.java.source.TypeUtilities$TypeNameOptions[])
 anno 0 org.netbeans.api.annotations.common.CheckReturnValue()
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public boolean isCastable(javax.lang.model.type.TypeMirror,javax.lang.model.type.TypeMirror)
meth public javax.lang.model.type.ExecutableType getDescriptorType(javax.lang.model.type.DeclaredType)
meth public javax.lang.model.type.TypeMirror getDenotableType(javax.lang.model.type.TypeMirror)
meth public javax.lang.model.type.TypeMirror substitute(javax.lang.model.type.TypeMirror,java.util.List<? extends javax.lang.model.type.TypeMirror>,java.util.List<? extends javax.lang.model.type.TypeMirror>)
supr java.lang.Object
hfds CAPTURED_WILDCARD,UNKNOWN,denotableChecker,info
hcls TypeNameVisitor

CLSS public final static !enum org.netbeans.api.java.source.TypeUtilities$TypeNameOptions
 outer org.netbeans.api.java.source.TypeUtilities
fld public final static org.netbeans.api.java.source.TypeUtilities$TypeNameOptions PRINT_AS_VARARG
fld public final static org.netbeans.api.java.source.TypeUtilities$TypeNameOptions PRINT_FQN
meth public static org.netbeans.api.java.source.TypeUtilities$TypeNameOptions valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.TypeUtilities$TypeNameOptions[] values()
supr java.lang.Enum<org.netbeans.api.java.source.TypeUtilities$TypeNameOptions>

CLSS public final org.netbeans.api.java.source.TypesEvent
meth public java.lang.Iterable<? extends org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>> getTypes()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String toString()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.net.URL getRoot()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.ModuleElement> getModule()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
supr java.util.EventObject
hfds module,root,types

CLSS public org.netbeans.api.java.source.WorkingCopy
meth public com.sun.source.tree.Tree resolveRewriteTarget(com.sun.source.tree.Tree)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.JavaSource$Phase toPhase(org.netbeans.api.java.source.JavaSource$Phase) throws java.io.IOException
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.TreeMaker getTreeMaker()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.WorkingCopy get(org.netbeans.modules.parsing.spi.Parser$Result)
 anno 0 org.netbeans.api.annotations.common.NullUnknown()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void rewrite(com.sun.source.tree.Tree,com.sun.source.doctree.DocTree,com.sun.source.doctree.DocTree)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public void rewrite(com.sun.source.tree.Tree,com.sun.source.tree.Tree)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public void rewriteInComment(int,int,java.lang.String)
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public void tag(com.sun.source.tree.Tree,java.lang.Object)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
supr org.netbeans.api.java.source.CompilationController
hfds NOT_LINKED,REWRITE_WHOLE_FILE,afterCommit,changes,docChanges,externalChanges,instance,introducedTrees,overlay,rewriteHints,textualChanges,tree2Tag,treeMaker,usedComments,userInfo
hcls CommentReplicator,CopyEntry,Translator,TreeCollector

CLSS public org.netbeans.api.java.source.matching.Matcher
intf org.openide.util.Cancellable
meth public boolean cancel()
meth public java.util.Collection<? extends org.netbeans.api.java.source.matching.Occurrence> match(org.netbeans.api.java.source.matching.Pattern)
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.matching.Matcher setCancel(java.util.concurrent.atomic.AtomicBoolean)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.matching.Matcher setKeepSyntheticTrees()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.matching.Matcher setPresetVariable(java.util.Map<java.lang.String,com.sun.source.util.TreePath>,java.util.Map<java.lang.String,java.util.Collection<? extends com.sun.source.util.TreePath>>,java.util.Map<java.lang.String,java.lang.String>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.matching.Matcher setSearchRoot(com.sun.source.util.TreePath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.matching.Matcher setTreeTopSearch()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.source.matching.Matcher setUntypedMatching()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.matching.Matcher create(org.netbeans.api.java.source.CompilationInfo)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds givenCancel,info,multiVariables,options,privateCancel,root,variables,variables2Names

CLSS public final org.netbeans.api.java.source.matching.Occurrence
meth public com.sun.source.util.TreePath getOccurrenceRoot()
meth public java.util.Map<java.lang.String,com.sun.source.util.TreePath> getVariables()
meth public java.util.Map<java.lang.String,java.lang.String> getVariables2Names()
meth public java.util.Map<java.lang.String,java.util.Collection<? extends com.sun.source.util.TreePath>> getMultiVariables()
meth public java.util.Map<javax.lang.model.element.Element,com.sun.source.util.TreePath> getVariablesRemapToTrees()
meth public java.util.Map<javax.lang.model.element.Element,javax.lang.model.element.Element> getVariablesRemapToElement()
supr java.lang.Object
hfds multiVariables,occurrenceRoot,variables,variables2Names,variablesRemapToElement,variablesRemapToTrees

CLSS public org.netbeans.api.java.source.matching.Pattern
meth public static org.netbeans.api.java.source.matching.Pattern createPatternWithFreeVariables(com.sun.source.util.TreePath,java.util.Map<java.lang.String,javax.lang.model.type.TypeMirror>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.matching.Pattern createPatternWithFreeVariables(java.lang.Iterable<? extends com.sun.source.util.TreePath>,java.util.Map<java.lang.String,javax.lang.model.type.TypeMirror>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.matching.Pattern createPatternWithRemappableVariables(com.sun.source.util.TreePath,java.util.Collection<? extends javax.lang.model.element.VariableElement>,boolean)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.matching.Pattern createPatternWithRemappableVariables(java.lang.Iterable<? extends com.sun.source.util.TreePath>,java.util.Collection<? extends javax.lang.model.element.VariableElement>,boolean)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.matching.Pattern createSimplePattern(com.sun.source.util.TreePath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.matching.Pattern createSimplePattern(java.lang.Iterable<? extends com.sun.source.util.TreePath>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds allowRemapToTrees,pattern,remappable,variable2Type

CLSS public org.netbeans.api.java.source.support.CancellableTreePathScanner<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
cons public init(java.util.concurrent.atomic.AtomicBoolean)
meth protected boolean isCanceled()
meth public void cancel()
meth public {org.netbeans.api.java.source.support.CancellableTreePathScanner%0} scan(com.sun.source.tree.Tree,{org.netbeans.api.java.source.support.CancellableTreePathScanner%1})
meth public {org.netbeans.api.java.source.support.CancellableTreePathScanner%0} scan(java.lang.Iterable<? extends com.sun.source.tree.Tree>,{org.netbeans.api.java.source.support.CancellableTreePathScanner%1})
supr org.netbeans.api.java.source.support.ErrorAwareTreePathScanner<{org.netbeans.api.java.source.support.CancellableTreePathScanner%0},{org.netbeans.api.java.source.support.CancellableTreePathScanner%1}>
hfds canceled,internalCanceled

CLSS public org.netbeans.api.java.source.support.CancellableTreeScanner<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
cons public init(java.util.concurrent.atomic.AtomicBoolean)
meth protected boolean isCanceled()
meth public void cancel()
meth public {org.netbeans.api.java.source.support.CancellableTreeScanner%0} scan(com.sun.source.tree.Tree,{org.netbeans.api.java.source.support.CancellableTreeScanner%1})
meth public {org.netbeans.api.java.source.support.CancellableTreeScanner%0} scan(java.lang.Iterable<? extends com.sun.source.tree.Tree>,{org.netbeans.api.java.source.support.CancellableTreeScanner%1})
supr org.netbeans.api.java.source.support.ErrorAwareTreeScanner<{org.netbeans.api.java.source.support.CancellableTreeScanner%0},{org.netbeans.api.java.source.support.CancellableTreeScanner%1}>
hfds canceled,internalCanceled

CLSS public org.netbeans.api.java.source.support.ErrorAwareTreePathScanner<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
meth public {org.netbeans.api.java.source.support.ErrorAwareTreePathScanner%0} visitErroneous(com.sun.source.tree.ErroneousTree,{org.netbeans.api.java.source.support.ErrorAwareTreePathScanner%1})
supr com.sun.source.util.TreePathScanner<{org.netbeans.api.java.source.support.ErrorAwareTreePathScanner%0},{org.netbeans.api.java.source.support.ErrorAwareTreePathScanner%1}>

CLSS public org.netbeans.api.java.source.support.ErrorAwareTreeScanner<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
meth public {org.netbeans.api.java.source.support.ErrorAwareTreeScanner%0} visitErroneous(com.sun.source.tree.ErroneousTree,{org.netbeans.api.java.source.support.ErrorAwareTreeScanner%1})
supr com.sun.source.util.TreeScanner<{org.netbeans.api.java.source.support.ErrorAwareTreeScanner%0},{org.netbeans.api.java.source.support.ErrorAwareTreeScanner%1}>

CLSS public org.netbeans.api.java.source.support.ProfileSupport
innr public abstract interface static ViolationCollector
innr public abstract interface static ViolationCollectorFactory
innr public final static !enum Validation
innr public static Violation
meth public static java.util.Collection<org.netbeans.api.java.source.support.ProfileSupport$Violation> findProfileViolations(org.netbeans.api.java.queries.SourceLevelQuery$Profile,java.lang.Iterable<java.net.URL>,java.lang.Iterable<java.net.URL>,java.lang.Iterable<java.net.URL>,java.util.Set<org.netbeans.api.java.source.support.ProfileSupport$Validation>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
meth public static void findProfileViolations(org.netbeans.api.java.queries.SourceLevelQuery$Profile,java.lang.Iterable<java.net.URL>,java.lang.Iterable<java.net.URL>,java.lang.Iterable<java.net.URL>,java.util.Set<org.netbeans.api.java.source.support.ProfileSupport$Validation>,org.netbeans.api.java.source.support.ProfileSupport$ViolationCollectorFactory)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
meth public static void findProfileViolations(org.netbeans.api.java.queries.SourceLevelQuery$Profile,java.lang.Iterable<java.net.URL>,java.lang.Iterable<java.net.URL>,java.lang.Iterable<java.net.URL>,java.util.Set<org.netbeans.api.java.source.support.ProfileSupport$Validation>,org.netbeans.api.java.source.support.ProfileSupport$ViolationCollectorFactory,java.util.concurrent.Executor)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
 anno 7 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds ANNOTATION_PROFILE,ANNOTATION_VALUE,ATTR_PROFILE,LOG,RES_MANIFEST,RP
hcls ArchiveCache,Context,CurrentThreadExecutor,DefaultProfileViolationCollector,TypeCache,Validator

CLSS public final static !enum org.netbeans.api.java.source.support.ProfileSupport$Validation
 outer org.netbeans.api.java.source.support.ProfileSupport
fld public final static org.netbeans.api.java.source.support.ProfileSupport$Validation BINARIES_BY_CLASS_FILES
fld public final static org.netbeans.api.java.source.support.ProfileSupport$Validation BINARIES_BY_MANIFEST
fld public final static org.netbeans.api.java.source.support.ProfileSupport$Validation SOURCES
meth public static org.netbeans.api.java.source.support.ProfileSupport$Validation valueOf(java.lang.String)
meth public static org.netbeans.api.java.source.support.ProfileSupport$Validation[] values()
supr java.lang.Enum<org.netbeans.api.java.source.support.ProfileSupport$Validation>

CLSS public static org.netbeans.api.java.source.support.ProfileSupport$Violation
 outer org.netbeans.api.java.source.support.ProfileSupport
meth public java.net.URL getFile()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public java.net.URL getRoot()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.queries.SourceLevelQuery$Profile getRequiredProfile()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement> getUsedType()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
supr java.lang.Object
hfds file,profile,root,type

CLSS public abstract interface static org.netbeans.api.java.source.support.ProfileSupport$ViolationCollector
 outer org.netbeans.api.java.source.support.ProfileSupport
meth public abstract void finished()
meth public abstract void reportProfileViolation(org.netbeans.api.java.source.support.ProfileSupport$Violation)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public abstract interface static org.netbeans.api.java.source.support.ProfileSupport$ViolationCollectorFactory
 outer org.netbeans.api.java.source.support.ProfileSupport
meth public abstract boolean isCancelled()
meth public abstract org.netbeans.api.java.source.support.ProfileSupport$ViolationCollector create(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public final org.netbeans.api.java.source.support.ReferencesCount
meth public int getPackageReferenceCount(org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.PackageElement>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public int getTypeReferenceCount(org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.TypeElement>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Iterable<? extends org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.PackageElement>> getUsedPackages()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.Iterable<? extends org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.TypeElement>> getUsedTypes()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.support.ReferencesCount get(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.api.java.source.support.ReferencesCount get(org.netbeans.api.java.source.ClasspathInfo)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOG,lck,pkgFreqs,roots,typeFreqs
hcls AsHandlesIterable,AsHandlesIterator

CLSS public abstract org.netbeans.modules.parsing.api.Task
cons public init()
supr java.lang.Object

CLSS public abstract org.netbeans.modules.parsing.spi.IndexingAwareParserResultTask<%0 extends org.netbeans.modules.parsing.spi.Parser$Result>
cons protected init(org.netbeans.modules.parsing.spi.TaskIndexingMode)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public final org.netbeans.modules.parsing.spi.TaskIndexingMode getIndexingMode()
supr org.netbeans.modules.parsing.spi.ParserResultTask<{org.netbeans.modules.parsing.spi.IndexingAwareParserResultTask%0}>
hfds scanMode

CLSS public abstract org.netbeans.modules.parsing.spi.ParserResultTask<%0 extends org.netbeans.modules.parsing.spi.Parser$Result>
cons public init()
meth public abstract int getPriority()
meth public abstract void run({org.netbeans.modules.parsing.spi.ParserResultTask%0},org.netbeans.modules.parsing.spi.SchedulerEvent)
supr org.netbeans.modules.parsing.spi.SchedulerTask

CLSS public abstract org.netbeans.modules.parsing.spi.SchedulerTask
meth public abstract int getPriority()
meth public abstract java.lang.Class<? extends org.netbeans.modules.parsing.spi.Scheduler> getSchedulerClass()
meth public abstract void cancel()
supr org.netbeans.modules.parsing.api.Task

CLSS public abstract interface org.openide.util.Cancellable
meth public abstract boolean cancel()

