#Signature file v4.1
#Version 1.69.0

CLSS public abstract interface com.sun.source.doctree.DocTreeVisitor<%0 extends java.lang.Object, %1 extends java.lang.Object>
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitAttribute(com.sun.source.doctree.AttributeTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitAuthor(com.sun.source.doctree.AuthorTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitComment(com.sun.source.doctree.CommentTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitDeprecated(com.sun.source.doctree.DeprecatedTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitDocComment(com.sun.source.doctree.DocCommentTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitDocRoot(com.sun.source.doctree.DocRootTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitEndElement(com.sun.source.doctree.EndElementTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitEntity(com.sun.source.doctree.EntityTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitErroneous(com.sun.source.doctree.ErroneousTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitIdentifier(com.sun.source.doctree.IdentifierTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitInheritDoc(com.sun.source.doctree.InheritDocTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitLink(com.sun.source.doctree.LinkTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitLiteral(com.sun.source.doctree.LiteralTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitOther(com.sun.source.doctree.DocTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitParam(com.sun.source.doctree.ParamTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitReference(com.sun.source.doctree.ReferenceTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitReturn(com.sun.source.doctree.ReturnTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitSee(com.sun.source.doctree.SeeTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitSerial(com.sun.source.doctree.SerialTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitSerialData(com.sun.source.doctree.SerialDataTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitSerialField(com.sun.source.doctree.SerialFieldTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitSince(com.sun.source.doctree.SinceTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitStartElement(com.sun.source.doctree.StartElementTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitText(com.sun.source.doctree.TextTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitThrows(com.sun.source.doctree.ThrowsTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitUnknownBlockTag(com.sun.source.doctree.UnknownBlockTagTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitUnknownInlineTag(com.sun.source.doctree.UnknownInlineTagTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitValue(com.sun.source.doctree.ValueTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public abstract {com.sun.source.doctree.DocTreeVisitor%0} visitVersion(com.sun.source.doctree.VersionTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public {com.sun.source.doctree.DocTreeVisitor%0} visitDocType(com.sun.source.doctree.DocTypeTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public {com.sun.source.doctree.DocTreeVisitor%0} visitHidden(com.sun.source.doctree.HiddenTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public {com.sun.source.doctree.DocTreeVisitor%0} visitIndex(com.sun.source.doctree.IndexTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public {com.sun.source.doctree.DocTreeVisitor%0} visitProvides(com.sun.source.doctree.ProvidesTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public {com.sun.source.doctree.DocTreeVisitor%0} visitSummary(com.sun.source.doctree.SummaryTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public {com.sun.source.doctree.DocTreeVisitor%0} visitSystemProperty(com.sun.source.doctree.SystemPropertyTree,{com.sun.source.doctree.DocTreeVisitor%1})
meth public {com.sun.source.doctree.DocTreeVisitor%0} visitUses(com.sun.source.doctree.UsesTree,{com.sun.source.doctree.DocTreeVisitor%1})

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

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

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

CLSS public abstract interface java.io.Serializable

CLSS public abstract interface java.lang.Comparable<%0 extends java.lang.Object>
meth public abstract int compareTo({java.lang.Comparable%0})

CLSS public abstract java.lang.Enum<%0 extends java.lang.Enum<{java.lang.Enum%0}>>
cons protected init(java.lang.String,int)
intf java.io.Serializable
intf java.lang.Comparable<{java.lang.Enum%0}>
meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected final void finalize()
meth public final boolean equals(java.lang.Object)
meth public final int compareTo({java.lang.Enum%0})
meth public final int hashCode()
meth public final int ordinal()
meth public final java.lang.Class<{java.lang.Enum%0}> getDeclaringClass()
meth public final java.lang.String name()
meth public java.lang.String toString()
meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String)
supr java.lang.Object
hfds name,ordinal

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

CLSS public java.lang.Object
cons public init()
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected void finalize() throws java.lang.Throwable
meth public boolean equals(java.lang.Object)
meth public final java.lang.Class<?> getClass()
meth public final void notify()
meth public final void notifyAll()
meth public final void wait() throws java.lang.InterruptedException
meth public final void wait(long) throws java.lang.InterruptedException
meth public final void wait(long,int) throws java.lang.InterruptedException
meth public int hashCode()
meth public java.lang.String toString()

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

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

CLSS public abstract org.netbeans.modules.refactoring.api.AbstractRefactoring
cons protected init(org.openide.util.Lookup)
fld public final static int INIT = 0
fld public final static int PARAMETERS_CHECK = 2
fld public final static int PREPARE = 3
fld public final static int PRE_CHECK = 1
meth public final org.netbeans.modules.refactoring.api.Context getContext()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public final org.netbeans.modules.refactoring.api.Problem checkParameters()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public final org.netbeans.modules.refactoring.api.Problem fastCheckParameters()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public final org.netbeans.modules.refactoring.api.Problem preCheck()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public final org.netbeans.modules.refactoring.api.Problem prepare(org.netbeans.modules.refactoring.api.RefactoringSession)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public final org.openide.util.Lookup getRefactoringSource()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public final void addProgressListener(org.netbeans.modules.refactoring.api.ProgressListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public final void cancelRequest()
meth public final void removeProgressListener(org.netbeans.modules.refactoring.api.ProgressListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds PLUGIN_STEPS,cancel,currentState,filtersDescription,gbHandlers,plugins,pluginsWithProgress,progressListener,progressSupport,refactoringSource,scope
hcls ProgressL

CLSS public final org.netbeans.modules.refactoring.java.api.ChangeParametersRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
innr public final static ParameterInfo
meth public boolean isOverloadMethod()
meth public java.lang.String getMethodName()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public java.lang.String getReturnType()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public java.util.Set<javax.lang.model.element.Modifier> getModifiers()
meth public org.netbeans.modules.refactoring.java.api.ChangeParametersRefactoring$ParameterInfo[] getParameterInfo()
meth public void setMethodName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public void setModifiers(java.util.Set<javax.lang.model.element.Modifier>)
meth public void setOverloadMethod(boolean)
meth public void setParameterInfo(org.netbeans.modules.refactoring.java.api.ChangeParametersRefactoring$ParameterInfo[])
meth public void setReturnType(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds methodName,modifiers,overloadMethod,paramTable,returnType,selectedObject

CLSS public final static org.netbeans.modules.refactoring.java.api.ChangeParametersRefactoring$ParameterInfo
 outer org.netbeans.modules.refactoring.java.api.ChangeParametersRefactoring
cons public init(int)
cons public init(int,java.lang.String,java.lang.String,java.lang.String)
meth public int getOriginalIndex()
meth public java.lang.String getDefaultValue()
meth public java.lang.String getName()
meth public java.lang.String getType()
supr java.lang.Object
hfds defaultVal,name,origIndex,type

CLSS public final org.netbeans.modules.refactoring.java.api.EncapsulateFieldRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
meth public boolean isAlwaysUseAccessors()
meth public boolean isGeneratePropertyChangeSupport()
meth public boolean isGenerateVetoableChangeSupport()
meth public java.lang.String getGetterName()
meth public java.lang.String getSetterName()
meth public java.util.Set<javax.lang.model.element.Modifier> getFieldModifiers()
meth public java.util.Set<javax.lang.model.element.Modifier> getMethodModifiers()
meth public org.netbeans.api.java.source.TreePathHandle getSourceType()
meth public void setAlwaysUseAccessors(boolean)
meth public void setFieldModifiers(java.util.Set<javax.lang.model.element.Modifier>)
meth public void setGeneratePropertyChangeSupport(boolean)
meth public void setGenerateVetoableSupport(boolean)
meth public void setGetterName(java.lang.String)
meth public void setMethodModifiers(java.util.Set<javax.lang.model.element.Modifier>)
meth public void setSetterName(java.lang.String)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds alwaysUseAccessors,fieldModifiers,getterName,isGeneratePropertyChangeSupport,isGenerateVetoableSupport,methodModifiers,setterName

CLSS public final org.netbeans.modules.refactoring.java.api.ExtractInterfaceRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
meth public java.lang.String getInterfaceName()
meth public java.util.List<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.ExecutableElement>> getMethods()
meth public java.util.List<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.VariableElement>> getFields()
meth public java.util.List<org.netbeans.api.java.source.TypeMirrorHandle<javax.lang.model.type.TypeMirror>> getImplements()
meth public org.netbeans.api.java.source.TreePathHandle getSourceType()
meth public void setFields(java.util.List<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.VariableElement>>)
meth public void setImplements(java.util.List<org.netbeans.api.java.source.TypeMirrorHandle<javax.lang.model.type.TypeMirror>>)
meth public void setInterfaceName(java.lang.String)
meth public void setMethods(java.util.List<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.ExecutableElement>>)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds fields,ifcName,implementz,methods

CLSS public final org.netbeans.modules.refactoring.java.api.ExtractSuperclassRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
meth public java.lang.String getSuperClassName()
meth public org.netbeans.api.java.source.TreePathHandle getSourceType()
meth public org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>>[] getMembers()
meth public void setMembers(org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>>[])
meth public void setSuperClassName(java.lang.String)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds EMPTY_MEMBERS,members,scName

CLSS public final org.netbeans.modules.refactoring.java.api.InlineRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle,org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type)
 anno 1 org.netbeans.api.annotations.common.NonNull()
innr public final static !enum Type
meth public org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type getType()
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds type

CLSS public final static !enum org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type
 outer org.netbeans.modules.refactoring.java.api.InlineRefactoring
fld public final static org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type CONSTANT
fld public final static org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type METHOD
fld public final static org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type TEMP
fld public final static org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type UNSUPPORTED
meth public static org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.api.InlineRefactoring$Type>

CLSS public final org.netbeans.modules.refactoring.java.api.InnerToOuterRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
meth public java.lang.String getClassName()
meth public java.lang.String getReferenceName()
meth public org.netbeans.api.java.source.TreePathHandle getSourceType()
meth public void setClassName(java.lang.String)
meth public void setReferenceName(java.lang.String)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds className,referenceName

CLSS public final org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
 anno 1 org.netbeans.api.annotations.common.NonNull()
innr public final static !enum Equality
meth public boolean getReplace()
meth public boolean getWrap()
meth public java.lang.String getNewName()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public java.lang.String getPackageName()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality getEquality()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.openide.filesystems.FileObject getSourceRoot()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public void setEquality(org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void setNewName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public void setPackageName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
meth public void setReplace(boolean)
meth public void setSourceRoot(org.openide.filesystems.FileObject)
meth public void setWrap(boolean)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds equality,newName,packageName,replace,sourceRoot,wrap

CLSS public final static !enum org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality
 outer org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring
fld public final static org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality DELEGATE
fld public final static org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality GENERATE
fld public final static org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality SEPARATE
meth public static org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.api.IntroduceLocalExtensionRefactoring$Equality>

CLSS public final org.netbeans.modules.refactoring.java.api.IntroduceParameterRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public boolean isFinal()
meth public boolean isOverloadMethod()
meth public boolean isReplaceAll()
meth public java.lang.String getParameterName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public void setFinal(boolean)
meth public void setOverloadMethod(boolean)
meth public void setParameterName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void setReplaceAll(boolean)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds isFinal,isReplaceAll,overloadMethod,parameterName

CLSS public final org.netbeans.modules.refactoring.java.api.InvertBooleanRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getNewName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public void setNewName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds newName

CLSS public final org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties
cons public !varargs init(org.netbeans.api.java.source.TreePathHandle[])
 anno 1 org.netbeans.api.annotations.common.NonNull()
innr public final static !enum Visibility
meth public boolean isAddDeprecated()
meth public boolean isDelegate()
meth public boolean isUpdateJavaDoc()
meth public org.netbeans.api.java.source.TreePathHandle[] getPreSelectedMembers()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility getVisibility()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public void setAddDeprecated(boolean)
meth public void setDelegate(boolean)
meth public void setUpdateJavaDoc(boolean)
meth public void setVisibility(org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds addDeprecated,delegate,preSelectedMembers,updateJavaDoc,visibility

CLSS public final static !enum org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility
 outer org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties
fld public final static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility ASIS
fld public final static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility DEFAULT
fld public final static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility ESCALATE
fld public final static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility PRIVATE
fld public final static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility PROTECTED
fld public final static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility PUBLIC
meth public static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.api.JavaMoveMembersProperties$Visibility>

CLSS public final org.netbeans.modules.refactoring.java.api.JavaRefactoringUtils
meth public !varargs static org.netbeans.api.java.source.ClasspathInfo getClasspathInfoFor(org.openide.filesystems.FileObject[])
meth public static <%0 extends javax.lang.model.element.Element> java.util.List<org.netbeans.api.java.source.ElementHandle<{%%0}>> elementsToHandles(java.lang.Iterable<? extends {%%0}>)
meth public static <%0 extends javax.lang.model.element.Element> java.util.List<{%%0}> handlesToElements(java.lang.Iterable<org.netbeans.api.java.source.ElementHandle<{%%0}>>,org.netbeans.api.java.source.CompilationInfo)
meth public static boolean isFromLibrary(org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>,org.netbeans.api.java.source.ClasspathInfo)
meth public static boolean isOnSourceClasspath(org.openide.filesystems.FileObject)
meth public static boolean isRefactorable(org.openide.filesystems.FileObject)
meth public static com.sun.source.util.TreePath findEnclosingClass(org.netbeans.api.java.source.CompilationInfo,com.sun.source.util.TreePath,boolean,boolean,boolean,boolean,boolean)
meth public static java.util.Collection<javax.lang.model.element.ExecutableElement> getOverriddenMethods(javax.lang.model.element.ExecutableElement,org.netbeans.api.java.source.CompilationInfo)
meth public static java.util.Collection<javax.lang.model.element.ExecutableElement> getOverridingMethods(javax.lang.model.element.ExecutableElement,org.netbeans.api.java.source.CompilationInfo)
 anno 0 java.lang.Deprecated()
meth public static java.util.Collection<javax.lang.model.element.ExecutableElement> getOverridingMethods(javax.lang.model.element.ExecutableElement,org.netbeans.api.java.source.CompilationInfo,java.util.concurrent.atomic.AtomicBoolean)
meth public static java.util.Collection<javax.lang.model.element.TypeElement> getSuperTypes(javax.lang.model.element.TypeElement,org.netbeans.api.java.source.CompilationInfo,boolean)
meth public static java.util.Collection<org.netbeans.api.java.source.TreePathHandle> getInvocationsOf(org.netbeans.api.java.source.ElementHandle,org.netbeans.api.java.source.CompilationController) throws java.io.IOException
meth public static java.util.Collection<org.netbeans.api.java.source.TreePathHandle> getReferencesToMember(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>,org.netbeans.api.java.source.ClasspathInfo,org.netbeans.api.java.source.ElementHandle) throws java.io.IOException
meth public static java.util.List<javax.lang.model.type.TypeMirror> elementsToTypes(java.util.List<? extends javax.lang.model.element.Element>)
meth public static java.util.List<javax.lang.model.type.TypeMirror> handlesToTypes(java.lang.Iterable<? extends org.netbeans.api.java.source.TypeMirrorHandle>,org.netbeans.api.java.source.CompilationInfo)
meth public static java.util.List<org.netbeans.api.java.source.TreePathHandle> treesToHandles(com.sun.source.util.TreePath,java.lang.Iterable<? extends com.sun.source.tree.Tree>,org.netbeans.api.java.source.CompilationInfo)
meth public static java.util.List<org.netbeans.api.java.source.TreePathHandle> treesToHandles(java.lang.Iterable<? extends com.sun.source.tree.Tree>,org.netbeans.api.java.source.CompilationInfo)
meth public static java.util.List<org.netbeans.api.java.source.TypeMirrorHandle> typesToHandles(java.lang.Iterable<? extends javax.lang.model.type.TypeMirror>)
meth public static void cacheTreePathInfo(com.sun.source.util.TreePath,org.netbeans.api.java.source.CompilationInfo)
supr java.lang.Object
hcls InvocationScanner

CLSS public final org.netbeans.modules.refactoring.java.api.MemberInfo<%0 extends java.lang.Object>
innr public final static !enum Group
meth public boolean equals(java.lang.Object)
meth public boolean isMakeAbstract()
meth public int hashCode()
meth public java.lang.String getHtmlText()
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public java.util.Set<javax.lang.model.element.Modifier> getModifiers()
meth public javax.swing.Icon getIcon()
meth public org.netbeans.modules.refactoring.java.api.MemberInfo$Group getGroup()
meth public static <%0 extends javax.lang.model.element.Element> org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<{%%0}>> create({%%0},org.netbeans.api.java.source.CompilationInfo)
meth public static <%0 extends javax.lang.model.element.Element> org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<{%%0}>> create({%%0},org.netbeans.api.java.source.CompilationInfo,org.netbeans.modules.refactoring.java.api.MemberInfo$Group)
meth public static <%0 extends javax.lang.model.type.TypeMirror> org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.TypeMirrorHandle<{%%0}>> create({%%0},com.sun.source.tree.Tree,org.netbeans.api.java.source.CompilationInfo)
meth public static <%0 extends javax.lang.model.type.TypeMirror> org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.TypeMirrorHandle<{%%0}>> createImplements(org.netbeans.api.java.source.TypeMirrorHandle,java.lang.String,javax.swing.Icon,java.lang.String)
meth public static org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.TreePathHandle> create(com.sun.source.util.TreePath,org.netbeans.api.java.source.CompilationInfo)
meth public void setMakeAbstract(java.lang.Boolean)
meth public void setName(java.lang.String)
meth public {org.netbeans.modules.refactoring.java.api.MemberInfo%0} getElementHandle()
supr java.lang.Object
hfds group,htmlText,icon,makeAbstract,member,modifiers,name

CLSS public final static !enum org.netbeans.modules.refactoring.java.api.MemberInfo$Group
 outer org.netbeans.modules.refactoring.java.api.MemberInfo
fld public final static org.netbeans.modules.refactoring.java.api.MemberInfo$Group FIELD
fld public final static org.netbeans.modules.refactoring.java.api.MemberInfo$Group IMPLEMENTS
fld public final static org.netbeans.modules.refactoring.java.api.MemberInfo$Group METHOD
fld public final static org.netbeans.modules.refactoring.java.api.MemberInfo$Group TYPE
meth public static org.netbeans.modules.refactoring.java.api.MemberInfo$Group valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.api.MemberInfo$Group[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.api.MemberInfo$Group>

CLSS public final org.netbeans.modules.refactoring.java.api.PullUpRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
meth public org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement> getTargetType()
meth public org.netbeans.api.java.source.TreePathHandle getSourceType()
meth public org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>>[] getMembers()
meth public void setMembers(org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>>[])
meth public void setTargetType(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds EMPTY_MEMBERS,members,targetType

CLSS public org.netbeans.modules.refactoring.java.api.PushDownRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
meth public org.netbeans.api.java.source.TreePathHandle getSourceType()
meth public org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>>[] getMembers()
meth public void setMembers(org.netbeans.modules.refactoring.java.api.MemberInfo<org.netbeans.api.java.source.ElementHandle<? extends javax.lang.model.element.Element>>[])
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds EMPTY_MEMBERS,members

CLSS public final org.netbeans.modules.refactoring.java.api.ReplaceConstructorWithBuilderRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
 anno 1 org.netbeans.api.annotations.common.NonNull()
innr public final static Setter
meth public java.lang.String getBuildMethodName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getBuilderName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.util.List<org.netbeans.modules.refactoring.java.api.ReplaceConstructorWithBuilderRefactoring$Setter> getSetters()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public void setBuildMethodName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void setBuilderName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void setSetters(java.util.List<org.netbeans.modules.refactoring.java.api.ReplaceConstructorWithBuilderRefactoring$Setter>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds buildMethodName,builderName,setters

CLSS public final static org.netbeans.modules.refactoring.java.api.ReplaceConstructorWithBuilderRefactoring$Setter
 outer org.netbeans.modules.refactoring.java.api.ReplaceConstructorWithBuilderRefactoring
cons public init(java.lang.String,java.lang.String,java.lang.String,java.lang.String,boolean)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public boolean isOptional()
meth public java.lang.String getDefaultValue()
meth public java.lang.String getName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getType()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getVarName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds defaultValue,name,optional,type,varName

CLSS public final org.netbeans.modules.refactoring.java.api.ReplaceConstructorWithFactoryRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getFactoryName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public void setFactoryName(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds factoryName

CLSS public final org.netbeans.modules.refactoring.java.api.UseSuperTypeRefactoring
cons public init(org.netbeans.api.java.source.TreePathHandle)
meth public org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement> getTargetSuperType()
meth public org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>[] getCandidateSuperTypes()
meth public org.netbeans.api.java.source.TreePathHandle getTypeElement()
meth public void setTargetSuperType(org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>)
supr org.netbeans.modules.refactoring.api.AbstractRefactoring
hfds candidateSuperTypes,javaClassHandle,superType
hcls TypeMirrorComparator

CLSS public final !enum org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants
fld public final static org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants FIND_DIRECT_SUBCLASSES
fld public final static org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants FIND_OVERRIDING_METHODS
fld public final static org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants FIND_SUBCLASSES
fld public final static org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants SEARCH_FROM_BASECLASS
fld public final static org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants SEARCH_OVERLOADED
meth public static org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.api.WhereUsedQueryConstants>

CLSS public final org.netbeans.modules.refactoring.java.api.ui.JavaRefactoringActionsFactory
meth public static org.openide.util.ContextAwareAction changeParametersAction()
meth public static org.openide.util.ContextAwareAction encapsulateFieldsAction()
meth public static org.openide.util.ContextAwareAction extractInterfaceAction()
meth public static org.openide.util.ContextAwareAction extractSuperclassAction()
meth public static org.openide.util.ContextAwareAction inlineAction()
meth public static org.openide.util.ContextAwareAction innerToOuterAction()
meth public static org.openide.util.ContextAwareAction introduceLocalExtensionAction()
meth public static org.openide.util.ContextAwareAction introduceParameterAction()
meth public static org.openide.util.ContextAwareAction pullUpAction()
meth public static org.openide.util.ContextAwareAction pushDownAction()
meth public static org.openide.util.ContextAwareAction useSuperTypeAction()
supr java.lang.Object

CLSS public final org.netbeans.modules.refactoring.java.api.ui.JavaScopeBuilder
cons public init()
meth public static org.netbeans.modules.refactoring.api.Scope open(java.lang.String,org.netbeans.modules.refactoring.api.Scope)
supr java.lang.Object

CLSS public final org.netbeans.modules.refactoring.java.spi.DiffElement
meth protected java.lang.String getNewFileContent()
meth public java.lang.String getDisplayText()
meth public java.lang.String getText()
meth public org.openide.filesystems.FileObject getParentFile()
meth public org.openide.text.PositionBounds getPosition()
meth public org.openide.util.Lookup getLookup()
meth public static org.netbeans.modules.refactoring.java.spi.DiffElement create(org.netbeans.api.java.source.ModificationResult$Difference,org.openide.filesystems.FileObject,org.netbeans.api.java.source.ModificationResult)
meth public void performChange()
meth public void setEnabled(boolean)
supr org.netbeans.modules.refactoring.spi.SimpleRefactoringElementImplementation
hfds bounds,diff,displayText,modification,newFileContent,parentFile

CLSS public abstract org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin
cons public init()
fld protected final java.util.concurrent.atomic.AtomicBoolean cancelRequested
fld protected volatile boolean cancelRequest
 anno 0 java.lang.Deprecated()
innr protected TransformTask
innr protected final static !enum Phase
intf org.netbeans.modules.refactoring.spi.RefactoringPlugin
meth protected abstract org.netbeans.api.java.source.JavaSource getJavaSource(org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase)
meth protected final java.util.Collection<org.netbeans.api.java.source.ModificationResult> processFiles(java.util.Set<org.openide.filesystems.FileObject>,org.netbeans.api.java.source.CancellableTask<org.netbeans.api.java.source.WorkingCopy>) throws java.io.IOException
meth protected final java.util.Collection<org.netbeans.api.java.source.ModificationResult> processFiles(java.util.Set<org.openide.filesystems.FileObject>,org.netbeans.api.java.source.CancellableTask<org.netbeans.api.java.source.WorkingCopy>,org.netbeans.api.java.source.ClasspathInfo) throws java.io.IOException
meth protected final org.netbeans.modules.refactoring.api.Problem createAndAddElements(java.util.Set<org.openide.filesystems.FileObject>,org.netbeans.api.java.source.CancellableTask<org.netbeans.api.java.source.WorkingCopy>,org.netbeans.modules.refactoring.spi.RefactoringElementsBag,org.netbeans.modules.refactoring.api.AbstractRefactoring)
meth protected final org.netbeans.modules.refactoring.api.Problem createAndAddElements(java.util.Set<org.openide.filesystems.FileObject>,org.netbeans.api.java.source.CancellableTask<org.netbeans.api.java.source.WorkingCopy>,org.netbeans.modules.refactoring.spi.RefactoringElementsBag,org.netbeans.modules.refactoring.api.AbstractRefactoring,org.netbeans.api.java.source.ClasspathInfo)
meth protected final org.netbeans.modules.refactoring.api.Problem createProblemAndLog(org.netbeans.modules.refactoring.api.Problem,java.lang.Throwable)
meth protected final void queryFiles(java.util.Set<org.openide.filesystems.FileObject>,org.netbeans.api.java.source.CancellableTask<? extends org.netbeans.api.java.source.CompilationController>) throws java.io.IOException
meth protected final void queryFiles(java.util.Set<org.openide.filesystems.FileObject>,org.netbeans.api.java.source.CancellableTask<? extends org.netbeans.api.java.source.CompilationController>,org.netbeans.api.java.source.ClasspathInfo) throws java.io.IOException
meth protected org.netbeans.api.java.source.ClasspathInfo getClasspathInfo(org.netbeans.modules.refactoring.api.AbstractRefactoring)
meth protected org.netbeans.modules.refactoring.api.Problem checkParameters(org.netbeans.api.java.source.CompilationController) throws java.io.IOException
meth protected org.netbeans.modules.refactoring.api.Problem fastCheckParameters(org.netbeans.api.java.source.CompilationController) throws java.io.IOException
meth protected org.netbeans.modules.refactoring.api.Problem preCheck(org.netbeans.api.java.source.CompilationController) throws java.io.IOException
meth protected static org.netbeans.modules.refactoring.api.Problem createProblem(org.netbeans.modules.refactoring.api.Problem,boolean,java.lang.String)
meth protected static org.netbeans.modules.refactoring.api.Problem isElementAvail(org.netbeans.api.java.source.TreePathHandle,org.netbeans.api.java.source.CompilationInfo)
meth public org.netbeans.modules.refactoring.api.Problem checkParameters()
meth public org.netbeans.modules.refactoring.api.Problem fastCheckParameters()
meth public org.netbeans.modules.refactoring.api.Problem preCheck()
meth public static org.netbeans.modules.refactoring.spi.Transaction createTransaction(java.util.Collection<org.netbeans.api.java.source.ModificationResult>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void cancelRequest()
supr org.netbeans.modules.refactoring.spi.ProgressProviderAdapter
hfds EMPTY_PATH,currentTask,workingTask
hcls WorkingTask

CLSS protected final static !enum org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase
 outer org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin
fld public final static org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase CHECKPARAMETERS
fld public final static org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase FASTCHECKPARAMETERS
fld public final static org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase PRECHECK
fld public final static org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase PREPARE
meth public static org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$Phase>

CLSS protected org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin$TransformTask
 outer org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin
cons public init(org.netbeans.modules.refactoring.java.spi.JavaRefactoringPlugin,org.netbeans.modules.refactoring.java.spi.RefactoringVisitor,org.netbeans.api.java.source.TreePathHandle)
intf org.netbeans.api.java.source.CancellableTask<org.netbeans.api.java.source.WorkingCopy>
meth public void cancel()
meth public void run(org.netbeans.api.java.source.WorkingCopy) throws java.io.IOException
supr java.lang.Object
hfds treePathHandle,visitor

CLSS public final !enum org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters BINARYFILE
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters COMMENT
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters DEPENDENCY
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters IMPORT
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters PLATFORM
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters SOURCEFILE
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters TESTFILE
innr public final static !enum ReadWrite
meth public java.lang.String getKey()
meth public static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters>
hfds key

CLSS public final static !enum org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters$ReadWrite
 outer org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters$ReadWrite READ
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters$ReadWrite READ_WRITE
fld public final static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters$ReadWrite WRITE
meth public java.lang.String getKey()
meth public static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters$ReadWrite valueOf(java.lang.String)
meth public static org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters$ReadWrite[] values()
supr java.lang.Enum<org.netbeans.modules.refactoring.java.spi.JavaWhereUsedFilters$ReadWrite>
hfds key

CLSS public org.netbeans.modules.refactoring.java.spi.RefactoringVisitor
cons public init()
cons public init(boolean)
fld protected org.netbeans.api.java.source.TreeMaker make
fld protected org.netbeans.api.java.source.WorkingCopy workingCopy
intf com.sun.source.doctree.DocTreeVisitor<com.sun.source.doctree.DocTree,javax.lang.model.element.Element>
meth protected 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.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth protected void rewrite(com.sun.source.tree.Tree,com.sun.source.tree.Tree)
meth public com.sun.source.doctree.DocTree visitAttribute(com.sun.source.doctree.AttributeTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitAuthor(com.sun.source.doctree.AuthorTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitComment(com.sun.source.doctree.CommentTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitDeprecated(com.sun.source.doctree.DeprecatedTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitDocComment(com.sun.source.doctree.DocCommentTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitDocRoot(com.sun.source.doctree.DocRootTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitEndElement(com.sun.source.doctree.EndElementTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitEntity(com.sun.source.doctree.EntityTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitErroneous(com.sun.source.doctree.ErroneousTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitHidden(com.sun.source.doctree.HiddenTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitIdentifier(com.sun.source.doctree.IdentifierTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitIndex(com.sun.source.doctree.IndexTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitInheritDoc(com.sun.source.doctree.InheritDocTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitLink(com.sun.source.doctree.LinkTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitLiteral(com.sun.source.doctree.LiteralTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitOther(com.sun.source.doctree.DocTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitParam(com.sun.source.doctree.ParamTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitProvides(com.sun.source.doctree.ProvidesTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitReference(com.sun.source.doctree.ReferenceTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitReturn(com.sun.source.doctree.ReturnTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitSee(com.sun.source.doctree.SeeTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitSerial(com.sun.source.doctree.SerialTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitSerialData(com.sun.source.doctree.SerialDataTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitSerialField(com.sun.source.doctree.SerialFieldTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitSince(com.sun.source.doctree.SinceTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitStartElement(com.sun.source.doctree.StartElementTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitText(com.sun.source.doctree.TextTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitThrows(com.sun.source.doctree.ThrowsTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitUnknownBlockTag(com.sun.source.doctree.UnknownBlockTagTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitUnknownInlineTag(com.sun.source.doctree.UnknownInlineTagTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitUses(com.sun.source.doctree.UsesTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitValue(com.sun.source.doctree.ValueTree,javax.lang.model.element.Element)
meth public com.sun.source.doctree.DocTree visitVersion(com.sun.source.doctree.VersionTree,javax.lang.model.element.Element)
meth public com.sun.source.tree.Tree scan(com.sun.source.tree.Tree,javax.lang.model.element.Element)
meth public com.sun.source.util.DocTreePath getCurrentDocPath()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public void setWorkingCopy(org.netbeans.api.java.source.WorkingCopy) throws org.netbeans.modules.refactoring.java.spi.ToPhaseException
supr org.netbeans.api.java.source.support.ErrorAwareTreePathScanner<com.sun.source.tree.Tree,javax.lang.model.element.Element>
hfds docScanner
hcls DocTreePathScannerImpl

CLSS public org.netbeans.modules.refactoring.java.spi.ToPhaseException
cons public init()
supr java.lang.Exception

CLSS public org.netbeans.modules.refactoring.java.spi.ui.JavaActionsImplementationProvider
cons public init()
meth public boolean canChangeParameters(org.openide.util.Lookup)
meth public boolean canEncapsulateFields(org.openide.util.Lookup)
meth public boolean canExtractInterface(org.openide.util.Lookup)
meth public boolean canExtractSuperclass(org.openide.util.Lookup)
meth public boolean canInline(org.openide.util.Lookup)
meth public boolean canInnerToOuter(org.openide.util.Lookup)
meth public boolean canIntroduceLocalExtension(org.openide.util.Lookup)
meth public boolean canIntroduceParameter(org.openide.util.Lookup)
meth public boolean canPullUp(org.openide.util.Lookup)
meth public boolean canPushDown(org.openide.util.Lookup)
meth public boolean canUseSuperType(org.openide.util.Lookup)
meth public void doChangeParameters(org.openide.util.Lookup)
meth public void doEncapsulateFields(org.openide.util.Lookup)
meth public void doExtractInterface(org.openide.util.Lookup)
meth public void doExtractSuperclass(org.openide.util.Lookup)
meth public void doInline(org.openide.util.Lookup)
meth public void doInnerToOuter(org.openide.util.Lookup)
meth public void doIntroduceLocalExtension(org.openide.util.Lookup)
meth public void doIntroduceParameter(org.openide.util.Lookup)
meth public void doPullUp(org.openide.util.Lookup)
meth public void doPushDown(org.openide.util.Lookup)
meth public void doUseSuperType(org.openide.util.Lookup)
supr java.lang.Object

CLSS public abstract org.netbeans.modules.refactoring.java.spi.ui.JavaRefactoringActionDelegate
cons protected init(java.lang.String)
cons protected init(java.lang.String,boolean)
meth protected boolean isEnabled(org.openide.util.Lookup)
meth public abstract org.netbeans.modules.refactoring.spi.ui.RefactoringUI createRefactoringUI(org.netbeans.api.java.source.TreePathHandle,int,int,org.netbeans.api.java.source.CompilationInfo)
meth public java.lang.String getErrorMessage()
meth public static javax.swing.Action createAction(org.netbeans.modules.refactoring.java.spi.ui.JavaRefactoringActionDelegate)
supr java.lang.Object
hfds name,requiresSelection

CLSS public abstract interface org.netbeans.modules.refactoring.spi.ProgressProvider
meth public abstract void addProgressListener(org.netbeans.modules.refactoring.api.ProgressListener)
meth public abstract void removeProgressListener(org.netbeans.modules.refactoring.api.ProgressListener)

CLSS public org.netbeans.modules.refactoring.spi.ProgressProviderAdapter
cons protected init()
intf org.netbeans.modules.refactoring.spi.ProgressProvider
meth protected final void fireProgressListenerStart(int,int)
meth protected final void fireProgressListenerStep()
meth protected final void fireProgressListenerStep(int)
meth protected final void fireProgressListenerStop()
meth public void addProgressListener(org.netbeans.modules.refactoring.api.ProgressListener)
meth public void removeProgressListener(org.netbeans.modules.refactoring.api.ProgressListener)
supr java.lang.Object
hfds progressSupport

CLSS public abstract interface org.netbeans.modules.refactoring.spi.RefactoringElementImplementation
fld public final static int GUARDED = 2
fld public final static int NORMAL = 0
fld public final static int READ_ONLY = 3
fld public final static int WARNING = 1
meth public abstract boolean isEnabled()
meth public abstract int getStatus()
meth public abstract java.lang.String getDisplayText()
meth public abstract java.lang.String getText()
meth public abstract org.openide.filesystems.FileObject getParentFile()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public abstract org.openide.text.PositionBounds getPosition()
meth public abstract org.openide.util.Lookup getLookup()
meth public abstract void openInEditor()
meth public abstract void performChange()
meth public abstract void setEnabled(boolean)
meth public abstract void setStatus(int)
meth public abstract void showPreview()
meth public abstract void undoChange()

CLSS public abstract interface org.netbeans.modules.refactoring.spi.RefactoringPlugin
meth public abstract org.netbeans.modules.refactoring.api.Problem checkParameters()
meth public abstract org.netbeans.modules.refactoring.api.Problem fastCheckParameters()
meth public abstract org.netbeans.modules.refactoring.api.Problem preCheck()
meth public abstract org.netbeans.modules.refactoring.api.Problem prepare(org.netbeans.modules.refactoring.spi.RefactoringElementsBag)
meth public abstract void cancelRequest()

CLSS public abstract org.netbeans.modules.refactoring.spi.SimpleRefactoringElementImplementation
cons public init()
intf org.netbeans.modules.refactoring.spi.RefactoringElementImplementation
meth protected java.lang.String getNewFileContent()
meth public boolean isEnabled()
meth public int getStatus()
meth public void openInEditor()
meth public void setEnabled(boolean)
meth public void setStatus(int)
meth public void showPreview()
meth public void undoChange()
supr java.lang.Object
hfds enabled,status

