#Signature file v4.1
#Version 1.141.0

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

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

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

CLSS public abstract interface java.beans.Customizer
meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void setObject(java.lang.Object)

CLSS public abstract interface java.beans.PropertyChangeListener
intf java.util.EventListener
meth public abstract void propertyChange(java.beans.PropertyChangeEvent)

CLSS public abstract interface java.beans.beancontext.BeanContextChild
meth public abstract java.beans.beancontext.BeanContext getBeanContext()
meth public abstract void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public abstract void addVetoableChangeListener(java.lang.String,java.beans.VetoableChangeListener)
meth public abstract void removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public abstract void removeVetoableChangeListener(java.lang.String,java.beans.VetoableChangeListener)
meth public abstract void setBeanContext(java.beans.beancontext.BeanContext) throws java.beans.PropertyVetoException

CLSS public abstract interface java.io.Serializable

CLSS public abstract interface java.lang.Cloneable

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)
innr public final static EnumDesc
intf java.io.Serializable
intf java.lang.Comparable<{java.lang.Enum%0}>
intf java.lang.constant.Constable
meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected final void finalize()
meth public final boolean equals(java.lang.Object)
meth public final int compareTo({java.lang.Enum%0})
meth public final int hashCode()
meth public final int ordinal()
meth public final java.lang.Class<{java.lang.Enum%0}> getDeclaringClass()
meth public final java.lang.String name()
meth public final java.util.Optional<java.lang.Enum$EnumDesc<{java.lang.Enum%0}>> describeConstable()
meth public java.lang.String toString()
meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String)
supr java.lang.Object

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

CLSS public abstract interface !annotation java.lang.FunctionalInterface
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE])
intf java.lang.annotation.Annotation

CLSS public abstract interface java.lang.Iterable<%0 extends java.lang.Object>
meth public abstract java.util.Iterator<{java.lang.Iterable%0}> iterator()
meth public java.util.Spliterator<{java.lang.Iterable%0}> spliterator()
meth public void forEach(java.util.function.Consumer<? super {java.lang.Iterable%0}>)

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

CLSS public abstract interface java.lang.Runnable
 anno 0 java.lang.FunctionalInterface()
meth public abstract void run()

CLSS public java.lang.RuntimeException
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.Exception

CLSS public java.lang.Throwable
cons protected init(java.lang.String,java.lang.Throwable,boolean,boolean)
cons public init()
cons public init(java.lang.String)
cons public init(java.lang.String,java.lang.Throwable)
cons public init(java.lang.Throwable)
intf java.io.Serializable
meth public final java.lang.Throwable[] getSuppressed()
meth public final void addSuppressed(java.lang.Throwable)
meth public java.lang.StackTraceElement[] getStackTrace()
meth public java.lang.String getLocalizedMessage()
meth public java.lang.String getMessage()
meth public java.lang.String toString()
meth public java.lang.Throwable fillInStackTrace()
meth public java.lang.Throwable getCause()
meth public java.lang.Throwable initCause(java.lang.Throwable)
meth public void printStackTrace()
meth public void printStackTrace(java.io.PrintStream)
meth public void printStackTrace(java.io.PrintWriter)
meth public void setStackTrace(java.lang.StackTraceElement[])
supr java.lang.Object

CLSS public abstract interface java.lang.annotation.Annotation
meth public abstract boolean equals(java.lang.Object)
meth public abstract int hashCode()
meth public abstract java.lang.Class<? extends java.lang.annotation.Annotation> annotationType()
meth public abstract java.lang.String toString()

CLSS public abstract interface !annotation java.lang.annotation.Documented
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation

CLSS public abstract interface !annotation java.lang.annotation.Retention
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation
meth public abstract java.lang.annotation.RetentionPolicy value()

CLSS public abstract interface !annotation java.lang.annotation.Target
 anno 0 java.lang.annotation.Documented()
 anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME)
 anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE])
intf java.lang.annotation.Annotation
meth public abstract java.lang.annotation.ElementType[] value()

CLSS public abstract interface java.lang.constant.Constable
meth public abstract java.util.Optional<? extends java.lang.constant.ConstantDesc> describeConstable()

CLSS public abstract java.util.AbstractMap<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons protected init()
innr public static SimpleEntry
innr public static SimpleImmutableEntry
intf java.util.Map<{java.util.AbstractMap%0},{java.util.AbstractMap%1}>
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth public abstract java.util.Set<java.util.Map$Entry<{java.util.AbstractMap%0},{java.util.AbstractMap%1}>> entrySet()
meth public boolean containsKey(java.lang.Object)
meth public boolean containsValue(java.lang.Object)
meth public boolean equals(java.lang.Object)
meth public boolean isEmpty()
meth public int hashCode()
meth public int size()
meth public java.lang.String toString()
meth public java.util.Collection<{java.util.AbstractMap%1}> values()
meth public java.util.Set<{java.util.AbstractMap%0}> keySet()
meth public void clear()
meth public void putAll(java.util.Map<? extends {java.util.AbstractMap%0},? extends {java.util.AbstractMap%1}>)
meth public {java.util.AbstractMap%1} get(java.lang.Object)
meth public {java.util.AbstractMap%1} put({java.util.AbstractMap%0},{java.util.AbstractMap%1})
meth public {java.util.AbstractMap%1} remove(java.lang.Object)
supr java.lang.Object

CLSS public abstract interface java.util.Collection<%0 extends java.lang.Object>
intf java.lang.Iterable<{java.util.Collection%0}>
meth public <%0 extends java.lang.Object> {%%0}[] toArray(java.util.function.IntFunction<{%%0}[]>)
meth public abstract <%0 extends java.lang.Object> {%%0}[] toArray({%%0}[])
meth public abstract boolean add({java.util.Collection%0})
meth public abstract boolean addAll(java.util.Collection<? extends {java.util.Collection%0}>)
meth public abstract boolean contains(java.lang.Object)
meth public abstract boolean containsAll(java.util.Collection<?>)
meth public abstract boolean equals(java.lang.Object)
meth public abstract boolean isEmpty()
meth public abstract boolean remove(java.lang.Object)
meth public abstract boolean removeAll(java.util.Collection<?>)
meth public abstract boolean retainAll(java.util.Collection<?>)
meth public abstract int hashCode()
meth public abstract int size()
meth public abstract java.lang.Object[] toArray()
meth public abstract java.util.Iterator<{java.util.Collection%0}> iterator()
meth public abstract void clear()
meth public boolean removeIf(java.util.function.Predicate<? super {java.util.Collection%0}>)
meth public java.util.Spliterator<{java.util.Collection%0}> spliterator()
meth public java.util.stream.Stream<{java.util.Collection%0}> parallelStream()
meth public java.util.stream.Stream<{java.util.Collection%0}> stream()

CLSS public abstract interface java.util.EventListener

CLSS public abstract interface java.util.Map<%0 extends java.lang.Object, %1 extends java.lang.Object>
innr public abstract interface static Entry
meth public !varargs static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> ofEntries(java.util.Map$Entry<? extends {%%0},? extends {%%1}>[])
 anno 0 java.lang.SafeVarargs()
meth public abstract boolean containsKey(java.lang.Object)
meth public abstract boolean containsValue(java.lang.Object)
meth public abstract boolean equals(java.lang.Object)
meth public abstract boolean isEmpty()
meth public abstract int hashCode()
meth public abstract int size()
meth public abstract java.util.Collection<{java.util.Map%1}> values()
meth public abstract java.util.Set<java.util.Map$Entry<{java.util.Map%0},{java.util.Map%1}>> entrySet()
meth public abstract java.util.Set<{java.util.Map%0}> keySet()
meth public abstract void clear()
meth public abstract void putAll(java.util.Map<? extends {java.util.Map%0},? extends {java.util.Map%1}>)
meth public abstract {java.util.Map%1} get(java.lang.Object)
meth public abstract {java.util.Map%1} put({java.util.Map%0},{java.util.Map%1})
meth public abstract {java.util.Map%1} remove(java.lang.Object)
meth public boolean remove(java.lang.Object,java.lang.Object)
meth public boolean replace({java.util.Map%0},{java.util.Map%1},{java.util.Map%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map$Entry<{%%0},{%%1}> entry({%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> copyOf(java.util.Map<? extends {%%0},? extends {%%1}>)
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of()
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> java.util.Map<{%%0},{%%1}> of({%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1},{%%0},{%%1})
meth public void forEach(java.util.function.BiConsumer<? super {java.util.Map%0},? super {java.util.Map%1}>)
meth public void replaceAll(java.util.function.BiFunction<? super {java.util.Map%0},? super {java.util.Map%1},? extends {java.util.Map%1}>)
meth public {java.util.Map%1} compute({java.util.Map%0},java.util.function.BiFunction<? super {java.util.Map%0},? super {java.util.Map%1},? extends {java.util.Map%1}>)
meth public {java.util.Map%1} computeIfAbsent({java.util.Map%0},java.util.function.Function<? super {java.util.Map%0},? extends {java.util.Map%1}>)
meth public {java.util.Map%1} computeIfPresent({java.util.Map%0},java.util.function.BiFunction<? super {java.util.Map%0},? super {java.util.Map%1},? extends {java.util.Map%1}>)
meth public {java.util.Map%1} getOrDefault(java.lang.Object,{java.util.Map%1})
meth public {java.util.Map%1} merge({java.util.Map%0},{java.util.Map%1},java.util.function.BiFunction<? super {java.util.Map%1},? super {java.util.Map%1},? extends {java.util.Map%1}>)
meth public {java.util.Map%1} putIfAbsent({java.util.Map%0},{java.util.Map%1})
meth public {java.util.Map%1} replace({java.util.Map%0},{java.util.Map%1})

CLSS public abstract interface java.util.Set<%0 extends java.lang.Object>
intf java.util.Collection<{java.util.Set%0}>
meth public !varargs static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0}[])
 anno 0 java.lang.SafeVarargs()
meth public abstract <%0 extends java.lang.Object> {%%0}[] toArray({%%0}[])
meth public abstract boolean add({java.util.Set%0})
meth public abstract boolean addAll(java.util.Collection<? extends {java.util.Set%0}>)
meth public abstract boolean contains(java.lang.Object)
meth public abstract boolean containsAll(java.util.Collection<?>)
meth public abstract boolean equals(java.lang.Object)
meth public abstract boolean isEmpty()
meth public abstract boolean remove(java.lang.Object)
meth public abstract boolean removeAll(java.util.Collection<?>)
meth public abstract boolean retainAll(java.util.Collection<?>)
meth public abstract int hashCode()
meth public abstract int size()
meth public abstract java.lang.Object[] toArray()
meth public abstract java.util.Iterator<{java.util.Set%0}> iterator()
meth public abstract void clear()
meth public java.util.Spliterator<{java.util.Set%0}> spliterator()
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> copyOf(java.util.Collection<? extends {%%0}>)
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of()
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0},{%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0},{%%0},{%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0})
meth public static <%0 extends java.lang.Object> java.util.Set<{%%0}> of({%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0},{%%0})

CLSS public abstract interface javax.security.auth.Refreshable
meth public abstract boolean isCurrent()
meth public abstract void refresh() throws javax.security.auth.RefreshFailedException

CLSS public org.netbeans.api.debugger.ActionsManagerAdapter
cons public init()
intf org.netbeans.api.debugger.ActionsManagerListener
meth public void actionPerformed(java.lang.Object)
meth public void actionStateChanged(java.lang.Object,boolean)
supr java.lang.Object

CLSS public abstract interface org.netbeans.api.debugger.ActionsManagerListener
fld public final static java.lang.String PROP_ACTION_PERFORMED = "actionPerformed"
fld public final static java.lang.String PROP_ACTION_STATE_CHANGED = "actionStateChanged"
intf java.util.EventListener
meth public abstract void actionPerformed(java.lang.Object)
meth public abstract void actionStateChanged(java.lang.Object,boolean)

CLSS public abstract interface org.netbeans.api.debugger.DebuggerManagerListener
intf java.beans.PropertyChangeListener
meth public abstract org.netbeans.api.debugger.Breakpoint[] initBreakpoints()
meth public abstract void breakpointAdded(org.netbeans.api.debugger.Breakpoint)
meth public abstract void breakpointRemoved(org.netbeans.api.debugger.Breakpoint)
meth public abstract void engineAdded(org.netbeans.api.debugger.DebuggerEngine)
meth public abstract void engineRemoved(org.netbeans.api.debugger.DebuggerEngine)
meth public abstract void initWatches()
meth public abstract void sessionAdded(org.netbeans.api.debugger.Session)
meth public abstract void sessionRemoved(org.netbeans.api.debugger.Session)
meth public abstract void watchAdded(org.netbeans.api.debugger.Watch)
meth public abstract void watchRemoved(org.netbeans.api.debugger.Watch)

CLSS public abstract org.netbeans.api.debugger.LazyActionsManagerListener
cons public init()
innr public abstract interface static !annotation Registration
meth protected abstract void destroy()
meth public abstract java.lang.String[] getProperties()
supr org.netbeans.api.debugger.ActionsManagerAdapter
hcls ContextAware

CLSS public abstract interface org.netbeans.api.debugger.LazyDebuggerManagerListener
intf org.netbeans.api.debugger.DebuggerManagerListener
meth public abstract java.lang.String[] getProperties()

CLSS public abstract org.netbeans.api.debugger.Properties
cons public init()
innr public abstract interface static Initializer
innr public abstract interface static Reader
meth public abstract boolean getBoolean(java.lang.String,boolean)
meth public abstract byte getByte(java.lang.String,byte)
meth public abstract char getChar(java.lang.String,char)
meth public abstract double getDouble(java.lang.String,double)
meth public abstract float getFloat(java.lang.String,float)
meth public abstract int getInt(java.lang.String,int)
meth public abstract java.lang.Object getObject(java.lang.String,java.lang.Object)
meth public abstract java.lang.Object[] getArray(java.lang.String,java.lang.Object[])
meth public abstract java.lang.String getString(java.lang.String,java.lang.String)
meth public abstract java.util.Collection getCollection(java.lang.String,java.util.Collection)
meth public abstract java.util.Map getMap(java.lang.String,java.util.Map)
meth public abstract long getLong(java.lang.String,long)
meth public abstract org.netbeans.api.debugger.Properties getProperties(java.lang.String)
meth public abstract short getShort(java.lang.String,short)
meth public abstract void setArray(java.lang.String,java.lang.Object[])
meth public abstract void setBoolean(java.lang.String,boolean)
meth public abstract void setByte(java.lang.String,byte)
meth public abstract void setChar(java.lang.String,char)
meth public abstract void setCollection(java.lang.String,java.util.Collection)
meth public abstract void setDouble(java.lang.String,double)
meth public abstract void setFloat(java.lang.String,float)
meth public abstract void setInt(java.lang.String,int)
meth public abstract void setLong(java.lang.String,long)
meth public abstract void setMap(java.lang.String,java.util.Map)
meth public abstract void setObject(java.lang.String,java.lang.Object)
meth public abstract void setShort(java.lang.String,short)
meth public abstract void setString(java.lang.String,java.lang.String)
meth public static org.netbeans.api.debugger.Properties getDefault()
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
supr java.lang.Object
hfds LOG,defaultProperties
hcls DelegatingProperties,PrimitiveRegister,PropertiesImpl

CLSS public abstract interface static org.netbeans.api.debugger.Properties$Reader
 outer org.netbeans.api.debugger.Properties
meth public abstract java.lang.Object read(java.lang.String,org.netbeans.api.debugger.Properties)
meth public abstract java.lang.String[] getSupportedClassNames()
meth public abstract void write(java.lang.Object,org.netbeans.api.debugger.Properties)

CLSS public abstract interface org.netbeans.api.debugger.jpda.CallStackFrame
meth public abstract boolean isObsolete()
meth public abstract int getFrameDepth()
meth public abstract int getLineNumber(java.lang.String)
meth public abstract java.lang.String getClassName()
meth public abstract java.lang.String getDefaultStratum()
meth public abstract java.lang.String getMethodName()
meth public abstract java.lang.String getSourceName(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public abstract java.lang.String getSourcePath(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public abstract java.util.List<java.lang.String> getAvailableStrata()
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.MonitorInfo> getOwnedMonitors()
meth public abstract org.netbeans.api.debugger.jpda.JPDAThread getThread()
meth public abstract org.netbeans.api.debugger.jpda.LocalVariable[] getLocalVariables() throws com.sun.jdi.AbsentInformationException
meth public abstract org.netbeans.api.debugger.jpda.This getThisVariable()
meth public abstract org.netbeans.spi.debugger.jpda.EditorContext$Operation getCurrentOperation(java.lang.String)
meth public abstract void makeCurrent()
meth public abstract void popFrame()

CLSS public abstract interface org.netbeans.api.debugger.jpda.ClassVariable
intf org.netbeans.api.debugger.jpda.ObjectVariable
meth public abstract org.netbeans.api.debugger.jpda.JPDAClassType getReflectedType()

CLSS public abstract org.netbeans.api.debugger.jpda.DeadlockDetector
cons public init()
fld public final static java.lang.String PROP_DEADLOCK = "deadlock"
innr public final static Deadlock
meth protected final org.netbeans.api.debugger.jpda.DeadlockDetector$Deadlock createDeadlock(java.util.Collection<org.netbeans.api.debugger.jpda.JPDAThread>)
meth protected final void setDeadlocks(java.util.Set<org.netbeans.api.debugger.jpda.DeadlockDetector$Deadlock>)
meth public final java.util.Set<org.netbeans.api.debugger.jpda.DeadlockDetector$Deadlock> getDeadlocks()
meth public final void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public final void removePropertyChangeListener(java.beans.PropertyChangeListener)
supr java.lang.Object
hfds deadlocks,pcs

CLSS public abstract interface org.netbeans.api.debugger.jpda.Field
intf org.netbeans.api.debugger.jpda.MutableVariable
meth public abstract boolean isStatic()
meth public abstract java.lang.String getClassName()
meth public abstract java.lang.String getDeclaredType()
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.api.debugger.jpda.JPDAClassType getDeclaringClass()
meth public abstract void setValue(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException

CLSS public abstract interface org.netbeans.api.debugger.jpda.JPDAArrayType
intf org.netbeans.api.debugger.jpda.JPDAClassType
meth public abstract java.lang.String getComponentTypeName()
meth public abstract org.netbeans.api.debugger.jpda.VariableType getComponentType()

CLSS public abstract interface org.netbeans.api.debugger.jpda.JPDAClassType
intf org.netbeans.api.debugger.jpda.VariableType
meth public abstract boolean isInstanceOf(java.lang.String)
meth public abstract java.lang.String getSourceName() throws com.sun.jdi.AbsentInformationException
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.Field> staticFields()
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getAllInterfaces()
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getDirectInterfaces()
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getSubClasses()
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.ObjectVariable> getInstances(long)
meth public abstract long getInstanceCount()
meth public abstract org.netbeans.api.debugger.jpda.ClassVariable classObject()
meth public abstract org.netbeans.api.debugger.jpda.ObjectVariable getClassLoader()
meth public abstract org.netbeans.api.debugger.jpda.Super getSuperClass()
meth public abstract org.netbeans.api.debugger.jpda.Variable invokeMethod(java.lang.String,java.lang.String,org.netbeans.api.debugger.jpda.Variable[]) throws java.lang.NoSuchMethodException,org.netbeans.api.debugger.jpda.InvalidExpressionException

CLSS public abstract org.netbeans.api.debugger.jpda.JPDADebugger
cons public init()
fld public final static int STATE_DISCONNECTED = 4
fld public final static int STATE_RUNNING = 2
fld public final static int STATE_STARTING = 1
fld public final static int STATE_STOPPED = 3
fld public final static int SUSPEND_ALL = 2
fld public final static int SUSPEND_EVENT_THREAD = 1
fld public final static java.lang.String ENGINE_ID = "netbeans-JPDASession/Java"
fld public final static java.lang.String PROP_BREAKPOINTS_ACTIVE = "breakpointsActive"
fld public final static java.lang.String PROP_CLASSES_FIXED = "classesFixed"
fld public final static java.lang.String PROP_CURRENT_CALL_STACK_FRAME = "currentCallStackFrame"
fld public final static java.lang.String PROP_CURRENT_THREAD = "currentThread"
fld public final static java.lang.String PROP_STATE = "state"
fld public final static java.lang.String PROP_SUSPEND = "suspend"
fld public final static java.lang.String PROP_THREAD_DIED = "threadDied"
fld public final static java.lang.String PROP_THREAD_GROUP_ADDED = "threadGroupAdded"
fld public final static java.lang.String PROP_THREAD_STARTED = "threadStarted"
fld public final static java.lang.String SESSION_ID = "netbeans-JPDASession"
innr public abstract interface static !annotation Registration
meth protected void fireBreakpointEvent(org.netbeans.api.debugger.jpda.JPDABreakpoint,org.netbeans.api.debugger.jpda.event.JPDABreakpointEvent)
meth public abstract boolean canFixClasses()
meth public abstract boolean canPopFrames()
meth public abstract int getState()
meth public abstract int getSuspend()
meth public abstract org.netbeans.api.debugger.jpda.CallStackFrame getCurrentCallStackFrame()
meth public abstract org.netbeans.api.debugger.jpda.JPDAThread getCurrentThread()
meth public abstract org.netbeans.api.debugger.jpda.SmartSteppingFilter getSmartSteppingFilter()
meth public abstract org.netbeans.api.debugger.jpda.Variable evaluate(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public abstract void fixClasses(java.util.Map<java.lang.String,byte[]>)
meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public abstract void setSuspend(int)
meth public abstract void waitRunning() throws org.netbeans.api.debugger.jpda.DebuggerStartException
meth public boolean canBeModified()
meth public boolean canGetInstanceInfo()
meth public boolean getBreakpointsActive()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getAllClasses()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getClassesByName(java.lang.String)
meth public long[] getInstanceCounts(java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType>)
meth public org.netbeans.api.debugger.Session getSession()
meth public org.netbeans.api.debugger.jpda.JPDAStep createJPDAStep(int,int)
meth public org.netbeans.api.debugger.jpda.ThreadsCollector getThreadsCollector()
meth public org.netbeans.api.debugger.jpda.Variable createMirrorVar(java.lang.Object) throws java.io.InvalidObjectException
meth public org.netbeans.api.debugger.jpda.Variable createMirrorVar(java.lang.Object,boolean) throws java.io.InvalidObjectException
meth public static org.netbeans.api.debugger.DebuggerEngine[] startListeningAndGetEngines(com.sun.jdi.connect.ListeningConnector,java.util.Map<java.lang.String,? extends com.sun.jdi.connect.Connector$Argument>,java.lang.Object[]) throws org.netbeans.api.debugger.jpda.DebuggerStartException
meth public static org.netbeans.api.debugger.jpda.JPDADebugger attach(java.lang.String,int,java.lang.Object[]) throws org.netbeans.api.debugger.jpda.DebuggerStartException
meth public static org.netbeans.api.debugger.jpda.JPDADebugger attach(java.lang.String,java.lang.Object[]) throws org.netbeans.api.debugger.jpda.DebuggerStartException
meth public static org.netbeans.api.debugger.jpda.JPDADebugger listen(com.sun.jdi.connect.ListeningConnector,java.util.Map<java.lang.String,? extends com.sun.jdi.connect.Connector$Argument>,java.lang.Object[]) throws org.netbeans.api.debugger.jpda.DebuggerStartException
meth public static void launch(java.lang.String,java.lang.String[],java.lang.String,boolean)
meth public static void startListening(com.sun.jdi.connect.ListeningConnector,java.util.Map<java.lang.String,? extends com.sun.jdi.connect.Connector$Argument>,java.lang.Object[]) throws org.netbeans.api.debugger.jpda.DebuggerStartException
meth public void setBreakpointsActive(boolean)
supr java.lang.Object
hcls ContextAware

CLSS public abstract org.netbeans.api.debugger.jpda.JPDAStep
cons public init(org.netbeans.api.debugger.jpda.JPDADebugger,int,int)
fld protected org.netbeans.api.debugger.jpda.JPDADebugger debugger
fld public final static int STEP_INTO = 1
fld public final static int STEP_LINE = -2
fld public final static int STEP_MIN = -1
fld public final static int STEP_OPERATION = 10
fld public final static int STEP_OUT = 3
fld public final static int STEP_OVER = 2
fld public final static java.lang.String PROP_STATE_EXEC = "exec"
meth protected void firePropertyChange(java.lang.String,java.lang.Object,java.lang.Object)
meth public !varargs void addSteppingFilters(java.lang.String[])
meth public abstract void addStep(org.netbeans.api.debugger.jpda.JPDAThread)
meth public boolean getHidden()
meth public boolean isStepThroughFilters()
meth public int getDepth()
meth public int getSize()
meth public java.lang.String[] getSteppingFilters()
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void setDepth(int)
meth public void setHidden(boolean)
meth public void setSize(int)
meth public void setStepThroughFilters(boolean)
supr java.lang.Object
hfds classFilters,depth,hidden,pcs,size,stepThroughFilters

CLSS public abstract interface org.netbeans.api.debugger.jpda.JPDAThread
fld public final static int STATE_MONITOR = 3
fld public final static int STATE_NOT_STARTED = 5
fld public final static int STATE_RUNNING = 1
fld public final static int STATE_SLEEPING = 2
fld public final static int STATE_UNKNOWN = -1
fld public final static int STATE_WAIT = 4
fld public final static int STATE_ZOMBIE = 0
fld public final static java.lang.String PROP_BREAKPOINT = "currentBreakpoint"
fld public final static java.lang.String PROP_CALLSTACK = "callStack"
fld public final static java.lang.String PROP_SUSPENDED = "suspended"
fld public final static java.lang.String PROP_VARIABLES = "variables"
meth public abstract boolean isSuspended()
meth public abstract int getLineNumber(java.lang.String)
meth public abstract int getStackDepth()
meth public abstract int getState()
meth public abstract java.lang.String getClassName()
meth public abstract java.lang.String getMethodName()
meth public abstract java.lang.String getName()
meth public abstract java.lang.String getSourceName(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public abstract java.lang.String getSourcePath(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.MonitorInfo> getOwnedMonitorsAndFrames()
meth public abstract java.util.List<org.netbeans.spi.debugger.jpda.EditorContext$Operation> getLastOperations()
meth public abstract java.util.concurrent.locks.Lock getReadAccessLock()
meth public abstract org.netbeans.api.debugger.jpda.CallStackFrame[] getCallStack() throws com.sun.jdi.AbsentInformationException
meth public abstract org.netbeans.api.debugger.jpda.CallStackFrame[] getCallStack(int,int) throws com.sun.jdi.AbsentInformationException
meth public abstract org.netbeans.api.debugger.jpda.JPDABreakpoint getCurrentBreakpoint()
meth public abstract org.netbeans.api.debugger.jpda.JPDAThreadGroup getParentThreadGroup()
meth public abstract org.netbeans.api.debugger.jpda.MonitorInfo getContendedMonitorAndOwner()
meth public abstract org.netbeans.api.debugger.jpda.ObjectVariable getContendedMonitor()
meth public abstract org.netbeans.api.debugger.jpda.ObjectVariable[] getOwnedMonitors()
meth public abstract org.netbeans.spi.debugger.jpda.EditorContext$Operation getCurrentOperation()
meth public abstract void interrupt()
meth public abstract void makeCurrent()
meth public abstract void resume()
meth public abstract void suspend()

CLSS public abstract interface org.netbeans.api.debugger.jpda.JPDAThreadGroup
meth public abstract java.lang.String getName()
meth public abstract org.netbeans.api.debugger.jpda.JPDAThreadGroup getParentThreadGroup()
meth public abstract org.netbeans.api.debugger.jpda.JPDAThreadGroup[] getThreadGroups()
meth public abstract org.netbeans.api.debugger.jpda.JPDAThread[] getThreads()
meth public abstract void resume()
meth public abstract void suspend()

CLSS public abstract interface org.netbeans.api.debugger.jpda.LocalVariable
intf org.netbeans.api.debugger.jpda.MutableVariable
meth public abstract java.lang.String getClassName()
meth public abstract java.lang.String getDeclaredType()
meth public abstract java.lang.String getName()
meth public abstract void setValue(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException

CLSS public abstract interface org.netbeans.api.debugger.jpda.MonitorInfo
meth public abstract org.netbeans.api.debugger.jpda.CallStackFrame getFrame()
meth public abstract org.netbeans.api.debugger.jpda.JPDAThread getThread()
meth public abstract org.netbeans.api.debugger.jpda.ObjectVariable getMonitor()

CLSS public abstract interface org.netbeans.api.debugger.jpda.MutableVariable
intf org.netbeans.api.debugger.jpda.Variable
meth public abstract void setFromMirrorObject(java.lang.Object) throws java.io.InvalidObjectException
meth public abstract void setValue(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException

CLSS public abstract interface org.netbeans.api.debugger.jpda.ObjectVariable
intf org.netbeans.api.debugger.jpda.Variable
meth public abstract int getFieldsCount()
meth public abstract java.lang.String getToStringValue() throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.ObjectVariable> getReferringObjects(long)
meth public abstract long getUniqueID()
meth public abstract org.netbeans.api.debugger.jpda.Field getField(java.lang.String)
meth public abstract org.netbeans.api.debugger.jpda.Field[] getAllStaticFields(int,int)
meth public abstract org.netbeans.api.debugger.jpda.Field[] getFields(int,int)
meth public abstract org.netbeans.api.debugger.jpda.Field[] getInheritedFields(int,int)
meth public abstract org.netbeans.api.debugger.jpda.JPDAClassType getClassType()
meth public abstract org.netbeans.api.debugger.jpda.Super getSuper()
meth public abstract org.netbeans.api.debugger.jpda.Variable invokeMethod(java.lang.String,java.lang.String,org.netbeans.api.debugger.jpda.Variable[]) throws java.lang.NoSuchMethodException,org.netbeans.api.debugger.jpda.InvalidExpressionException

CLSS public abstract interface org.netbeans.api.debugger.jpda.ReturnVariable
intf org.netbeans.api.debugger.jpda.ObjectVariable
meth public abstract java.lang.String methodName()

CLSS public abstract interface org.netbeans.api.debugger.jpda.SmartSteppingFilter
fld public final static java.lang.String PROP_EXCLUSION_PATTERNS = "exclusionPatterns"
meth public abstract java.lang.String[] getExclusionPatterns()
meth public abstract void addExclusionPatterns(java.util.Set<java.lang.String>)
meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void removeExclusionPatterns(java.util.Set<java.lang.String>)
meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)

CLSS public abstract org.netbeans.api.debugger.jpda.ThreadsCollector
cons public init()
fld public final static java.lang.String PROP_THREAD_DIED = "threadDied"
fld public final static java.lang.String PROP_THREAD_GROUP_ADDED = "threadGroupAdded"
fld public final static java.lang.String PROP_THREAD_RESUMED = "threadResumed"
fld public final static java.lang.String PROP_THREAD_STARTED = "threadStarted"
fld public final static java.lang.String PROP_THREAD_SUSPENDED = "threadSuspended"
meth protected final void firePropertyChange(java.lang.String,java.lang.Object,java.lang.Object)
meth public abstract java.util.List<org.netbeans.api.debugger.jpda.JPDAThread> getAllThreads()
meth public abstract org.netbeans.api.debugger.jpda.DeadlockDetector getDeadlockDetector()
meth public final void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public final void removePropertyChangeListener(java.beans.PropertyChangeListener)
supr java.lang.Object
hfds pch

CLSS public abstract interface org.netbeans.api.debugger.jpda.Variable
meth public abstract java.lang.Object createMirrorObject()
meth public abstract java.lang.String getType()
meth public abstract java.lang.String getValue()

CLSS public abstract interface org.netbeans.api.debugger.jpda.VariableType
meth public abstract java.lang.String getName()

CLSS public abstract interface org.netbeans.api.debugger.jpda.event.JPDABreakpointListener
intf java.util.EventListener
meth public abstract void breakpointReached(org.netbeans.api.debugger.jpda.event.JPDABreakpointEvent)

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

CLSS public org.netbeans.modules.debugger.jpda.AttachingSessionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth public java.lang.Object[] getServices()
meth public java.lang.String getLocationName()
meth public java.lang.String getSessionName()
meth public java.lang.String getTypeID()
supr org.netbeans.spi.debugger.SessionProvider
hfds contextProvider,sadic

CLSS public org.netbeans.modules.debugger.jpda.DeadlockDetectorImpl
intf java.beans.PropertyChangeListener
meth public void propertyChange(java.beans.PropertyChangeEvent)
meth public void waitForUnfinishedTasks(long) throws java.lang.InterruptedException
supr org.netbeans.api.debugger.jpda.DeadlockDetector
hfds monitorToNode,rp,suspendedThreads,unfinishedTasks
hcls Node

CLSS public final org.netbeans.modules.debugger.jpda.DebuggerConsoleIO
innr public final static Line
meth public org.netbeans.api.io.InputOutput getIO()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public void println(java.lang.String,org.netbeans.modules.debugger.jpda.DebuggerConsoleIO$Line)
meth public void println(java.lang.String,org.netbeans.modules.debugger.jpda.DebuggerConsoleIO$Line,boolean)
supr java.lang.Object
hfds debugger,output

CLSS public final static org.netbeans.modules.debugger.jpda.DebuggerConsoleIO$Line
 outer org.netbeans.modules.debugger.jpda.DebuggerConsoleIO
cons public init(java.lang.String,int,org.netbeans.api.debugger.jpda.JPDADebugger)
meth public void show()
supr java.lang.Object
hfds debuggerRef,lineNumber,url

CLSS public org.netbeans.modules.debugger.jpda.EditorContextBridge
cons public init()
fld public final static java.lang.String CLASS = "class"
fld public final static java.lang.String FIELD = "field"
fld public final static java.lang.String LINE = "line"
fld public final static java.lang.String METHOD = "method"
meth public static <%0 extends java.lang.Object, %1 extends java.lang.Object> {%%0} interpretOrCompileCode(org.netbeans.spi.debugger.jpda.Evaluator$Expression<java.lang.Object>,java.lang.String,int,org.netbeans.api.java.source.support.ErrorAwareTreePathScanner<java.lang.Boolean,{%%1}>,org.netbeans.api.java.source.support.ErrorAwareTreePathScanner<{%%0},{%%1}>,{%%1},boolean,java.util.function.Function<org.openide.util.Pair<java.lang.String,byte[]>,java.lang.Boolean>,org.netbeans.spi.debugger.jpda.SourcePathProvider) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public static boolean showSource(org.netbeans.api.debugger.jpda.LineBreakpoint,java.lang.Object)
meth public static int getCurrentOffset()
meth public static java.lang.String getFileName(org.netbeans.api.debugger.jpda.LineBreakpoint)
meth public static java.lang.String getRelativePath(java.lang.String)
meth public static java.lang.String getRelativePath(org.netbeans.api.debugger.jpda.CallStackFrame,java.lang.String)
meth public static java.lang.String getRelativePath(org.netbeans.api.debugger.jpda.JPDAThread,java.lang.String)
meth public static org.netbeans.spi.debugger.jpda.EditorContext getContext()
supr java.lang.Object
hfds context
hcls CompoundAnnotation,CompoundContextProvider

CLSS public org.netbeans.modules.debugger.jpda.ExpressionPool
innr public final static Expression
innr public final static ExpressionLocation
innr public final static Interval
innr public final static OperationLocation
meth public org.netbeans.modules.debugger.jpda.ExpressionPool$Expression getExpressionAt(com.sun.jdi.Location,java.lang.String)
meth public void cleanUnusedExpressions(com.sun.jdi.ThreadReference)
supr java.lang.Object
hfds expressions,logger

CLSS public final static org.netbeans.modules.debugger.jpda.ExpressionPool$Expression
 outer org.netbeans.modules.debugger.jpda.ExpressionPool
meth public com.sun.jdi.Location[] getLocations()
meth public int findNextOperationIndex(int)
meth public org.netbeans.modules.debugger.jpda.ExpressionPool$Interval getInterval()
meth public org.netbeans.spi.debugger.jpda.EditorContext$Operation[] getOperations()
supr java.lang.Object
hfds codeIndexIntervals,lines,location,locations,operations

CLSS public final static org.netbeans.modules.debugger.jpda.ExpressionPool$ExpressionLocation
 outer org.netbeans.modules.debugger.jpda.ExpressionPool
cons public init(com.sun.jdi.Method,int)
meth public boolean equals(java.lang.Object)
meth public com.sun.jdi.Method getMethod()
meth public int getLine()
meth public int hashCode()
supr java.lang.Object
hfds line,method

CLSS public final static org.netbeans.modules.debugger.jpda.ExpressionPool$Interval
 outer org.netbeans.modules.debugger.jpda.ExpressionPool
meth public boolean contains(int)
meth public int begin()
meth public int end()
supr java.lang.Object
hfds i1,i2

CLSS public final static org.netbeans.modules.debugger.jpda.ExpressionPool$OperationLocation
 outer org.netbeans.modules.debugger.jpda.ExpressionPool
meth public com.sun.jdi.Location getLocation()
meth public int getIndex()
meth public org.netbeans.spi.debugger.jpda.EditorContext$Operation getOperation()
supr java.lang.Object
hfds index,loc,op

CLSS public final org.netbeans.modules.debugger.jpda.JDIExceptionReporter
fld public final static java.lang.Object RET_VOID
meth public static boolean isLoggable()
meth public static void logCallEnd(java.lang.String,java.lang.String,java.lang.Object)
meth public static void logCallStart(java.lang.String,java.lang.String,java.lang.String,java.lang.Object[])
meth public static void report(com.sun.jdi.InternalException)
supr java.lang.Object
hfds LOGGER,LOGLEVEL,callStartTime

CLSS public org.netbeans.modules.debugger.jpda.JPDADebuggerImpl
cons public init(org.netbeans.spi.debugger.ContextProvider)
fld public final java.util.concurrent.locks.ReentrantReadWriteLock accessLock
fld public java.beans.PropertyChangeSupport varChangeSupport
meth public boolean canBeModified()
meth public boolean canFixClasses()
meth public boolean canGetInstanceInfo()
meth public boolean canPopFrames()
meth public boolean currentThreadToBeResumed()
meth public boolean getBreakpointsActive()
meth public boolean hasAllInterfaces(com.sun.jdi.ClassType)
meth public boolean isInterestedInThreadGroups()
meth public boolean isVMSuspended()
meth public com.sun.jdi.StackFrame getAltCSF()
meth public com.sun.jdi.Value evaluateIn(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value evaluateIn(org.netbeans.modules.debugger.jpda.expr.EvaluatorExpression) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value evaluateIn(org.netbeans.modules.debugger.jpda.expr.EvaluatorExpression,org.netbeans.api.debugger.jpda.CallStackFrame) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value evaluateIn(org.netbeans.modules.debugger.jpda.expr.EvaluatorExpression,org.netbeans.api.debugger.jpda.CallStackFrame,org.netbeans.api.debugger.jpda.ObjectVariable) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value invokeMethod(com.sun.jdi.ObjectReference,com.sun.jdi.Method,com.sun.jdi.Value[]) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value invokeMethod(com.sun.jdi.ObjectReference,com.sun.jdi.Method,com.sun.jdi.Value[],int) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value invokeMethod(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl,com.sun.jdi.ClassType,com.sun.jdi.Method,com.sun.jdi.Value[]) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value invokeMethod(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl,com.sun.jdi.ObjectReference,com.sun.jdi.Method,com.sun.jdi.Value[]) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value invokeMethod(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl,com.sun.jdi.ObjectReference,com.sun.jdi.Method,com.sun.jdi.Value[],org.netbeans.modules.debugger.jpda.expr.InvocationExceptionTranslated) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.VirtualMachine getVirtualMachine()
meth public int getState()
meth public int getSuspend()
meth public java.lang.Boolean getStepInterruptByBptResumeDecision()
meth public java.lang.String getLabel(org.netbeans.api.debugger.jpda.ObjectVariable)
meth public java.util.List<java.beans.PropertyChangeEvent> notifySuspendAll(boolean,boolean)
meth public java.util.List<java.beans.PropertyChangeEvent> notifySuspendAll(boolean,boolean,java.util.Set<com.sun.jdi.ThreadReference>)
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getAllClasses()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getAllInterfaces(com.sun.jdi.ClassType)
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getClassesByName(java.lang.String)
meth public java.util.Map<java.lang.String,org.netbeans.api.debugger.jpda.ObjectVariable> getAllLabels()
meth public long[] getInstanceCounts(java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType>)
meth public org.netbeans.api.debugger.Session getSession()
meth public org.netbeans.api.debugger.jpda.CallStackFrame getCurrentCallStackFrame()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getClassType(com.sun.jdi.ReferenceType)
meth public org.netbeans.api.debugger.jpda.JPDAStep createJPDAStep(int,int)
meth public org.netbeans.api.debugger.jpda.JPDAThread getCurrentThread()
meth public org.netbeans.api.debugger.jpda.JPDAThreadGroup getThreadGroup(com.sun.jdi.ThreadGroupReference)
meth public org.netbeans.api.debugger.jpda.JPDAThreadGroup[] getTopLevelThreadGroups()
meth public org.netbeans.api.debugger.jpda.ObjectVariable getLabeledVariable(java.lang.String)
meth public org.netbeans.api.debugger.jpda.SmartSteppingFilter getSmartSteppingFilter()
meth public org.netbeans.api.debugger.jpda.Variable createMirrorVar(java.lang.Object,boolean) throws java.io.InvalidObjectException
meth public org.netbeans.api.debugger.jpda.Variable evaluate(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.api.debugger.jpda.Variable evaluate(java.lang.String,org.netbeans.api.debugger.jpda.CallStackFrame) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.api.debugger.jpda.Variable evaluate(java.lang.String,org.netbeans.api.debugger.jpda.CallStackFrame,org.netbeans.api.debugger.jpda.ObjectVariable) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.api.debugger.jpda.Variable evaluate(java.lang.String,org.netbeans.api.debugger.jpda.ObjectVariable) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.api.debugger.jpda.Variable getFormattedValue(org.netbeans.api.debugger.jpda.ObjectVariable)
meth public org.netbeans.api.debugger.jpda.Variable getLocalVariable(org.netbeans.api.debugger.jpda.JPDAThread,com.sun.jdi.LocalVariable,com.sun.jdi.Value)
meth public org.netbeans.api.debugger.jpda.Variable getVariable(com.sun.jdi.Value)
meth public org.netbeans.modules.debugger.jpda.DebuggerConsoleIO getConsoleIO()
meth public org.netbeans.modules.debugger.jpda.ExpressionPool getExpressionPool()
meth public org.netbeans.modules.debugger.jpda.SourcePath getEngineContext()
meth public org.netbeans.modules.debugger.jpda.ThreadsCollectorImpl getThreadsCollector()
meth public org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl getExistingThread(com.sun.jdi.ThreadReference)
meth public org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl getThread(com.sun.jdi.ThreadReference)
meth public org.netbeans.modules.debugger.jpda.models.ThreadsCache getThreadsCache()
meth public org.netbeans.modules.debugger.jpda.util.Operator getOperator()
meth public org.openide.util.RequestProcessor getRequestProcessor()
meth public static java.lang.String getGenericSignature(com.sun.jdi.LocalVariable)
meth public static java.lang.String getGenericSignature(com.sun.jdi.TypeComponent)
meth public void actionErrorMessageCallback(java.lang.Object,java.lang.String)
meth public void actionMessageCallback(java.lang.Object,java.lang.String)
meth public void actionStatusDisplayCallback(java.lang.Object,java.lang.String)
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void finish()
meth public void fireBreakpointEvent(org.netbeans.api.debugger.jpda.JPDABreakpoint,org.netbeans.api.debugger.jpda.event.JPDABreakpointEvent)
meth public void fixBreakpoints()
meth public void fixClasses(java.util.Map<java.lang.String,byte[]>)
meth public void interestedInThreadGroup(org.netbeans.api.debugger.jpda.JPDAThreadGroup)
meth public void markObject(org.netbeans.api.debugger.jpda.ObjectVariable,java.lang.String)
meth public void notifySuspendAllNoFire()
meth public void notifySuspendAllNoFire(java.util.Set<com.sun.jdi.ThreadReference>,com.sun.jdi.ThreadReference)
meth public void notifyToBeResumedAll()
meth public void notifyToBeResumedAllNoFire()
meth public void notifyToBeResumedAllNoFire(java.util.Set<com.sun.jdi.ThreadReference>)
meth public void popFrames(com.sun.jdi.ThreadReference,com.sun.jdi.StackFrame)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void resume()
meth public void resumeCurrentThread()
meth public void setAltCSF(com.sun.jdi.StackFrame)
meth public void setAttaching(org.netbeans.api.debugger.jpda.AbstractDICookie)
meth public void setBreakpointsActive(boolean)
meth public void setCurrentCallStackFrame(org.netbeans.api.debugger.jpda.CallStackFrame)
meth public void setCurrentSuspendedNoFireThread(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl)
meth public void setCurrentThread(org.netbeans.api.debugger.jpda.JPDAThread)
meth public void setException(java.lang.Throwable)
meth public void setPreferredTopFrame(org.netbeans.api.debugger.jpda.CallStackFrame)
meth public void setRunning(com.sun.jdi.VirtualMachine,org.netbeans.modules.debugger.jpda.util.Operator)
meth public void setRunningState()
meth public void setStarting()
meth public void setStepInterruptByBptResumeDecision(java.lang.Boolean)
meth public void setStoppedState(com.sun.jdi.ThreadReference,boolean)
meth public void setStoppedState(com.sun.jdi.ThreadReference,boolean,boolean)
meth public void setStoppedStateNoContinue(com.sun.jdi.ThreadReference)
meth public void setSuspend(int)
meth public void suspend()
meth public void waitRunning() throws org.netbeans.api.debugger.jpda.DebuggerStartException
supr org.netbeans.api.debugger.jpda.JPDADebugger
hfds COMPUTING_INTERFACES,LOCK2,RP_THROUGHPUT,SINGLE_THREAD_STEPPING,allInterfacesMap,altCSF,attachingCookie,breakpointsActive,canBeModified,canBeModifiedLock,compoundSmartSteppingListener,currentCallStackFrame,currentSuspendedNoFireThread,currentThread,currentThreadAndFrameLock,deadlockDetector,doContinue,engineContext,expressionPool,finishing,interestedThreadGroups,io,javaEngineProvider,jsr45EngineProviders,languages,localsTranslation,logger,lookupProvider,markedObjectLabels,markedObjects,methodCallsUnsupportedExc,operator,pcs,preferredTopFrame,ptd,rpCreateThreads,singleThreadStepResumeDecision,smartSteppingFilter,starting,state,stateLock,stepInterruptByBptResumeDecision,stringLengthMethod,stringMethodsLock,stringSubstringMethod,suspend,threadsCache,threadsCollector,threadsCollectorLock,threadsTranslation,throwable,virtualMachine,virtualMachineLock,vmSuspended
hcls DebuggerReentrantReadWriteLock,PeriodicThreadsDump

CLSS public org.netbeans.modules.debugger.jpda.JPDAStepImpl
cons public init(org.netbeans.api.debugger.jpda.JPDADebugger,org.netbeans.api.debugger.Session,int,int)
innr public abstract interface static StopHereCheck
innr public final static MethodExitBreakpointListener
intf org.netbeans.modules.debugger.jpda.util.Executor
meth public boolean exec(com.sun.jdi.event.Event)
meth public static int isSyntheticMethod(com.sun.jdi.Method,com.sun.jdi.Location) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public void addStep(org.netbeans.api.debugger.jpda.JPDAThread)
meth public void cancel()
meth public void removed(com.sun.jdi.request.EventRequest)
meth public void setIgnoreStepFilters(boolean)
meth public void setStopHereCheck(org.netbeans.modules.debugger.jpda.JPDAStepImpl$StopHereCheck)
supr org.netbeans.api.debugger.jpda.JPDAStep
hfds INIT,boundaryStepRequest,currentExpInterval,currentOperations,ignoreStepFilters,isInBoxingUnboxingLocation,lastMethodExitBreakpointListener,lastOperation,logger,operationBreakpoints,p,requestsToCancel,session,smartSteppingFilter,stepPatternDepth,steppingFromCompoundFilteredLocation,steppingFromFilteredLocation,stopHereCheck,wasInBoxingUnboxingLocation
hcls StepPatternDepth

CLSS public final static org.netbeans.modules.debugger.jpda.JPDAStepImpl$MethodExitBreakpointListener
 outer org.netbeans.modules.debugger.jpda.JPDAStepImpl
cons public init(org.netbeans.api.debugger.jpda.MethodBreakpoint)
intf org.netbeans.api.debugger.jpda.event.JPDABreakpointListener
meth public org.netbeans.api.debugger.jpda.Variable getReturnValue()
meth public void breakpointReached(org.netbeans.api.debugger.jpda.event.JPDABreakpointEvent)
meth public void destroy()
supr java.lang.Object
hfds mb,returnValue

CLSS public abstract interface static org.netbeans.modules.debugger.jpda.JPDAStepImpl$StopHereCheck
 outer org.netbeans.modules.debugger.jpda.JPDAStepImpl
meth public abstract boolean stopHere(boolean)

CLSS public org.netbeans.modules.debugger.jpda.JSR45DebuggerEngineProvider
meth public java.lang.Object[] getServices()
meth public java.lang.String getEngineTypeID()
meth public java.lang.String[] getLanguages()
meth public org.netbeans.api.debugger.DebuggerEngine$Destructor getDesctuctor()
meth public void setDestructor(org.netbeans.api.debugger.DebuggerEngine$Destructor)
supr org.netbeans.spi.debugger.DebuggerEngineProvider
hfds desctuctor,language,rp

CLSS public org.netbeans.modules.debugger.jpda.JavaEngineProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth public java.lang.Object[] getServices()
meth public java.lang.String getEngineTypeID()
meth public java.lang.String[] getLanguages()
meth public org.netbeans.api.debugger.DebuggerEngine$Destructor getDestructor()
meth public org.netbeans.api.debugger.Session getSession()
meth public void setDestructor(org.netbeans.api.debugger.DebuggerEngine$Destructor)
supr org.netbeans.spi.debugger.DebuggerEngineProvider
hfds desctuctor,jpdaRP,session

CLSS public org.netbeans.modules.debugger.jpda.JavaEvaluator
cons public init(org.netbeans.spi.debugger.ContextProvider)
intf org.netbeans.spi.debugger.jpda.Evaluator<org.netbeans.modules.debugger.jpda.expr.JavaExpression>
meth public org.netbeans.modules.debugger.jpda.expr.EvaluationContext$VariableInfo getValueContainer(com.sun.jdi.Value)
meth public org.netbeans.spi.debugger.jpda.Evaluator$Result evaluate(org.netbeans.spi.debugger.jpda.Evaluator$Expression<org.netbeans.modules.debugger.jpda.expr.JavaExpression>,org.netbeans.spi.debugger.jpda.Evaluator$Context) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.spi.debugger.jpda.Evaluator$Result evaluate(org.netbeans.spi.debugger.jpda.Evaluator$Expression<org.netbeans.modules.debugger.jpda.expr.JavaExpression>,org.netbeans.spi.debugger.jpda.Evaluator$Context,org.netbeans.modules.debugger.jpda.expr.CompilationInfoHolder) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
supr java.lang.Object
hfds debugger,valueContainers,vmCache
hcls ImportsLazyList

CLSS public org.netbeans.modules.debugger.jpda.LaunchingSessionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth public java.lang.Object[] getServices()
meth public java.lang.String getLocationName()
meth public java.lang.String getSessionName()
meth public java.lang.String getTypeID()
supr org.netbeans.spi.debugger.SessionProvider
hfds contextProvider,launchingCookie

CLSS public org.netbeans.modules.debugger.jpda.ListeningSessionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth public java.lang.Object[] getServices()
meth public java.lang.String getLocationName()
meth public java.lang.String getSessionName()
meth public java.lang.String getTypeID()
supr org.netbeans.spi.debugger.SessionProvider
hfds contextProvider,smadic

CLSS public org.netbeans.modules.debugger.jpda.SingleThreadWatcher
cons public init(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl)
intf java.lang.Runnable
meth public void destroy()
meth public void run()
supr java.lang.Object
hfds DELAY,t,watchTask

CLSS public org.netbeans.modules.debugger.jpda.SourcePath
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth public java.lang.String getRelativePath(java.lang.String,char,boolean)
meth public java.lang.String getSourceRoot(java.lang.String)
meth public java.lang.String getURL(com.sun.jdi.Location,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public java.lang.String getURL(com.sun.jdi.StackFrame,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public java.lang.String getURL(java.lang.String,boolean)
meth public java.lang.String getURL(org.netbeans.api.debugger.jpda.CallStackFrame,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public java.lang.String getURL(org.netbeans.api.debugger.jpda.JPDAClassType,java.lang.String)
meth public java.lang.String getURL(org.netbeans.api.debugger.jpda.JPDAThread,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public java.lang.String[] getOriginalSourceRoots()
meth public java.lang.String[] getProjectSourceRoots()
meth public java.lang.String[] getSourceRoots()
meth public org.netbeans.spi.debugger.jpda.SourcePathProvider getContext()
meth public static java.lang.String convertClassNameToRelativePath(java.lang.String)
meth public static java.lang.String convertSlash(java.lang.String)
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void setSourceRoots(java.lang.String[])
supr java.lang.Object
hfds contextProvider,debugger,lookupProvider
hcls CompoundContextProvider

CLSS public org.netbeans.modules.debugger.jpda.ThreadsCollectorImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
meth public boolean isSomeThreadRunning()
meth public boolean isSomeThreadSuspended()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAThread> getAllThreads()
meth public org.netbeans.api.debugger.jpda.DeadlockDetector getDeadlockDetector()
supr org.netbeans.api.debugger.jpda.ThreadsCollector
hfds changesInThreadsListener,debugger,threadStateListeners,threads
hcls ChangesInThreadsListener,ThreadStateListener

CLSS public abstract interface org.netbeans.modules.debugger.jpda.actions.ActionErrorMessageCallback
meth public abstract void errorMessageCallback(java.lang.Object,java.lang.String)

CLSS public abstract interface org.netbeans.modules.debugger.jpda.actions.ActionMessageCallback
meth public abstract void messageCallback(java.lang.Object,java.lang.String)

CLSS public abstract interface org.netbeans.modules.debugger.jpda.actions.ActionStatusDisplayCallback
meth public abstract void statusDisplayCallback(java.lang.Object,java.lang.String)

CLSS public org.netbeans.modules.debugger.jpda.actions.ActionsSynchronizer
meth public static org.netbeans.modules.debugger.jpda.actions.ActionsSynchronizer get(org.netbeans.api.debugger.jpda.JPDADebugger)
meth public void actionEnds(java.lang.Object)
meth public void actionScheduled(java.lang.Object)
meth public void actionStarts(java.lang.Object)
supr java.lang.Object
hfds ACTIONS_WAITING_FOR_OTHERS,INSTANCES,logger,runningActions,scheduledActions

CLSS public final org.netbeans.modules.debugger.jpda.actions.CompoundSmartSteppingListener
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth public boolean stopHere(org.netbeans.spi.debugger.ContextProvider,org.netbeans.api.debugger.jpda.JPDAThread,org.netbeans.api.debugger.jpda.SmartSteppingFilter)
meth public org.netbeans.spi.debugger.jpda.SmartSteppingCallback$StopOrStep stopAt(org.netbeans.spi.debugger.ContextProvider,org.netbeans.api.debugger.jpda.CallStackFrame,org.netbeans.api.debugger.jpda.SmartSteppingFilter)
meth public void initFilter(org.netbeans.api.debugger.jpda.SmartSteppingFilter)
supr org.netbeans.spi.debugger.jpda.SmartSteppingCallback
hfds logger,lookupProvider,smartSteppings

CLSS public org.netbeans.modules.debugger.jpda.actions.ContinueActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth protected void checkEnabled(int)
meth public java.util.Set getActions()
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider
hfds threadsCollector

CLSS public abstract org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider
cons protected init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
fld protected org.netbeans.modules.debugger.jpda.JPDADebuggerImpl debugger
intf java.beans.PropertyChangeListener
meth protected abstract void checkEnabled(int)
meth protected final void doLazyAction(java.lang.Object,java.lang.Runnable)
meth protected org.netbeans.modules.debugger.jpda.JPDADebuggerImpl getDebuggerImpl()
meth protected void removeStepRequests(com.sun.jdi.ThreadReference)
meth public boolean isEnabled(java.lang.Object)
meth public void propertyChange(java.beans.PropertyChangeEvent)
supr org.netbeans.spi.debugger.ActionsProviderSupport
hfds disabled,providersToDisableOnLazyActions

CLSS public abstract interface org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserFactory
meth public abstract boolean cancelUI()
meth public abstract boolean initChooserUI(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,java.lang.String,com.sun.jdi.ReferenceType,int)

CLSS public final org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils
innr public abstract interface static ReleaseUIListener
innr public final static !enum MethodEntry
innr public final static Params
meth public static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$Params init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.api.debugger.jpda.JPDAThread,java.lang.String,org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$Params,org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$ReleaseUIListener)
meth public static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$Params init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.api.debugger.jpda.JPDAThread,java.lang.String,org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$ReleaseUIListener)
meth public static void doStepInto(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.spi.debugger.jpda.EditorContext$Operation,com.sun.jdi.Location,org.netbeans.modules.debugger.jpda.ExpressionPool$Interval)
supr java.lang.Object
hcls OperatorsComparator,StepOpActionListener

CLSS public final static !enum org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$MethodEntry
 outer org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils
fld public final static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$MethodEntry DIRECT
fld public final static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$MethodEntry SELECTED
meth public static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$MethodEntry valueOf(java.lang.String)
meth public static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$MethodEntry[] values()
supr java.lang.Enum<org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$MethodEntry>

CLSS public final static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$Params
 outer org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils
meth public boolean isContinuedDirectly()
meth public boolean[] getIsCertainlyReachable()
meth public com.sun.jdi.Location[] getLocations()
meth public int getEndLine()
meth public int getSelectedIndex()
meth public int getStartLine()
meth public java.beans.PropertyChangeListener getChoosertPropertyChangeListener()
meth public org.netbeans.modules.debugger.jpda.ExpressionPool$Interval getExpressionLines()
meth public org.netbeans.spi.debugger.jpda.EditorContext$Operation[] getOperations()
supr java.lang.Object
hfds chooserPropertyChangeListener,continuedDirectly,endLine,expressionLines,isCertainlyReachable,locations,operations,selectedIndex,startLine

CLSS public abstract interface static org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils$ReleaseUIListener
 outer org.netbeans.modules.debugger.jpda.actions.JPDAMethodChooserUtils
meth public abstract void releaseUI()

CLSS public org.netbeans.modules.debugger.jpda.actions.KillActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth protected void checkEnabled(int)
meth public java.util.Set getActions()
meth public void doAction(java.lang.Object)
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider

CLSS public org.netbeans.modules.debugger.jpda.actions.PauseActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth protected void checkEnabled(int)
meth public java.util.Set getActions()
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider
hfds threadsCollector

CLSS public org.netbeans.modules.debugger.jpda.actions.PopToHereActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth protected void checkEnabled(int)
meth public java.util.Set getActions()
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
meth public void runAction()
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider

CLSS public final org.netbeans.modules.debugger.jpda.actions.RunIntoMethodActionSupport
meth public static void runIntoMethod(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,java.lang.String,java.lang.String,java.lang.String,int,int)
supr java.lang.Object
hfds logger

CLSS public org.netbeans.modules.debugger.jpda.actions.SmartSteppingFilterImpl
cons public init()
intf org.netbeans.api.debugger.jpda.SmartSteppingFilter
meth public boolean stopHere(java.lang.String)
meth public java.lang.String[] getExclusionPatterns()
meth public void addExclusionPatterns(java.util.Set<java.lang.String>)
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removeExclusionPatterns(java.util.Set<java.lang.String>)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
supr java.lang.Object
hfds classFiltersProperties,exclusionPatternsListener,filter,options,pcs

CLSS public final org.netbeans.modules.debugger.jpda.actions.SmartSteppingFilterWrapper
cons public init(org.netbeans.api.debugger.jpda.SmartSteppingFilter)
intf org.netbeans.api.debugger.jpda.SmartSteppingFilter
meth public java.lang.String[] getExclusionPatterns()
meth public void addExclusionPatterns(java.util.Set<java.lang.String>)
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removeExclusionPatterns(java.util.Set<java.lang.String>)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
supr java.lang.Object
hfds addedPatterns,delegate,removedPatterns

CLSS public org.netbeans.modules.debugger.jpda.actions.StartActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
intf org.openide.util.Cancellable
meth public boolean cancel()
meth public boolean isEnabled(java.lang.Object)
meth public java.util.Set getActions()
meth public void addActionsProviderListener(org.netbeans.spi.debugger.ActionsProviderListener)
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
meth public void removeActionsProviderListener(org.netbeans.spi.debugger.ActionsProviderListener)
supr org.netbeans.spi.debugger.ActionsProvider
hfds debuggerImpl,jdiTrace,logger,lookupProvider,startingThread,startingThreadLock

CLSS public org.netbeans.modules.debugger.jpda.actions.StepActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
intf org.netbeans.modules.debugger.jpda.util.Executor
meth protected void checkEnabled(int)
meth public boolean exec(com.sun.jdi.event.Event)
meth public java.util.Set getActions()
meth public static boolean stopInClass(java.lang.String,org.netbeans.api.debugger.jpda.SmartSteppingFilter)
meth public static int setLastOperation(com.sun.jdi.ThreadReference,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.api.debugger.jpda.Variable) throws org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
meth public void removed(com.sun.jdi.request.EventRequest)
meth public void runAction(java.lang.Object)
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider
hfds OPERATION_TIMEOUT,className,compoundSmartSteppingListener,depth,lastMethodExitBreakpointListener,logger,loggerStep,lookupProvider,methodName,operationsRP,p,smartSteppingFilter,smartSteppingStepOut,stepIntoActionProvider,steppingFromCompoundFilteredLocation,steppingFromFilteredLocation,syntheticStep

CLSS public org.netbeans.modules.debugger.jpda.actions.StepIntoActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
fld public final static java.lang.String ACTION_SMART_STEP_INTO = "smartStepInto"
fld public final static java.lang.String SS_STEP_OUT = "SS_ACTION_STEPOUT"
meth protected void checkEnabled(int)
meth public boolean doMethodSelection()
meth public java.util.Set getActions()
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider
hfds instanceByContext,mcf,stepInto

CLSS public org.netbeans.modules.debugger.jpda.actions.StepIntoNextMethod
cons public init(org.netbeans.spi.debugger.ContextProvider)
intf java.beans.PropertyChangeListener
intf org.netbeans.modules.debugger.jpda.util.Executor
meth public boolean exec(com.sun.jdi.event.Event)
meth public void propertyChange(java.beans.PropertyChangeEvent)
meth public void removed(com.sun.jdi.request.EventRequest)
meth public void runAction()
meth public void runAction(boolean)
supr java.lang.Object
hfds compoundSmartSteppingListener,contextProvider,debugger,depth,didStepThrough,logger,p,position,smartLogger,smartSteppingFilter,smartSteppingStepOut,stepActionProvider,stepIntoRequest,steppingFromCompoundFilteredLocation,steppingFromFilteredLocation

CLSS public org.netbeans.modules.debugger.jpda.actions.StepIntoNextMethodActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth protected void checkEnabled(int)
meth public java.util.Set getActions()
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider
hfds stepInto

CLSS public org.netbeans.modules.debugger.jpda.actions.StepOperationActionProvider
cons public init(org.netbeans.spi.debugger.ContextProvider)
meth protected void checkEnabled(int)
meth public java.util.Set getActions()
meth public void actionPerformed(java.lang.Object)
meth public void doAction(java.lang.Object)
meth public void postAction(java.lang.Object,java.lang.Runnable)
supr org.netbeans.modules.debugger.jpda.actions.JPDADebuggerActionProvider

CLSS public abstract interface org.netbeans.modules.debugger.jpda.actions.SuspendController
meth public abstract boolean suspend(com.sun.jdi.ThreadReference)
meth public abstract boolean suspend(com.sun.jdi.VirtualMachine)

CLSS public abstract org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl
cons protected init(org.netbeans.api.debugger.jpda.JPDABreakpoint,org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsReader,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.api.debugger.Session)
innr public abstract interface static HitCountListener
intf java.beans.PropertyChangeListener
intf org.netbeans.modules.debugger.jpda.util.ConditionedExecutor
meth protected abstract com.sun.jdi.request.EventRequest createEventRequest(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected abstract void setRequests()
meth protected boolean isApplicable()
meth protected boolean isEnabled()
meth protected boolean perform(com.sun.jdi.event.Event,com.sun.jdi.ThreadReference,com.sun.jdi.ReferenceType,com.sun.jdi.Value)
meth protected com.sun.jdi.VirtualMachine getVirtualMachine()
meth protected com.sun.jdi.request.EventRequestManager getEventRequestManager() throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected final boolean canSetRequests()
meth protected final java.util.List<com.sun.jdi.request.EventRequest> getEventRequests()
meth protected final void setCustomHitCountFilter(int)
meth protected final void setValidity(org.netbeans.api.debugger.Breakpoint$VALIDITY,java.lang.String)
meth protected org.netbeans.api.debugger.jpda.JPDABreakpoint getBreakpoint()
meth protected org.netbeans.modules.debugger.jpda.JPDADebuggerImpl getDebugger()
meth protected void remove()
meth protected void removeAllEventRequests()
meth public int getCurrentBreakCounts()
meth public int getCurrentHitCount()
meth public int getHitCountsTillBreak()
meth public void addHitCountListener(org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl$HitCountListener)
meth public void propertyChange(java.beans.PropertyChangeEvent)
meth public void removeHitCountListener(org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl$HitCountListener)
meth public void resetHitCounts()
supr java.lang.Object
hfds breakCount,breakpoint,compiledCondition,conditionException,customHitCount,customHitCountFilter,debugger,hcListeners,hitCountFilter,logger,processedReturnVariable,reader,requests
hcls EngineChangeEvent,ValidityChangeEvent

CLSS public abstract interface static org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl$HitCountListener
 outer org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl
meth public abstract void hitCountChanged(org.netbeans.api.debugger.jpda.JPDABreakpoint)

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsEngineListener
cons public init(org.netbeans.spi.debugger.ContextProvider)
intf java.beans.PropertyChangeListener
intf org.netbeans.api.debugger.DebuggerManagerListener
meth protected void destroy()
meth public java.lang.String[] getProperties()
meth public org.netbeans.api.debugger.Breakpoint[] initBreakpoints()
meth public org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl getBreakpointImpl(org.netbeans.api.debugger.Breakpoint)
meth public void actionPerformed(java.lang.Object)
meth public void breakpointAdded(org.netbeans.api.debugger.Breakpoint)
meth public void breakpointRemoved(org.netbeans.api.debugger.Breakpoint)
meth public void engineAdded(org.netbeans.api.debugger.DebuggerEngine)
meth public void engineRemoved(org.netbeans.api.debugger.DebuggerEngine)
meth public void fixBreakpointImpls()
meth public void initWatches()
meth public void propertyChange(java.beans.PropertyChangeEvent)
meth public void sessionAdded(org.netbeans.api.debugger.Session)
meth public void sessionRemoved(org.netbeans.api.debugger.Session)
meth public void watchAdded(org.netbeans.api.debugger.Watch)
meth public void watchRemoved(org.netbeans.api.debugger.Watch)
supr org.netbeans.api.debugger.LazyActionsManagerListener
hfds breakpointToImpl,breakpointsReader,debugger,engineContext,logger,preliminaryBreakpointImpl,session,sourceRootsCache,started
hcls PreliminaryBreakpointImpl

CLSS public final org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsFromGroup
cons public init(java.lang.String)
cons public init(org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsFromGroup$TestGroupProperties)
innr public final static TestGroupProperties
intf java.util.Set<org.netbeans.api.debugger.Breakpoint>
meth public <%0 extends java.lang.Object> {%%0}[] toArray({%%0}[])
meth public boolean add(org.netbeans.api.debugger.Breakpoint)
meth public boolean addAll(java.util.Collection<? extends org.netbeans.api.debugger.Breakpoint>)
meth public boolean contains(java.lang.Object)
meth public boolean containsAll(java.util.Collection<?>)
meth public boolean isEmpty()
meth public boolean remove(java.lang.Object)
meth public boolean removeAll(java.util.Collection<?>)
meth public boolean retainAll(java.util.Collection<?>)
meth public int size()
meth public java.lang.Object[] toArray()
meth public java.lang.String getGroupName()
meth public java.util.Iterator<org.netbeans.api.debugger.Breakpoint> iterator()
meth public org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsFromGroup$TestGroupProperties getTestGroupProperties()
meth public void clear()
supr java.lang.Object
hfds groupName,testProperties

CLSS public final static org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsFromGroup$TestGroupProperties
 outer org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsFromGroup
cons public init(java.lang.String)
cons public init(org.netbeans.api.project.Project)
cons public init(org.openide.filesystems.FileObject)
meth public java.lang.String getType()
meth public org.netbeans.api.project.Project getProject()
meth public org.openide.filesystems.FileObject getFileObject()
supr java.lang.Object
hfds fo,p,type

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.BreakpointsReader
cons public init()
intf java.beans.PropertyChangeListener
intf org.netbeans.api.debugger.Properties$Reader
meth public java.lang.Object read(java.lang.String,org.netbeans.api.debugger.Properties)
meth public java.lang.String[] getSupportedClassNames()
meth public void propertyChange(java.beans.PropertyChangeEvent)
meth public void write(java.lang.Object,org.netbeans.api.debugger.Properties)
supr java.lang.Object
hfds BP_CUSTOM_GROUP,BP_FILE_GROUP,BP_PROJECT_GROUP,BP_TYPE_GROUP,BREAKPOINTS_TO_DISABLE,BREAKPOINTS_TO_ENABLE,cachedClassNames,cachedSourceRoots

CLSS public abstract org.netbeans.modules.debugger.jpda.breakpoints.ClassBasedBreakpoint
meth protected boolean checkLoadedClasses(java.lang.String,java.lang.String[])
meth protected boolean isEnabled()
meth protected boolean isEnabled(java.lang.String,java.lang.String[])
meth protected final boolean compareSourceRoots(java.lang.String,java.lang.String)
meth protected final boolean isRootInSources(java.lang.String)
meth protected final boolean setClassRequests(java.lang.String[],java.lang.String[],int)
meth protected final boolean setClassRequests(java.lang.String[],java.lang.String[],int,boolean)
meth protected final java.lang.String getSourceRoot()
meth protected final java.lang.String[] checkSourcesEnabled(java.lang.String[],java.lang.String[])
meth protected final org.netbeans.spi.debugger.jpda.BreakpointsClassFilter getClassFilter()
meth protected final void setSourceRoot(java.lang.String)
meth protected static boolean classExistsInSources(java.lang.String,java.lang.String[])
meth protected void classLoaded(java.util.List<com.sun.jdi.ReferenceType>)
meth protected void classUnloaded(java.lang.String)
meth protected void remove()
meth public boolean exec(com.sun.jdi.event.Event)
meth public void removed(com.sun.jdi.request.EventRequest)
supr org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl
hfds SOURCE_ROOT_LOCK,classFilter,logger,sourceRoot,sourceRootsCache,srChListener,weakSrChListener
hcls CompoundClassFilter,SourceRootsChangedListener

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.ClassBreakpointImpl
meth protected com.sun.jdi.request.EventRequest createEventRequest(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected void setRequests()
meth public boolean exec(com.sun.jdi.event.Event)
meth public boolean processCondition(com.sun.jdi.event.Event)
supr org.netbeans.modules.debugger.jpda.breakpoints.ClassBasedBreakpoint
hfds breakpoint

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.ExceptionBreakpointImpl
meth protected com.sun.jdi.request.ExceptionRequest createEventRequest(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected void classLoaded(java.util.List<com.sun.jdi.ReferenceType>)
meth protected void setRequests()
meth public boolean exec(com.sun.jdi.event.Event)
meth public boolean processCondition(com.sun.jdi.event.Event)
supr org.netbeans.modules.debugger.jpda.breakpoints.ClassBasedBreakpoint
hfds breakpoint

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.FieldBreakpointImpl
meth protected boolean isEnabled()
meth protected com.sun.jdi.request.EventRequest createEventRequest(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected void classLoaded(java.util.List<com.sun.jdi.ReferenceType>)
meth protected void setRequests()
meth public boolean exec(com.sun.jdi.event.Event)
meth public boolean processCondition(com.sun.jdi.event.Event)
supr org.netbeans.modules.debugger.jpda.breakpoints.ClassBasedBreakpoint
hfds breakpoint

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.JPDABreakpointsActivation
cons public init(org.netbeans.spi.debugger.ContextProvider)
intf org.netbeans.spi.debugger.BreakpointsActivationProvider
meth public boolean areBreakpointsActive()
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void setBreakpointsActive(boolean)
supr java.lang.Object
hfds debugger,listenersMap
hcls DelegateListener

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.LineBreakpointImpl
meth protected boolean isApplicable()
meth protected com.sun.jdi.request.EventRequest createEventRequest(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected org.netbeans.api.debugger.jpda.LineBreakpoint getBreakpoint()
meth protected void classLoaded(java.util.List<com.sun.jdi.ReferenceType>)
meth protected void setRequests()
meth public boolean exec(com.sun.jdi.event.Event)
meth public boolean processCondition(com.sun.jdi.event.Event)
meth public void propertyChange(java.beans.PropertyChangeEvent)
supr org.netbeans.modules.debugger.jpda.breakpoints.ClassBasedBreakpoint
hfds breakpointLineNumber,lineLock,lineNumber,lineNumberForUpdate,logger,reader

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.MethodBreakpointImpl
meth protected boolean isEnabled()
meth protected com.sun.jdi.request.EventRequest createEventRequest(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected void classLoaded(java.util.List<com.sun.jdi.ReferenceType>)
meth protected void setRequests()
meth public boolean exec(com.sun.jdi.event.Event)
meth public boolean processCondition(com.sun.jdi.event.Event)
supr org.netbeans.modules.debugger.jpda.breakpoints.ClassBasedBreakpoint
hfds CONSTRUCTOR,LOG,breakpoint,returnValueByEvent

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.PersistenceManager
cons public init()
intf org.netbeans.api.debugger.LazyDebuggerManagerListener
meth public java.lang.String[] getProperties()
meth public org.netbeans.api.debugger.Breakpoint[] initBreakpoints()
meth public org.netbeans.api.debugger.Breakpoint[] unloadBreakpoints()
meth public void breakpointAdded(org.netbeans.api.debugger.Breakpoint)
meth public void breakpointRemoved(org.netbeans.api.debugger.Breakpoint)
meth public void engineAdded(org.netbeans.api.debugger.DebuggerEngine)
meth public void engineRemoved(org.netbeans.api.debugger.DebuggerEngine)
meth public void initWatches()
meth public void propertyChange(java.beans.PropertyChangeEvent)
meth public void sessionAdded(org.netbeans.api.debugger.Session)
meth public void sessionRemoved(org.netbeans.api.debugger.Session)
meth public void watchAdded(org.netbeans.api.debugger.Watch)
meth public void watchRemoved(org.netbeans.api.debugger.Watch)
supr java.lang.Object
hfds breakpoints,instanceRef,saveTask
hcls SaveTask

CLSS public org.netbeans.modules.debugger.jpda.breakpoints.ThreadBreakpointImpl
intf org.netbeans.modules.debugger.jpda.util.Executor
meth protected com.sun.jdi.request.EventRequest createEventRequest(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth protected void setRequests()
meth public boolean exec(com.sun.jdi.event.Event)
meth public boolean processCondition(com.sun.jdi.event.Event)
meth public void removed(com.sun.jdi.request.EventRequest)
supr org.netbeans.modules.debugger.jpda.breakpoints.BreakpointImpl
hfds breakpoint

CLSS public abstract interface org.netbeans.modules.debugger.jpda.expr.CompilationInfoHolder
meth public abstract java.lang.Object getParsedData()
meth public abstract void setParsedData(java.lang.Object)

CLSS public org.netbeans.modules.debugger.jpda.expr.EvaluationContext
cons public init(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl,com.sun.jdi.StackFrame,int,com.sun.jdi.ObjectReference,java.util.List<java.lang.String>,java.util.List<java.lang.String>,boolean,java.lang.Runnable,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.modules.debugger.jpda.expr.VMCache)
innr public abstract static VariableInfo
innr public static ScriptVariable
meth public boolean canInvokeMethods()
meth public com.sun.jdi.ObjectReference getContextObject()
meth public com.sun.jdi.StackFrame getFrame()
meth public com.sun.source.util.TreePath getTreePath()
meth public java.util.List<java.lang.String> getImports()
meth public java.util.List<java.lang.String> getStaticImports()
meth public org.netbeans.modules.debugger.jpda.expr.EvaluationContext$ScriptVariable createScriptLocalVariable(java.lang.String,com.sun.jdi.Type)
meth public org.netbeans.modules.debugger.jpda.expr.EvaluationContext$ScriptVariable getScriptVariableByName(java.lang.String)
meth public org.netbeans.modules.debugger.jpda.expr.EvaluationContext$VariableInfo getVariableInfo(com.sun.source.tree.Tree)
meth public void destroy()
meth public void disableCollectionOf(com.sun.jdi.ObjectReference)
meth public void enableCollectionOfObjects(com.sun.jdi.Value)
meth public void popBlock()
meth public void pushBlock()
meth public void putArrayAccess(com.sun.source.tree.Tree,com.sun.jdi.ArrayReference,int)
meth public void putField(com.sun.source.tree.Tree,com.sun.jdi.Field,com.sun.jdi.ObjectReference)
meth public void putLocalVariable(com.sun.source.tree.Tree,com.sun.jdi.LocalVariable)
meth public void putScriptVariable(com.sun.source.tree.Tree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext$ScriptVariable)
meth public void setTreePath(com.sun.source.util.TreePath)
meth public void setTrees(com.sun.source.util.Trees)
supr java.lang.Object
hfds canInvokeMethods,contextVariable,debugger,disabledCollectionObjects,frame,frameDepth,logger,methodInvokePreproc,scriptLocalVariables,sourceImports,stack,staticImports,thread,threadPropertyChangeListener,treePath,trees,variables,vmCache

CLSS public static org.netbeans.modules.debugger.jpda.expr.EvaluationContext$ScriptVariable
 outer org.netbeans.modules.debugger.jpda.expr.EvaluationContext
cons public init(java.lang.String,com.sun.jdi.Type)
meth public com.sun.jdi.Mirror getValue()
meth public com.sun.jdi.Type getType()
meth public void setValue(com.sun.jdi.Mirror)
supr java.lang.Object
hfds name,type,value,valueInited

CLSS public abstract static org.netbeans.modules.debugger.jpda.expr.EvaluationContext$VariableInfo
 outer org.netbeans.modules.debugger.jpda.expr.EvaluationContext
cons public init()
meth public abstract com.sun.jdi.Type getType() throws com.sun.jdi.ClassNotLoadedException
meth public abstract void setValue(com.sun.jdi.Value)
supr java.lang.Object
hcls ArrayElementInf,FieldInf,LocalVarInf,ScriptLocalVarInf

CLSS public org.netbeans.modules.debugger.jpda.expr.EvaluationException
cons public init(com.sun.source.tree.Tree,java.lang.String,java.lang.Object[])
meth public java.lang.String getMessage()
meth public java.lang.String getMessageImpl()
supr java.lang.RuntimeException
hfds message,node,params,reason

CLSS public final org.netbeans.modules.debugger.jpda.expr.EvaluatorExpression
cons public init(java.lang.String)
intf org.netbeans.modules.debugger.jpda.expr.CompilationInfoHolder
meth public java.lang.Object getParsedData()
meth public java.lang.String getExpression()
meth public org.netbeans.spi.debugger.jpda.Evaluator$Result evaluate(org.netbeans.spi.debugger.jpda.Evaluator<?>,org.netbeans.spi.debugger.jpda.Evaluator$Context) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public void setParsedData(java.lang.Object)
supr java.lang.Object
hfds associatedExpressions,expression,parsedData
hcls AssociatedExpression

CLSS public org.netbeans.modules.debugger.jpda.expr.EvaluatorVisitor
cons public init(org.netbeans.modules.debugger.jpda.expr.JavaExpression)
meth public com.sun.jdi.Mirror scan(com.sun.source.tree.Tree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror scan(com.sun.source.util.TreePath,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror scan(java.lang.Iterable<? extends com.sun.source.tree.Tree>,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitAnnotatedType(com.sun.source.tree.AnnotatedTypeTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitAnnotation(com.sun.source.tree.AnnotationTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitArrayAccess(com.sun.source.tree.ArrayAccessTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitArrayType(com.sun.source.tree.ArrayTypeTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitAssert(com.sun.source.tree.AssertTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitAssignment(com.sun.source.tree.AssignmentTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitBinary(com.sun.source.tree.BinaryTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitBlock(com.sun.source.tree.BlockTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitBreak(com.sun.source.tree.BreakTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitCase(com.sun.source.tree.CaseTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitCatch(com.sun.source.tree.CatchTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitClass(com.sun.source.tree.ClassTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitCompilationUnit(com.sun.source.tree.CompilationUnitTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitCompoundAssignment(com.sun.source.tree.CompoundAssignmentTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitConditionalExpression(com.sun.source.tree.ConditionalExpressionTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitContinue(com.sun.source.tree.ContinueTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitDoWhileLoop(com.sun.source.tree.DoWhileLoopTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitEmptyStatement(com.sun.source.tree.EmptyStatementTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitEnhancedForLoop(com.sun.source.tree.EnhancedForLoopTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitErroneous(com.sun.source.tree.ErroneousTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitExports(com.sun.source.tree.ExportsTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitExpressionStatement(com.sun.source.tree.ExpressionStatementTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitForLoop(com.sun.source.tree.ForLoopTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitIdentifier(com.sun.source.tree.IdentifierTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitIf(com.sun.source.tree.IfTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitImport(com.sun.source.tree.ImportTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitInstanceOf(com.sun.source.tree.InstanceOfTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitIntersectionType(com.sun.source.tree.IntersectionTypeTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitLabeledStatement(com.sun.source.tree.LabeledStatementTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitLambdaExpression(com.sun.source.tree.LambdaExpressionTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitLiteral(com.sun.source.tree.LiteralTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitMemberReference(com.sun.source.tree.MemberReferenceTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitMemberSelect(com.sun.source.tree.MemberSelectTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitMethod(com.sun.source.tree.MethodTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitMethodInvocation(com.sun.source.tree.MethodInvocationTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitModifiers(com.sun.source.tree.ModifiersTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitModule(com.sun.source.tree.ModuleTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitNewArray(com.sun.source.tree.NewArrayTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitNewClass(com.sun.source.tree.NewClassTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitOpens(com.sun.source.tree.OpensTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitOther(com.sun.source.tree.Tree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitParameterizedType(com.sun.source.tree.ParameterizedTypeTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitParenthesized(com.sun.source.tree.ParenthesizedTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitPrimitiveType(com.sun.source.tree.PrimitiveTypeTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitProvides(com.sun.source.tree.ProvidesTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitRequires(com.sun.source.tree.RequiresTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitReturn(com.sun.source.tree.ReturnTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitSwitch(com.sun.source.tree.SwitchTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitSynchronized(com.sun.source.tree.SynchronizedTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitThrow(com.sun.source.tree.ThrowTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitTry(com.sun.source.tree.TryTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitTypeCast(com.sun.source.tree.TypeCastTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitTypeParameter(com.sun.source.tree.TypeParameterTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitUnary(com.sun.source.tree.UnaryTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitUnionType(com.sun.source.tree.UnionTypeTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitUses(com.sun.source.tree.UsesTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitVariable(com.sun.source.tree.VariableTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitWhileLoop(com.sun.source.tree.WhileLoopTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public com.sun.jdi.Mirror visitWildcard(com.sun.source.tree.WildcardTree,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public static boolean instanceOf(com.sun.jdi.Type,com.sun.jdi.Type)
meth public static com.sun.jdi.ReferenceType adjustBoxingType(com.sun.jdi.ReferenceType,com.sun.jdi.PrimitiveType,org.netbeans.modules.debugger.jpda.expr.EvaluationContext)
meth public static com.sun.jdi.Value box(com.sun.jdi.PrimitiveValue,com.sun.jdi.ReferenceType,com.sun.jdi.ThreadReference,org.netbeans.modules.debugger.jpda.expr.EvaluationContext) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.IncompatibleThreadStateException,com.sun.jdi.InvalidTypeException,com.sun.jdi.InvocationException
meth public static com.sun.jdi.Value unbox(com.sun.jdi.ObjectReference,com.sun.jdi.PrimitiveType,com.sun.jdi.ThreadReference,org.netbeans.modules.debugger.jpda.expr.EvaluationContext) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.IncompatibleThreadStateException,com.sun.jdi.InvalidTypeException,com.sun.jdi.InvocationException
supr org.netbeans.api.java.source.support.ErrorAwareTreePathScanner<com.sun.jdi.Mirror,org.netbeans.modules.debugger.jpda.expr.EvaluationContext>
hfds BRACKETS,NO_VALUE,PRIMITIVE_CLASS_NAMES,expression,loggerMethod,loggerValue,newArrayType,subExpressionTypes
hcls ArtificialMirror,BooleanVal,Break,ByteVal,CharVal,CommandMirror,Continue,DoubleVal,FloatVal,IntVal,IntersectionType,LongVal,NoValue,Return,ShortVal,UnsuitableArgumentsException

CLSS public org.netbeans.modules.debugger.jpda.expr.InvocationExceptionTranslated
cons public init(com.sun.jdi.InvocationException,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
cons public init(org.netbeans.api.debugger.jpda.ObjectVariable,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
meth public java.lang.StackTraceElement[] getStackTrace()
meth public java.lang.String getLocalizedMessage()
meth public java.lang.String getMessage()
meth public java.lang.String getOriginalLocalizedMessage()
meth public java.lang.String toString()
meth public java.lang.Throwable getCause()
meth public org.netbeans.modules.debugger.jpda.expr.InvocationExceptionTranslated preload(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl)
meth public void printStackTrace(java.io.PrintStream)
meth public void printStackTrace(java.io.PrintWriter)
meth public void resetInvocationMessage()
meth public void setPreferredThread(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl)
supr java.lang.Exception
hfds cause,createdAt,debugger,exeption,invocationMessage,localizedMessage,logger,message,preferredThread,stackTrace

CLSS public abstract interface org.netbeans.modules.debugger.jpda.expr.JDIVariable
intf org.netbeans.api.debugger.jpda.Variable
meth public abstract com.sun.jdi.Value getJDIValue()

CLSS public org.netbeans.modules.debugger.jpda.expr.JavaExpression
fld public final static java.lang.String LANGUAGE_JAVA_1_5 = "1.5.0"
meth public java.lang.String getExpression()
meth public java.lang.String getLanguage()
meth public org.netbeans.modules.debugger.jpda.expr.TreeEvaluator evaluator(org.netbeans.modules.debugger.jpda.expr.EvaluationContext,org.netbeans.modules.debugger.jpda.expr.CompilationInfoHolder)
meth public static org.netbeans.modules.debugger.jpda.expr.JavaExpression parse(java.lang.String,java.lang.String)
supr java.lang.Object
hfds CLASS_MACRO,REPLACE_class,REPLACE_return,RETURN_MACRO,language,replace_class,replace_return,strExpression

CLSS public org.netbeans.modules.debugger.jpda.expr.TreeEvaluator
meth public com.sun.jdi.Value evaluate() throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.api.debugger.jpda.InvalidExpressionException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value invokeVirtual(com.sun.jdi.ClassType,com.sun.jdi.Method,com.sun.jdi.ThreadReference,java.util.List<com.sun.jdi.Value>,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public static com.sun.jdi.Value invokeVirtual(com.sun.jdi.ClassType,com.sun.jdi.Method,com.sun.jdi.ThreadReference,java.util.List<com.sun.jdi.Value>,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.modules.debugger.jpda.expr.InvocationExceptionTranslated) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public static com.sun.jdi.Value invokeVirtual(com.sun.jdi.ObjectReference,com.sun.jdi.Method,com.sun.jdi.ThreadReference,java.util.List<com.sun.jdi.Value>,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public static com.sun.jdi.Value invokeVirtual(com.sun.jdi.ObjectReference,com.sun.jdi.Method,com.sun.jdi.ThreadReference,java.util.List<com.sun.jdi.Value>,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.modules.debugger.jpda.expr.InvocationExceptionTranslated) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
supr java.lang.Object
hfds ciHolder,evaluationContext,expression,loggerMethod

CLSS public org.netbeans.modules.debugger.jpda.expr.VMCache
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
supr java.lang.Object
hfds MAX_ENCLOSING_TYPES,cachedClasses,debugger,enclosingTypes
hcls CEncl

CLSS public final org.netbeans.modules.debugger.jpda.expr.formatters.Formatters
fld public final static java.lang.String PROP_FORMATTERS = "formatters"
meth public final static org.netbeans.modules.debugger.jpda.expr.formatters.Formatters getDefault()
meth public org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter[] getFormatters()
meth public static org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter getFormatterForType(org.netbeans.api.debugger.jpda.JPDAClassType,org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter[])
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
supr java.lang.Object
hfds INSTANCE,formatters,formattersChangeListener,formattersLock,jpdaProperties,pcs
hcls FormatterCache

CLSS public org.netbeans.modules.debugger.jpda.expr.formatters.FormattersLoopControl
cons public init()
meth public boolean canUse(org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter,java.lang.String,java.lang.String[])
meth public org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter[] getFormatters()
supr java.lang.Object
hfds usedFormatters

CLSS public final org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter
cons public init(java.lang.String)
innr public static ReaderWriter
intf java.lang.Cloneable
meth public boolean isDefault()
meth public boolean isEnabled()
meth public boolean isIncludeSubTypes()
meth public boolean isUseChildrenVariables()
meth public java.lang.String getChildrenExpandTestCode()
meth public java.lang.String getChildrenFormatCode()
meth public java.lang.String getClassTypesCommaSeparated()
meth public java.lang.String getName()
meth public java.lang.String getValueFormatCode()
meth public java.lang.String[] getClassTypes()
meth public java.util.Map<java.lang.String,java.lang.String> getChildrenVariables()
meth public org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter clone()
meth public static org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter[] loadFormatters()
meth public void addChildrenVariable(java.lang.String,java.lang.String)
meth public void setChildrenExpandTestCode(java.lang.String)
meth public void setChildrenFormatCode(java.lang.String)
meth public void setChildrenVariables(java.util.Map<java.lang.String,java.lang.String>)
meth public void setClassTypes(java.lang.String)
meth public void setClassTypes(java.lang.String[])
meth public void setEnabled(boolean)
meth public void setIncludeSubTypes(boolean)
meth public void setName(java.lang.String)
meth public void setUseChildrenVariables(boolean)
meth public void setValueFormatCode(java.lang.String)
supr java.lang.Object
hfds childrenExpandTestCode,childrenFormatCode,childrenVariables,classTypes,enabled,includeSubTypes,isDefault,name,useChildrenVariables,valueFormatCode

CLSS public static org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter$ReaderWriter
 outer org.netbeans.modules.debugger.jpda.expr.formatters.VariablesFormatter
cons public init()
intf org.netbeans.api.debugger.Properties$Reader
meth public java.lang.Object read(java.lang.String,org.netbeans.api.debugger.Properties)
meth public java.lang.String[] getSupportedClassNames()
meth public void write(java.lang.Object,org.netbeans.api.debugger.Properties)
supr java.lang.Object
hfds OLD_VariablesFormatter_CLASS_NAME

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ArrayReferenceWrapper
meth public static com.sun.jdi.Value getValue(com.sun.jdi.ArrayReference,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int length(com.sun.jdi.ArrayReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int length0(com.sun.jdi.ArrayReference)
meth public static java.util.List<com.sun.jdi.Value> getValues(com.sun.jdi.ArrayReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Value> getValues(com.sun.jdi.ArrayReference,int,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Value> getValues0(com.sun.jdi.ArrayReference)
meth public static java.util.List<com.sun.jdi.Value> getValues0(com.sun.jdi.ArrayReference,int,int)
meth public static void setValue(com.sun.jdi.ArrayReference,int,com.sun.jdi.Value) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void setValues(com.sun.jdi.ArrayReference,int,java.util.List<? extends com.sun.jdi.Value>,int,int) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void setValues(com.sun.jdi.ArrayReference,java.util.List<? extends com.sun.jdi.Value>) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ArrayTypeWrapper
meth public static com.sun.jdi.ArrayReference newInstance(com.sun.jdi.ArrayType,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Type componentType(com.sun.jdi.ArrayType) throws com.sun.jdi.ClassNotLoadedException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String componentSignature(com.sun.jdi.ArrayType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String componentTypeName(com.sun.jdi.ArrayType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.BooleanValueWrapper
meth public static boolean equals(com.sun.jdi.BooleanValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.BooleanValue,java.lang.Object)
meth public static boolean value(com.sun.jdi.BooleanValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean value0(com.sun.jdi.BooleanValue)
meth public static int hashCode(com.sun.jdi.BooleanValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.BooleanValue)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ByteValueWrapper
meth public static boolean equals(com.sun.jdi.ByteValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.ByteValue,java.lang.Object)
meth public static byte value(com.sun.jdi.ByteValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.ByteValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.ByteValue)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.CharValueWrapper
meth public static boolean equals(com.sun.jdi.CharValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.CharValue,java.lang.Object)
meth public static char value(com.sun.jdi.CharValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.CharValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.CharValue)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
cons public init(com.sun.jdi.ClassNotPreparedException)
meth public com.sun.jdi.ClassNotPreparedException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ClassObjectReferenceWrapper
meth public static com.sun.jdi.ReferenceType reflectedType(com.sun.jdi.ClassObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ClassTypeWrapper
meth public static boolean isEnum(com.sun.jdi.ClassType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isEnum0(com.sun.jdi.ClassType)
meth public static com.sun.jdi.ClassType superclass(com.sun.jdi.ClassType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Method concreteMethodByName(com.sun.jdi.ClassType,java.lang.String,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ObjectReference newInstance(com.sun.jdi.ClassType,com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List<? extends com.sun.jdi.Value>,int) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.IncompatibleThreadStateException,com.sun.jdi.InvalidTypeException,com.sun.jdi.InvocationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value invokeMethod(com.sun.jdi.ClassType,com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List<? extends com.sun.jdi.Value>,int) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.IncompatibleThreadStateException,com.sun.jdi.InvalidTypeException,com.sun.jdi.InvocationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ClassType> subclasses(com.sun.jdi.ClassType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ClassType> subclasses0(com.sun.jdi.ClassType)
meth public static java.util.List<com.sun.jdi.InterfaceType> allInterfaces(com.sun.jdi.ClassType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.InterfaceType> allInterfaces0(com.sun.jdi.ClassType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.InterfaceType> interfaces(com.sun.jdi.ClassType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.InterfaceType> interfaces0(com.sun.jdi.ClassType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static void setValue(com.sun.jdi.ClassType,com.sun.jdi.Field,com.sun.jdi.Value) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.DoubleValueWrapper
meth public static boolean equals(com.sun.jdi.DoubleValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.DoubleValue,java.lang.Object)
meth public static double value(com.sun.jdi.DoubleValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.DoubleValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.DoubleValue)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.FieldWrapper
meth public static boolean equals(com.sun.jdi.Field,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.Field,java.lang.Object)
meth public static boolean isEnumConstant(com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isEnumConstant0(com.sun.jdi.Field)
meth public static boolean isTransient(com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isTransient0(com.sun.jdi.Field)
meth public static boolean isVolatile(com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isVolatile0(com.sun.jdi.Field)
meth public static com.sun.jdi.Type type(com.sun.jdi.Field) throws com.sun.jdi.ClassNotLoadedException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.Field)
meth public static java.lang.String typeName(com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.FloatValueWrapper
meth public static boolean equals(com.sun.jdi.FloatValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.FloatValue,java.lang.Object)
meth public static float value(com.sun.jdi.FloatValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.FloatValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.FloatValue)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.IllegalArgumentExceptionWrapper
cons public init(java.lang.IllegalArgumentException)
meth public java.lang.IllegalArgumentException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
cons public init(java.lang.IllegalThreadStateException)
meth public java.lang.IllegalThreadStateException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.IntegerValueWrapper
meth public static boolean equals(com.sun.jdi.IntegerValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.IntegerValue,java.lang.Object)
meth public static int hashCode(com.sun.jdi.IntegerValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.IntegerValue)
meth public static int value(com.sun.jdi.IntegerValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int value0(com.sun.jdi.IntegerValue)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.InterfaceTypeWrapper
meth public static com.sun.jdi.Value invokeMethod(com.sun.jdi.InterfaceType,com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List<? extends com.sun.jdi.Value>,int) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.IncompatibleThreadStateException,com.sun.jdi.InvalidTypeException,com.sun.jdi.InvocationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ClassType> implementors(com.sun.jdi.InterfaceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ClassType> implementors0(com.sun.jdi.InterfaceType)
meth public static java.util.List<com.sun.jdi.InterfaceType> subinterfaces(com.sun.jdi.InterfaceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.InterfaceType> subinterfaces0(com.sun.jdi.InterfaceType)
meth public static java.util.List<com.sun.jdi.InterfaceType> superinterfaces(com.sun.jdi.InterfaceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.InterfaceType> superinterfaces0(com.sun.jdi.InterfaceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper
cons public init(com.sun.jdi.InternalException)
meth public com.sun.jdi.InternalException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.InvalidRequestStateExceptionWrapper
cons public init(com.sun.jdi.request.InvalidRequestStateException)
meth public com.sun.jdi.request.InvalidRequestStateException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper
cons public init(com.sun.jdi.InvalidStackFrameException)
meth public com.sun.jdi.InvalidStackFrameException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.LocalVariableWrapper
meth public static boolean equals(com.sun.jdi.LocalVariable,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.LocalVariable,java.lang.Object)
meth public static boolean isArgument(com.sun.jdi.LocalVariable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isArgument0(com.sun.jdi.LocalVariable)
meth public static boolean isVisible(com.sun.jdi.LocalVariable,com.sun.jdi.StackFrame) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isVisible0(com.sun.jdi.LocalVariable,com.sun.jdi.StackFrame)
meth public static com.sun.jdi.Type type(com.sun.jdi.LocalVariable) throws com.sun.jdi.ClassNotLoadedException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.LocalVariable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.LocalVariable)
meth public static java.lang.String genericSignature(com.sun.jdi.LocalVariable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String name(com.sun.jdi.LocalVariable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String signature(com.sun.jdi.LocalVariable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String typeName(com.sun.jdi.LocalVariable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.LocatableWrapper
meth public static com.sun.jdi.Location location(com.sun.jdi.Locatable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.LocationWrapper
meth public static boolean equals(com.sun.jdi.Location,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.Location,java.lang.Object)
meth public static com.sun.jdi.Method method(com.sun.jdi.Location) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ReferenceType declaringType(com.sun.jdi.Location) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.Location) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.Location)
meth public static int lineNumber(com.sun.jdi.Location) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int lineNumber(com.sun.jdi.Location,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int lineNumber0(com.sun.jdi.Location)
meth public static int lineNumber0(com.sun.jdi.Location,java.lang.String)
meth public static java.lang.String sourceName(com.sun.jdi.Location) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String sourceName(com.sun.jdi.Location,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String sourcePath(com.sun.jdi.Location) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String sourcePath(com.sun.jdi.Location,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static long codeIndex(com.sun.jdi.Location) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.LongValueWrapper
meth public static boolean equals(com.sun.jdi.LongValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.LongValue,java.lang.Object)
meth public static int hashCode(com.sun.jdi.LongValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.LongValue)
meth public static long value(com.sun.jdi.LongValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.MethodWrapper
meth public static boolean equals(com.sun.jdi.Method,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.Method,java.lang.Object)
meth public static boolean isAbstract(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isAbstract0(com.sun.jdi.Method)
meth public static boolean isBridge(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isBridge0(com.sun.jdi.Method)
meth public static boolean isConstructor(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isConstructor0(com.sun.jdi.Method)
meth public static boolean isDefault(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isDefault0(com.sun.jdi.Method)
meth public static boolean isNative(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isNative0(com.sun.jdi.Method)
meth public static boolean isObsolete(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isObsolete0(com.sun.jdi.Method)
meth public static boolean isStaticInitializer(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isStaticInitializer0(com.sun.jdi.Method)
meth public static boolean isSynchronized(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isSynchronized0(com.sun.jdi.Method)
meth public static boolean isVarArgs(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isVarArgs0(com.sun.jdi.Method)
meth public static byte[] bytecodes(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Location location(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Location locationOfCodeIndex(com.sun.jdi.Method,long) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Type returnType(com.sun.jdi.Method) throws com.sun.jdi.ClassNotLoadedException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.Method)
meth public static java.lang.String returnTypeName(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.LocalVariable> arguments(com.sun.jdi.Method) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.LocalVariable> arguments0(com.sun.jdi.Method) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<com.sun.jdi.LocalVariable> variables(com.sun.jdi.Method) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.LocalVariable> variables0(com.sun.jdi.Method) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<com.sun.jdi.LocalVariable> variablesByName(com.sun.jdi.Method,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.LocalVariable> variablesByName0(com.sun.jdi.Method,java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<com.sun.jdi.Location> allLineLocations(com.sun.jdi.Method) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> allLineLocations(com.sun.jdi.Method,java.lang.String,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> allLineLocations0(com.sun.jdi.Method) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<com.sun.jdi.Location> allLineLocations0(com.sun.jdi.Method,java.lang.String,java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine(com.sun.jdi.Method,int) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine(com.sun.jdi.Method,java.lang.String,java.lang.String,int) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine0(com.sun.jdi.Method,int) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine0(com.sun.jdi.Method,java.lang.String,java.lang.String,int) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<com.sun.jdi.Type> argumentTypes(com.sun.jdi.Method) throws com.sun.jdi.ClassNotLoadedException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Type> argumentTypes0(com.sun.jdi.Method) throws com.sun.jdi.ClassNotLoadedException
meth public static java.util.List<java.lang.String> argumentTypeNames(com.sun.jdi.Method) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<java.lang.String> argumentTypeNames0(com.sun.jdi.Method)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.MirrorWrapper
meth public static com.sun.jdi.VirtualMachine virtualMachine(com.sun.jdi.Mirror) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String toString(com.sun.jdi.Mirror) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.MonitorInfoWrapper
meth public static com.sun.jdi.ObjectReference monitor(com.sun.jdi.MonitorInfo) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.MonitorInfo) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int stackDepth(com.sun.jdi.MonitorInfo) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int stackDepth0(com.sun.jdi.MonitorInfo) throws org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.NativeMethodExceptionWrapper
cons public init(com.sun.jdi.NativeMethodException)
meth public com.sun.jdi.NativeMethodException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper
cons public init(com.sun.jdi.ObjectCollectedException)
meth public com.sun.jdi.ObjectCollectedException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ObjectReferenceWrapper
meth public static boolean equals(com.sun.jdi.ObjectReference,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.ObjectReference,java.lang.Object)
meth public static boolean isCollected(com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isCollected0(com.sun.jdi.ObjectReference)
meth public static com.sun.jdi.ReferenceType referenceType(com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference owningThread(com.sun.jdi.ObjectReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value getValue(com.sun.jdi.ObjectReference,com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value invokeMethod(com.sun.jdi.ObjectReference,com.sun.jdi.ThreadReference,com.sun.jdi.Method,java.util.List<? extends com.sun.jdi.Value>,int) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.IncompatibleThreadStateException,com.sun.jdi.InvalidTypeException,com.sun.jdi.InvocationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int entryCount(com.sun.jdi.ObjectReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int entryCount0(com.sun.jdi.ObjectReference) throws com.sun.jdi.IncompatibleThreadStateException
meth public static int hashCode(com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.ObjectReference)
meth public static java.util.List<com.sun.jdi.ObjectReference> referringObjects(com.sun.jdi.ObjectReference,long) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ObjectReference> referringObjects0(com.sun.jdi.ObjectReference,long)
meth public static java.util.List<com.sun.jdi.ThreadReference> waitingThreads(com.sun.jdi.ObjectReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ThreadReference> waitingThreads0(com.sun.jdi.ObjectReference) throws com.sun.jdi.IncompatibleThreadStateException
meth public static java.util.Map<com.sun.jdi.Field,com.sun.jdi.Value> getValues(com.sun.jdi.ObjectReference,java.util.List<? extends com.sun.jdi.Field>) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.Map<com.sun.jdi.Field,com.sun.jdi.Value> getValues0(com.sun.jdi.ObjectReference,java.util.List<? extends com.sun.jdi.Field>)
meth public static long uniqueID(com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void disableCollection(com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.UnsupportedOperationExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void enableCollection(com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.UnsupportedOperationExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void setValue(com.sun.jdi.ObjectReference,com.sun.jdi.Field,com.sun.jdi.Value) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.IllegalArgumentExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.PrimitiveValueWrapper
meth public static boolean booleanValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean booleanValue0(com.sun.jdi.PrimitiveValue)
meth public static byte byteValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static char charValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static double doubleValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static float floatValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int intValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int intValue0(com.sun.jdi.PrimitiveValue)
meth public static long longValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static short shortValue(com.sun.jdi.PrimitiveValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ReferenceTypeWrapper
meth public static boolean equals(com.sun.jdi.ReferenceType,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.ReferenceType,java.lang.Object)
meth public static boolean failedToInitialize(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean failedToInitialize0(com.sun.jdi.ReferenceType)
meth public static boolean isAbstract(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isAbstract0(com.sun.jdi.ReferenceType)
meth public static boolean isFinal(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isFinal0(com.sun.jdi.ReferenceType)
meth public static boolean isInitialized(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isInitialized0(com.sun.jdi.ReferenceType)
meth public static boolean isPrepared(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isPrepared0(com.sun.jdi.ReferenceType)
meth public static boolean isStatic(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isStatic0(com.sun.jdi.ReferenceType)
meth public static boolean isVerified(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isVerified0(com.sun.jdi.ReferenceType)
meth public static byte[] constantPool(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ClassLoaderReference classLoader(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ClassObjectReference classObject(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.UnsupportedOperationExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Field fieldByName(com.sun.jdi.ReferenceType,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value getValue(com.sun.jdi.ReferenceType,com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int constantPoolCount(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int constantPoolCount0(com.sun.jdi.ReferenceType)
meth public static int hashCode(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.ReferenceType)
meth public static int majorVersion(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int majorVersion0(com.sun.jdi.ReferenceType)
meth public static int minorVersion(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int minorVersion0(com.sun.jdi.ReferenceType)
meth public static java.lang.String defaultStratum(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String genericSignature(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String name(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String sourceDebugExtension(com.sun.jdi.ReferenceType) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String sourceName(com.sun.jdi.ReferenceType) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Field> allFields(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Field> allFields0(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Field> fields(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Field> fields0(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Field> visibleFields(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Field> visibleFields0(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> allLineLocations(com.sun.jdi.ReferenceType) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> allLineLocations(com.sun.jdi.ReferenceType,java.lang.String,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> allLineLocations0(com.sun.jdi.ReferenceType) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> allLineLocations0(com.sun.jdi.ReferenceType,java.lang.String,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine(com.sun.jdi.ReferenceType,int) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine(com.sun.jdi.ReferenceType,java.lang.String,java.lang.String,int) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine0(com.sun.jdi.ReferenceType,int) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Location> locationsOfLine0(com.sun.jdi.ReferenceType,java.lang.String,java.lang.String,int) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> allMethods(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> allMethods0(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> methods(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> methods0(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> methodsByName(com.sun.jdi.ReferenceType,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> methodsByName(com.sun.jdi.ReferenceType,java.lang.String,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> methodsByName0(com.sun.jdi.ReferenceType,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> methodsByName0(com.sun.jdi.ReferenceType,java.lang.String,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> visibleMethods(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Method> visibleMethods0(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ObjectReference> instances(com.sun.jdi.ReferenceType,long) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ObjectReference> instances0(com.sun.jdi.ReferenceType,long)
meth public static java.util.List<com.sun.jdi.ReferenceType> nestedTypes(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ReferenceType> nestedTypes0(com.sun.jdi.ReferenceType)
meth public static java.util.List<java.lang.String> availableStrata(com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<java.lang.String> availableStrata0(com.sun.jdi.ReferenceType)
meth public static java.util.List<java.lang.String> sourceNames(com.sun.jdi.ReferenceType,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<java.lang.String> sourceNames0(com.sun.jdi.ReferenceType,java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public static java.util.List<java.lang.String> sourcePaths(com.sun.jdi.ReferenceType,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<java.lang.String> sourcePaths0(com.sun.jdi.ReferenceType,java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public static java.util.Map<com.sun.jdi.Field,com.sun.jdi.Value> getValues(com.sun.jdi.ReferenceType,java.util.List<? extends com.sun.jdi.Field>) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.Map<com.sun.jdi.Field,com.sun.jdi.Value> getValues0(com.sun.jdi.ReferenceType,java.util.List<? extends com.sun.jdi.Field>)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ShortValueWrapper
meth public static boolean equals(com.sun.jdi.ShortValue,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean equals0(com.sun.jdi.ShortValue,java.lang.Object)
meth public static int hashCode(com.sun.jdi.ShortValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int hashCode0(com.sun.jdi.ShortValue)
meth public static short value(com.sun.jdi.ShortValue) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.StackFrameWrapper
meth public static com.sun.jdi.LocalVariable visibleVariableByName(com.sun.jdi.StackFrame,java.lang.String) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.NativeMethodExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Location location(com.sun.jdi.StackFrame) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ObjectReference thisObject(com.sun.jdi.StackFrame) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.StackFrame) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value getValue(com.sun.jdi.StackFrame,com.sun.jdi.LocalVariable) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.LocalVariable> visibleVariables(com.sun.jdi.StackFrame) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.NativeMethodExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.LocalVariable> visibleVariables0(com.sun.jdi.StackFrame) throws com.sun.jdi.AbsentInformationException,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.NativeMethodExceptionWrapper
meth public static java.util.List<com.sun.jdi.Value> getArgumentValues(com.sun.jdi.StackFrame) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.Value> getArgumentValues0(com.sun.jdi.StackFrame) throws org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper
meth public static java.util.Map<com.sun.jdi.LocalVariable,com.sun.jdi.Value> getValues(com.sun.jdi.StackFrame,java.util.List<? extends com.sun.jdi.LocalVariable>) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.Map<com.sun.jdi.LocalVariable,com.sun.jdi.Value> getValues0(com.sun.jdi.StackFrame,java.util.List<? extends com.sun.jdi.LocalVariable>) throws org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper
meth public static void setValue(com.sun.jdi.StackFrame,com.sun.jdi.LocalVariable,com.sun.jdi.Value) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.StringReferenceWrapper
meth public static java.lang.String value(com.sun.jdi.StringReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ThreadGroupReferenceWrapper
meth public static com.sun.jdi.ThreadGroupReference parent(com.sun.jdi.ThreadGroupReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String name(com.sun.jdi.ThreadGroupReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ThreadGroupReference> threadGroups(com.sun.jdi.ThreadGroupReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ThreadGroupReference> threadGroups0(com.sun.jdi.ThreadGroupReference)
meth public static java.util.List<com.sun.jdi.ThreadReference> threads(com.sun.jdi.ThreadGroupReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ThreadReference> threads0(com.sun.jdi.ThreadGroupReference)
meth public static void resume(com.sun.jdi.ThreadGroupReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void suspend(com.sun.jdi.ThreadGroupReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ThreadReferenceWrapper
meth public static boolean isAtBreakpoint(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isAtBreakpoint0(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static boolean isSuspended(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isSuspended0(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static com.sun.jdi.ObjectReference currentContendedMonitor(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.StackFrame frame(com.sun.jdi.ThreadReference,int) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadGroupReference threadGroup(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMOutOfMemoryExceptionWrapper
meth public static int frameCount(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int frameCount0(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper
meth public static int status(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int status0(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static int suspendCount(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int suspendCount0(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static java.lang.String name(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.MonitorInfo> ownedMonitorsAndFrames(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.MonitorInfo> ownedMonitorsAndFrames0(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static java.util.List<com.sun.jdi.ObjectReference> ownedMonitors(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ObjectReference> ownedMonitors0(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static java.util.List<com.sun.jdi.StackFrame> frames(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.StackFrame> frames(com.sun.jdi.ThreadReference,int,int) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.StackFrame> frames0(com.sun.jdi.ThreadReference) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static java.util.List<com.sun.jdi.StackFrame> frames0(com.sun.jdi.ThreadReference,int,int) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper
meth public static void forceEarlyReturn(com.sun.jdi.ThreadReference,com.sun.jdi.Value) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.IncompatibleThreadStateException,com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.NativeMethodExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void interrupt(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void popFrames(com.sun.jdi.ThreadReference,com.sun.jdi.StackFrame) throws com.sun.jdi.IncompatibleThreadStateException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.NativeMethodExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void resume(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void stop(com.sun.jdi.ThreadReference,com.sun.jdi.ObjectReference) throws com.sun.jdi.InvalidTypeException,org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void suspend(com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.TypeComponentWrapper
meth public static boolean isFinal(com.sun.jdi.TypeComponent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isFinal0(com.sun.jdi.TypeComponent)
meth public static boolean isStatic(com.sun.jdi.TypeComponent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isStatic0(com.sun.jdi.TypeComponent)
meth public static boolean isSynthetic(com.sun.jdi.TypeComponent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isSynthetic0(com.sun.jdi.TypeComponent)
meth public static com.sun.jdi.ReferenceType declaringType(com.sun.jdi.TypeComponent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String genericSignature(com.sun.jdi.TypeComponent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String name(com.sun.jdi.TypeComponent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String signature(com.sun.jdi.TypeComponent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.TypeWrapper
meth public static java.lang.String name(com.sun.jdi.Type) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String signature(com.sun.jdi.Type) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.UnsupportedOperationExceptionWrapper
cons public init(java.lang.UnsupportedOperationException)
meth public java.lang.UnsupportedOperationException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
cons public init(com.sun.jdi.VMDisconnectedException)
meth public com.sun.jdi.VMDisconnectedException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.VMOutOfMemoryExceptionWrapper
cons public init(com.sun.jdi.VMOutOfMemoryException)
meth public com.sun.jdi.VMOutOfMemoryException getCause()
supr java.lang.Exception

CLSS public final org.netbeans.modules.debugger.jpda.jdi.ValueWrapper
meth public static com.sun.jdi.Type type(com.sun.jdi.Value) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.VirtualMachineManagerWrapper
meth public static com.sun.jdi.VirtualMachine createVirtualMachine(com.sun.jdi.VirtualMachineManager,com.sun.jdi.connect.spi.Connection) throws java.io.IOException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.VirtualMachine createVirtualMachine(com.sun.jdi.VirtualMachineManager,com.sun.jdi.connect.spi.Connection,java.lang.Process) throws java.io.IOException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.connect.LaunchingConnector defaultConnector(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int majorInterfaceVersion(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int majorInterfaceVersion0(com.sun.jdi.VirtualMachineManager)
meth public static int minorInterfaceVersion(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int minorInterfaceVersion0(com.sun.jdi.VirtualMachineManager)
meth public static java.util.List<com.sun.jdi.VirtualMachine> connectedVirtualMachines(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.VirtualMachine> connectedVirtualMachines0(com.sun.jdi.VirtualMachineManager)
meth public static java.util.List<com.sun.jdi.connect.AttachingConnector> attachingConnectors(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.connect.AttachingConnector> attachingConnectors0(com.sun.jdi.VirtualMachineManager)
meth public static java.util.List<com.sun.jdi.connect.Connector> allConnectors(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.connect.Connector> allConnectors0(com.sun.jdi.VirtualMachineManager)
meth public static java.util.List<com.sun.jdi.connect.LaunchingConnector> launchingConnectors(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.connect.LaunchingConnector> launchingConnectors0(com.sun.jdi.VirtualMachineManager)
meth public static java.util.List<com.sun.jdi.connect.ListeningConnector> listeningConnectors(com.sun.jdi.VirtualMachineManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.connect.ListeningConnector> listeningConnectors0(com.sun.jdi.VirtualMachineManager)
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.VirtualMachineWrapper
meth public static boolean canAddMethod(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canAddMethod0(com.sun.jdi.VirtualMachine)
meth public static boolean canBeModified(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canBeModified0(com.sun.jdi.VirtualMachine)
meth public static boolean canForceEarlyReturn(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canForceEarlyReturn0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetBytecodes(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetBytecodes0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetClassFileVersion(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetClassFileVersion0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetConstantPool(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetConstantPool0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetCurrentContendedMonitor(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetCurrentContendedMonitor0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetInstanceInfo(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetInstanceInfo0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetMethodReturnValues(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetMethodReturnValues0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetMonitorFrameInfo(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetMonitorFrameInfo0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetMonitorInfo(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetMonitorInfo0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetOwnedMonitorInfo(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetOwnedMonitorInfo0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetSourceDebugExtension(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetSourceDebugExtension0(com.sun.jdi.VirtualMachine)
meth public static boolean canGetSyntheticAttribute(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canGetSyntheticAttribute0(com.sun.jdi.VirtualMachine)
meth public static boolean canPopFrames(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canPopFrames0(com.sun.jdi.VirtualMachine)
meth public static boolean canRedefineClasses(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canRedefineClasses0(com.sun.jdi.VirtualMachine)
meth public static boolean canRequestMonitorEvents(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canRequestMonitorEvents0(com.sun.jdi.VirtualMachine)
meth public static boolean canRequestVMDeathEvent(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canRequestVMDeathEvent0(com.sun.jdi.VirtualMachine)
meth public static boolean canUnrestrictedlyRedefineClasses(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canUnrestrictedlyRedefineClasses0(com.sun.jdi.VirtualMachine)
meth public static boolean canUseInstanceFilters(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canUseInstanceFilters0(com.sun.jdi.VirtualMachine)
meth public static boolean canUseSourceNameFilters(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canUseSourceNameFilters0(com.sun.jdi.VirtualMachine)
meth public static boolean canWatchFieldAccess(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canWatchFieldAccess0(com.sun.jdi.VirtualMachine)
meth public static boolean canWatchFieldModification(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean canWatchFieldModification0(com.sun.jdi.VirtualMachine)
meth public static com.sun.jdi.BooleanValue mirrorOf(com.sun.jdi.VirtualMachine,boolean) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ByteValue mirrorOf(com.sun.jdi.VirtualMachine,byte) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.CharValue mirrorOf(com.sun.jdi.VirtualMachine,char) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.DoubleValue mirrorOf(com.sun.jdi.VirtualMachine,double) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.FloatValue mirrorOf(com.sun.jdi.VirtualMachine,float) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.IntegerValue mirrorOf(com.sun.jdi.VirtualMachine,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.LongValue mirrorOf(com.sun.jdi.VirtualMachine,long) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ShortValue mirrorOf(com.sun.jdi.VirtualMachine,short) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.StringReference mirrorOf(com.sun.jdi.VirtualMachine,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.UnsupportedOperationExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.VoidValue mirrorOfVoid(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.event.EventQueue eventQueue(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.EventRequestManager eventRequestManager(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.Process process(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String description(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String getDefaultStratum(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String name(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String version(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ReferenceType> allClasses(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ReferenceType> allClasses0(com.sun.jdi.VirtualMachine)
meth public static java.util.List<com.sun.jdi.ReferenceType> classesByName(com.sun.jdi.VirtualMachine,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ReferenceType> classesByName0(com.sun.jdi.VirtualMachine,java.lang.String)
meth public static java.util.List<com.sun.jdi.ThreadGroupReference> topLevelThreadGroups(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ThreadGroupReference> topLevelThreadGroups0(com.sun.jdi.VirtualMachine)
meth public static java.util.List<com.sun.jdi.ThreadReference> allThreads(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.ThreadReference> allThreads0(com.sun.jdi.VirtualMachine)
meth public static long[] instanceCounts(com.sun.jdi.VirtualMachine,java.util.List<? extends com.sun.jdi.ReferenceType>) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void dispose(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void exit(com.sun.jdi.VirtualMachine,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void redefineClasses(com.sun.jdi.VirtualMachine,java.util.Map<? extends com.sun.jdi.ReferenceType,byte[]>) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void resume(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void setDebugTraceMode(com.sun.jdi.VirtualMachine,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void setDefaultStratum(com.sun.jdi.VirtualMachine,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void suspend(com.sun.jdi.VirtualMachine) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.ClassPrepareEventWrapper
meth public static com.sun.jdi.ReferenceType referenceType(com.sun.jdi.event.ClassPrepareEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.ClassPrepareEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.ClassUnloadEventWrapper
meth public static java.lang.String className(com.sun.jdi.event.ClassUnloadEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.lang.String classSignature(com.sun.jdi.event.ClassUnloadEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.EventIteratorWrapper
meth public static com.sun.jdi.event.Event nextEvent(com.sun.jdi.event.EventIterator) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.EventQueueWrapper
meth public static com.sun.jdi.event.EventSet remove(com.sun.jdi.event.EventQueue) throws java.lang.InterruptedException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.event.EventSet remove(com.sun.jdi.event.EventQueue,long) throws java.lang.InterruptedException,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.EventSetWrapper
meth public static com.sun.jdi.event.EventIterator eventIterator(com.sun.jdi.event.EventSet) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int suspendPolicy(com.sun.jdi.event.EventSet) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int suspendPolicy0(com.sun.jdi.event.EventSet)
meth public static void resume(com.sun.jdi.event.EventSet) throws org.netbeans.modules.debugger.jpda.jdi.IllegalThreadStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.EventWrapper
meth public static com.sun.jdi.request.EventRequest request(com.sun.jdi.event.Event) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.ExceptionEventWrapper
meth public static com.sun.jdi.Location catchLocation(com.sun.jdi.event.ExceptionEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ObjectReference exception(com.sun.jdi.event.ExceptionEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.LocatableEventWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.LocatableEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.MethodEntryEventWrapper
meth public static com.sun.jdi.Method method(com.sun.jdi.event.MethodEntryEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.MethodExitEventWrapper
meth public static com.sun.jdi.Method method(com.sun.jdi.event.MethodExitEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value returnValue(com.sun.jdi.event.MethodExitEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.ModificationWatchpointEventWrapper
meth public static com.sun.jdi.Value valueToBe(com.sun.jdi.event.ModificationWatchpointEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.MonitorContendedEnterEventWrapper
meth public static com.sun.jdi.ObjectReference monitor(com.sun.jdi.event.MonitorContendedEnterEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.MonitorContendedEnterEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.MonitorContendedEnteredEventWrapper
meth public static com.sun.jdi.ObjectReference monitor(com.sun.jdi.event.MonitorContendedEnteredEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.MonitorContendedEnteredEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.MonitorWaitEventWrapper
meth public static com.sun.jdi.ObjectReference monitor(com.sun.jdi.event.MonitorWaitEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.MonitorWaitEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static long timeout(com.sun.jdi.event.MonitorWaitEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.MonitorWaitedEventWrapper
meth public static boolean timedout(com.sun.jdi.event.MonitorWaitedEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean timedout0(com.sun.jdi.event.MonitorWaitedEvent)
meth public static com.sun.jdi.ObjectReference monitor(com.sun.jdi.event.MonitorWaitedEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.MonitorWaitedEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.ThreadDeathEventWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.ThreadDeathEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.ThreadStartEventWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.ThreadStartEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.VMStartEventWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.event.VMStartEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.event.WatchpointEventWrapper
meth public static com.sun.jdi.Field field(com.sun.jdi.event.WatchpointEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.ObjectReference object(com.sun.jdi.event.WatchpointEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.Value valueCurrent(com.sun.jdi.event.WatchpointEvent) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.BreakpointRequestWrapper
meth public static com.sun.jdi.Location location(com.sun.jdi.request.BreakpointRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.BreakpointRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.BreakpointRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.ClassPrepareRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.ClassPrepareRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.ClassPrepareRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.ClassPrepareRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addSourceNameFilter(com.sun.jdi.request.ClassPrepareRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.ClassUnloadRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.ClassUnloadRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.ClassUnloadRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.EventRequestManagerWrapper
meth public static com.sun.jdi.request.AccessWatchpointRequest createAccessWatchpointRequest(com.sun.jdi.request.EventRequestManager,com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.BreakpointRequest createBreakpointRequest(com.sun.jdi.request.EventRequestManager,com.sun.jdi.Location) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.ClassPrepareRequest createClassPrepareRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.ClassUnloadRequest createClassUnloadRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.ExceptionRequest createExceptionRequest(com.sun.jdi.request.EventRequestManager,com.sun.jdi.ReferenceType,boolean,boolean) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.MethodEntryRequest createMethodEntryRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.MethodExitRequest createMethodExitRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.ModificationWatchpointRequest createModificationWatchpointRequest(com.sun.jdi.request.EventRequestManager,com.sun.jdi.Field) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.MonitorContendedEnterRequest createMonitorContendedEnterRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.MonitorContendedEnteredRequest createMonitorContendedEnteredRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.MonitorWaitRequest createMonitorWaitRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.MonitorWaitedRequest createMonitorWaitedRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.StepRequest createStepRequest(com.sun.jdi.request.EventRequestManager,com.sun.jdi.ThreadReference,int,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.ThreadDeathRequest createThreadDeathRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.ThreadStartRequest createThreadStartRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static com.sun.jdi.request.VMDeathRequest createVMDeathRequest(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.AccessWatchpointRequest> accessWatchpointRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.AccessWatchpointRequest> accessWatchpointRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.BreakpointRequest> breakpointRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.BreakpointRequest> breakpointRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.ClassPrepareRequest> classPrepareRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.ClassPrepareRequest> classPrepareRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.ClassUnloadRequest> classUnloadRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.ClassUnloadRequest> classUnloadRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.ExceptionRequest> exceptionRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.ExceptionRequest> exceptionRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.MethodEntryRequest> methodEntryRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.MethodEntryRequest> methodEntryRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.MethodExitRequest> methodExitRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.MethodExitRequest> methodExitRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.ModificationWatchpointRequest> modificationWatchpointRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.ModificationWatchpointRequest> modificationWatchpointRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.MonitorContendedEnterRequest> monitorContendedEnterRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.MonitorContendedEnterRequest> monitorContendedEnterRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.MonitorContendedEnteredRequest> monitorContendedEnteredRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.MonitorContendedEnteredRequest> monitorContendedEnteredRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.MonitorWaitRequest> monitorWaitRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.MonitorWaitRequest> monitorWaitRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.MonitorWaitedRequest> monitorWaitedRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.MonitorWaitedRequest> monitorWaitedRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.StepRequest> stepRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.StepRequest> stepRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.ThreadDeathRequest> threadDeathRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.ThreadDeathRequest> threadDeathRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.ThreadStartRequest> threadStartRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.ThreadStartRequest> threadStartRequests0(com.sun.jdi.request.EventRequestManager)
meth public static java.util.List<com.sun.jdi.request.VMDeathRequest> vmDeathRequests(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static java.util.List<com.sun.jdi.request.VMDeathRequest> vmDeathRequests0(com.sun.jdi.request.EventRequestManager)
meth public static void deleteAllBreakpoints(com.sun.jdi.request.EventRequestManager) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void deleteEventRequest(com.sun.jdi.request.EventRequestManager,com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidRequestStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void deleteEventRequests(com.sun.jdi.request.EventRequestManager,java.util.List<? extends com.sun.jdi.request.EventRequest>) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidRequestStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.EventRequestWrapper
meth public static boolean isEnabled(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean isEnabled0(com.sun.jdi.request.EventRequest)
meth public static int suspendPolicy(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int suspendPolicy0(com.sun.jdi.request.EventRequest)
meth public static java.lang.Object getProperty(com.sun.jdi.request.EventRequest,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addCountFilter(com.sun.jdi.request.EventRequest,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void disable(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidRequestStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void enable(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidRequestStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void putProperty(com.sun.jdi.request.EventRequest,java.lang.Object,java.lang.Object) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void setEnabled(com.sun.jdi.request.EventRequest,boolean) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidRequestStateExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void setSuspendPolicy(com.sun.jdi.request.EventRequest,int) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.ExceptionRequestWrapper
meth public static boolean notifyCaught(com.sun.jdi.request.ExceptionRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean notifyCaught0(com.sun.jdi.request.ExceptionRequest)
meth public static boolean notifyUncaught(com.sun.jdi.request.ExceptionRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static boolean notifyUncaught0(com.sun.jdi.request.ExceptionRequest)
meth public static com.sun.jdi.ReferenceType exception(com.sun.jdi.request.ExceptionRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.ExceptionRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.ExceptionRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.ExceptionRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.ExceptionRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.ExceptionRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.MethodEntryRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.MethodEntryRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MethodEntryRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MethodEntryRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.MethodEntryRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.MethodEntryRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.MethodExitRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.MethodExitRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MethodExitRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MethodExitRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.MethodExitRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.MethodExitRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.MonitorContendedEnterRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.MonitorContendedEnterRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorContendedEnterRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorContendedEnterRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.MonitorContendedEnterRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.MonitorContendedEnterRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.MonitorContendedEnteredRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.MonitorContendedEnteredRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorContendedEnteredRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorContendedEnteredRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.MonitorContendedEnteredRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.MonitorContendedEnteredRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.MonitorWaitRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.MonitorWaitRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorWaitRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorWaitRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.MonitorWaitRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.MonitorWaitRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.MonitorWaitedRequestWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.MonitorWaitedRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorWaitedRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.MonitorWaitedRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.MonitorWaitedRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.MonitorWaitedRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.StepRequestWrapper
meth public static com.sun.jdi.ThreadReference thread(com.sun.jdi.request.StepRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int depth(com.sun.jdi.request.StepRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int depth0(com.sun.jdi.request.StepRequest)
meth public static int size(com.sun.jdi.request.StepRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static int size0(com.sun.jdi.request.StepRequest)
meth public static void addClassExclusionFilter(com.sun.jdi.request.StepRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.StepRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.StepRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.StepRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.ThreadDeathRequestWrapper
meth public static void addThreadFilter(com.sun.jdi.request.ThreadDeathRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.ThreadStartRequestWrapper
meth public static void addThreadFilter(com.sun.jdi.request.ThreadStartRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public final org.netbeans.modules.debugger.jpda.jdi.request.WatchpointRequestWrapper
meth public static com.sun.jdi.Field field(com.sun.jdi.request.WatchpointRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassExclusionFilter(com.sun.jdi.request.WatchpointRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.WatchpointRequest,com.sun.jdi.ReferenceType) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addClassFilter(com.sun.jdi.request.WatchpointRequest,java.lang.String) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addInstanceFilter(com.sun.jdi.request.WatchpointRequest,com.sun.jdi.ObjectReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void addThreadFilter(com.sun.jdi.request.WatchpointRequest,com.sun.jdi.ThreadReference) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object

CLSS public org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
cons protected init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,com.sun.jdi.Type,java.lang.String)
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,java.lang.String)
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,java.lang.String,java.lang.String)
fld public final static int MAX_STRING_LENGTH = 100000
intf org.netbeans.api.debugger.jpda.ObjectVariable
meth protected void setInnerValue(com.sun.jdi.Value)
meth public boolean equals(java.lang.Object)
meth public boolean hasAllTypes()
meth public int getFieldsCount()
meth public int hashCode()
meth public java.lang.String getToStringValue() throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public java.lang.String getToStringValue(int) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public java.lang.String getType()
meth public java.lang.String toString()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getAllInterfaces()
meth public java.util.List<org.netbeans.api.debugger.jpda.ObjectVariable> getReferringObjects(long)
meth public long getUniqueID()
meth public org.netbeans.api.debugger.jpda.Field getField(java.lang.String)
meth public org.netbeans.api.debugger.jpda.Field[] getAllStaticFields(int,int)
meth public org.netbeans.api.debugger.jpda.Field[] getFields(int,int)
meth public org.netbeans.api.debugger.jpda.Field[] getInheritedFields(int,int)
meth public org.netbeans.api.debugger.jpda.JPDAClassType getClassType()
meth public org.netbeans.api.debugger.jpda.Super getSuper()
meth public org.netbeans.api.debugger.jpda.Variable clone()
meth public org.netbeans.api.debugger.jpda.Variable evaluate(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.api.debugger.jpda.Variable invokeMethod(java.lang.String,java.lang.String,org.netbeans.api.debugger.jpda.Variable[]) throws java.lang.NoSuchMethodException,org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.api.debugger.jpda.Variable invokeMethod(org.netbeans.api.debugger.jpda.JPDAThread,java.lang.String,java.lang.String,org.netbeans.api.debugger.jpda.Variable[]) throws java.lang.NoSuchMethodException,org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public static org.netbeans.api.debugger.jpda.Field getField(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Field,com.sun.jdi.ObjectReference,java.lang.String)
meth public void loadAllTypes()
supr org.netbeans.modules.debugger.jpda.models.AbstractVariable
hfds cloneNumber,fields,fieldsLock,genericType,inheritedFields,logger,refreshFields,stateChangeListener,staticFields,superClass,superClassLoaded,superClassLoading,valueType,valueTypeLoaded,valueTypeLoading,valueTypeName
hcls DebuggetStateListener

CLSS public org.netbeans.modules.debugger.jpda.models.AbstractVariable
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,java.lang.String)
intf java.beans.Customizer
intf java.lang.Cloneable
intf org.netbeans.modules.debugger.jpda.expr.JDIVariable
meth protected final java.lang.String getID()
meth protected void setInnerValue(com.sun.jdi.Value)
meth protected void setValue(com.sun.jdi.Value) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public boolean equals(java.lang.Object)
meth public com.sun.jdi.Value getInnerValue()
meth public com.sun.jdi.Value getJDIValue()
meth public final org.netbeans.modules.debugger.jpda.JPDADebuggerImpl getDebugger()
meth public final void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public final void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public int hashCode()
meth public java.lang.Object createMirrorObject()
meth public java.lang.String getType()
meth public java.lang.String getValue()
meth public java.lang.String toString()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getClassType()
meth public org.netbeans.api.debugger.jpda.Variable clone()
meth public void setFromMirrorObject(java.lang.Object) throws java.io.InvalidObjectException
meth public void setObject(java.lang.Object)
meth public void setSilentChange(boolean)
meth public void setValue(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
supr java.lang.Object
hfds cloneNumber,debugger,id,listeners,silent,value

CLSS public org.netbeans.modules.debugger.jpda.models.ArgumentObjectVariable
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.ObjectReference,java.lang.String,java.lang.String)
intf org.netbeans.api.debugger.jpda.LocalVariable
meth protected final void setClassName(java.lang.String)
meth protected void setValue(com.sun.jdi.Value) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public com.sun.jdi.Value getInnerValue()
meth public java.lang.String getClassName()
meth public java.lang.String getDeclaredType()
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public org.netbeans.modules.debugger.jpda.models.ArgumentObjectVariable clone()
meth public void setValue(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
supr org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
hfds className,genericSignature,name

CLSS public org.netbeans.modules.debugger.jpda.models.ArgumentVariable
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.PrimitiveValue,java.lang.String,java.lang.String)
intf org.netbeans.api.debugger.jpda.LocalVariable
meth protected final void setClassName(java.lang.String)
meth public com.sun.jdi.Value getInnerValue()
meth public java.lang.String getClassName()
meth public java.lang.String getDeclaredType()
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public org.netbeans.modules.debugger.jpda.models.ArgumentVariable clone()
supr org.netbeans.modules.debugger.jpda.models.AbstractVariable
hfds className,genericSignature,name

CLSS public org.netbeans.modules.debugger.jpda.models.CallStackFrameImpl
cons public init(org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl,com.sun.jdi.StackFrame,int,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
intf org.netbeans.api.debugger.jpda.CallStackFrame
meth public boolean canPop()
meth public boolean equals(java.lang.Object)
meth public boolean isCurrent()
meth public boolean isObsolete()
meth public com.sun.jdi.StackFrame getStackFrame() throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InvalidStackFrameExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public int getFrameDepth()
meth public int getLineNumber(java.lang.String)
meth public int hashCode()
meth public java.lang.String getClassName()
meth public java.lang.String getDefaultStratum()
meth public java.lang.String getMethodName()
meth public java.lang.String getSourceDebugExtension()
meth public java.lang.String getSourceName(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public java.lang.String getSourcePath(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public java.lang.String toString()
meth public java.util.List<java.lang.String> getAvailableStrata()
meth public java.util.List<org.netbeans.api.debugger.jpda.LocalVariable> findOperationArguments(org.netbeans.spi.debugger.jpda.EditorContext$Operation)
meth public java.util.List<org.netbeans.api.debugger.jpda.MonitorInfo> getOwnedMonitors()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getClassType()
meth public org.netbeans.api.debugger.jpda.JPDAThread getThread()
meth public org.netbeans.api.debugger.jpda.LocalVariable[] getLocalVariables() throws com.sun.jdi.AbsentInformationException
meth public org.netbeans.api.debugger.jpda.LocalVariable[] getMethodArguments()
meth public org.netbeans.api.debugger.jpda.This getThisVariable()
meth public org.netbeans.spi.debugger.jpda.EditorContext$Operation getCurrentOperation(java.lang.String)
meth public void makeCurrent()
meth public void popFrame()
meth public void setCurrentOperation(org.netbeans.spi.debugger.jpda.EditorContext$Operation)
supr java.lang.Object
hfds availableStrata,currentOperation,debugger,depth,equalsInfo,getLineNumberLoopControl,sf,sfLocation,stratum,thread,valid
hcls EqualsInfo

CLSS public org.netbeans.modules.debugger.jpda.models.ClassFieldVariable
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Field,java.lang.String,java.lang.String,com.sun.jdi.ObjectReference)
intf org.netbeans.api.debugger.jpda.ClassVariable
meth public java.lang.String toString()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getReflectedType()
meth public org.netbeans.modules.debugger.jpda.models.ClassFieldVariable clone()
supr org.netbeans.modules.debugger.jpda.models.ObjectFieldVariable

CLSS public org.netbeans.modules.debugger.jpda.models.ClassVariableImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.ClassObjectReference,java.lang.String)
intf org.netbeans.api.debugger.jpda.ClassVariable
meth public java.lang.String toString()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getClassType()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getReflectedType()
meth public org.netbeans.modules.debugger.jpda.models.ClassVariableImpl clone()
supr org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
hfds clazz

CLSS public org.netbeans.modules.debugger.jpda.models.ExceptionVariableImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,java.lang.String,java.lang.String)
meth public java.lang.String getExceptionClassName()
supr org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
hfds exceptionClassName

CLSS public org.netbeans.modules.debugger.jpda.models.FieldReadVariableImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,java.lang.String,org.netbeans.api.debugger.jpda.Field)
meth public org.netbeans.api.debugger.jpda.Field getFieldVariable()
supr org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
hfds fieldVar

CLSS public org.netbeans.modules.debugger.jpda.models.FieldToBeVariableImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,java.lang.String,org.netbeans.api.debugger.jpda.Field)
meth public org.netbeans.api.debugger.jpda.Field getFieldVariable()
supr org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
hfds fieldVar

CLSS public org.netbeans.modules.debugger.jpda.models.FieldVariable
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Field,java.lang.String,com.sun.jdi.ObjectReference)
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.PrimitiveValue,com.sun.jdi.Field,java.lang.String,com.sun.jdi.ObjectReference)
fld protected com.sun.jdi.Field field
intf javax.security.auth.Refreshable
intf org.netbeans.api.debugger.jpda.Field
intf org.netbeans.api.debugger.jpda.MutableVariable
meth protected void setValue(com.sun.jdi.Value) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public boolean isCurrent()
meth public boolean isStatic()
meth public com.sun.jdi.Value getInnerValue()
meth public java.lang.String getClassName()
meth public java.lang.String getDeclaredType()
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getDeclaringClass()
meth public org.netbeans.modules.debugger.jpda.models.FieldVariable clone()
meth public void refresh() throws javax.security.auth.RefreshFailedException
supr org.netbeans.modules.debugger.jpda.models.AbstractVariable
hfds classType,logger,objectReference,value,valueLock,valueRetrieved,valueSet

CLSS public org.netbeans.modules.debugger.jpda.models.JPDAArrayTypeImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.ArrayType)
intf org.netbeans.api.debugger.jpda.JPDAArrayType
meth public java.lang.String getComponentTypeName()
meth public org.netbeans.api.debugger.jpda.VariableType getComponentType()
supr org.netbeans.modules.debugger.jpda.models.JPDAClassTypeImpl
hfds arrayType

CLSS public org.netbeans.modules.debugger.jpda.models.JPDAClassTypeImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.ReferenceType)
intf org.netbeans.api.debugger.jpda.JPDAClassType
meth protected final org.netbeans.modules.debugger.jpda.JPDADebuggerImpl getDebugger()
meth public boolean equals(java.lang.Object)
meth public boolean isInstanceOf(java.lang.String)
meth public com.sun.jdi.ReferenceType getType()
meth public int hashCode()
meth public java.lang.String getName()
meth public java.lang.String getSourceName() throws com.sun.jdi.AbsentInformationException
meth public java.util.List<org.netbeans.api.debugger.jpda.Field> staticFields()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getAllInterfaces()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getDirectInterfaces()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAClassType> getSubClasses()
meth public java.util.List<org.netbeans.api.debugger.jpda.ObjectVariable> getInstances(long)
meth public long getInstanceCount()
meth public org.netbeans.api.debugger.jpda.ClassVariable classObject()
meth public org.netbeans.api.debugger.jpda.ObjectVariable getClassLoader()
meth public org.netbeans.api.debugger.jpda.Super getSuperClass()
meth public org.netbeans.api.debugger.jpda.Variable invokeMethod(java.lang.String,java.lang.String,org.netbeans.api.debugger.jpda.Variable[]) throws java.lang.NoSuchMethodException,org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public org.netbeans.api.debugger.jpda.Variable invokeMethod(org.netbeans.api.debugger.jpda.JPDAThread,java.lang.String,java.lang.String,org.netbeans.api.debugger.jpda.Variable[]) throws java.lang.NoSuchMethodException,org.netbeans.api.debugger.jpda.InvalidExpressionException
supr java.lang.Object
hfds classType,debugger,loggerValue

CLSS public org.netbeans.modules.debugger.jpda.models.JPDAThreadGroupImpl
cons public init(com.sun.jdi.ThreadGroupReference,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
intf org.netbeans.api.debugger.jpda.JPDAThreadGroup
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public org.netbeans.modules.debugger.jpda.models.JPDAThreadGroupImpl getParentThreadGroup()
meth public org.netbeans.modules.debugger.jpda.models.JPDAThreadGroupImpl[] getThreadGroups()
meth public org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl[] getThreads()
meth public void resume()
meth public void suspend()
supr java.lang.Object
hfds debugger,name,tgr

CLSS public final org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl
cons public init(com.sun.jdi.ThreadReference,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
fld public final java.util.concurrent.locks.ReadWriteLock accessLock
fld public final static java.lang.String PROP_OPERATIONS_SET = "operationsSet"
fld public final static java.lang.String PROP_OPERATIONS_UPDATE = "operationsUpdate"
intf java.beans.Customizer
intf java.beans.beancontext.BeanContextChild
intf org.netbeans.api.debugger.jpda.JPDAThread
meth public boolean checkForBlockingThreads()
meth public boolean cleanBeforeResume()
meth public boolean isInStep()
meth public boolean isMethodInvoking()
meth public boolean isSuspended()
meth public boolean isSuspendedNoFire()
meth public boolean isSuspendedOnAnEvent()
meth public boolean isThreadSuspended()
meth public boolean notifyToBeResumedNoFire()
meth public boolean reduceThreadSuspendCount() throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public boolean unsetSteppingSuspendedByBpts()
meth public com.sun.jdi.Method getTopMethod()
meth public com.sun.jdi.ThreadReference getThreadReference()
meth public int getLineNumber(java.lang.String)
meth public int getStackDepth()
meth public int getState()
meth public java.beans.PropertyChangeEvent notifySuspended(boolean,boolean)
meth public java.beans.beancontext.BeanContext getBeanContext()
meth public java.lang.Object getPendingAction()
meth public java.lang.String getClassName()
meth public java.lang.String getMethodName()
meth public java.lang.String getName()
meth public java.lang.String getPendingString(java.lang.Object)
meth public java.lang.String getSourceName(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public java.lang.String getSourcePath(java.lang.String) throws com.sun.jdi.AbsentInformationException
meth public java.lang.String getThreadStateLog()
meth public java.lang.String toString()
meth public java.util.List<org.netbeans.api.debugger.jpda.JPDAThread> getLockerThreads()
meth public java.util.List<org.netbeans.api.debugger.jpda.MonitorInfo> getOwnedMonitorsAndFrames()
meth public java.util.List<org.netbeans.spi.debugger.jpda.EditorContext$Operation> getLastOperations()
meth public java.util.concurrent.locks.Lock getReadAccessLock()
meth public org.netbeans.api.debugger.jpda.CallStackFrame[] getCallStack() throws com.sun.jdi.AbsentInformationException
meth public org.netbeans.api.debugger.jpda.CallStackFrame[] getCallStack(int,int) throws com.sun.jdi.AbsentInformationException
meth public org.netbeans.api.debugger.jpda.JPDABreakpoint getCurrentBreakpoint()
meth public org.netbeans.api.debugger.jpda.JPDAThreadGroup getParentThreadGroup()
meth public org.netbeans.api.debugger.jpda.MonitorInfo getContendedMonitorAndOwner()
meth public org.netbeans.api.debugger.jpda.ObjectVariable getContendedMonitor()
meth public org.netbeans.api.debugger.jpda.ObjectVariable[] getOwnedMonitors()
meth public org.netbeans.api.debugger.jpda.Variable getPendingVariable(java.lang.Object)
meth public org.netbeans.api.debugger.jpda.event.JPDABreakpointEvent getCurrentBreakpointEvent()
meth public org.netbeans.modules.debugger.jpda.JPDADebuggerImpl getDebugger()
meth public org.netbeans.modules.debugger.jpda.models.ReturnVariableImpl getReturnVariable()
meth public org.netbeans.spi.debugger.jpda.EditorContext$Operation getCurrentOperation()
meth public static java.lang.String getThreadStateLog(com.sun.jdi.ThreadReference)
meth public void addLastOperation(org.netbeans.spi.debugger.jpda.EditorContext$Operation)
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void addVetoableChangeListener(java.lang.String,java.beans.VetoableChangeListener)
meth public void clearLastOperations()
meth public void disableMethodInvokeUntilResumed()
meth public void fireAfterNotifyToBeResumedNoFire()
meth public void fireAfterResume()
meth public void fireEvent(java.beans.PropertyChangeEvent)
meth public void holdLastOperations(boolean)
meth public void interrupt()
meth public void makeCurrent()
meth public void notifyMethodInvokeDone()
meth public void notifyMethodInvoking() throws java.beans.PropertyVetoException
meth public void notifySuspended()
meth public void notifySuspendedNoFire(boolean,boolean)
meth public void notifyToBeResumed()
meth public void popFrames(com.sun.jdi.StackFrame) throws com.sun.jdi.IncompatibleThreadStateException
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void removeVetoableChangeListener(java.lang.String,java.beans.VetoableChangeListener)
meth public void resume()
meth public void resumeAfterClean() throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public void resumeBlockingThreads()
meth public void setAsResumed(boolean)
meth public void setBeanContext(java.beans.beancontext.BeanContext) throws java.beans.PropertyVetoException
meth public void setCurrentBreakpoint(org.netbeans.api.debugger.jpda.JPDABreakpoint,org.netbeans.api.debugger.jpda.event.JPDABreakpointEvent)
meth public void setCurrentOperation(org.netbeans.spi.debugger.jpda.EditorContext$Operation)
meth public void setInStep(boolean,com.sun.jdi.request.EventRequest)
meth public void setObject(java.lang.Object)
meth public void setPendingAction(java.lang.Object)
meth public void setReturnVariable(org.netbeans.modules.debugger.jpda.models.ReturnVariableImpl)
meth public void setStepSuspendedBy(org.netbeans.api.debugger.jpda.JPDABreakpoint,boolean,java.util.List<org.netbeans.modules.debugger.jpda.models.JPDAThreadImpl>)
meth public void suspend()
meth public void updateLastOperation(org.netbeans.spi.debugger.jpda.EditorContext$Operation)
meth public void updateSuspendCount(int)
meth public void waitUntilMethodInvokeDone()
meth public void waitUntilMethodInvokeDone(long) throws java.lang.InterruptedException
supr java.lang.Object
hfds PROP_LOCKER_THREADS,PROP_STEP_SUSPENDED_BY_BREAKPOINT,breakpointEvent,cachedFrames,cachedFramesFrom,cachedFramesLock,cachedFramesTo,canSuspendToCheckForMonitors,currentBreakpoint,currentOperation,debugger,doKeepLastOperations,inStep,initiallySuspended,lastOperations,lockerThreadsList,lockerThreadsLock,lockerThreadsMonitor,logger,loggerS,methodInvoking,methodInvokingDisabledUntilResumed,operationsPch,ownedMonitorsAndFramesSingleAccessLock,pch,pendingAction,pendingActionsLock,pendingVariable,resumeChangeEvents,resumedBlockingThreads,resumedToFinishMethodInvocation,returnVariable,stackDepth,stepBreakpointLock,stepSuspendedByBreakpoint,steppingSuspendedByBptsInThreads,stepsDeletedDuringMethodInvoke,suspendCount,suspendRequested,suspendToCheckForMonitorsLock,suspended,suspendedNoFire,suspendedOnAnEvent,suspendedSteppingThreads,threadName,threadReference,unsuspendedStateWhenInvoking,vm,watcher
hcls ThreadListDelegate,ThreadReentrantReadWriteLock

CLSS public final org.netbeans.modules.debugger.jpda.models.JPDAWatchFactory
meth public static org.netbeans.api.debugger.jpda.JPDAWatch createJPDAWatch(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.api.debugger.Watch,com.sun.jdi.Value)
meth public static org.netbeans.api.debugger.jpda.JPDAWatch createJPDAWatch(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.api.debugger.Watch,java.lang.Throwable)
supr java.lang.Object

CLSS public org.netbeans.modules.debugger.jpda.models.MonitorInfoImpl
intf org.netbeans.api.debugger.jpda.MonitorInfo
meth public org.netbeans.api.debugger.jpda.CallStackFrame getFrame()
meth public org.netbeans.api.debugger.jpda.JPDAThread getThread()
meth public org.netbeans.api.debugger.jpda.ObjectVariable getMonitor()
supr java.lang.Object
hfds frame,monitor,thread

CLSS public org.netbeans.modules.debugger.jpda.models.ObjectFieldVariable
cons protected init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.ObjectReference,com.sun.jdi.Field,java.lang.String,java.lang.String,com.sun.jdi.ObjectReference)
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Field,java.lang.String,java.lang.String,com.sun.jdi.ObjectReference)
fld protected com.sun.jdi.Field field
fld protected com.sun.jdi.ObjectReference objectReference
fld protected com.sun.jdi.ReferenceType classType
fld protected java.lang.String genericSignature
intf javax.security.auth.Refreshable
intf org.netbeans.api.debugger.jpda.Field
intf org.netbeans.api.debugger.jpda.MutableVariable
meth protected void setValue(com.sun.jdi.Value) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
meth public boolean hasAllTypes()
meth public boolean isCurrent()
meth public boolean isStatic()
meth public com.sun.jdi.Value getInnerValue()
meth public java.lang.String getClassName()
meth public java.lang.String getDeclaredType()
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getClassType()
meth public org.netbeans.api.debugger.jpda.JPDAClassType getDeclaringClass()
meth public org.netbeans.modules.debugger.jpda.models.ObjectFieldVariable clone()
meth public void refresh() throws javax.security.auth.RefreshFailedException
supr org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
hfds logger,value,valueLock,valueRetrieved,valueSet

CLSS public final org.netbeans.modules.debugger.jpda.models.ObjectTranslation
meth public <%0 extends java.lang.Object> java.util.List<? extends {%%0}> getTranslated(java.util.function.Function<java.lang.Object,{%%0}>)
meth public java.lang.Object translate(com.sun.jdi.Mirror)
meth public java.lang.Object translate(com.sun.jdi.Mirror,java.lang.Object)
meth public java.lang.Object translateExisting(com.sun.jdi.Mirror)
meth public java.lang.Object translateOnThread(org.netbeans.api.debugger.jpda.JPDAThread,com.sun.jdi.Mirror,java.lang.Object)
meth public java.util.Collection getTranslated()
meth public static org.netbeans.modules.debugger.jpda.models.ObjectTranslation createLocalsTranslation(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
meth public static org.netbeans.modules.debugger.jpda.models.ObjectTranslation createThreadTranslation(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
meth public void remove(com.sun.jdi.Mirror)
supr java.lang.Object
hfds LOCALS_ID,THREAD_ID,cache,debugger,threadCache,translationID
hcls TranslationFuture

CLSS public org.netbeans.modules.debugger.jpda.models.ReturnVariableImpl
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,com.sun.jdi.Value,java.lang.String,java.lang.String)
intf org.netbeans.api.debugger.jpda.ReturnVariable
meth public java.lang.String methodName()
meth public java.lang.String toString()
meth public org.netbeans.modules.debugger.jpda.models.ReturnVariableImpl clone()
supr org.netbeans.modules.debugger.jpda.models.AbstractObjectVariable
hfds methodName

CLSS public final org.netbeans.modules.debugger.jpda.models.ShortenedStrings
innr public static StringInfo
meth public static org.netbeans.modules.debugger.jpda.models.ShortenedStrings$StringInfo getShortenedInfo(java.lang.String)
supr java.lang.Object
hfds infoStrings,isLittleEndianCache,retrievingStrings,stringsCache
hcls InternalStringEncoding,StringValueInfo

CLSS public static org.netbeans.modules.debugger.jpda.models.ShortenedStrings$StringInfo
 outer org.netbeans.modules.debugger.jpda.models.ShortenedStrings
meth public int getLength()
meth public int getShortLength()
meth public java.io.Reader getContent()
meth public java.lang.String getFullString()
supr java.lang.Object
hfds backingEncoding,chars,isLittleEndian,length,shortLength,sr

CLSS public org.netbeans.modules.debugger.jpda.models.ThreadsCache
cons public init(org.netbeans.modules.debugger.jpda.JPDADebuggerImpl)
fld public final static java.lang.String PROP_GROUP_ADDED = "groupAdded"
fld public final static java.lang.String PROP_THREAD_DIED = "threadDied"
fld public final static java.lang.String PROP_THREAD_STARTED = "threadStarted"
fld public final static java.lang.String THREAD_NAME_FILTER_PATTERN = "org.netbeans.modules.debugger.jpda"
intf org.netbeans.modules.debugger.jpda.util.Executor
meth public boolean exec(com.sun.jdi.event.Event)
meth public java.util.List<com.sun.jdi.ThreadGroupReference> getGroups(com.sun.jdi.ThreadGroupReference)
meth public java.util.List<com.sun.jdi.ThreadGroupReference> getTopLevelThreadGroups()
meth public java.util.List<com.sun.jdi.ThreadReference> getAllThreads()
meth public java.util.List<com.sun.jdi.ThreadReference> getThreads(com.sun.jdi.ThreadGroupReference)
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void assureThreadIsCached(com.sun.jdi.ThreadReference)
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removed(com.sun.jdi.request.EventRequest)
meth public void setVirtualMachine(com.sun.jdi.VirtualMachine)
supr java.lang.Object
hfds allThreads,canFireChanges,debugger,groupMap,logger,pcs,threadMap,uninitializedGroupList,vm

CLSS public org.netbeans.modules.debugger.jpda.models.VariableMirrorTranslator
meth public static com.sun.jdi.Value createValueFromMirror(java.lang.Object,boolean,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl) throws com.sun.jdi.ClassNotLoadedException,com.sun.jdi.InvalidTypeException,java.io.InvalidObjectException,org.netbeans.modules.debugger.jpda.jdi.ClassNotPreparedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.IllegalArgumentExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.ObjectCollectedExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
supr java.lang.Object
hfds NO_MIRROR,logger

CLSS public abstract interface org.netbeans.modules.debugger.jpda.spi.StrataProvider
meth public abstract int getStrataLineNumber(org.netbeans.modules.debugger.jpda.models.CallStackFrameImpl,java.lang.String)
meth public abstract java.lang.String getDefaultStratum(org.netbeans.modules.debugger.jpda.models.CallStackFrameImpl)
meth public abstract java.util.List<java.lang.String> getAvailableStrata(org.netbeans.modules.debugger.jpda.models.CallStackFrameImpl)

CLSS public abstract interface org.netbeans.modules.debugger.jpda.util.ConditionedExecutor
intf org.netbeans.modules.debugger.jpda.util.Executor
meth public abstract boolean processCondition(com.sun.jdi.event.Event)

CLSS public abstract interface org.netbeans.modules.debugger.jpda.util.Executor
meth public abstract boolean exec(com.sun.jdi.event.Event)
meth public abstract void removed(com.sun.jdi.request.EventRequest)

CLSS public org.netbeans.modules.debugger.jpda.util.JPDAUtils
cons public init()
fld public final static boolean IS_JDK_180_40 = true
 anno 0 java.lang.Deprecated(boolean forRemoval=true, java.lang.String since="")
meth public final static com.sun.jdi.ReferenceType getPreferredReferenceType(java.util.List<com.sun.jdi.ReferenceType>,java.util.logging.Logger) throws org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void printFeatures(java.util.logging.Logger,com.sun.jdi.VirtualMachine)
supr java.lang.Object

CLSS public org.netbeans.modules.debugger.jpda.util.Operator
cons public init(com.sun.jdi.VirtualMachine,org.netbeans.modules.debugger.jpda.JPDADebuggerImpl,org.netbeans.modules.debugger.jpda.util.Executor,java.lang.Runnable,java.util.concurrent.locks.ReadWriteLock)
fld public final static java.lang.String SILENT_EVENT_PROPERTY = "silent"
meth public static com.sun.jdi.ThreadReference getEventThread(com.sun.jdi.event.Event) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public static void dumpThreadsStatus(com.sun.jdi.VirtualMachine,java.util.logging.Level)
meth public void addEventInterceptor(java.util.function.Function<com.sun.jdi.event.EventSet,java.lang.Boolean>)
meth public void notifyMethodInvokeDone(com.sun.jdi.ThreadReference)
meth public void notifyMethodInvoking(com.sun.jdi.ThreadReference)
meth public void register(com.sun.jdi.request.EventRequest,org.netbeans.modules.debugger.jpda.util.Executor) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public void removeEventInterceptor(java.util.function.Function<com.sun.jdi.event.EventSet,java.lang.Boolean>)
meth public void start()
meth public void stop()
meth public void unregister(com.sun.jdi.request.EventRequest) throws org.netbeans.modules.debugger.jpda.jdi.InternalExceptionWrapper,org.netbeans.modules.debugger.jpda.jdi.VMDisconnectedExceptionWrapper
meth public void waitForParallelEventsToProcess() throws java.lang.InterruptedException
supr java.lang.Object
hfds canInterrupt,debugger,eventHandler,eventHandlers,eventsInterceptors,haveParallelEventsToProcess,logger,loopControl,methodInvokingThreads,parallelEvents,stop,thread,threadsResumedForEvents
hcls HandlerTask,LoopControl,SuspendControllersSupport,SuspendCount

CLSS public final org.netbeans.modules.debugger.jpda.util.WeakCacheMap<%0 extends java.lang.Object, %1 extends org.netbeans.modules.debugger.jpda.util.WeakCacheMap$KeyedValue<{org.netbeans.modules.debugger.jpda.util.WeakCacheMap%0}>>
cons public init()
innr public abstract interface static KeyedValue
meth public boolean containsKey(java.lang.Object)
meth public boolean containsValue(java.lang.Object)
meth public boolean isEmpty()
meth public int size()
meth public java.util.Set<java.util.Map$Entry<{org.netbeans.modules.debugger.jpda.util.WeakCacheMap%0},{org.netbeans.modules.debugger.jpda.util.WeakCacheMap%1}>> entrySet()
meth public void clear()
meth public {org.netbeans.modules.debugger.jpda.util.WeakCacheMap%1} get(java.lang.Object)
meth public {org.netbeans.modules.debugger.jpda.util.WeakCacheMap%1} put({org.netbeans.modules.debugger.jpda.util.WeakCacheMap%0},{org.netbeans.modules.debugger.jpda.util.WeakCacheMap%1})
meth public {org.netbeans.modules.debugger.jpda.util.WeakCacheMap%1} remove(java.lang.Object)
supr java.util.AbstractMap<{org.netbeans.modules.debugger.jpda.util.WeakCacheMap%0},{org.netbeans.modules.debugger.jpda.util.WeakCacheMap%1}>
hfds cache

CLSS public abstract interface static org.netbeans.modules.debugger.jpda.util.WeakCacheMap$KeyedValue<%0 extends java.lang.Object>
 outer org.netbeans.modules.debugger.jpda.util.WeakCacheMap
meth public abstract {org.netbeans.modules.debugger.jpda.util.WeakCacheMap$KeyedValue%0} getKey()

CLSS public final org.netbeans.modules.debugger.jpda.util.WeakHashMapActive<%0 extends java.lang.Object, %1 extends java.lang.Object>
cons public init()
meth public int size()
meth public java.util.Set<java.util.Map$Entry<{org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%0},{org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%1}>> entrySet()
meth public void clear()
meth public {org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%1} get(java.lang.Object)
meth public {org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%1} put({org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%0},{org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%1})
meth public {org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%1} remove(java.lang.Object)
supr java.util.AbstractMap<{org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%0},{org.netbeans.modules.debugger.jpda.util.WeakHashMapActive%1}>
hfds map,queue
hcls KeyReference

CLSS public abstract org.netbeans.spi.debugger.ActionsProvider
cons public init()
innr public abstract interface static !annotation Registration
innr public abstract interface static !annotation Registrations
meth public abstract boolean isEnabled(java.lang.Object)
meth public abstract java.util.Set getActions()
meth public abstract void addActionsProviderListener(org.netbeans.spi.debugger.ActionsProviderListener)
meth public abstract void doAction(java.lang.Object)
meth public abstract void removeActionsProviderListener(org.netbeans.spi.debugger.ActionsProviderListener)
meth public void postAction(java.lang.Object,java.lang.Runnable)
supr java.lang.Object
hfds debuggerActionsRP
hcls ContextAware

CLSS public abstract org.netbeans.spi.debugger.ActionsProviderSupport
cons public init()
meth protected final void setEnabled(java.lang.Object,boolean)
meth protected void fireActionStateChanged(java.lang.Object,boolean)
meth public abstract void doAction(java.lang.Object)
meth public boolean isEnabled(java.lang.Object)
meth public final void addActionsProviderListener(org.netbeans.spi.debugger.ActionsProviderListener)
meth public final void removeActionsProviderListener(org.netbeans.spi.debugger.ActionsProviderListener)
supr org.netbeans.spi.debugger.ActionsProvider
hfds enabled,listeners

CLSS public abstract interface org.netbeans.spi.debugger.BreakpointsActivationProvider
meth public abstract boolean areBreakpointsActive()
meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public abstract void setBreakpointsActive(boolean)

CLSS public abstract org.netbeans.spi.debugger.DebuggerEngineProvider
cons public init()
innr public abstract interface static !annotation Registration
meth public abstract java.lang.Object[] getServices()
meth public abstract java.lang.String getEngineTypeID()
meth public abstract java.lang.String[] getLanguages()
meth public abstract void setDestructor(org.netbeans.api.debugger.DebuggerEngine$Destructor)
supr java.lang.Object
hcls ContextAware

CLSS public abstract org.netbeans.spi.debugger.SessionProvider
cons public init()
innr public abstract interface static !annotation Registration
meth public abstract java.lang.Object[] getServices()
meth public abstract java.lang.String getLocationName()
meth public abstract java.lang.String getSessionName()
meth public abstract java.lang.String getTypeID()
supr java.lang.Object
hcls ContextAware

CLSS public abstract interface org.netbeans.spi.debugger.jpda.Evaluator<%0 extends java.lang.Object>
innr public abstract interface static !annotation Registration
innr public final static Context
innr public final static Expression
innr public final static Result
meth public abstract org.netbeans.spi.debugger.jpda.Evaluator$Result evaluate(org.netbeans.spi.debugger.jpda.Evaluator$Expression<{org.netbeans.spi.debugger.jpda.Evaluator%0}>,org.netbeans.spi.debugger.jpda.Evaluator$Context) throws org.netbeans.api.debugger.jpda.InvalidExpressionException

CLSS public abstract org.netbeans.spi.debugger.jpda.SmartSteppingCallback
cons public init()
innr public abstract interface static !annotation Registration
innr public final static StopOrStep
meth public abstract boolean stopHere(org.netbeans.spi.debugger.ContextProvider,org.netbeans.api.debugger.jpda.JPDAThread,org.netbeans.api.debugger.jpda.SmartSteppingFilter)
meth public abstract void initFilter(org.netbeans.api.debugger.jpda.SmartSteppingFilter)
meth public org.netbeans.spi.debugger.jpda.SmartSteppingCallback$StopOrStep stopAt(org.netbeans.spi.debugger.ContextProvider,org.netbeans.api.debugger.jpda.CallStackFrame,org.netbeans.api.debugger.jpda.SmartSteppingFilter)
supr java.lang.Object
hcls ContextAware

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

