#Signature file v4.1
#Version 1.66.0

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

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

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

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

CLSS public abstract interface java.io.Serializable

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

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

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

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

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

CLSS public abstract interface org.netbeans.api.java.source.CancellableTask<%0 extends java.lang.Object>
intf org.netbeans.api.java.source.Task<{org.netbeans.api.java.source.CancellableTask%0}>
meth public abstract void cancel()

CLSS public abstract interface org.netbeans.api.java.source.Task<%0 extends java.lang.Object>
meth public abstract void run({org.netbeans.api.java.source.Task%0}) throws java.lang.Exception

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

