#Signature file v4.1
#Version 1.78.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} visitSnippet(com.sun.source.doctree.SnippetTree,{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} 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} visitContinue(com.sun.source.tree.ContinueTree,{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} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{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} 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} visitContinue(com.sun.source.tree.ContinueTree,{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} visitParenthesizedPattern(com.sun.source.tree.ParenthesizedPatternTree,{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 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

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

