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

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

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

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

CLSS public 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
hfds serialVersionUID

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

CLSS public abstract interface 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
hfds keySet,values

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.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 abstract void addStep(org.netbeans.api.debugger.jpda.JPDAThread)
meth public boolean getHidden()
meth public int getDepth()
meth public int getSize()
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)
supr java.lang.Object
hfds depth,hidden,pcs,size

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} 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 callStartTime,logger

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,SINGLE_THREAD_STEPPING,allInterfacesMap,altCSF,attachingCookie,breakpointsActive,canBeModified,canBeModifiedLock,compoundSmartSteppingListener,currentCallStackFrame,currentSuspendedNoFireThread,currentThread,currentThreadAndFrameLock,deadlockDetector,doContinue,engineContext,expressionPool,finishing,interestedThreadGroups,io,javaEngineProvider,jsr45EngineProviders,jvmVersionPattern,languages,lastStratumn,localsTranslation,logger,lookupProvider,lvGenericSignatureMethod,markedObjectLabels,markedObjects,methodCallsUnsupportedExc,operator,pcs,preferredTopFrame,ptd,singleThreadStepResumeDecision,smartSteppingFilter,starting,state,stateLock,stepInterruptByBptResumeDecision,suspend,tcGenericSignatureMethod,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,compoundSmartSteppingListener,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,end,exact,exclusionPatternsListener,filter,options,pcs,start

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 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,smartSteppingFilterImpl,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,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 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)
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 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 setValue(java.lang.String) throws org.netbeans.api.debugger.jpda.InvalidExpressionException
supr java.lang.Object
hfds cloneNumber,debugger,id,listeners,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 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

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,retrievingStrings,stringsCache
hcls 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 chars,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 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 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,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()

