#Signature file v4.1
#Version 1.83.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} visitEscape(com.sun.source.doctree.EscapeTree,{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} visitSpec(com.sun.source.doctree.SpecTree,{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} visitAnyPattern(com.sun.source.tree.AnyPatternTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitArrayAccess(com.sun.source.tree.ArrayAccessTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitArrayType(com.sun.source.tree.ArrayTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAssert(com.sun.source.tree.AssertTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitAssignment(com.sun.source.tree.AssignmentTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitBinary(com.sun.source.tree.BinaryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitBindingPattern(com.sun.source.tree.BindingPatternTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitBlock(com.sun.source.tree.BlockTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitBreak(com.sun.source.tree.BreakTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCase(com.sun.source.tree.CaseTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCatch(com.sun.source.tree.CatchTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitClass(com.sun.source.tree.ClassTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitEnhancedForLoop(com.sun.source.tree.EnhancedForLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitErroneous(com.sun.source.tree.ErroneousTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitIf(com.sun.source.tree.IfTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitImport(com.sun.source.tree.ImportTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitInstanceOf(com.sun.source.tree.InstanceOfTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitIntersectionType(com.sun.source.tree.IntersectionTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitLabeledStatement(com.sun.source.tree.LabeledStatementTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitLambdaExpression(com.sun.source.tree.LambdaExpressionTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitLiteral(com.sun.source.tree.LiteralTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMemberReference(com.sun.source.tree.MemberReferenceTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMemberSelect(com.sun.source.tree.MemberSelectTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMethod(com.sun.source.tree.MethodTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitMethodInvocation(com.sun.source.tree.MethodInvocationTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitModifiers(com.sun.source.tree.ModifiersTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitModule(com.sun.source.tree.ModuleTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitNewArray(com.sun.source.tree.NewArrayTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitNewClass(com.sun.source.tree.NewClassTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitOpens(com.sun.source.tree.OpensTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitOther(com.sun.source.tree.Tree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPackage(com.sun.source.tree.PackageTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitReturn(com.sun.source.tree.ReturnTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitStringTemplate(com.sun.source.tree.StringTemplateTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitSwitch(com.sun.source.tree.SwitchTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitSwitchExpression(com.sun.source.tree.SwitchExpressionTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitSynchronized(com.sun.source.tree.SynchronizedTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitThrow(com.sun.source.tree.ThrowTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTry(com.sun.source.tree.TryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTypeCast(com.sun.source.tree.TypeCastTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitTypeParameter(com.sun.source.tree.TypeParameterTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnary(com.sun.source.tree.UnaryTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUnionType(com.sun.source.tree.UnionTypeTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitUses(com.sun.source.tree.UsesTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitVariable(com.sun.source.tree.VariableTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWhileLoop(com.sun.source.tree.WhileLoopTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitWildcard(com.sun.source.tree.WildcardTree,{com.sun.source.tree.TreeVisitor%1})
meth public abstract {com.sun.source.tree.TreeVisitor%0} visitYield(com.sun.source.tree.YieldTree,{com.sun.source.tree.TreeVisitor%1})

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

CLSS public com.sun.source.util.TreeScanner<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
intf com.sun.source.tree.TreeVisitor<{com.sun.source.util.TreeScanner%0},{com.sun.source.util.TreeScanner%1}>
meth public {com.sun.source.util.TreeScanner%0} reduce({com.sun.source.util.TreeScanner%0},{com.sun.source.util.TreeScanner%0})
meth public {com.sun.source.util.TreeScanner%0} scan(com.sun.source.tree.Tree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} scan(java.lang.Iterable<? extends com.sun.source.tree.Tree>,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAnnotatedType(com.sun.source.tree.AnnotatedTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAnnotation(com.sun.source.tree.AnnotationTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAnyPattern(com.sun.source.tree.AnyPatternTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitArrayAccess(com.sun.source.tree.ArrayAccessTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitArrayType(com.sun.source.tree.ArrayTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAssert(com.sun.source.tree.AssertTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitAssignment(com.sun.source.tree.AssignmentTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitBinary(com.sun.source.tree.BinaryTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitBindingPattern(com.sun.source.tree.BindingPatternTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitBlock(com.sun.source.tree.BlockTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitBreak(com.sun.source.tree.BreakTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCase(com.sun.source.tree.CaseTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCatch(com.sun.source.tree.CatchTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitClass(com.sun.source.tree.ClassTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitConstantCaseLabel(com.sun.source.tree.ConstantCaseLabelTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitContinue(com.sun.source.tree.ContinueTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitDeconstructionPattern(com.sun.source.tree.DeconstructionPatternTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitDefaultCaseLabel(com.sun.source.tree.DefaultCaseLabelTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitEnhancedForLoop(com.sun.source.tree.EnhancedForLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitErroneous(com.sun.source.tree.ErroneousTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitExports(com.sun.source.tree.ExportsTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitForLoop(com.sun.source.tree.ForLoopTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitIdentifier(com.sun.source.tree.IdentifierTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitIf(com.sun.source.tree.IfTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitImport(com.sun.source.tree.ImportTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitInstanceOf(com.sun.source.tree.InstanceOfTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitIntersectionType(com.sun.source.tree.IntersectionTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitLabeledStatement(com.sun.source.tree.LabeledStatementTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitLambdaExpression(com.sun.source.tree.LambdaExpressionTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitLiteral(com.sun.source.tree.LiteralTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMemberReference(com.sun.source.tree.MemberReferenceTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMemberSelect(com.sun.source.tree.MemberSelectTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMethod(com.sun.source.tree.MethodTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitMethodInvocation(com.sun.source.tree.MethodInvocationTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitModifiers(com.sun.source.tree.ModifiersTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitModule(com.sun.source.tree.ModuleTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitNewArray(com.sun.source.tree.NewArrayTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitNewClass(com.sun.source.tree.NewClassTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitOpens(com.sun.source.tree.OpensTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitOther(com.sun.source.tree.Tree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitPackage(com.sun.source.tree.PackageTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitParenthesized(com.sun.source.tree.ParenthesizedTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitPatternCaseLabel(com.sun.source.tree.PatternCaseLabelTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitProvides(com.sun.source.tree.ProvidesTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitRequires(com.sun.source.tree.RequiresTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitReturn(com.sun.source.tree.ReturnTree,{com.sun.source.util.TreeScanner%1})
meth public {com.sun.source.util.TreeScanner%0} visitStringTemplate(com.sun.source.tree.StringTemplateTree,{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

