#Signature file v4.1
#Version 1.135.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)
intf java.io.Serializable
intf java.lang.Comparable<{java.lang.Enum%0}>
meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth protected final void finalize()
meth public final boolean equals(java.lang.Object)
meth public final int compareTo({java.lang.Enum%0})
meth public final int hashCode()
meth public final int ordinal()
meth public final java.lang.Class<{java.lang.Enum%0}> getDeclaringClass()
meth public final java.lang.String name()
meth public java.lang.String toString()
meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String)
supr java.lang.Object

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

CLSS public 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
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 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 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 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 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 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()

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
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
hfds JAVA_VERSION

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()

