#Signature file v4.1
#Version 2.42.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})

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})
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()

