#Signature file v4.1
#Version 2.82.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} visitAnyPattern(com.sun.source.tree.AnyPatternTree,{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} visitBindingPattern(com.sun.source.tree.BindingPatternTree,{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} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{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} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{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} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{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})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitSynchronized(com.sun.source.tree.SynchronizedTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitThrow(com.sun.source.tree.ThrowTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTry(com.sun.source.tree.TryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTypeCast(com.sun.source.tree.TypeCastTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTypeParameter(com.sun.source.tree.TypeParameterTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitYield(com.sun.source.tree.YieldTree,{com.sun.source.tree.TreeVisitor%1})

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} visitAnyPattern(com.sun.source.tree.AnyPatternTree,{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} visitBindingPattern(com.sun.source.tree.BindingPatternTree,{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} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{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} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{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} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{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})
meth public {com.sun.source.util.TreeScanner%0} visitSynchronized(com.sun.source.tree.SynchronizedTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitThrow(com.sun.source.tree.ThrowTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitTry(com.sun.source.tree.TryTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitTypeCast(com.sun.source.tree.TypeCastTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitTypeParameter(com.sun.source.tree.TypeParameterTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitYield(com.sun.source.tree.YieldTree,{com.sun.source.util.TreeScanner%1})
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, MODULE, PARAMETER, TYPE])
intf java.lang.annotation.Annotation
meth public abstract !hasdefault boolean forRemoval()
meth public abstract !hasdefault java.lang.String since()

CLSS public abstract java.lang.Enum<%0 extends java.lang.Enum<{java.lang.Enum%0}>>
cons protected init(java.lang.String,int)
innr public final static EnumDesc
intf java.io.Serializable
intf java.lang.Comparable<{java.lang.Enum%0}>
intf java.lang.constant.Constable
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 final java.util.Optional<java.lang.Enum$EnumDesc<{java.lang.Enum%0}>> describeConstable()
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
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="9")
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,depth,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.lang.constant.Constable
meth public abstract java.util.Optional<? extends java.lang.constant.ConstantDesc> describeConstable()

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 parensAroundSingularLambdaParam()
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)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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(boolean forRemoval=false, java.lang.String since="")
meth public static org.netbeans.api.java.source.CommentCollector getInstance()
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public void collect(org.netbeans.api.java.source.WorkingCopy) throws java.io.IOException
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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(boolean forRemoval=false, java.lang.String since="")
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
hfds forcedSources

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 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
 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(boolean forRemoval=false, java.lang.String since="")
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 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.Collection<? extends javax.lang.model.element.Element> getLinkedRecordElements(javax.lang.model.element.Element)
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 java.util.Set<javax.lang.model.element.PackageElement> transitivelyExportedPackages(javax.lang.model.element.ModuleElement)
 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,LOG,NOT_OVERRIDABLE,ORDINARY_SCOPE_TYPE,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.ExpressionTree createDefaultLambdaExpression(com.sun.source.tree.LambdaExpressionTree,javax.lang.model.element.ExecutableElement)
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_KIND,CLASS_NAME,DEFAULT_RETURN_TYPE_VALUE,GENERATED_METHOD_BODY,LAMBDA_BODY,LAMBDA_EXPRESSION,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 !varargs static org.openide.filesystems.FileObject getFile(org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>,org.netbeans.api.java.source.ClasspathInfo,java.lang.String[])
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 isClassFile(org.openide.filesystems.FileObject)
 anno 1 org.netbeans.api.annotations.common.NonNull()
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 classNameFor(org.netbeans.api.java.source.ClasspathInfo,java.lang.String,org.netbeans.spi.project.NestedClass)
meth public static java.lang.String findSourceFileName(javax.lang.model.element.Element)
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(boolean forRemoval=false, java.lang.String since="")
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(boolean forRemoval=false, java.lang.String since="")
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)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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 forceSource(org.netbeans.api.java.source.CompilationController,org.openide.filesystems.FileObject)
meth public static void waitScanFinished() throws java.lang.InterruptedException
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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>)
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.DocCommentTree MarkdownDocComment(java.util.List<? extends com.sun.source.doctree.DocTree>,java.util.List<? extends com.sun.source.doctree.DocTree>)
meth public com.sun.source.doctree.DocCommentTree MarkdownDocComment(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.RawTextTree RawText(java.lang.String)
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 CasePatterns(java.util.List<? extends com.sun.source.tree.Tree>,com.sun.source.tree.ExpressionTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CaseTree CasePatterns(java.util.List<? extends com.sun.source.tree.Tree>,com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.StatementTree>)
meth public com.sun.source.tree.CaseTree CasePatterns(java.util.List<? extends com.sun.source.tree.Tree>,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CaseTree CasePatterns(java.util.List<? extends com.sun.source.tree.Tree>,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>)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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>,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>)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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>,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.DeconstructionPatternTree RecordPattern(com.sun.source.tree.ExpressionTree,java.util.List<com.sun.source.tree.PatternTree>,com.sun.source.tree.VariableTree)
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.ExpressionTree createLambdaExpression(com.sun.source.tree.LambdaExpressionTree,java.lang.String)
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.ImportTree ImportModule(com.sun.source.tree.ExpressionTree)
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(boolean forRemoval=false, java.lang.String since="")
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 BindingPattern(com.sun.source.tree.VariableTree)
meth public com.sun.source.tree.Tree BindingPattern(java.lang.CharSequence,com.sun.source.tree.Tree)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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 RecordComponent(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,com.sun.source.tree.Tree)
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)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public boolean isAnnotation(com.sun.source.tree.ClassTree)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public boolean isClass(com.sun.source.tree.ClassTree)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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(boolean forRemoval=false, java.lang.String since="")
meth public boolean isEnumConstant(com.sun.source.tree.VariableTree)
meth public boolean isExpressionStatement(com.sun.source.tree.ExpressionTree)
meth public boolean isImplicitlyDeclaredClass(com.sun.source.tree.ClassTree)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public boolean isInterface(com.sun.source.tree.ClassTree)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
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 isRecordComponent(com.sun.source.tree.VariableTree)
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,LOG,SPAN_CLASS_IDENTIFIERS,SPAN_CLASS_TOKENS,SPAN_COMMENT_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,invalidateSourceAfter,overlay,rewriteHints,textualChanges,tree2Tag,treeMaker,usedComments,userInfo
hcls CommentReplicator,CopyEntry,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} visitCase(com.sun.source.tree.CaseTree,{org.netbeans.api.java.source.support.ErrorAwareTreePathScanner%1})
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} visitCase(com.sun.source.tree.CaseTree,{org.netbeans.api.java.source.support.ErrorAwareTreeScanner%1})
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()

