#Signature file v4.1
#Version 0.192.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

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

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

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

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

CLSS public final org.netbeans.api.java.loaders.JavaDataSupport
meth public static org.openide.loaders.MultiDataObject$Entry createJavaFileEntry(org.openide.loaders.MultiDataObject,org.openide.filesystems.FileObject)
meth public static org.openide.nodes.Node createJavaNode(org.openide.filesystems.FileObject)
supr java.lang.Object

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 NORMALIZATION_CACHE,kind,log,signatures
hcls ElementHandleAccessorImpl

CLSS public final org.netbeans.api.java.source.ElementUtilities
innr public abstract interface static ElementAcceptor
meth public boolean alreadyDefinedIn(java.lang.CharSequence,javax.lang.model.type.ExecutableType,javax.lang.model.element.TypeElement)
meth public boolean hasGetter(javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,org.netbeans.api.java.source.CodeStyle)
meth public boolean hasSetter(javax.lang.model.element.TypeElement,javax.lang.model.element.VariableElement,org.netbeans.api.java.source.CodeStyle)
meth public boolean implementsMethod(javax.lang.model.element.ExecutableElement)
meth public boolean isEffectivelyFinal(javax.lang.model.element.VariableElement)
meth public boolean isErroneous(javax.lang.model.element.Element)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public boolean isLocal(javax.lang.model.element.Element)
meth public boolean isMemberOf(javax.lang.model.element.Element,javax.lang.model.element.TypeElement)
meth public boolean isOpen(javax.lang.model.element.ModuleElement)
meth public boolean isSynthetic(javax.lang.model.element.Element)
meth public boolean overridesMethod(javax.lang.model.element.ExecutableElement)
meth public java.lang.CharSequence getElementName(javax.lang.model.element.Element,boolean)
meth public java.lang.Iterable<? extends javax.lang.model.element.Element> getLocalMembersAndVars(com.sun.source.tree.Scope,org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.lang.Iterable<? extends javax.lang.model.element.Element> getLocalVars(com.sun.source.tree.Scope,org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.lang.Iterable<? extends javax.lang.model.element.Element> getMembers(javax.lang.model.type.TypeMirror,org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.lang.Iterable<? extends javax.lang.model.element.TypeElement> getGlobalTypes(org.netbeans.api.java.source.ElementUtilities$ElementAcceptor)
meth public java.util.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 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>)
meth public com.sun.source.tree.ClassTree Enum(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.Tree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ClassTree Interface(com.sun.source.tree.ModifiersTree,java.lang.CharSequence,java.util.List<? extends com.sun.source.tree.TypeParameterTree>,java.util.List<? extends com.sun.source.tree.Tree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.ClassTree addClassImplementsClause(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree addClassMember(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree addClassTypeParameter(com.sun.source.tree.ClassTree,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.ClassTree insertClassImplementsClause(com.sun.source.tree.ClassTree,int,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree insertClassMember(com.sun.source.tree.ClassTree,int,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree insertClassTypeParameter(com.sun.source.tree.ClassTree,int,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.ClassTree removeClassImplementsClause(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree removeClassImplementsClause(com.sun.source.tree.ClassTree,int)
meth public com.sun.source.tree.ClassTree removeClassMember(com.sun.source.tree.ClassTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.ClassTree removeClassMember(com.sun.source.tree.ClassTree,int)
meth public com.sun.source.tree.ClassTree removeClassTypeParameter(com.sun.source.tree.ClassTree,com.sun.source.tree.TypeParameterTree)
meth public com.sun.source.tree.ClassTree removeClassTypeParameter(com.sun.source.tree.ClassTree,int)
meth public com.sun.source.tree.ClassTree setExtends(com.sun.source.tree.ClassTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>,javax.tools.JavaFileObject)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(com.sun.source.tree.PackageTree,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>,javax.tools.JavaFileObject)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(java.util.List<? extends com.sun.source.tree.AnnotationTree>,com.sun.source.tree.ExpressionTree,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>,javax.tools.JavaFileObject)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(java.util.List<? extends com.sun.source.tree.AnnotationTree>,org.openide.filesystems.FileObject,java.lang.String,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.CompilationUnitTree CompilationUnit(org.openide.filesystems.FileObject,java.lang.String,java.util.List<? extends com.sun.source.tree.ImportTree>,java.util.List<? extends com.sun.source.tree.Tree>)
meth public com.sun.source.tree.CompilationUnitTree addCompUnitImport(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.ImportTree)
meth public com.sun.source.tree.CompilationUnitTree addCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CompilationUnitTree addPackageAnnotation(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.CompilationUnitTree insertCompUnitImport(com.sun.source.tree.CompilationUnitTree,int,com.sun.source.tree.ImportTree)
meth public com.sun.source.tree.CompilationUnitTree insertCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,int,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CompilationUnitTree insertPackageAnnotation(com.sun.source.tree.CompilationUnitTree,int,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitImport(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.ImportTree)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitImport(com.sun.source.tree.CompilationUnitTree,int)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.Tree)
meth public com.sun.source.tree.CompilationUnitTree removeCompUnitTypeDecl(com.sun.source.tree.CompilationUnitTree,int)
meth public com.sun.source.tree.CompilationUnitTree removePackageAnnotation(com.sun.source.tree.CompilationUnitTree,com.sun.source.tree.AnnotationTree)
meth public com.sun.source.tree.CompilationUnitTree removePackageAnnotation(com.sun.source.tree.CompilationUnitTree,int)
meth public com.sun.source.tree.CompoundAssignmentTree CompoundAssignment(com.sun.source.tree.Tree$Kind,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ConditionalExpressionTree ConditionalExpression(com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree,com.sun.source.tree.ExpressionTree)
meth public com.sun.source.tree.ContinueTree Continue(java.lang.CharSequence)
meth public com.sun.source.tree.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.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 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 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,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 final org.netbeans.api.java.source.UiUtils
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
innr public final static PrintPart
meth public static boolean open(org.netbeans.api.java.source.ClasspathInfo,javax.lang.model.element.Element)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static boolean open(org.openide.filesystems.FileObject,int)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static boolean open(org.openide.filesystems.FileObject,org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static int getDistance(java.lang.String,java.lang.String)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static java.lang.String getHeader(com.sun.source.util.TreePath,org.netbeans.api.java.source.CompilationInfo,java.lang.String)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static java.lang.String getHeader(javax.lang.model.element.Element,org.netbeans.api.java.source.CompilationInfo,java.lang.String)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static javax.swing.Icon getDeclarationIcon(javax.lang.model.element.Element)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
meth public static javax.swing.Icon getElementIcon(javax.lang.model.element.ElementKind,java.util.Collection<javax.lang.model.element.Modifier>)
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
supr java.lang.Object
hfds log
hcls FindDeclarationVisitor

CLSS public final static org.netbeans.api.java.source.UiUtils$PrintPart
 outer org.netbeans.api.java.source.UiUtils
 anno 0 java.lang.Deprecated(boolean forRemoval=false, java.lang.String since="")
fld public final static java.lang.String ANNOTATIONS = "%annotations%"
fld public final static java.lang.String EXTENDS = "%extends%"
fld public final static java.lang.String FLAGS = "%flags%"
fld public final static java.lang.String IMPLEMENTS = "%implements%"
fld public final static java.lang.String NAME = "%name%"
fld public final static java.lang.String PARAMETERS = "%parameters%"
fld public final static java.lang.String THROWS = "%throws%"
fld public final static java.lang.String TYPE = "%type%"
fld public final static java.lang.String TYPEPARAMETERS = "%typeparameters%"
supr java.lang.Object

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,Translator,TreeCollector

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

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

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

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

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

CLSS public abstract org.netbeans.api.java.source.support.CaretAwareJavaSourceTaskFactory
cons public !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,java.lang.String[])
cons public !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,org.netbeans.modules.parsing.spi.TaskIndexingMode,java.lang.String[])
 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()
cons public init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority)
meth public java.util.List<org.openide.filesystems.FileObject> getFileObjects()
meth public static int getLastPosition(org.openide.filesystems.FileObject)
supr org.netbeans.api.java.source.JavaSourceTaskFactory
hfds DEFAULT_RESCHEDULE_TIMEOUT,WORKER,component2Listener,file2LastPosition,supportedMimeTypes,timeout
hcls ChangeListenerImpl,ComponentListener

CLSS public abstract org.netbeans.api.java.source.support.EditorAwareJavaSourceTaskFactory
cons protected !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,java.lang.String[])
cons protected !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,org.netbeans.modules.parsing.spi.TaskIndexingMode,java.lang.String[])
 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()
cons protected init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority)
meth public java.util.List<org.openide.filesystems.FileObject> getFileObjects()
supr org.netbeans.api.java.source.JavaSourceTaskFactory
hfds supportedMimeTypes
hcls ChangeListenerImpl

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 abstract org.netbeans.api.java.source.support.LookupBasedJavaSourceTaskFactory
cons public !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,java.lang.String[])
cons public !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,org.netbeans.modules.parsing.spi.TaskIndexingMode,java.lang.String[])
 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()
cons public init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority)
meth protected final void setLookup(org.openide.util.Lookup)
meth protected void lookupContentChanged()
meth public java.util.List<org.openide.filesystems.FileObject> getFileObjects()
supr org.netbeans.api.java.source.JavaSourceTaskFactory
hfds currentFiles,dataObjectResult,fileObjectResult,listener,nodeResult,supportedMimeTypes
hcls LookupListenerImpl

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.api.java.source.support.SelectionAwareJavaSourceTaskFactory
cons public !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,java.lang.String[])
cons public !varargs init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority,org.netbeans.modules.parsing.spi.TaskIndexingMode,java.lang.String[])
 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()
cons public init(org.netbeans.api.java.source.JavaSource$Phase,org.netbeans.api.java.source.JavaSource$Priority)
meth public java.util.List<org.openide.filesystems.FileObject> getFileObjects()
meth public static int[] getLastSelection(org.openide.filesystems.FileObject)
supr org.netbeans.api.java.source.JavaSourceTaskFactory
hfds DEFAULT_RESCHEDULE_TIMEOUT,WORKER,file2SelectionEndPosition,file2SelectionStartPosition,supportedMimeTypes,timeout
hcls ChangeListenerImpl,ComponentListener

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.netbeans.spi.java.loaders.RenameHandler
meth public abstract void handleRename(org.openide.nodes.Node,java.lang.String)

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

