#Signature file v4.1
#Version 1.126.1

CLSS public abstract java.awt.Component
cons protected init()
fld protected javax.accessibility.AccessibleContext accessibleContext
fld public final static float BOTTOM_ALIGNMENT = 1.0
fld public final static float CENTER_ALIGNMENT = 0.5
fld public final static float LEFT_ALIGNMENT = 0.0
fld public final static float RIGHT_ALIGNMENT = 1.0
fld public final static float TOP_ALIGNMENT = 0.0
innr protected BltBufferStrategy
innr protected FlipBufferStrategy
innr protected abstract AccessibleAWTComponent
innr public final static !enum BaselineResizeBehavior
intf java.awt.MenuContainer
intf java.awt.image.ImageObserver
intf java.io.Serializable
meth protected boolean requestFocus(boolean)
meth protected boolean requestFocusInWindow(boolean)
meth protected final void disableEvents(long)
meth protected final void enableEvents(long)
meth protected java.awt.AWTEvent coalesceEvents(java.awt.AWTEvent,java.awt.AWTEvent)
meth protected java.lang.String paramString()
meth protected void firePropertyChange(java.lang.String,boolean,boolean)
meth protected void firePropertyChange(java.lang.String,int,int)
meth protected void firePropertyChange(java.lang.String,java.lang.Object,java.lang.Object)
meth protected void processComponentEvent(java.awt.event.ComponentEvent)
meth protected void processEvent(java.awt.AWTEvent)
meth protected void processFocusEvent(java.awt.event.FocusEvent)
meth protected void processHierarchyBoundsEvent(java.awt.event.HierarchyEvent)
meth protected void processHierarchyEvent(java.awt.event.HierarchyEvent)
meth protected void processInputMethodEvent(java.awt.event.InputMethodEvent)
meth protected void processKeyEvent(java.awt.event.KeyEvent)
meth protected void processMouseEvent(java.awt.event.MouseEvent)
meth protected void processMouseMotionEvent(java.awt.event.MouseEvent)
meth protected void processMouseWheelEvent(java.awt.event.MouseWheelEvent)
meth public <%0 extends java.util.EventListener> {%%0}[] getListeners(java.lang.Class<{%%0}>)
meth public boolean action(java.awt.Event,java.lang.Object)
 anno 0 java.lang.Deprecated()
meth public boolean areFocusTraversalKeysSet(int)
meth public boolean contains(int,int)
meth public boolean contains(java.awt.Point)
meth public boolean getFocusTraversalKeysEnabled()
meth public boolean getIgnoreRepaint()
meth public boolean gotFocus(java.awt.Event,java.lang.Object)
 anno 0 java.lang.Deprecated()
meth public boolean handleEvent(java.awt.Event)
 anno 0 java.lang.Deprecated()
meth public boolean hasFocus()
meth public boolean imageUpdate(java.awt.Image,int,int,int,int,int)
meth public boolean inside(int,int)
 anno 0 java.lang.Deprecated()
meth public boolean isBackgroundSet()
meth public boolean isCursorSet()
meth public boolean isDisplayable()
meth public boolean isDoubleBuffered()
meth public boolean isEnabled()
meth public boolean isFocusCycleRoot(java.awt.Container)
meth public boolean isFocusOwner()
meth public boolean isFocusTraversable()
 anno 0 java.lang.Deprecated()
meth public boolean isFocusable()
meth public boolean isFontSet()
meth public boolean isForegroundSet()
meth public boolean isLightweight()
meth public boolean isMaximumSizeSet()
meth public boolean isMinimumSizeSet()
meth public boolean isOpaque()
meth public boolean isPreferredSizeSet()
meth public boolean isShowing()
meth public boolean isValid()
meth public boolean isVisible()
meth public boolean keyDown(java.awt.Event,int)
 anno 0 java.lang.Deprecated()
meth public boolean keyUp(java.awt.Event,int)
 anno 0 java.lang.Deprecated()
meth public boolean lostFocus(java.awt.Event,java.lang.Object)
 anno 0 java.lang.Deprecated()
meth public boolean mouseDown(java.awt.Event,int,int)
 anno 0 java.lang.Deprecated()
meth public boolean mouseDrag(java.awt.Event,int,int)
 anno 0 java.lang.Deprecated()
meth public boolean mouseEnter(java.awt.Event,int,int)
 anno 0 java.lang.Deprecated()
meth public boolean mouseExit(java.awt.Event,int,int)
 anno 0 java.lang.Deprecated()
meth public boolean mouseMove(java.awt.Event,int,int)
 anno 0 java.lang.Deprecated()
meth public boolean mouseUp(java.awt.Event,int,int)
 anno 0 java.lang.Deprecated()
meth public boolean postEvent(java.awt.Event)
 anno 0 java.lang.Deprecated()
meth public boolean prepareImage(java.awt.Image,int,int,java.awt.image.ImageObserver)
meth public boolean prepareImage(java.awt.Image,java.awt.image.ImageObserver)
meth public boolean requestFocusInWindow()
meth public final java.lang.Object getTreeLock()
meth public final void dispatchEvent(java.awt.AWTEvent)
meth public float getAlignmentX()
meth public float getAlignmentY()
meth public int checkImage(java.awt.Image,int,int,java.awt.image.ImageObserver)
meth public int checkImage(java.awt.Image,java.awt.image.ImageObserver)
meth public int getBaseline(int,int)
meth public int getHeight()
meth public int getWidth()
meth public int getX()
meth public int getY()
meth public java.awt.Color getBackground()
meth public java.awt.Color getForeground()
meth public java.awt.Component getComponentAt(int,int)
meth public java.awt.Component getComponentAt(java.awt.Point)
meth public java.awt.Component locate(int,int)
 anno 0 java.lang.Deprecated()
meth public java.awt.Component$BaselineResizeBehavior getBaselineResizeBehavior()
meth public java.awt.ComponentOrientation getComponentOrientation()
meth public java.awt.Container getFocusCycleRootAncestor()
meth public java.awt.Container getParent()
meth public java.awt.Cursor getCursor()
meth public java.awt.Dimension getMaximumSize()
meth public java.awt.Dimension getMinimumSize()
meth public java.awt.Dimension getPreferredSize()
meth public java.awt.Dimension getSize()
meth public java.awt.Dimension getSize(java.awt.Dimension)
meth public java.awt.Dimension minimumSize()
 anno 0 java.lang.Deprecated()
meth public java.awt.Dimension preferredSize()
 anno 0 java.lang.Deprecated()
meth public java.awt.Dimension size()
 anno 0 java.lang.Deprecated()
meth public java.awt.Font getFont()
meth public java.awt.FontMetrics getFontMetrics(java.awt.Font)
meth public java.awt.Graphics getGraphics()
meth public java.awt.GraphicsConfiguration getGraphicsConfiguration()
meth public java.awt.Image createImage(int,int)
meth public java.awt.Image createImage(java.awt.image.ImageProducer)
meth public java.awt.Point getLocation()
meth public java.awt.Point getLocation(java.awt.Point)
meth public java.awt.Point getLocationOnScreen()
meth public java.awt.Point getMousePosition()
meth public java.awt.Point location()
 anno 0 java.lang.Deprecated()
meth public java.awt.Rectangle bounds()
 anno 0 java.lang.Deprecated()
meth public java.awt.Rectangle getBounds()
meth public java.awt.Rectangle getBounds(java.awt.Rectangle)
meth public java.awt.Toolkit getToolkit()
meth public java.awt.dnd.DropTarget getDropTarget()
meth public java.awt.event.ComponentListener[] getComponentListeners()
meth public java.awt.event.FocusListener[] getFocusListeners()
meth public java.awt.event.HierarchyBoundsListener[] getHierarchyBoundsListeners()
meth public java.awt.event.HierarchyListener[] getHierarchyListeners()
meth public java.awt.event.InputMethodListener[] getInputMethodListeners()
meth public java.awt.event.KeyListener[] getKeyListeners()
meth public java.awt.event.MouseListener[] getMouseListeners()
meth public java.awt.event.MouseMotionListener[] getMouseMotionListeners()
meth public java.awt.event.MouseWheelListener[] getMouseWheelListeners()
meth public java.awt.im.InputContext getInputContext()
meth public java.awt.im.InputMethodRequests getInputMethodRequests()
meth public java.awt.image.ColorModel getColorModel()
meth public java.awt.image.VolatileImage createVolatileImage(int,int)
meth public java.awt.image.VolatileImage createVolatileImage(int,int,java.awt.ImageCapabilities) throws java.awt.AWTException
meth public java.awt.peer.ComponentPeer getPeer()
 anno 0 java.lang.Deprecated()
meth public java.beans.PropertyChangeListener[] getPropertyChangeListeners()
meth public java.beans.PropertyChangeListener[] getPropertyChangeListeners(java.lang.String)
meth public java.lang.String getName()
meth public java.lang.String toString()
meth public java.util.Locale getLocale()
meth public java.util.Set<java.awt.AWTKeyStroke> getFocusTraversalKeys(int)
meth public javax.accessibility.AccessibleContext getAccessibleContext()
meth public void add(java.awt.PopupMenu)
meth public void addComponentListener(java.awt.event.ComponentListener)
meth public void addFocusListener(java.awt.event.FocusListener)
meth public void addHierarchyBoundsListener(java.awt.event.HierarchyBoundsListener)
meth public void addHierarchyListener(java.awt.event.HierarchyListener)
meth public void addInputMethodListener(java.awt.event.InputMethodListener)
meth public void addKeyListener(java.awt.event.KeyListener)
meth public void addMouseListener(java.awt.event.MouseListener)
meth public void addMouseMotionListener(java.awt.event.MouseMotionListener)
meth public void addMouseWheelListener(java.awt.event.MouseWheelListener)
meth public void addNotify()
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void applyComponentOrientation(java.awt.ComponentOrientation)
meth public void deliverEvent(java.awt.Event)
 anno 0 java.lang.Deprecated()
meth public void disable()
 anno 0 java.lang.Deprecated()
meth public void doLayout()
meth public void enable()
 anno 0 java.lang.Deprecated()
meth public void enable(boolean)
 anno 0 java.lang.Deprecated()
meth public void enableInputMethods(boolean)
meth public void firePropertyChange(java.lang.String,byte,byte)
meth public void firePropertyChange(java.lang.String,char,char)
meth public void firePropertyChange(java.lang.String,double,double)
meth public void firePropertyChange(java.lang.String,float,float)
meth public void firePropertyChange(java.lang.String,long,long)
meth public void firePropertyChange(java.lang.String,short,short)
meth public void hide()
 anno 0 java.lang.Deprecated()
meth public void invalidate()
meth public void layout()
 anno 0 java.lang.Deprecated()
meth public void list()
meth public void list(java.io.PrintStream)
meth public void list(java.io.PrintStream,int)
meth public void list(java.io.PrintWriter)
meth public void list(java.io.PrintWriter,int)
meth public void move(int,int)
 anno 0 java.lang.Deprecated()
meth public void nextFocus()
 anno 0 java.lang.Deprecated()
meth public void paint(java.awt.Graphics)
meth public void paintAll(java.awt.Graphics)
meth public void print(java.awt.Graphics)
meth public void printAll(java.awt.Graphics)
meth public void remove(java.awt.MenuComponent)
meth public void removeComponentListener(java.awt.event.ComponentListener)
meth public void removeFocusListener(java.awt.event.FocusListener)
meth public void removeHierarchyBoundsListener(java.awt.event.HierarchyBoundsListener)
meth public void removeHierarchyListener(java.awt.event.HierarchyListener)
meth public void removeInputMethodListener(java.awt.event.InputMethodListener)
meth public void removeKeyListener(java.awt.event.KeyListener)
meth public void removeMouseListener(java.awt.event.MouseListener)
meth public void removeMouseMotionListener(java.awt.event.MouseMotionListener)
meth public void removeMouseWheelListener(java.awt.event.MouseWheelListener)
meth public void removeNotify()
meth public void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public void removePropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void repaint()
meth public void repaint(int,int,int,int)
meth public void repaint(long)
meth public void repaint(long,int,int,int,int)
meth public void requestFocus()
meth public void reshape(int,int,int,int)
 anno 0 java.lang.Deprecated()
meth public void resize(int,int)
 anno 0 java.lang.Deprecated()
meth public void resize(java.awt.Dimension)
 anno 0 java.lang.Deprecated()
meth public void revalidate()
meth public void setBackground(java.awt.Color)
meth public void setBounds(int,int,int,int)
meth public void setBounds(java.awt.Rectangle)
meth public void setComponentOrientation(java.awt.ComponentOrientation)
meth public void setCursor(java.awt.Cursor)
meth public void setDropTarget(java.awt.dnd.DropTarget)
meth public void setEnabled(boolean)
meth public void setFocusTraversalKeys(int,java.util.Set<? extends java.awt.AWTKeyStroke>)
meth public void setFocusTraversalKeysEnabled(boolean)
meth public void setFocusable(boolean)
meth public void setFont(java.awt.Font)
meth public void setForeground(java.awt.Color)
meth public void setIgnoreRepaint(boolean)
meth public void setLocale(java.util.Locale)
meth public void setLocation(int,int)
meth public void setLocation(java.awt.Point)
meth public void setMaximumSize(java.awt.Dimension)
meth public void setMinimumSize(java.awt.Dimension)
meth public void setName(java.lang.String)
meth public void setPreferredSize(java.awt.Dimension)
meth public void setSize(int,int)
meth public void setSize(java.awt.Dimension)
meth public void setVisible(boolean)
meth public void show()
 anno 0 java.lang.Deprecated()
meth public void show(boolean)
 anno 0 java.lang.Deprecated()
meth public void transferFocus()
meth public void transferFocusBackward()
meth public void transferFocusUpCycle()
meth public void update(java.awt.Graphics)
meth public void validate()
supr java.lang.Object
hfds FOCUS_TRAVERSABLE_DEFAULT,FOCUS_TRAVERSABLE_SET,FOCUS_TRAVERSABLE_UNKNOWN,LOCK,acc,actionListenerK,adjustmentListenerK,appContext,autoFocusTransferOnDisposal,background,backgroundEraseDisabled,boundsOp,bufferStrategy,changeSupport,coalesceEventsParams,coalesceMap,coalescingEnabled,componentListener,componentListenerK,componentOrientation,componentSerializedDataVersion,compoundShape,containerListenerK,cursor,dropTarget,enabled,eventCache,eventLog,eventMask,focusListener,focusListenerK,focusLog,focusTraversalKeyPropertyNames,focusTraversalKeys,focusTraversalKeysEnabled,focusable,font,foreground,graphicsConfig,height,hierarchyBoundsListener,hierarchyBoundsListenerK,hierarchyListener,hierarchyListenerK,ignoreRepaint,incRate,inputMethodListener,inputMethodListenerK,isAddNotifyComplete,isFocusTraversableOverridden,isInc,isPacked,itemListenerK,keyListener,keyListenerK,locale,log,maxSize,maxSizeSet,minSize,minSizeSet,mixingCutoutRegion,mixingLog,mouseListener,mouseListenerK,mouseMotionListener,mouseMotionListenerK,mouseWheelListener,mouseWheelListenerK,name,nameExplicitlySet,newEventsOnly,objectLock,ownedWindowK,parent,peer,peerFont,popups,prefSize,prefSizeSet,requestFocusController,serialVersionUID,textListenerK,valid,visible,width,windowClosingException,windowFocusListenerK,windowListenerK,windowStateListenerK,x,y
hcls AWTTreeLock,BltSubRegionBufferStrategy,DummyRequestFocusController,FlipSubRegionBufferStrategy,ProxyCapabilities,SingleBufferStrategy

CLSS public java.awt.Container
cons public init()
innr protected AccessibleAWTContainer
meth protected java.lang.String paramString()
meth protected void addImpl(java.awt.Component,java.lang.Object,int)
meth protected void processContainerEvent(java.awt.event.ContainerEvent)
meth protected void processEvent(java.awt.AWTEvent)
meth protected void validateTree()
meth public <%0 extends java.util.EventListener> {%%0}[] getListeners(java.lang.Class<{%%0}>)
meth public boolean areFocusTraversalKeysSet(int)
meth public boolean isAncestorOf(java.awt.Component)
meth public boolean isFocusCycleRoot()
meth public boolean isFocusCycleRoot(java.awt.Container)
meth public boolean isFocusTraversalPolicySet()
meth public boolean isValidateRoot()
meth public final boolean isFocusTraversalPolicyProvider()
meth public final void setFocusTraversalPolicyProvider(boolean)
meth public float getAlignmentX()
meth public float getAlignmentY()
meth public int countComponents()
 anno 0 java.lang.Deprecated()
meth public int getComponentCount()
meth public int getComponentZOrder(java.awt.Component)
meth public java.awt.Component add(java.awt.Component)
meth public java.awt.Component add(java.awt.Component,int)
meth public java.awt.Component add(java.lang.String,java.awt.Component)
meth public java.awt.Component findComponentAt(int,int)
meth public java.awt.Component findComponentAt(java.awt.Point)
meth public java.awt.Component getComponent(int)
meth public java.awt.Component getComponentAt(int,int)
meth public java.awt.Component getComponentAt(java.awt.Point)
meth public java.awt.Component locate(int,int)
 anno 0 java.lang.Deprecated()
meth public java.awt.Component[] getComponents()
meth public java.awt.Dimension getMaximumSize()
meth public java.awt.Dimension getMinimumSize()
meth public java.awt.Dimension getPreferredSize()
meth public java.awt.Dimension minimumSize()
 anno 0 java.lang.Deprecated()
meth public java.awt.Dimension preferredSize()
 anno 0 java.lang.Deprecated()
meth public java.awt.FocusTraversalPolicy getFocusTraversalPolicy()
meth public java.awt.Insets getInsets()
meth public java.awt.Insets insets()
 anno 0 java.lang.Deprecated()
meth public java.awt.LayoutManager getLayout()
meth public java.awt.Point getMousePosition(boolean)
meth public java.awt.event.ContainerListener[] getContainerListeners()
meth public java.util.Set<java.awt.AWTKeyStroke> getFocusTraversalKeys(int)
meth public void add(java.awt.Component,java.lang.Object)
meth public void add(java.awt.Component,java.lang.Object,int)
meth public void addContainerListener(java.awt.event.ContainerListener)
meth public void addNotify()
meth public void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public void addPropertyChangeListener(java.lang.String,java.beans.PropertyChangeListener)
meth public void applyComponentOrientation(java.awt.ComponentOrientation)
meth public void deliverEvent(java.awt.Event)
 anno 0 java.lang.Deprecated()
meth public void doLayout()
meth public void invalidate()
meth public void layout()
 anno 0 java.lang.Deprecated()
meth public void list(java.io.PrintStream,int)
meth public void list(java.io.PrintWriter,int)
meth public void paint(java.awt.Graphics)
meth public void paintComponents(java.awt.Graphics)
meth public void print(java.awt.Graphics)
meth public void printComponents(java.awt.Graphics)
meth public void remove(int)
meth public void remove(java.awt.Component)
meth public void removeAll()
meth public void removeContainerListener(java.awt.event.ContainerListener)
meth public void removeNotify()
meth public void setComponentZOrder(java.awt.Component,int)
meth public void setFocusCycleRoot(boolean)
meth public void setFocusTraversalKeys(int,java.util.Set<? extends java.awt.AWTKeyStroke>)
meth public void setFocusTraversalPolicy(java.awt.FocusTraversalPolicy)
meth public void setFont(java.awt.Font)
meth public void setLayout(java.awt.LayoutManager)
meth public void transferFocusDownCycle()
meth public void update(java.awt.Graphics)
meth public void validate()
supr java.awt.Component
hfds EMPTY_ARRAY,INCLUDE_SELF,SEARCH_HEAVYWEIGHTS,component,containerListener,containerSerializedDataVersion,descendUnconditionallyWhenValidating,descendantsCount,dispatcher,eventLog,focusCycleRoot,focusTraversalPolicy,focusTraversalPolicyProvider,isJavaAwtSmartInvalidate,layoutMgr,listeningBoundsChildren,listeningChildren,log,mixingLog,modalAppContext,modalComp,numOfHWComponents,numOfLWComponents,preserveBackgroundColor,printing,printingThreads,serialPersistentFields,serialVersionUID
hcls DropTargetEventTargetFilter,EventTargetFilter,MouseEventTargetFilter,WakingRunnable

CLSS public abstract interface java.awt.MenuContainer
meth public abstract boolean postEvent(java.awt.Event)
 anno 0 java.lang.Deprecated()
meth public abstract java.awt.Font getFont()
meth public abstract void remove(java.awt.MenuComponent)

CLSS public abstract interface java.awt.event.ActionListener
intf java.util.EventListener
meth public abstract void actionPerformed(java.awt.event.ActionEvent)

CLSS public abstract interface java.awt.image.ImageObserver
fld public final static int ABORT = 128
fld public final static int ALLBITS = 32
fld public final static int ERROR = 64
fld public final static int FRAMEBITS = 16
fld public final static int HEIGHT = 2
fld public final static int PROPERTIES = 4
fld public final static int SOMEBITS = 8
fld public final static int WIDTH = 1
meth public abstract boolean imageUpdate(java.awt.Image,int,int,int,int,int)

CLSS public java.beans.FeatureDescriptor
cons public init()
meth public boolean isExpert()
meth public boolean isHidden()
meth public boolean isPreferred()
meth public java.lang.Object getValue(java.lang.String)
meth public java.lang.String getDisplayName()
meth public java.lang.String getName()
meth public java.lang.String getShortDescription()
meth public java.lang.String toString()
meth public java.util.Enumeration<java.lang.String> attributeNames()
meth public void setDisplayName(java.lang.String)
meth public void setExpert(boolean)
meth public void setHidden(boolean)
meth public void setName(java.lang.String)
meth public void setPreferred(boolean)
meth public void setShortDescription(java.lang.String)
meth public void setValue(java.lang.String,java.lang.Object)
supr java.lang.Object
hfds TRANSIENT,classRef,displayName,expert,hidden,name,preferred,shortDescription,table

CLSS public abstract interface java.io.Serializable

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

CLSS public abstract interface !annotation java.lang.Deprecated
 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=[CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE])
intf java.lang.annotation.Annotation

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 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 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.annotation.Annotation
meth public abstract boolean equals(java.lang.Object)
meth public abstract int hashCode()
meth public abstract java.lang.Class<? extends java.lang.annotation.Annotation> annotationType()
meth public abstract java.lang.String toString()

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

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

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

CLSS public abstract interface java.util.EventListener

CLSS public java.util.EventObject
cons public init(java.lang.Object)
fld protected java.lang.Object source
intf java.io.Serializable
meth public java.lang.Object getSource()
meth public java.lang.String toString()
supr java.lang.Object
hfds serialVersionUID

CLSS public abstract interface javax.accessibility.Accessible
meth public abstract javax.accessibility.AccessibleContext getAccessibleContext()

CLSS public javax.swing.DefaultListCellRenderer
cons public init()
fld protected static javax.swing.border.Border noFocusBorder
innr public static UIResource
intf java.io.Serializable
intf javax.swing.ListCellRenderer<java.lang.Object>
meth protected void firePropertyChange(java.lang.String,java.lang.Object,java.lang.Object)
meth public boolean isOpaque()
meth public java.awt.Component getListCellRendererComponent(javax.swing.JList<?>,java.lang.Object,int,boolean,boolean)
meth public void firePropertyChange(java.lang.String,boolean,boolean)
meth public void firePropertyChange(java.lang.String,byte,byte)
meth public void firePropertyChange(java.lang.String,char,char)
meth public void firePropertyChange(java.lang.String,double,double)
meth public void firePropertyChange(java.lang.String,float,float)
meth public void firePropertyChange(java.lang.String,int,int)
meth public void firePropertyChange(java.lang.String,long,long)
meth public void firePropertyChange(java.lang.String,short,short)
meth public void invalidate()
meth public void repaint()
meth public void repaint(java.awt.Rectangle)
meth public void repaint(long,int,int,int,int)
meth public void revalidate()
meth public void validate()
supr javax.swing.JLabel
hfds DEFAULT_NO_FOCUS_BORDER,SAFE_NO_FOCUS_BORDER

CLSS public abstract javax.swing.JComponent
cons public init()
fld protected javax.swing.event.EventListenerList listenerList
fld protected javax.swing.plaf.ComponentUI ui
fld public final static int UNDEFINED_CONDITION = -1
fld public final static int WHEN_ANCESTOR_OF_FOCUSED_COMPONENT = 1
fld public final static int WHEN_FOCUSED = 0
fld public final static int WHEN_IN_FOCUSED_WINDOW = 2
fld public final static java.lang.String TOOL_TIP_TEXT_KEY = "ToolTipText"
innr public abstract AccessibleJComponent
intf java.io.Serializable
meth protected boolean isPaintingOrigin()
meth protected boolean processKeyBinding(javax.swing.KeyStroke,java.awt.event.KeyEvent,int,boolean)
meth protected boolean requestFocusInWindow(boolean)
meth protected java.awt.Graphics getComponentGraphics(java.awt.Graphics)
meth protected java.lang.String paramString()
meth protected void fireVetoableChange(java.lang.String,java.lang.Object,java.lang.Object) throws java.beans.PropertyVetoException
meth protected void paintBorder(java.awt.Graphics)
meth protected void paintChildren(java.awt.Graphics)
meth protected void paintComponent(java.awt.Graphics)
meth protected void printBorder(java.awt.Graphics)
meth protected void printChildren(java.awt.Graphics)
meth protected void printComponent(java.awt.Graphics)
meth protected void processComponentKeyEvent(java.awt.event.KeyEvent)
meth protected void processKeyEvent(java.awt.event.KeyEvent)
meth protected void processMouseEvent(java.awt.event.MouseEvent)
meth protected void processMouseMotionEvent(java.awt.event.MouseEvent)
meth protected void setUI(javax.swing.plaf.ComponentUI)
meth public <%0 extends java.util.EventListener> {%%0}[] getListeners(java.lang.Class<{%%0}>)
meth public boolean contains(int,int)
meth public boolean getAutoscrolls()
meth public boolean getInheritsPopupMenu()
meth public boolean getVerifyInputWhenFocusTarget()
meth public boolean isDoubleBuffered()
meth public boolean isManagingFocus()
 anno 0 java.lang.Deprecated()
meth public boolean isOpaque()
meth public boolean isOptimizedDrawingEnabled()
meth public boolean isPaintingTile()
meth public boolean isRequestFocusEnabled()
meth public boolean isValidateRoot()
meth public boolean requestDefaultFocus()
 anno 0 java.lang.Deprecated()
meth public boolean requestFocus(boolean)
meth public boolean requestFocusInWindow()
meth public final boolean isPaintingForPrint()
meth public final java.lang.Object getClientProperty(java.lang.Object)
meth public final javax.swing.ActionMap getActionMap()
meth public final javax.swing.InputMap getInputMap()
meth public final javax.swing.InputMap getInputMap(int)
meth public final void putClientProperty(java.lang.Object,java.lang.Object)
meth public final void setActionMap(javax.swing.ActionMap)
meth public final void setInputMap(int,javax.swing.InputMap)
meth public float getAlignmentX()
meth public float getAlignmentY()
meth public int getBaseline(int,int)
meth public int getConditionForKeyStroke(javax.swing.KeyStroke)
meth public int getDebugGraphicsOptions()
meth public int getHeight()
meth public int getWidth()
meth public int getX()
meth public int getY()
meth public java.awt.Component getNextFocusableComponent()
 anno 0 java.lang.Deprecated()
meth public java.awt.Component$BaselineResizeBehavior getBaselineResizeBehavior()
meth public java.awt.Container getTopLevelAncestor()
meth public java.awt.Dimension getMaximumSize()
meth public java.awt.Dimension getMinimumSize()
meth public java.awt.Dimension getPreferredSize()
meth public java.awt.Dimension getSize(java.awt.Dimension)
meth public java.awt.FontMetrics getFontMetrics(java.awt.Font)
meth public java.awt.Graphics getGraphics()
meth public java.awt.Insets getInsets()
meth public java.awt.Insets getInsets(java.awt.Insets)
meth public java.awt.Point getLocation(java.awt.Point)
meth public java.awt.Point getPopupLocation(java.awt.event.MouseEvent)
meth public java.awt.Point getToolTipLocation(java.awt.event.MouseEvent)
meth public java.awt.Rectangle getBounds(java.awt.Rectangle)
meth public java.awt.Rectangle getVisibleRect()
meth public java.awt.event.ActionListener getActionForKeyStroke(javax.swing.KeyStroke)
meth public java.beans.VetoableChangeListener[] getVetoableChangeListeners()
meth public java.lang.String getToolTipText()
meth public java.lang.String getToolTipText(java.awt.event.MouseEvent)
meth public java.lang.String getUIClassID()
meth public javax.swing.InputVerifier getInputVerifier()
meth public javax.swing.JPopupMenu getComponentPopupMenu()
meth public javax.swing.JRootPane getRootPane()
meth public javax.swing.JToolTip createToolTip()
meth public javax.swing.KeyStroke[] getRegisteredKeyStrokes()
meth public javax.swing.TransferHandler getTransferHandler()
meth public javax.swing.border.Border getBorder()
meth public javax.swing.event.AncestorListener[] getAncestorListeners()
meth public static boolean isLightweightComponent(java.awt.Component)
meth public static java.util.Locale getDefaultLocale()
meth public static void setDefaultLocale(java.util.Locale)
meth public void addAncestorListener(javax.swing.event.AncestorListener)
meth public void addNotify()
meth public void addVetoableChangeListener(java.beans.VetoableChangeListener)
meth public void computeVisibleRect(java.awt.Rectangle)
meth public void disable()
 anno 0 java.lang.Deprecated()
meth public void enable()
 anno 0 java.lang.Deprecated()
meth public void firePropertyChange(java.lang.String,boolean,boolean)
meth public void firePropertyChange(java.lang.String,char,char)
meth public void firePropertyChange(java.lang.String,int,int)
meth public void grabFocus()
meth public void hide()
 anno 0 java.lang.Deprecated()
meth public void paint(java.awt.Graphics)
meth public void paintImmediately(int,int,int,int)
meth public void paintImmediately(java.awt.Rectangle)
meth public void print(java.awt.Graphics)
meth public void printAll(java.awt.Graphics)
meth public void registerKeyboardAction(java.awt.event.ActionListener,java.lang.String,javax.swing.KeyStroke,int)
meth public void registerKeyboardAction(java.awt.event.ActionListener,javax.swing.KeyStroke,int)
meth public void removeAncestorListener(javax.swing.event.AncestorListener)
meth public void removeNotify()
meth public void removeVetoableChangeListener(java.beans.VetoableChangeListener)
meth public void repaint(java.awt.Rectangle)
meth public void repaint(long,int,int,int,int)
meth public void requestFocus()
meth public void resetKeyboardActions()
meth public void reshape(int,int,int,int)
 anno 0 java.lang.Deprecated()
meth public void revalidate()
meth public void scrollRectToVisible(java.awt.Rectangle)
meth public void setAlignmentX(float)
meth public void setAlignmentY(float)
meth public void setAutoscrolls(boolean)
meth public void setBackground(java.awt.Color)
meth public void setBorder(javax.swing.border.Border)
meth public void setComponentPopupMenu(javax.swing.JPopupMenu)
meth public void setDebugGraphicsOptions(int)
meth public void setDoubleBuffered(boolean)
meth public void setEnabled(boolean)
meth public void setFocusTraversalKeys(int,java.util.Set<? extends java.awt.AWTKeyStroke>)
meth public void setFont(java.awt.Font)
meth public void setForeground(java.awt.Color)
meth public void setInheritsPopupMenu(boolean)
meth public void setInputVerifier(javax.swing.InputVerifier)
meth public void setMaximumSize(java.awt.Dimension)
meth public void setMinimumSize(java.awt.Dimension)
meth public void setNextFocusableComponent(java.awt.Component)
 anno 0 java.lang.Deprecated()
meth public void setOpaque(boolean)
meth public void setPreferredSize(java.awt.Dimension)
meth public void setRequestFocusEnabled(boolean)
meth public void setToolTipText(java.lang.String)
meth public void setTransferHandler(javax.swing.TransferHandler)
meth public void setVerifyInputWhenFocusTarget(boolean)
meth public void setVisible(boolean)
meth public void unregisterKeyboardAction(javax.swing.KeyStroke)
meth public void update(java.awt.Graphics)
meth public void updateUI()
supr java.awt.Container
hfds ACTIONMAP_CREATED,ANCESTOR_INPUTMAP_CREATED,ANCESTOR_USING_BUFFER,AUTOSCROLLS_SET,COMPLETELY_OBSCURED,CREATED_DOUBLE_BUFFER,DEBUG_GRAPHICS_LOADED,FOCUS_INPUTMAP_CREATED,FOCUS_TRAVERSAL_KEYS_BACKWARD_SET,FOCUS_TRAVERSAL_KEYS_FORWARD_SET,INHERITS_POPUP_MENU,INPUT_VERIFIER_SOURCE_KEY,IS_DOUBLE_BUFFERED,IS_OPAQUE,IS_PAINTING_TILE,IS_PRINTING,IS_PRINTING_ALL,IS_REPAINTING,KEYBOARD_BINDINGS_KEY,KEY_EVENTS_ENABLED,NEXT_FOCUS,NOT_OBSCURED,OPAQUE_SET,PARTIALLY_OBSCURED,REQUEST_FOCUS_DISABLED,RESERVED_1,RESERVED_2,RESERVED_3,RESERVED_4,RESERVED_5,RESERVED_6,WHEN_IN_FOCUSED_WINDOW_BINDINGS,WIF_INPUTMAP_CREATED,WRITE_OBJ_COUNTER_FIRST,WRITE_OBJ_COUNTER_LAST,aaTextInfo,actionMap,alignmentX,alignmentY,ancestorInputMap,autoscrolls,border,clientProperties,componentObtainingGraphicsFrom,componentObtainingGraphicsFromLock,defaultLocale,flags,focusController,focusInputMap,inputVerifier,isAlignmentXSet,isAlignmentYSet,managingFocusBackwardTraversalKeys,managingFocusForwardTraversalKeys,paintingChild,popupMenu,readObjectCallbacks,revalidateRunnableScheduled,tempRectangles,uiClassID,verifyInputWhenFocusTarget,vetoableChangeSupport,windowInputMap
hcls ActionStandin,IntVector,KeyboardState,ReadObjectCallback

CLSS public javax.swing.JLabel
cons public init()
cons public init(java.lang.String)
cons public init(java.lang.String,int)
cons public init(java.lang.String,javax.swing.Icon,int)
cons public init(javax.swing.Icon)
cons public init(javax.swing.Icon,int)
fld protected java.awt.Component labelFor
innr protected AccessibleJLabel
intf javax.accessibility.Accessible
intf javax.swing.SwingConstants
meth protected int checkHorizontalKey(int,java.lang.String)
meth protected int checkVerticalKey(int,java.lang.String)
meth protected java.lang.String paramString()
meth public boolean imageUpdate(java.awt.Image,int,int,int,int,int)
meth public int getDisplayedMnemonic()
meth public int getDisplayedMnemonicIndex()
meth public int getHorizontalAlignment()
meth public int getHorizontalTextPosition()
meth public int getIconTextGap()
meth public int getVerticalAlignment()
meth public int getVerticalTextPosition()
meth public java.awt.Component getLabelFor()
meth public java.lang.String getText()
meth public java.lang.String getUIClassID()
meth public javax.accessibility.AccessibleContext getAccessibleContext()
meth public javax.swing.Icon getDisabledIcon()
meth public javax.swing.Icon getIcon()
meth public javax.swing.plaf.LabelUI getUI()
meth public void setDisabledIcon(javax.swing.Icon)
meth public void setDisplayedMnemonic(char)
meth public void setDisplayedMnemonic(int)
meth public void setDisplayedMnemonicIndex(int)
meth public void setHorizontalAlignment(int)
meth public void setHorizontalTextPosition(int)
meth public void setIcon(javax.swing.Icon)
meth public void setIconTextGap(int)
meth public void setLabelFor(java.awt.Component)
meth public void setText(java.lang.String)
meth public void setUI(javax.swing.plaf.LabelUI)
meth public void setVerticalAlignment(int)
meth public void setVerticalTextPosition(int)
meth public void updateUI()
supr javax.swing.JComponent
hfds LABELED_BY_PROPERTY,defaultIcon,disabledIcon,disabledIconSet,horizontalAlignment,horizontalTextPosition,iconTextGap,mnemonic,mnemonicIndex,text,uiClassID,verticalAlignment,verticalTextPosition

CLSS public javax.swing.JPanel
cons public init()
cons public init(boolean)
cons public init(java.awt.LayoutManager)
cons public init(java.awt.LayoutManager,boolean)
innr protected AccessibleJPanel
intf javax.accessibility.Accessible
meth protected java.lang.String paramString()
meth public java.lang.String getUIClassID()
meth public javax.accessibility.AccessibleContext getAccessibleContext()
meth public javax.swing.plaf.PanelUI getUI()
meth public void setUI(javax.swing.plaf.PanelUI)
meth public void updateUI()
supr javax.swing.JComponent
hfds uiClassID

CLSS public abstract interface javax.swing.ListCellRenderer<%0 extends java.lang.Object>
meth public abstract java.awt.Component getListCellRendererComponent(javax.swing.JList<? extends {javax.swing.ListCellRenderer%0}>,{javax.swing.ListCellRenderer%0},int,boolean,boolean)

CLSS public abstract interface javax.swing.SwingConstants
fld public final static int BOTTOM = 3
fld public final static int CENTER = 0
fld public final static int EAST = 3
fld public final static int HORIZONTAL = 0
fld public final static int LEADING = 10
fld public final static int LEFT = 2
fld public final static int NEXT = 12
fld public final static int NORTH = 1
fld public final static int NORTH_EAST = 2
fld public final static int NORTH_WEST = 8
fld public final static int PREVIOUS = 13
fld public final static int RIGHT = 4
fld public final static int SOUTH = 5
fld public final static int SOUTH_EAST = 4
fld public final static int SOUTH_WEST = 6
fld public final static int TOP = 1
fld public final static int TRAILING = 11
fld public final static int VERTICAL = 1
fld public final static int WEST = 7

CLSS public abstract interface javax.swing.event.CellEditorListener
intf java.util.EventListener
meth public abstract void editingCanceled(javax.swing.event.ChangeEvent)
meth public abstract void editingStopped(javax.swing.event.ChangeEvent)

CLSS public abstract interface javax.swing.event.ListSelectionListener
intf java.util.EventListener
meth public abstract void valueChanged(javax.swing.event.ListSelectionEvent)

CLSS public final org.netbeans.modules.java.api.common.ModuleRoots
fld public final static java.lang.String DEFAULT_MODULE_LABEL
fld public final static java.lang.String DEFAULT_TEST_MODULE_LABEL
meth public java.lang.String createInitialDisplayName(java.io.File)
meth public java.lang.String createInitialPath()
meth public java.lang.String getRootDisplayName(java.lang.String,java.lang.String)
meth public java.lang.String getRootPath(java.lang.String)
meth public java.lang.String[] getRootPathProperties()
meth public java.net.URL[] getRootURLs(boolean)
meth public static org.netbeans.modules.java.api.common.ModuleRoots create(org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.spi.project.support.ant.ReferenceHelper,java.lang.String,java.lang.String,boolean,java.lang.String)
meth public void putModuleRoots(java.net.URL[],java.lang.String[])
supr org.netbeans.modules.java.api.common.SourceRoots
hfds DEFAULT_MODULE_PATH,DEFAULT_PATH_TEMPLATE,DEFAULT_TEST_MODULE_PATH

CLSS public abstract org.netbeans.modules.java.api.common.Roots
meth public !varargs static org.netbeans.modules.java.api.common.Roots nonSourceRoots(java.lang.String[])
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public abstract java.lang.String[] getRootDisplayNames()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public abstract java.lang.String[] getRootProperties()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public final void addPropertyChangeListener(java.beans.PropertyChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public final void removePropertyChangeListener(java.beans.PropertyChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.Roots propertyBased(java.lang.String[],java.lang.String[],boolean,java.lang.String,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NullAllowed()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
supr java.lang.Object
hfds hint,isSourceRoot,support,supportIncludes,type
hcls MyAccessor,NonSourceRoots,PropSourceRoots

CLSS public org.netbeans.modules.java.api.common.SourceRoots
fld public final static java.lang.String DEFAULT_SOURCE_LABEL
fld public final static java.lang.String DEFAULT_TEST_LABEL
fld public final static java.lang.String PROP_ROOTS
fld public final static java.lang.String PROP_ROOT_PROPERTIES
meth public boolean isTest()
meth public java.lang.String createInitialDisplayName(java.io.File)
meth public java.lang.String getRootDisplayName(java.lang.String,java.lang.String)
meth public java.lang.String[] getRootDisplayNames()
meth public java.lang.String[] getRootNames()
meth public java.lang.String[] getRootProperties()
meth public java.net.URL[] getRootURLs()
meth public java.net.URL[] getRootURLs(boolean)
meth public org.openide.filesystems.FileObject[] getRoots()
meth public static org.netbeans.modules.java.api.common.SourceRoots create(org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.spi.project.support.ant.ReferenceHelper,java.lang.String,java.lang.String,boolean,java.lang.String)
meth public void putRoots(java.net.URL[],java.lang.String[])
supr org.netbeans.modules.java.api.common.Roots
hfds LOG,REF_PREFIX,elementName,evaluator,helper,isTest,listener,newRootNameTemplate,projectConfigurationNamespace,projectDir,refHelper,sourceRootNames,sourceRootPathProperties,sourceRootProperties,sourceRootURLs,sourceRoots
hcls ProjectMetadataListener,RootInfo

CLSS public abstract interface org.netbeans.modules.java.api.common.ant.PackageModifierImplementation
meth public abstract void exportPackageAction(java.util.Collection<java.lang.String>,boolean)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public final org.netbeans.modules.java.api.common.ant.UpdateHelper
cons public init(org.netbeans.modules.java.api.common.ant.UpdateImplementation,org.netbeans.spi.project.support.ant.AntProjectHelper)
meth public boolean isCurrent()
meth public boolean requestUpdate() throws java.io.IOException
meth public org.netbeans.spi.project.support.ant.AntProjectHelper getAntProjectHelper()
meth public org.netbeans.spi.project.support.ant.EditableProperties getProperties(java.lang.String)
meth public org.w3c.dom.Element getPrimaryConfigurationData(boolean)
meth public void putPrimaryConfigurationData(org.w3c.dom.Element,boolean)
meth public void putProperties(java.lang.String,org.netbeans.spi.project.support.ant.EditableProperties)
supr java.lang.Object
hfds helper,updateProject

CLSS public abstract interface org.netbeans.modules.java.api.common.ant.UpdateImplementation
meth public abstract boolean canUpdate()
meth public abstract boolean isCurrent()
meth public abstract org.netbeans.spi.project.support.ant.EditableProperties getUpdatedProjectProperties()
meth public abstract org.w3c.dom.Element getUpdatedSharedConfigurationData()
meth public abstract void saveUpdate(org.netbeans.spi.project.support.ant.EditableProperties) throws java.io.IOException

CLSS public org.netbeans.modules.java.api.common.applet.AppletSupport
fld public static java.lang.Boolean unitTestingSupport_isApplet
meth public static boolean isApplet(org.openide.filesystems.FileObject)
meth public static java.net.URL generateHtmlFileURL(org.openide.filesystems.FileObject,org.openide.filesystems.FileObject,org.openide.filesystems.FileObject,java.lang.String)
meth public static java.net.URL getHTMLPageURL(org.openide.filesystems.FileObject,java.lang.String)
meth public static org.openide.filesystems.FileObject generateSecurityPolicy(org.openide.filesystems.FileObject)
supr java.lang.Object
hfds CLASS_EXT,HTML_EXT,JDK_15,POLICY_FILE_EXT,POLICY_FILE_NAME

CLSS public abstract org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider
cons protected init()
innr public abstract interface static ClassPathsChangeListener
innr public final static ClassPathsChangeEvent
intf org.netbeans.spi.java.classpath.ClassPathProvider
meth protected final void fireClassPathsChange(java.util.Collection<? extends java.lang.String>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public abstract java.lang.String[] getPropertyName(org.netbeans.api.project.SourceGroup,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public abstract org.netbeans.api.java.classpath.ClassPath[] getProjectClassPaths(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public final void addClassPathsChangeListener(org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider$ClassPathsChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public final void removeClassPathsChangeListener(org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider$ClassPathsChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds listeners

CLSS public final static org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider$ClassPathsChangeEvent
 outer org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider
meth public java.util.Collection<? extends java.lang.String> getChangedClassPathTypes()
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr java.util.EventObject
hfds classPathTypes

CLSS public abstract interface static org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider$ClassPathsChangeListener
 outer org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider
intf java.util.EventListener
meth public abstract void classPathsChange(org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider$ClassPathsChangeEvent)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public final org.netbeans.modules.java.api.common.classpath.ClassPathExtender
 anno 0 java.lang.Deprecated()
cons public init(org.netbeans.modules.java.api.common.classpath.ClassPathModifier,java.lang.String,java.lang.String)
intf org.netbeans.spi.java.project.classpath.ProjectClassPathExtender
meth public boolean addAntArtifact(org.netbeans.api.project.ant.AntArtifact,java.net.URI) throws java.io.IOException
meth public boolean addAntArtifacts(java.lang.String,org.netbeans.api.project.ant.AntArtifact[],java.net.URI[],java.lang.String) throws java.io.IOException
meth public boolean addArchiveFile(org.openide.filesystems.FileObject) throws java.io.IOException
meth public boolean addArchiveFiles(java.lang.String,org.openide.filesystems.FileObject[],java.lang.String) throws java.io.IOException
meth public boolean addLibraries(java.lang.String,org.netbeans.api.project.libraries.Library[],java.lang.String) throws java.io.IOException
meth public boolean addLibrary(org.netbeans.api.project.libraries.Library) throws java.io.IOException
supr java.lang.Object
hfds classPathProperty,delegate,elementName

CLSS public final org.netbeans.modules.java.api.common.classpath.ClassPathModifier
cons public init(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Callback,org.netbeans.modules.java.api.common.classpath.ClassPathModifier$Callback,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback)
fld public final static int ADD = 1
fld public final static int ADD_NO_HEURISTICS = 3
fld public final static int REMOVE = 2
innr public abstract interface static Callback
meth public boolean addAntArtifacts(org.netbeans.api.project.ant.AntArtifact[],java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public boolean addLibraries(org.netbeans.api.project.libraries.Library[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public boolean addRoots(java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public boolean addRoots(java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String,int) throws java.io.IOException
meth public boolean addRoots(java.net.URL[],java.lang.String) throws java.io.IOException
meth public boolean addRoots(java.net.URL[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public boolean removeAntArtifacts(org.netbeans.api.project.ant.AntArtifact[],java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public boolean removeLibraries(org.netbeans.api.project.libraries.Library[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public boolean removeRoots(java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public boolean removeRoots(java.net.URL[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth public java.lang.String[] getExtensibleClassPathTypes(org.netbeans.api.project.SourceGroup)
meth public org.netbeans.api.project.SourceGroup[] getExtensibleSourceGroups()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathSupport getClassPathSupport()
supr org.netbeans.spi.java.project.classpath.ProjectClassPathModifierImplementation
hfds LOG,cpModifierCallback,cpUiSupportCallback,cs,eval,project,refHelper,updateHelper

CLSS public abstract interface static org.netbeans.modules.java.api.common.classpath.ClassPathModifier$Callback
 outer org.netbeans.modules.java.api.common.classpath.ClassPathModifier
meth public abstract java.lang.String getClassPathProperty(org.netbeans.api.project.SourceGroup,java.lang.String)
meth public abstract java.lang.String getElementName(java.lang.String)

CLSS public org.netbeans.modules.java.api.common.classpath.ClassPathModifierSupport
cons public init()
fld public final static int ADD = 1
fld public final static int ADD_NO_HEURISTICS = 3
fld public final static int REMOVE = 2
meth public static boolean handleAntArtifacts(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback,org.netbeans.api.project.ant.AntArtifact[],java.net.URI[],java.lang.String,java.lang.String,int) throws java.io.IOException
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 10 org.netbeans.api.annotations.common.NullAllowed()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
 anno 7 org.netbeans.api.annotations.common.NonNull()
 anno 8 org.netbeans.api.annotations.common.NonNull()
 anno 9 org.netbeans.api.annotations.common.NonNull()
meth public static boolean handleAntArtifacts(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback,org.netbeans.api.project.ant.AntArtifact[],java.net.URI[],java.lang.String,java.lang.String,int) throws java.io.IOException
 anno 0 java.lang.Deprecated()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
 anno 6 org.netbeans.api.annotations.common.NonNull()
 anno 7 org.netbeans.api.annotations.common.NonNull()
 anno 8 org.netbeans.api.annotations.common.NonNull()
 anno 9 org.netbeans.api.annotations.common.NullAllowed()
meth public static boolean handleLibraries(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.api.project.libraries.Library[],java.lang.String,java.lang.String,int) throws java.io.IOException
meth public static boolean handleLibraryClassPathItems(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item>,java.lang.String,java.lang.String,int,boolean) throws java.io.IOException
meth public static boolean handleRoots(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback,java.net.URI[],java.lang.String,java.lang.String,int) throws java.io.IOException
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
 anno 7 org.netbeans.api.annotations.common.NonNull()
 anno 8 org.netbeans.api.annotations.common.NonNull()
 anno 9 org.netbeans.api.annotations.common.NullAllowed()
meth public static boolean handleRoots(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback,java.net.URI[],java.lang.String,java.lang.String,int) throws java.io.IOException
 anno 0 java.lang.Deprecated()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
 anno 6 org.netbeans.api.annotations.common.NonNull()
 anno 7 org.netbeans.api.annotations.common.NonNull()
 anno 8 org.netbeans.api.annotations.common.NullAllowed()
supr java.lang.Object
hfds LOG
hcls Accessor,ClassPathPackageAccessorImpl

CLSS public final org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl
cons public init(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
cons public init(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,java.lang.String,java.lang.String,java.lang.String,java.lang.String[],java.lang.String[],java.lang.String[],java.lang.String[])
cons public init(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,java.lang.String,java.lang.String,java.lang.String,java.lang.String[],java.lang.String[],java.lang.String[],java.lang.String[],java.lang.String[])
cons public init(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,java.lang.String,java.lang.String,java.lang.String,java.lang.String[],java.lang.String[],java.lang.String[],java.lang.String[],java.lang.String[],java.lang.String[])
innr public final static Builder
meth public java.lang.String[] getPropertyName(org.netbeans.api.project.SourceGroup,java.lang.String)
meth public java.lang.String[] getPropertyName(org.netbeans.modules.java.api.common.SourceRoots,java.lang.String)
meth public org.netbeans.api.java.classpath.ClassPath findClassPath(org.openide.filesystems.FileObject,java.lang.String)
meth public org.netbeans.api.java.classpath.ClassPath getProjectSourcesClassPath(java.lang.String)
meth public org.netbeans.api.java.classpath.ClassPath[] getProjectClassPaths(java.lang.String)
supr org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider
hfds buildClassesDir,buildGeneratedDir,buildTestClassesDir,cache,dirCache,distJar,endorsedClasspath,evaluator,helper,javacClasspath,javacSource,javacTestClasspath,moduleExecutePath,modulePath,platform,processorClasspath,processorModulePath,processorTestClasspath,processorTestModulepath,project,projectDirectory,runClasspath,runTestClasspath,sourceRoots,testModuleExecutePath,testModulePath,testSourceRoots
hcls Filter,SourceLevelSelector

CLSS public final static org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder
 outer org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl
meth public !varargs org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setBootClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setBuildClassesDirProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setBuildTestClassesDirProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setDistJarProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setEndorsedClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setJavacClassPathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setJavacSourceProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setJavacTestClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setPlatformType(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setProcessorModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setProcessorPathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setProject(org.netbeans.api.project.Project)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setRunClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setRunModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setRunTestClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setRunTestModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder setTestModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl$Builder create(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds DEFAULT_BUILD_CLASSES_DIR,DEFAULT_BUILD_TEST_CLASSES_DIR,DEFAULT_DIST_JAR,DEFAULT_ENDORSED_CLASSPATH,DEFAULT_JAVAC_CLASS_PATH,DEFAULT_JAVAC_SOURCE,DEFAULT_JAVAC_TEST_CLASS_PATH,DEFAULT_MODULE_EXECUTE_PATH,DEFAULT_MODULE_PATH,DEFAULT_PROCESSOR_MODULE_PATH,DEFAULT_PROCESSOR_PATH,DEFAULT_RUN_CLASS_PATH,DEFAULT_RUN_TEST_CLASS_PATH,DEFAULT_TEST_MODULE_EXECUTE_PATH,DEFAULT_TEST_MODULE_PATH,bootClasspathProperties,buildClassesDir,buildTestClassesDir,distJar,endorsedClasspath,evaluator,helper,javacClasspath,javacSource,javacTestClasspath,moduleExecutePath,modulePath,platformType,processorModulePath,processorPath,project,runClasspath,runTestClasspath,sourceRoots,testModuleExecutePath,testModulePath,testSourceRoots

CLSS public final org.netbeans.modules.java.api.common.classpath.ClassPathSupport
cons public init(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Callback)
fld public final static java.lang.String ENDORSED = "classpath/endorsed"
innr public abstract interface static Callback
innr public static Item
meth public java.lang.String getLibraryReference(org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item)
meth public java.lang.String getLibraryReference(org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item,java.lang.String)
meth public java.lang.String[] encodeToStrings(java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item>)
meth public java.lang.String[] encodeToStrings(java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item>,java.lang.String)
meth public java.lang.String[] encodeToStrings(java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item>,java.lang.String,java.lang.String)
meth public java.util.Iterator<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item> itemsIterator(java.lang.String)
meth public java.util.Iterator<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item> itemsIterator(java.lang.String,java.lang.String)
meth public java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item> itemsList(java.lang.String)
meth public java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item> itemsList(java.lang.String,java.lang.String)
meth public static boolean isVariableBasedReference(java.lang.String)
meth public static java.lang.String getLibraryNameFromReference(java.lang.String)
supr java.lang.Object
hfds ANT_ARTIFACT_PREFIX,LIBRARY_PREFIX,LIBRARY_SUFFIX,antArtifactPrefix,antProjectHelper,callback,evaluator,referenceHelper,updateHelper,wellKnownPaths
hcls RelativePath

CLSS public abstract interface static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Callback
 outer org.netbeans.modules.java.api.common.classpath.ClassPathSupport
meth public abstract void readAdditionalProperties(java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item>,java.lang.String)
meth public abstract void storeAdditionalProperties(java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item>,java.lang.String)

CLSS public static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item
 outer org.netbeans.modules.java.api.common.classpath.ClassPathSupport
fld public final static int TYPE_ARTIFACT = 2
fld public final static int TYPE_CLASSPATH = 3
fld public final static int TYPE_JAR = 0
fld public final static int TYPE_LIBRARY = 1
meth public boolean canEdit()
meth public boolean equals(java.lang.Object)
meth public boolean isBroken()
meth public int getType()
meth public int hashCode()
meth public java.io.File getResolvedFile()
meth public java.lang.String getAdditionalProperty(java.lang.String)
meth public java.lang.String getFilePath()
meth public java.lang.String getJavadocFilePath()
meth public java.lang.String getReference()
meth public java.lang.String getSourceFilePath()
meth public java.lang.String getVariableBasedProperty()
meth public java.lang.String toString()
meth public java.net.URI getArtifactURI()
meth public org.netbeans.api.project.ant.AntArtifact getArtifact()
meth public org.netbeans.api.project.libraries.Library getLibrary()
meth public static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item create(java.lang.String)
meth public static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item create(java.lang.String,java.io.File,java.lang.String,java.lang.String)
meth public static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item create(org.netbeans.api.project.ant.AntArtifact,java.net.URI,java.lang.String)
meth public static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item create(org.netbeans.api.project.libraries.Library,java.lang.String)
meth public static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item createBroken(int,java.lang.String)
meth public static org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item createBroken(java.lang.String,java.io.File,java.lang.String)
meth public void initSourceAndJavadoc(org.netbeans.spi.project.support.ant.AntProjectHelper)
meth public void reassignLibraryManager(org.netbeans.api.project.libraries.LibraryManager)
meth public void removeSourceAndJavadoc(org.netbeans.modules.java.api.common.ant.UpdateHelper)
meth public void saveSourceAndJavadoc(org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.ant.UpdateHelper)
meth public void setAdditionalProperty(java.lang.String,java.lang.String)
meth public void setJavadocFilePath(java.lang.String)
meth public void setReference(java.lang.String)
meth public void setSourceFilePath(java.lang.String)
meth public void updateJarReference(org.netbeans.spi.project.support.ant.AntProjectHelper)
supr java.lang.Object
hfds JAVADOC_START,REF_START,REF_START_INDEX,SOURCE_START,additionalProperties,artifactURI,broken,initialJavadocFilePath,initialSourceFilePath,javadocFilePath,libraryName,object,property,sourceFilePath,type,variableBasedProperty

CLSS public final org.netbeans.modules.java.api.common.classpath.ClassPathSupportFactory
meth public static org.netbeans.spi.java.classpath.ClassPathImplementation createBootClassPathImplementation(org.netbeans.spi.project.support.ant.PropertyEvaluator)
meth public static org.netbeans.spi.java.classpath.ClassPathImplementation createBootClassPathImplementation(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.api.java.classpath.ClassPath)
meth public static org.netbeans.spi.java.classpath.ClassPathImplementation createBootClassPathImplementation(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.api.java.classpath.ClassPath,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.spi.java.classpath.ClassPathImplementation createBootClassPathImplementation(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.api.project.Project,org.netbeans.api.java.classpath.ClassPath,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
 anno 4 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.spi.java.classpath.ClassPathImplementation createModuleInfoBasedPath(org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath,java.util.function.Function<java.net.URL,java.lang.Boolean>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.spi.java.classpath.ClassPathImplementation createSourcePathImplementation(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator)
supr java.lang.Object

CLSS public final org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider
innr public final static Builder
meth public java.lang.String[] getPropertyName(org.netbeans.api.project.SourceGroup,java.lang.String)
meth public org.netbeans.api.java.classpath.ClassPath findClassPath(org.openide.filesystems.FileObject,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.classpath.ClassPath getProjectSourcesClassPath(java.lang.String)
meth public org.netbeans.api.java.classpath.ClassPath[] getProjectClassPaths(java.lang.String)
supr org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider
hfds INTERNAL_MOUDLE_BINARIES_PATH,LOG,buildModulesDirProperty,dirCache,eval,executeClassPath,executeModulePath,helper,javacClassPath,modSensitivePrjPathFcts,modulePath,platformType,processorClassPath,processorModulePath,projectDirectory,sourceCache,testCache,testExecuteClassPath,testExecuteModulePath,testJavacClassPath,testModulePath,testProcessorClassPath,testProcessorModulePath,urlCache
hcls Cache,Filter,Location,Owner,TranslateBuildModules

CLSS public final static org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder
 outer org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setBuildModulesDirProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setJavacClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setPlatformType(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setProcessorClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setProcessorModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setRunClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setRunModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setTestJavacClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setTestModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setTestProcessorClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setTestProcessorModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setTestRunClasspathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder setTestRunModulepathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.classpath.MultiModuleClassPathProvider$Builder newInstance(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds buildModulesDirProperty,eval,executeClassPath,executeModulePath,helper,javacClassPath,modulePath,modules,platformType,processorClassPath,processorModulePath,testExecuteClassPath,testExecuteModulePath,testJavacClassPath,testModulePath,testModules,testProcessorClassPath,testProcessorModulePath

CLSS public final org.netbeans.modules.java.api.common.problems.ProjectProblemsProviders
meth public static org.netbeans.spi.project.ui.ProjectProblemsProvider createMissingModuleProjectProblemsProvider(org.netbeans.api.project.Project)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object

CLSS public abstract org.netbeans.modules.java.api.common.project.BaseActionProvider
cons public init(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback)
fld public final static java.lang.String AUTOMATIC_BUILD_TAG = ".netbeans_automatic_build"
fld public final static java.lang.String BUILD_SCRIPT = "buildfile"
fld public final static java.lang.String PROPERTY_RUN_SINGLE_ON_SERVER = "run.single.on.server"
innr public abstract interface static Callback
innr public abstract interface static Callback2
innr public abstract interface static Callback3
innr public final static CallbackImpl
intf org.netbeans.spi.project.ActionProvider
meth protected abstract boolean isCompileOnSaveEnabled()
meth protected abstract java.lang.String[] getActionsDisabledForQuickRun()
meth protected abstract java.lang.String[] getPlatformSensitiveActions()
meth protected abstract java.util.Set<java.lang.String> getJavaModelActions()
meth protected abstract java.util.Set<java.lang.String> getScanSensitiveActions()
meth protected boolean handleJavaClass(java.util.Properties,org.openide.filesystems.FileObject,java.lang.String,java.util.List<java.lang.String>)
meth protected boolean isCompileOnSaveUpdate()
meth protected boolean isServerExecution()
meth protected boolean showMainClassSelector()
meth protected final org.netbeans.api.project.Project getProject()
meth protected final org.openide.filesystems.FileObject findBuildXml()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth protected java.lang.String getProjectMainClass(boolean)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth protected org.netbeans.api.java.platform.JavaPlatform getProjectPlatform()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth protected org.netbeans.modules.java.api.common.ant.UpdateHelper getUpdateHelper()
meth protected org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback getCallback()
meth protected org.netbeans.spi.project.support.ant.AntProjectHelper getAntProjectHelper()
meth protected org.netbeans.spi.project.support.ant.PropertyEvaluator getEvaluator()
meth protected void setServerExecution(boolean)
meth protected void updateJavaRunnerClasspath(java.lang.String,java.util.Map<java.lang.String,java.lang.Object>)
meth public abstract java.util.Map<java.lang.String,java.lang.String[]> getCommands()
meth public boolean isActionEnabled(java.lang.String,org.openide.util.Lookup)
meth public java.lang.String[] getTargetNames(java.lang.String,org.openide.util.Lookup,java.util.Properties)
meth public java.lang.String[] getTargetNames(java.lang.String,org.openide.util.Lookup,java.util.Properties,boolean)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public static java.lang.String getBuildXmlName(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator)
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.openide.filesystems.FileObject getBuildXml(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator)
meth public void invokeAction(java.lang.String,org.openide.util.Lookup)
meth public void startFSListener()
supr java.lang.Object
hfds LOG,antProjectHelper,buildXMLName,callback,classpaths,delegate,evaluator,listeners,project,projectSourceRoots,projectTestRoots,serverExecution,updateHelper,userPropertiesPolicy
hcls BrokenAPIActionDecorator,CustomRunner,EventAdaptor,ServerExecutionAwareAction

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback
 outer org.netbeans.modules.java.api.common.project.BaseActionProvider
meth public abstract org.netbeans.api.java.classpath.ClassPath findClassPath(org.openide.filesystems.FileObject,java.lang.String)
meth public abstract org.netbeans.api.java.classpath.ClassPath getProjectSourcesClassPath(java.lang.String)

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback2
 outer org.netbeans.modules.java.api.common.project.BaseActionProvider
intf org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback
meth public abstract void antTargetInvocationFailed(java.lang.String,org.openide.util.Lookup)
meth public abstract void antTargetInvocationFinished(java.lang.String,org.openide.util.Lookup,int)
meth public abstract void antTargetInvocationStarted(java.lang.String,org.openide.util.Lookup)

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback3
 outer org.netbeans.modules.java.api.common.project.BaseActionProvider
intf org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback2
meth public abstract java.util.Map<java.lang.String,java.lang.String> createAdditionalProperties(java.lang.String,org.openide.util.Lookup)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public abstract java.util.Set<java.lang.String> createConcealedProperties(java.lang.String,org.openide.util.Lookup)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()

CLSS public final static org.netbeans.modules.java.api.common.project.BaseActionProvider$CallbackImpl
 outer org.netbeans.modules.java.api.common.project.BaseActionProvider
cons public init(org.netbeans.modules.java.api.common.classpath.ClassPathProviderImpl)
intf org.netbeans.modules.java.api.common.project.BaseActionProvider$Callback
meth public org.netbeans.api.java.classpath.ClassPath findClassPath(org.openide.filesystems.FileObject,java.lang.String)
meth public org.netbeans.api.java.classpath.ClassPath getProjectSourcesClassPath(java.lang.String)
supr java.lang.Object
hfds cp

CLSS public final org.netbeans.modules.java.api.common.project.JavaActionProvider
innr public abstract interface static Action
innr public abstract interface static AntTargetInvocationListener
innr public abstract static ScriptAction
innr public final static !enum CompileOnSaveOperation
innr public final static Builder
innr public final static Context
intf org.netbeans.spi.project.ActionProvider
meth public boolean isActionEnabled(java.lang.String,org.openide.util.Lookup)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String[] getSupportedActions()
meth public void addAntTargetInvocationListener(org.netbeans.modules.java.api.common.project.JavaActionProvider$AntTargetInvocationListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void invokeAction(java.lang.String,org.openide.util.Lookup)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public void removeAntTargetInvocationListener(org.netbeans.modules.java.api.common.project.JavaActionProvider$AntTargetInvocationListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds EMPTY,LOG,additionalPropertiesProvider,classpaths,concealedPropertiesProvider,cosOpsProvider,eval,jpp,listeners,prj,supportedActions,unitTestingSupport_fixClasses,updateHelper,userPropertiesPolicy
hcls BaseRunSingleAction,BaseScriptAction,SimpleAction

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.JavaActionProvider$Action
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider
meth public abstract boolean isEnabled(org.netbeans.modules.java.api.common.project.JavaActionProvider$Context)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public abstract java.lang.String getCommand()
meth public abstract void invoke(org.netbeans.modules.java.api.common.project.JavaActionProvider$Context)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.JavaActionProvider$AntTargetInvocationListener
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider
intf java.util.EventListener
meth public abstract void antTargetInvocationFailed(java.lang.String,org.openide.util.Lookup)
meth public abstract void antTargetInvocationFinished(java.lang.String,org.openide.util.Lookup,int)
meth public abstract void antTargetInvocationStarted(java.lang.String,org.openide.util.Lookup)

CLSS public final static org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider
innr public abstract interface static CustomFileExecutor
meth public !varargs org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction createDefaultScriptAction(java.lang.String,boolean,boolean,boolean,java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction createSimpleScriptAction(java.lang.String,boolean,boolean,boolean,boolean,java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Action createProjectOperation(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder addAction(org.netbeans.modules.java.api.common.project.JavaActionProvider$Action)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder setActivePlatformProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder setActivePlatformProvider(java.util.function.Supplier<? extends org.netbeans.api.java.platform.JavaPlatform>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder setAdditionalPropertiesProvider(java.util.function.BiFunction<java.lang.String,org.openide.util.Lookup,java.util.Map<java.lang.String,java.lang.String>>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder setCompileOnSaveOperationsProvider(java.util.function.Supplier<? extends java.util.Set<? extends org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation>>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder setConcealedPropertiesProvider(java.util.function.BiFunction<java.lang.String,org.openide.util.Lookup,java.util.Set<java.lang.String>>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder setProjectMainClassProvider(java.util.function.Function<java.lang.Boolean,java.lang.String>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder setProjectMainClassSelector(java.util.function.Supplier<java.lang.Boolean>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction createDefaultScriptAction(java.lang.String,boolean,boolean,boolean,java.util.function.Supplier<? extends java.lang.String[]>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction createDefaultScriptAction(java.lang.String,boolean,boolean,boolean,java.util.function.Supplier<? extends java.lang.String[]>,org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder$CustomFileExecutor)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction createSimpleScriptAction(java.lang.String,boolean,boolean,boolean,boolean,java.util.function.Predicate<org.netbeans.modules.java.api.common.project.JavaActionProvider$Context>,java.util.function.Supplier<? extends java.lang.String[]>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
 anno 7 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder newInstance(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,java.util.function.Function<java.lang.String,org.netbeans.api.java.classpath.ClassPath>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds actions,additionalPropertiesProvider,classpaths,concealedPropertiesProvider,cosOpsProvider,evaluator,jpp,mainClassServices,mfs,project,sourceRoots,testRoots,updateHelper

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder$CustomFileExecutor
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider$Builder
meth public abstract java.lang.String[] getTargetNames(org.openide.filesystems.FileObject,org.netbeans.modules.java.api.common.project.JavaActionProvider$Context)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction$Result performCompileOnSave(org.netbeans.modules.java.api.common.project.JavaActionProvider$Context,java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()

CLSS public final static !enum org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider
fld public final static org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation EXECUTE
fld public final static org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation UPDATE
meth public static org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation valueOf(java.lang.String)
meth public static org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation[] values()
supr java.lang.Enum<org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation>

CLSS public final static org.netbeans.modules.java.api.common.project.JavaActionProvider$Context
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider
meth public boolean doJavaChecks()
meth public java.lang.String getCommand()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public java.util.Set<? extends org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation> getCompileOnSaveOperations()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.classpath.ClassPath getProjectClassPath(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.api.java.platform.JavaPlatform getActiveJavaPlatform()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public org.netbeans.api.project.Project getProject()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.ant.UpdateHelper getUpdateHelper()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.spi.project.support.ant.PropertyEvaluator getPropertyEvaluator()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.openide.util.Lookup getActiveLookup()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public void addConcealedProperty(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public void setProperty(java.lang.String,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds additionalPropertiesProvider,classpaths,command,concealedProperties,concealedPropertiesProvider,cosOpsCache,cosOpsProvider,doJavaChecks,eval,jpp,listeners,lkp,project,properties,updateHelper,userPropertiesPolicy

CLSS public abstract static org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider
cons protected init(java.lang.String,java.lang.String,boolean,boolean,boolean,boolean)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
innr public final static Result
intf org.netbeans.modules.java.api.common.project.JavaActionProvider$Action
meth public abstract java.lang.String[] getTargetNames(org.netbeans.modules.java.api.common.project.JavaActionProvider$Context)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public boolean isEnabled(org.netbeans.modules.java.api.common.project.JavaActionProvider$Context)
meth public final java.lang.String getCommand()
meth public final void invoke(org.netbeans.modules.java.api.common.project.JavaActionProvider$Context)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction$Result performCompileOnSave(org.netbeans.modules.java.api.common.project.JavaActionProvider$Context,java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds actionFlags,command,cosInterceptor,displayName

CLSS public final static org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction$Result
 outer org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction
meth public static org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction$Result abort()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction$Result follow()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.project.JavaActionProvider$ScriptAction$Result success(org.openide.execution.ExecutorTask)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds ABORT,FOLLOW,task

CLSS public final org.netbeans.modules.java.api.common.project.MultiModuleActionProviderBuilder
meth public org.netbeans.modules.java.api.common.project.JavaActionProvider build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.MultiModuleActionProviderBuilder setCompileOnSaveOperationsProvider(java.util.function.Supplier<? extends java.util.Set<? extends org.netbeans.modules.java.api.common.project.JavaActionProvider$CompileOnSaveOperation>>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.project.MultiModuleActionProviderBuilder newInstance(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds builder,evaluator

CLSS public org.netbeans.modules.java.api.common.project.ProjectConfigurations
fld public final static java.lang.String CONFIG_PROPS_PATH = "nbproject/private/config.properties"
innr public final static Configuration
innr public final static ConfigurationProviderBuilder
meth public !varargs static org.netbeans.spi.project.support.ant.PropertyEvaluator createPropertyEvaluator(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyProvider[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.project.ProjectConfigurations$ConfigurationProviderBuilder createConfigurationProviderBuilder(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.ant.UpdateHelper)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOGGER
hcls ConfigPropertyProvider,ConfigurationProviderImpl

CLSS public final static org.netbeans.modules.java.api.common.project.ProjectConfigurations$Configuration
 outer org.netbeans.modules.java.api.common.project.ProjectConfigurations
intf org.netbeans.spi.project.ProjectConfiguration
meth public boolean equals(java.lang.Object)
meth public boolean isDefault()
meth public int hashCode()
meth public java.lang.String getDisplayName()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public java.lang.String getName()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public java.lang.String toString()
supr java.lang.Object
hfds displayName,name

CLSS public final static org.netbeans.modules.java.api.common.project.ProjectConfigurations$ConfigurationProviderBuilder
 outer org.netbeans.modules.java.api.common.project.ProjectConfigurations
meth public !varargs org.netbeans.modules.java.api.common.project.ProjectConfigurations$ConfigurationProviderBuilder addConfigurationsAffectActions(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectConfigurations$ConfigurationProviderBuilder setCustomizerAction(java.lang.Runnable)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.spi.project.ProjectConfigurationProvider<? extends org.netbeans.spi.project.ProjectConfiguration> build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds configurationsAffectActions,customizerAction,eval,project,updateHelper

CLSS public final org.netbeans.modules.java.api.common.project.ProjectHooks
innr public final static ProjectOpenedHookBuilder
innr public final static ProjectXmlSavedHookBuilder
meth public static org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder createProjectOpenedHookBuilder(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.GeneratedFilesHelper,org.netbeans.modules.java.api.common.classpath.AbstractClassPathProvider)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder createProjectXmlSavedHookBuilder(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.GeneratedFilesHelper)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOG
hcls ProjectOpenedHookImpl,ProjectXmlSavedHookImpl

CLSS public final static org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder
 outer org.netbeans.modules.java.api.common.project.ProjectHooks
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder addClassPathType(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder addClosePostAction(java.lang.Runnable)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder addClosePreAction(java.lang.Runnable)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder addOpenPostAction(java.lang.Runnable)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder addOpenPreAction(java.lang.Runnable)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder setBuildImplTemplate(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder setBuildScriptProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectOpenedHookBuilder setBuildTemplate(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.spi.project.ui.ProjectOpenedHook build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds buildImplTemplate,buildScriptProperty,buildTemplate,classPathTypes,cpProvider,eval,genFilesHelper,postClose,postOpen,preClose,preOpen,project,updateHelper

CLSS public final static org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder
 outer org.netbeans.modules.java.api.common.project.ProjectHooks
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder addPostAction(java.lang.Runnable)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder addPreAction(java.lang.Runnable)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder setBuildImplTemplate(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder setBuildScriptProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder setBuildTemplate(java.net.URL)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectHooks$ProjectXmlSavedHookBuilder setOverrideModifiedBuildImplPredicate(java.util.concurrent.Callable<java.lang.Boolean>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.spi.project.support.ant.ProjectXmlSavedHook build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds buildImplTemplate,buildScriptProperty,buildTemplate,eval,genFilesHelper,overridePredicate,postActions,preActions,updateHelper

CLSS public final org.netbeans.modules.java.api.common.project.ProjectOperations
innr public abstract interface static Callback
innr public final static ProjectOperationsBuilder
meth public static org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder createBuilder(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOG,TARGET_CLEAN
hcls Operations

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.ProjectOperations$Callback
 outer org.netbeans.modules.java.api.common.project.ProjectOperations
innr public final static !enum Operation
meth public abstract void afterOperation(org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation,java.lang.String,org.openide.util.Pair<java.io.File,org.netbeans.api.project.Project>)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public abstract void beforeOperation(org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public final static !enum org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation
 outer org.netbeans.modules.java.api.common.project.ProjectOperations$Callback
fld public final static org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation COPY
fld public final static org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation DELETE
fld public final static org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation MOVE
fld public final static org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation RENAME
meth public static org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation valueOf(java.lang.String)
meth public static org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation[] values()
supr java.lang.Enum<org.netbeans.modules.java.api.common.project.ProjectOperations$Callback$Operation>

CLSS public final static org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder
 outer org.netbeans.modules.java.api.common.project.ProjectOperations
meth public !varargs org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder addCleanTargets(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder addDataFiles(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder addMetadataFiles(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder addPreservedPrivateProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder addUpdatedNameProperty(java.lang.String,java.lang.String,boolean)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder setBuildScriptProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ProjectOperations$ProjectOperationsBuilder setCallback(org.netbeans.modules.java.api.common.project.ProjectOperations$Callback)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.spi.project.DataFilesProviderImplementation build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds additionalDataFiles,additionalMetadataFiles,buildScriptProperty,callback,cleanTargets,eval,helper,privateProps,project,refHelper,sources,tests,updatedProps

CLSS public abstract interface org.netbeans.modules.java.api.common.project.ProjectPlatformProvider
fld public final static java.lang.String PROP_PROJECT_PLATFORM = "projectPlatform"
meth public abstract org.netbeans.api.java.platform.JavaPlatform getProjectPlatform()
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public abstract void addPropertyChangeListener(java.beans.PropertyChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public abstract void removePropertyChangeListener(java.beans.PropertyChangeListener)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public abstract void setProjectPlatform(org.netbeans.api.java.platform.JavaPlatform) throws java.io.IOException
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public final org.netbeans.modules.java.api.common.project.ProjectProperties
cons public init()
fld public final static java.lang.String ANNOTATION_PROCESSING_ENABLED = "annotation.processing.enabled"
fld public final static java.lang.String ANNOTATION_PROCESSING_ENABLED_IN_EDITOR = "annotation.processing.enabled.in.editor"
fld public final static java.lang.String ANNOTATION_PROCESSING_PROCESSORS_LIST = "annotation.processing.processors.list"
fld public final static java.lang.String ANNOTATION_PROCESSING_PROCESSOR_OPTIONS = "annotation.processing.processor.options"
fld public final static java.lang.String ANNOTATION_PROCESSING_RUN_ALL_PROCESSORS = "annotation.processing.run.all.processors"
fld public final static java.lang.String ANNOTATION_PROCESSING_SOURCE_OUTPUT = "annotation.processing.source.output"
fld public final static java.lang.String ANT_ARTIFACT_PREFIX = "${reference."
fld public final static java.lang.String APPLICATION_ARGS = "application.args"
fld public final static java.lang.String BUILD_CLASSES_DIR = "build.classes.dir"
fld public final static java.lang.String BUILD_CLASSES_EXCLUDES = "build.classes.excludes"
fld public final static java.lang.String BUILD_DIR = "build.dir"
fld public final static java.lang.String BUILD_GENERATED_SOURCES_DIR = "build.generated.sources.dir"
fld public final static java.lang.String BUILD_MODULES_DIR = "build.modules.dir"
fld public final static java.lang.String BUILD_SCRIPT = "buildfile"
fld public final static java.lang.String BUILD_TEST_CLASSES_DIR = "build.test.classes.dir"
fld public final static java.lang.String BUILD_TEST_MODULES_DIR = "build.test.modules.dir"
fld public final static java.lang.String BUILD_TEST_RESULTS_DIR = "build.test.results.dir"
fld public final static java.lang.String COMPILE_ON_SAVE = "compile.on.save"
fld public final static java.lang.String COMPILE_ON_SAVE_UNSUPPORTED_PREFIX = "compile.on.save.unsupported"
fld public final static java.lang.String DEBUG_CLASSPATH = "debug.classpath"
fld public final static java.lang.String DEBUG_MODULEPATH = "debug.modulepath"
fld public final static java.lang.String DEBUG_TEST_CLASSPATH = "debug.test.classpath"
fld public final static java.lang.String DEBUG_TEST_MODULEPATH = "debug.test.modulepath"
fld public final static java.lang.String DIST_ARCHIVE_EXCLUDES = "dist.archive.excludes"
fld public final static java.lang.String DIST_DIR = "dist.dir"
fld public final static java.lang.String DIST_JAR = "dist.jar"
fld public final static java.lang.String DIST_JAVADOC_DIR = "dist.javadoc.dir"
fld public final static java.lang.String DIST_JLINK_DIR = "dist.jlink.dir"
fld public final static java.lang.String DIST_JLINK_OUTPUT = "dist.jlink.output"
fld public final static java.lang.String DO_DEPEND = "do.depend"
fld public final static java.lang.String DO_JAR = "do.jar"
fld public final static java.lang.String DO_JLINK = "do.jlink"
fld public final static java.lang.String ENDORSED_CLASSPATH = "endorsed.classpath"
fld public final static java.lang.String EXCLUDES = "excludes"
fld public final static java.lang.String INCLUDES = "includes"
fld public final static java.lang.String JAR_COMPRESS = "jar.compress"
fld public final static java.lang.String JAVAC_CLASSPATH = "javac.classpath"
fld public final static java.lang.String JAVAC_COMPILERARGS = "javac.compilerargs"
fld public final static java.lang.String JAVAC_DEBUG = "javac.debug"
fld public final static java.lang.String JAVAC_DEPRECATION = "javac.deprecation"
fld public final static java.lang.String JAVAC_MODULEPATH = "javac.modulepath"
fld public final static java.lang.String JAVAC_PROCESSORMODULEPATH = "javac.processormodulepath"
fld public final static java.lang.String JAVAC_PROCESSORPATH = "javac.processorpath"
fld public final static java.lang.String JAVAC_PROFILE = "javac.profile"
fld public final static java.lang.String JAVAC_SOURCE = "javac.source"
fld public final static java.lang.String JAVAC_TARGET = "javac.target"
fld public final static java.lang.String JAVAC_TEST_CLASSPATH = "javac.test.classpath"
fld public final static java.lang.String JAVAC_TEST_COMPILERARGS = "javac.test.compilerargs"
fld public final static java.lang.String JAVAC_TEST_MODULEPATH = "javac.test.modulepath"
fld public final static java.lang.String JAVADOC_ADDITIONALPARAM = "javadoc.additionalparam"
fld public final static java.lang.String JAVADOC_AUTHOR = "javadoc.author"
fld public final static java.lang.String JAVADOC_ENCODING = "javadoc.encoding"
fld public final static java.lang.String JAVADOC_HTML5 = "javadoc.html5"
fld public final static java.lang.String JAVADOC_NO_INDEX = "javadoc.noindex"
fld public final static java.lang.String JAVADOC_NO_NAVBAR = "javadoc.nonavbar"
fld public final static java.lang.String JAVADOC_NO_TREE = "javadoc.notree"
fld public final static java.lang.String JAVADOC_PREVIEW = "javadoc.preview"
fld public final static java.lang.String JAVADOC_PRIVATE = "javadoc.private"
fld public final static java.lang.String JAVADOC_SPLIT_INDEX = "javadoc.splitindex"
fld public final static java.lang.String JAVADOC_USE = "javadoc.use"
fld public final static java.lang.String JAVADOC_VERSION = "javadoc.version"
fld public final static java.lang.String JAVADOC_WINDOW_TITLE = "javadoc.windowtitle"
fld public final static java.lang.String JLINK_ADDITIONALMODULES = "jlink.additionalmodules"
fld public final static java.lang.String JLINK_ADDITIONALPARAM = "jlink.additionalparam"
fld public final static java.lang.String JLINK_LAUNCHER = "jlink.launcher"
fld public final static java.lang.String JLINK_LAUNCHER_NAME = "jlink.launcher.name"
fld public final static java.lang.String JLINK_STRIP = "jlink.strip"
fld public final static java.lang.String LICENSE_NAME = "project.license"
fld public final static java.lang.String LICENSE_PATH = "project.licensePath"
fld public final static java.lang.String MAIN_CLASS = "main.class"
fld public final static java.lang.String MANIFEST_FILE = "manifest.file"
fld public final static java.lang.String NO_DEPENDENCIES = "no.dependencies"
fld public final static java.lang.String PLATFORM_ACTIVE = "platform.active"
fld public final static java.lang.String PROP_PROJECT_CONFIGURATION_CONFIG = "config"
fld public final static java.lang.String RUNTIME_ENCODING = "runtime.encoding"
fld public final static java.lang.String RUN_CLASSPATH = "run.classpath"
fld public final static java.lang.String RUN_JVM_ARGS = "run.jvmargs"
fld public final static java.lang.String RUN_MODULEPATH = "run.modulepath"
fld public final static java.lang.String RUN_TEST_CLASSPATH = "run.test.classpath"
fld public final static java.lang.String RUN_TEST_MODULEPATH = "run.test.modulepath"
fld public final static java.lang.String RUN_WORK_DIR = "work.dir"
fld public final static java.lang.String SOURCE_ENCODING = "source.encoding"
fld public final static java.lang.String SYSTEM_PROPERTIES_RUN_PREFIX = "run-sys-prop."
fld public final static java.lang.String SYSTEM_PROPERTIES_TEST_PREFIX = "test-sys-prop."
fld public final static java.lang.String TRACK_FILE_CHANGES = "track.file.changes"
fld public final static java.lang.String[] WELL_KNOWN_PATHS
fld public static javax.swing.ImageIcon ICON_ARTIFACT
fld public static javax.swing.ImageIcon ICON_BROKEN_BADGE
fld public static javax.swing.ImageIcon ICON_CLASSPATH
fld public static javax.swing.ImageIcon ICON_JAR
fld public static javax.swing.ImageIcon ICON_JAVADOC_BADGE
fld public static javax.swing.ImageIcon ICON_LIBRARY
fld public static javax.swing.ImageIcon ICON_SOURCE_BADGE
supr java.lang.Object
hfds RESOURCE_ICON_ARTIFACT,RESOURCE_ICON_BROKEN_BADGE,RESOURCE_ICON_CLASSPATH,RESOURCE_ICON_JAR,RESOURCE_ICON_JAVADOC_BADGE,RESOURCE_ICON_LIBRARY,RESOURCE_ICON_SOURCE_BADGE,RUN_JVM_ARGS_IDE

CLSS public abstract interface org.netbeans.modules.java.api.common.project.PropertyEvaluatorProvider
meth public abstract org.netbeans.spi.project.support.ant.PropertyEvaluator getPropertyEvaluator()
 anno 0 org.netbeans.api.annotations.common.NonNull()

CLSS public final org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport
innr public abstract interface static Callback
meth public static boolean canEdit(javax.swing.ListSelectionModel,javax.swing.DefaultListModel)
meth public static boolean canMoveDown(javax.swing.ListSelectionModel,int)
meth public static boolean canMoveUp(javax.swing.ListSelectionModel)
meth public static int[] addArtifacts(javax.swing.DefaultListModel,int[],org.netbeans.modules.java.api.common.project.ui.customizer.AntArtifactItem[],org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback)
meth public static int[] addJarFiles(javax.swing.DefaultListModel,int[],java.lang.String[],java.io.File,java.lang.String[],org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback)
meth public static int[] addLibraries(javax.swing.DefaultListModel,int[],org.netbeans.api.project.libraries.Library[],java.util.Set<org.netbeans.api.project.libraries.Library>,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback)
meth public static int[] moveDown(javax.swing.DefaultListModel,int[])
meth public static int[] moveUp(javax.swing.DefaultListModel,int[])
meth public static int[] remove(javax.swing.DefaultListModel,int[])
meth public static java.util.Iterator<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item> getIterator(javax.swing.DefaultListModel)
meth public static java.util.List<org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item> getList(javax.swing.DefaultListModel)
meth public static javax.swing.DefaultListModel createListModel(java.util.Iterator)
meth public static void edit(javax.swing.DefaultListModel,int[],org.netbeans.spi.project.support.ant.AntProjectHelper)
supr java.lang.Object

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback
 outer org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport
meth public abstract void initItem(org.netbeans.modules.java.api.common.classpath.ClassPathSupport$Item)

CLSS public final org.netbeans.modules.java.api.common.project.ui.JavaSourceNodeFactory
cons public init()
intf org.netbeans.spi.project.ui.support.NodeFactory
meth public org.netbeans.spi.project.ui.support.NodeList createNodes(org.netbeans.api.project.Project)
supr java.lang.Object
hfds LOG
hcls GeneratedSourceGroup,SourceGroupKey,SourcesNodeList

CLSS public final org.netbeans.modules.java.api.common.project.ui.LibrariesNode
cons public init(java.lang.String,org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.ReferenceHelper,java.lang.String,java.lang.String[],java.lang.String,javax.swing.Action[],java.lang.String,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Callback)
fld public final static org.openide.util.RequestProcessor rp
innr public abstract interface static Callback
innr public final static Builder
innr public final static Key
meth public boolean canCopy()
meth public java.awt.Image getIcon(int)
meth public java.awt.Image getOpenedIcon(int)
meth public java.lang.String getDisplayName()
meth public java.lang.String getName()
meth public javax.swing.Action[] getActions(boolean)
meth public static javax.swing.Action createAddFolderAction(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.modules.java.api.common.SourceRoots)
meth public static javax.swing.Action createAddLibraryAction(org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.api.project.libraries.LibraryChooser$Filter)
meth public static javax.swing.Action createAddProjectAction(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.SourceRoots)
supr org.openide.nodes.AbstractNode
hfds ICON_BADGE,displayName,folderIconCache,librariesNodeActions,openedFolderIconCache
hcls AddFolderAction,AddLibraryAction,AddProjectAction,LibrariesChildren,PathFinder,RootsListener,SimpleFileFilter

CLSS public final static org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder
 outer org.netbeans.modules.java.api.common.project.ui.LibrariesNode
cons public init(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.classpath.ClassPathSupport)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder addClassPathIgnoreRefs(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder addClassPathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder addLibrariesNodeActions(javax.swing.Action[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder addModulePathIgnoreRefs(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder addModulePathProperties(java.lang.String[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setBootPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setExtraNodes(org.netbeans.spi.project.ui.support.NodeList<org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Key>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setModuleInfoBasedPath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setModuleSourcePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setName(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setPlatformProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setPlatformType(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setSourcePath(org.netbeans.api.java.classpath.ClassPath)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Builder setWebModuleElementName(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds boot,classPathIgnoreRef,classPathProperties,cs,eval,extraNodes,helper,librariesNodeActions,modulePath,modulePathIgnoreRef,moduleSourcePath,name,project,refHelper,sourcePath,webModuleElementName
hcls CallBackImpl

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Callback
 outer org.netbeans.modules.java.api.common.project.ui.LibrariesNode
meth public abstract java.util.List<org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Key> getExtraKeys()
meth public abstract org.openide.nodes.Node[] createNodes(org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Key)

CLSS public final static org.netbeans.modules.java.api.common.project.ui.LibrariesNode$Key
 outer org.netbeans.modules.java.api.common.project.ui.LibrariesNode
cons public init(java.lang.String)
meth public boolean equals(java.lang.Object)
meth public int getType()
meth public int hashCode()
meth public java.lang.String getClassPathId()
meth public java.lang.String getEntryId()
meth public java.lang.String getID()
meth public java.net.URI getArtifactLocation()
meth public org.netbeans.api.project.SourceGroup getSourceGroup()
meth public org.netbeans.api.project.ant.AntArtifact getProject()
supr java.lang.Object
hfds TYPE_FILE,TYPE_FILE_REFERENCE,TYPE_LIBRARY,TYPE_MODULE,TYPE_OTHER,TYPE_PLATFORM,TYPE_PROJECT,anID,antArtifact,classPathId,entryId,postRemoveAction,preRemoveAction,sg,shared,type,uri

CLSS public abstract interface org.netbeans.modules.java.api.common.project.ui.LogicalViewProvider2
intf org.netbeans.spi.project.ui.LogicalViewProvider
meth public abstract void testBroken()

CLSS public final org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders
innr public abstract interface static CompileOnSaveBadge
innr public static LogicalViewProviderBuilder
meth public static org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders$LogicalViewProviderBuilder createBuilder(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hcls LogicalViewProviderImpl,SimpleInfo

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders$CompileOnSaveBadge
 outer org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders
meth public abstract boolean isBadgeVisible()
meth public abstract boolean isImportant(java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public static org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders$LogicalViewProviderBuilder
 outer org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders
meth public org.netbeans.modules.java.api.common.project.ui.LogicalViewProvider2 build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders$LogicalViewProviderBuilder setCompileOnSaveBadge(org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders$CompileOnSaveBadge)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.LogicalViewProviders$LogicalViewProviderBuilder setHelpCtx(org.openide.util.HelpCtx)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds badgeStatus,eval,helpContext,project,projectType

CLSS public final org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory
innr public final static Builder
intf org.netbeans.spi.project.ui.support.NodeFactory
meth public org.netbeans.spi.project.ui.support.NodeList<?> createNodes(org.netbeans.api.project.Project)
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds LOG,RP,libsSupport,procGenSrc,sourceModules,testModules
hcls LibrariesSupport,ModuleChildren,ModuleKey,ModuleNode,Nodes,ProcessorGeneratedSources,SimpleLabelNode,TestRootNode

CLSS public final static org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder
 outer org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory
meth public !varargs org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder addLibrariesNodeActions(javax.swing.Action[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public !varargs org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder addTestLibrariesNodeActions(javax.swing.Action[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory build()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder addLibrariesNodes()
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder setAnnotationProcessorsGeneratedSourcesProperty(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder setSources(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder setTests(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.modules.java.api.common.project.ui.MultiModuleNodeFactory$Builder create(org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.spi.project.support.ant.ReferenceHelper)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds eval,helper,libSupport,mods,procGenSourcesProp,refHelper,testMods

CLSS public final org.netbeans.modules.java.api.common.project.ui.ProjectUISupport
meth public static java.lang.String showVMOptionCustomizer(java.awt.Window,java.lang.String) throws java.lang.Exception
 anno 0 org.netbeans.api.annotations.common.NonNull()
meth public static javax.swing.AbstractAction createPreselectPropertiesAction(org.netbeans.api.project.Project,java.lang.String,java.lang.String)
meth public static org.netbeans.api.project.SourceGroup createLibrariesSourceGroup(org.openide.filesystems.FileObject,java.lang.String,javax.swing.Icon,javax.swing.Icon)
meth public static org.openide.nodes.FilterNode createFilteredLibrariesNode(org.openide.nodes.Node,org.netbeans.modules.java.api.common.ant.UpdateHelper,java.lang.String,java.lang.String,java.lang.String,org.netbeans.modules.java.api.common.classpath.ClassPathSupport,org.netbeans.spi.project.support.ant.ReferenceHelper)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
 anno 4 org.netbeans.api.annotations.common.NullAllowed()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
 anno 7 org.netbeans.api.annotations.common.NullAllowed()
supr java.lang.Object

CLSS public final org.netbeans.modules.java.api.common.project.ui.customizer.AntArtifactItem
cons public init(org.netbeans.api.project.ant.AntArtifact,java.net.URI)
meth public java.lang.String toString()
meth public java.net.URI getArtifactURI()
meth public org.netbeans.api.project.ant.AntArtifact getArtifact()
meth public static org.netbeans.modules.java.api.common.project.ui.customizer.AntArtifactItem[] showAntArtifactItemChooser(java.lang.String[],org.netbeans.api.project.Project,java.awt.Component)
supr java.lang.Object
hfds artifact,artifactURI

CLSS public org.netbeans.modules.java.api.common.project.ui.customizer.ClassPathListCellRenderer
meth public java.awt.Component getListCellRendererComponent(javax.swing.JList,java.lang.Object,int,boolean,boolean)
meth public static javax.swing.ListCellRenderer createClassPathListRenderer(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.openide.filesystems.FileObject)
meth public static javax.swing.table.TableCellRenderer createClassPathTableRenderer(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.openide.filesystems.FileObject)
meth public static javax.swing.tree.TreeCellRenderer createClassPathTreeRenderer(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.openide.filesystems.FileObject)
supr javax.swing.DefaultListCellRenderer
hfds FOREIGN_PLAIN_FILE_REFERENCE,ICON_BROKEN_ARTIFACT,ICON_BROKEN_JAR,ICON_BROKEN_LIBRARY,ICON_FOLDER,UNKNOWN_FILE_REFERENCE,WELL_KNOWN_PATHS_NAMES,evaluator,projectFolder
hcls ClassPathTableCellRenderer,ClassPathTreeCellRenderer

CLSS public abstract interface org.netbeans.modules.java.api.common.project.ui.customizer.CustomizerProvider2
 anno 0 java.lang.Deprecated()
intf org.netbeans.spi.project.ui.CustomizerProvider
meth public abstract void showCustomizer(java.lang.String,java.lang.String)

CLSS public abstract interface org.netbeans.modules.java.api.common.project.ui.customizer.CustomizerProvider3
intf org.netbeans.spi.project.ui.CustomizerProvider2
meth public abstract void cancelCustomizer()

CLSS public final org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator
fld public final static javax.swing.filechooser.FileFilter JAR_ZIP_FILTER
innr public abstract interface static ListComponent
intf java.awt.event.ActionListener
intf javax.swing.event.ListSelectionListener
meth public static java.io.File getLastUsedClassPathFolder()
meth public static org.netbeans.api.project.libraries.LibraryChooser$Filter createLibraryFilter()
meth public static org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator$ListComponent createListComponent(javax.swing.JList)
meth public static org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator$ListComponent createListComponent(javax.swing.JTable,javax.swing.DefaultListModel)
meth public static void register(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator$ListComponent,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,boolean,javax.swing.text.Document,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback)
meth public static void register(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator$ListComponent,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,boolean,javax.swing.text.Document,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback,java.lang.String[],javax.swing.filechooser.FileFilter,int)
meth public static void register(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator$ListComponent,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.text.Document,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback)
meth public static void register(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.ReferenceHelper,org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator$ListComponent,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.ButtonModel,javax.swing.text.Document,org.netbeans.modules.java.api.common.project.ui.ClassPathUiSupport$Callback,java.lang.String[],javax.swing.filechooser.FileFilter,int)
meth public static void setLastUsedClassPathFolder(java.io.File)
meth public void actionPerformed(java.awt.event.ActionEvent)
meth public void valueChanged(javax.swing.event.ListSelectionEvent)
supr java.lang.Object
hfds DEFAULT_ANT_ARTIFACT_TYPES,LAST_USED_CP_FOLDER,RP,addAntArtifact,addJar,addLibrary,allowRemoveClassPath,antArtifactTypes,callback,edit,fileSelectionMode,filter,helper,libraryPath,list,listModel,moveDown,moveUp,project,refHelper,remove,selectionModel
hcls JListListComponent,JTableListComponent,SimpleFileFilter

CLSS public abstract interface static org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator$ListComponent
 outer org.netbeans.modules.java.api.common.project.ui.customizer.EditMediator
meth public abstract int[] getSelectedIndices()
meth public abstract java.awt.Component getComponent()
meth public abstract javax.swing.DefaultListModel getModel()
meth public abstract javax.swing.ListSelectionModel getSelectionModel()
meth public abstract void setSelectedIndices(int[])

CLSS public org.netbeans.modules.java.api.common.project.ui.customizer.MainClassChooser
cons public init(java.util.Collection<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>>)
cons public init(java.util.Collection<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>>,java.lang.String)
cons public init(org.openide.filesystems.FileObject[])
cons public init(org.openide.filesystems.FileObject[],java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
cons public init(org.openide.filesystems.FileObject[],java.lang.String,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
fld public static java.lang.Boolean unitTestingSupport_hasMainMethodResult
meth public java.lang.String getSelectedMainClass()
meth public static boolean hasMainMethod(org.openide.filesystems.FileObject)
meth public void addChangeListener(javax.swing.event.ChangeListener)
meth public void removeChangeListener(javax.swing.event.ChangeListener)
supr javax.swing.JPanel
hfds changeListener,dialogSubtitle,jLabel1,jMainClassList,jScrollPane1,possibleMainClasses,scanningLabel
hcls MainClassComparator,MainClassRenderer,SearchTask

CLSS public org.netbeans.modules.java.api.common.project.ui.customizer.MainClassWarning
cons public init(java.lang.String,java.util.Collection<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>>)
cons public init(java.lang.String,org.openide.filesystems.FileObject[])
meth public java.lang.String getSelectedMainClass()
meth public void addChangeListener(javax.swing.event.ChangeListener)
meth public void removeChangeListener(javax.swing.event.ChangeListener)
supr javax.swing.JPanel
hfds jLabel1,jPanel1,mainClasses,message,sourcesRoots

CLSS public abstract interface org.netbeans.modules.java.api.common.project.ui.customizer.ProjectSharability
meth public abstract boolean isSharable()
meth public abstract void makeSharable()

CLSS public final org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi
innr public static EditMediator
meth public static javax.swing.table.DefaultTableModel createModel(org.netbeans.modules.java.api.common.ModuleRoots)
meth public static javax.swing.table.DefaultTableModel createModel(org.netbeans.modules.java.api.common.SourceRoots)
meth public static org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi$EditMediator registerEditMediator(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.SourceRoots,javax.swing.JTable,javax.swing.JButton,javax.swing.JButton,javax.swing.JButton,javax.swing.JButton)
meth public static org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi$EditMediator registerEditMediator(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.SourceRoots,javax.swing.JTable,javax.swing.JButton,javax.swing.JButton,javax.swing.JButton,javax.swing.JButton,javax.swing.CellEditor,boolean)
meth public static void showIllegalRootsDialog(java.util.Set)
supr java.lang.Object
hcls FileRenderer,SourceRootsModel,WarningDlg

CLSS public static org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi$EditMediator
 outer org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi
cons public init(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.SourceRoots,javax.swing.JTable,javax.swing.JButton,javax.swing.JButton,javax.swing.JButton,javax.swing.JButton,boolean)
intf java.awt.event.ActionListener
intf javax.swing.event.CellEditorListener
intf javax.swing.event.ListSelectionListener
meth public void actionPerformed(java.awt.event.ActionEvent)
meth public void editingCanceled(javax.swing.event.ChangeEvent)
meth public void editingStopped(javax.swing.event.ChangeEvent)
meth public void setRelatedEditMediator(org.netbeans.modules.java.api.common.project.ui.customizer.SourceRootsUi$EditMediator)
meth public void valueChanged(javax.swing.event.ListSelectionEvent)
supr java.lang.Object
hfds addFolderButton,downButton,emptyTableIsValid,ownedFolders,project,relatedEditMediator,removeButton,rootsList,rootsModel,sourceRoots,upButton

CLSS public final org.netbeans.modules.java.api.common.project.ui.wizards.FolderList
cons public init(java.lang.String,char,java.lang.String,java.lang.String,char,java.lang.String,char,java.lang.String)
fld public final static java.lang.String PROP_FILES = "files"
fld public final static java.lang.String PROP_LAST_USED_DIR = "lastUsedDir"
meth public java.io.File getLastUsedDir()
meth public java.io.File[] getFiles()
meth public static boolean isValidRoot(java.io.File,java.io.File[],java.io.File)
meth public static java.io.FileFilter testRootsFilter()
meth public void setEnabled(boolean)
meth public void setFiles(java.io.File[])
meth public void setLastUsedDir(java.io.File)
meth public void setProjectFolder(java.io.File)
meth public void setRelatedFolderList(org.netbeans.modules.java.api.common.project.ui.wizards.FolderList)
meth public void setRelatedFolderList(org.netbeans.modules.java.api.common.project.ui.wizards.FolderList,java.io.FileFilter)
supr javax.swing.JPanel
hfds LOG,TESTS_RE,addButton,fcMessage,jLabel1,jScrollPane1,lastUsedFolder,projectFolder,relatedFolderFilter,relatedFolderList,removeButton,roots
hcls ContextFileFilter,DNDHandle,FileListTransferable,Renderer

CLSS public abstract interface org.netbeans.modules.java.api.common.queries.MultiModuleGroupQuery
innr public final static Result
meth public abstract org.netbeans.api.project.SourceGroup[] filterModuleGroups(java.lang.String,org.netbeans.api.project.SourceGroup[])
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public abstract org.netbeans.modules.java.api.common.queries.MultiModuleGroupQuery$Result findModuleInfo(org.netbeans.api.project.SourceGroup)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public final static org.netbeans.modules.java.api.common.queries.MultiModuleGroupQuery$Result
 outer org.netbeans.modules.java.api.common.queries.MultiModuleGroupQuery
meth public java.lang.String getModuleName()
meth public java.lang.String getPathFromModule()
supr java.lang.Object
hfds moduleName,modulePath

CLSS public final org.netbeans.modules.java.api.common.queries.QuerySupport
meth public !varargs static org.netbeans.api.project.Sources createSources(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.Roots[])
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public !varargs static org.netbeans.modules.java.api.common.queries.MultiModuleGroupQuery createMultiModuleGroupQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.api.project.Sources,org.netbeans.modules.java.api.common.Roots[])
meth public !varargs static org.netbeans.spi.queries.SharabilityQueryImplementation createSharabilityQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,java.lang.String[])
 anno 0 java.lang.Deprecated()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NullAllowed()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
meth public !varargs static org.netbeans.spi.queries.SharabilityQueryImplementation2 createSharabilityQuery2(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,java.lang.String[])
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NullAllowed()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.api.project.ProjectInformation createProjectInformation(org.netbeans.modules.java.api.common.ant.UpdateHelper,org.netbeans.api.project.Project,javax.swing.Icon)
meth public static org.netbeans.api.project.ProjectInformation createProjectInformation(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.api.project.Project,javax.swing.Icon)
meth public static org.netbeans.spi.java.queries.AccessibilityQueryImplementation2 createModuleInfoAccessibilityQuery(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.AccessibilityQueryImplementation2 createModuleInfoAccessibilityQuery(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.AnnotationProcessingQueryImplementation createAnnotationProcessingQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)
meth public static org.netbeans.spi.java.queries.BinaryForSourceQueryImplementation createBinaryForSourceQueryImplementation(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator)
meth public static org.netbeans.spi.java.queries.BinaryForSourceQueryImplementation createBinaryForSourceQueryImplementation(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String[],java.lang.String[])
meth public static org.netbeans.spi.java.queries.BinaryForSourceQueryImplementation createMultiModuleBinaryForSourceQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.CompilerOptionsQueryImplementation createAutomaticModuleNameQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.CompilerOptionsQueryImplementation createCompilerOptionsQuery(org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.CompilerOptionsQueryImplementation createMultiModuleUnitTestsCompilerOptionsQuery(org.netbeans.api.project.Project,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.CompilerOptionsQueryImplementation createUnitTestsCompilerOptionsQuery(org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.JavadocForBinaryQueryImplementation createJavadocForBinaryQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator)
meth public static org.netbeans.spi.java.queries.JavadocForBinaryQueryImplementation createJavadocForBinaryQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String[])
meth public static org.netbeans.spi.java.queries.JavadocForBinaryQueryImplementation createMultiModuleJavadocForBinaryQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.MultipleRootsUnitTestForSourceQueryImplementation createMultiModuleUnitTestForSourceQuery(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.MultipleRootsUnitTestForSourceQueryImplementation createUnitTestForSourceQuery(org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
meth public static org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation createCompiledSourceForBinaryQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
meth public static org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation createCompiledSourceForBinaryQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,java.lang.String[],java.lang.String[])
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NullAllowed()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.spi.java.queries.SourceForBinaryQueryImplementation createMultiModuleSourceForBinaryQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.SourceLevelQueryImplementation createSourceLevelQuery(org.netbeans.spi.project.support.ant.PropertyEvaluator)
 anno 0 java.lang.Deprecated()
meth public static org.netbeans.spi.java.queries.SourceLevelQueryImplementation2 createSourceLevelQuery2(org.netbeans.spi.project.support.ant.PropertyEvaluator)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.java.queries.SourceLevelQueryImplementation2 createSourceLevelQuery2(org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.project.ant.AntArtifactProvider createMultiModuleAntArtifactProvider(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.queries.FileBuiltQueryImplementation createFileBuiltQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
meth public static org.netbeans.spi.queries.FileBuiltQueryImplementation createMultiModuleFileBuiltQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
meth public static org.netbeans.spi.queries.FileEncodingQueryImplementation createFileEncodingQuery(org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String)
meth public static org.netbeans.spi.queries.SharabilityQueryImplementation createSharabilityQuery(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.project.support.ant.PropertyEvaluator,org.netbeans.modules.java.api.common.SourceRoots,org.netbeans.modules.java.api.common.SourceRoots)
 anno 0 java.lang.Deprecated()
meth public static org.openide.loaders.CreateFromTemplateAttributesProvider createTemplateAttributesProvider(org.netbeans.spi.project.support.ant.AntProjectHelper,org.netbeans.spi.queries.FileEncodingQueryImplementation)
supr java.lang.Object
hcls AntHelper,AntUpdateHelper

CLSS public abstract interface org.netbeans.modules.java.api.common.ui.PlatformFilter
 anno 0 java.lang.FunctionalInterface()
meth public abstract boolean accept(org.netbeans.api.java.platform.JavaPlatform)
 anno 1 org.netbeans.api.annotations.common.NonNull()

CLSS public final org.netbeans.modules.java.api.common.ui.PlatformUiSupport
meth public static javax.swing.ComboBoxModel createPlatformComboBoxModel(java.lang.String)
meth public static javax.swing.ComboBoxModel createPlatformComboBoxModel(java.lang.String,java.util.Collection<? extends org.netbeans.modules.java.api.common.ui.PlatformFilter>)
meth public static javax.swing.ComboBoxModel createPlatformComboBoxModel(org.netbeans.api.project.Project,org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String,java.util.Collection<? extends org.netbeans.modules.java.api.common.ui.PlatformFilter>)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
 anno 4 org.netbeans.api.annotations.common.NullAllowed()
meth public static javax.swing.ComboBoxModel createProfileComboBoxModel(javax.swing.ComboBoxModel,java.lang.String,org.netbeans.api.java.queries.SourceLevelQuery$Profile)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
 anno 3 org.netbeans.api.annotations.common.NullAllowed()
meth public static javax.swing.ComboBoxModel createSourceLevelComboBoxModel(javax.swing.ComboBoxModel,java.lang.String,java.lang.String)
meth public static javax.swing.ComboBoxModel createSourceLevelComboBoxModel(javax.swing.ComboBoxModel,java.lang.String,java.lang.String,org.openide.modules.SpecificationVersion)
meth public static javax.swing.ListCellRenderer createPlatformListCellRenderer()
meth public static javax.swing.ListCellRenderer createProfileListCellRenderer()
meth public static javax.swing.ListCellRenderer createSourceLevelListCellRenderer()
meth public static org.netbeans.api.java.platform.JavaPlatform getPlatform(java.lang.Object)
meth public static org.netbeans.api.java.queries.SourceLevelQuery$Profile getProfile(java.lang.Object)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static org.openide.modules.SpecificationVersion getSourceLevel(java.lang.Object)
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static void storePlatform(org.netbeans.spi.project.support.ant.EditableProperties,org.netbeans.modules.java.api.common.ant.UpdateHelper,java.lang.String,java.lang.Object,java.lang.Object)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
meth public static void storePlatform(org.netbeans.spi.project.support.ant.EditableProperties,org.netbeans.modules.java.api.common.ant.UpdateHelper,java.lang.String,java.lang.Object,java.lang.Object,boolean)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
meth public static void storePlatform(org.netbeans.spi.project.support.ant.EditableProperties,org.netbeans.modules.java.api.common.ant.UpdateHelper,java.lang.String,java.lang.Object,java.lang.Object,java.lang.Object,boolean)
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NullAllowed()
 anno 6 org.netbeans.api.annotations.common.NullAllowed()
meth public static void storePlatform(org.netbeans.spi.project.support.ant.EditableProperties,org.netbeans.modules.java.api.common.ant.UpdateHelper,java.lang.String,java.lang.String,org.openide.modules.SpecificationVersion)
supr java.lang.Object
hfds JDK_1_5,LOGGER
hcls PlatformComboBoxModel,PlatformKey,PlatformListCellRenderer,ProfileComboBoxModel,ProfileListCellRenderer,SourceLevelComboBoxModel,SourceLevelKey,SourceLevelListCellRenderer

CLSS public final org.netbeans.modules.java.api.common.util.CommonModuleUtils
fld public final static org.openide.modules.SpecificationVersion JDK9
meth public static java.lang.String getXModule(org.netbeans.api.java.queries.CompilerOptionsQuery$Result)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Collection<? extends java.lang.String> parseSourcePathVariants(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Map<java.lang.String,java.util.List<java.net.URL>> getPatches(org.netbeans.api.java.queries.CompilerOptionsQuery$Result)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
meth public static java.util.Set<java.lang.String> getAddModules(org.netbeans.api.java.queries.CompilerOptionsQuery$Result)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object
hfds ARG_ADDMODS,ARG_PATCH_MOD,ARG_XMODULE,MATCHER_PATCH,MATCHER_XMODULE

CLSS public final org.netbeans.modules.java.api.common.util.CommonProjectUtils
fld public final static java.lang.String J2SE_PLATFORM_TYPE = "j2se"
meth public static boolean hasMainMethod(org.openide.filesystems.FileObject)
meth public static boolean isMainClass(java.lang.String,org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath,org.netbeans.api.java.classpath.ClassPath)
meth public static java.lang.String getAntPropertyName(java.lang.String)
meth public static java.lang.String getBuildXmlName(org.netbeans.spi.project.support.ant.PropertyEvaluator,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.NonNull()
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public static java.util.Collection<org.netbeans.api.java.source.ElementHandle<javax.lang.model.element.TypeElement>> getMainMethods(org.openide.filesystems.FileObject)
meth public static org.netbeans.api.java.platform.JavaPlatform getActivePlatform(java.lang.String)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
meth public static org.netbeans.api.java.platform.JavaPlatform getActivePlatform(java.lang.String,java.lang.String)
 anno 0 org.netbeans.api.annotations.common.CheckForNull()
 anno 1 org.netbeans.api.annotations.common.NullAllowed()
 anno 2 org.netbeans.api.annotations.common.NullAllowed()
meth public static org.netbeans.spi.project.libraries.LibraryImplementation3 createJavaLibraryImplementation(java.lang.String,java.net.URL[],java.net.URL[],java.net.URL[],java.lang.String[],java.lang.String[])
 anno 1 org.netbeans.api.annotations.common.NonNull()
 anno 2 org.netbeans.api.annotations.common.NonNull()
 anno 3 org.netbeans.api.annotations.common.NonNull()
 anno 4 org.netbeans.api.annotations.common.NonNull()
 anno 5 org.netbeans.api.annotations.common.NonNull()
 anno 6 org.netbeans.api.annotations.common.NonNull()
supr java.lang.Object

CLSS public abstract interface org.netbeans.spi.java.classpath.ClassPathProvider
meth public abstract org.netbeans.api.java.classpath.ClassPath findClassPath(org.openide.filesystems.FileObject,java.lang.String)

CLSS public abstract interface org.netbeans.spi.java.project.classpath.ProjectClassPathExtender
 anno 0 java.lang.Deprecated()
meth public abstract boolean addAntArtifact(org.netbeans.api.project.ant.AntArtifact,java.net.URI) throws java.io.IOException
 anno 0 java.lang.Deprecated()
meth public abstract boolean addArchiveFile(org.openide.filesystems.FileObject) throws java.io.IOException
 anno 0 java.lang.Deprecated()
meth public abstract boolean addLibrary(org.netbeans.api.project.libraries.Library) throws java.io.IOException
 anno 0 java.lang.Deprecated()

CLSS public abstract org.netbeans.spi.java.project.classpath.ProjectClassPathModifierImplementation
cons protected init()
meth protected abstract boolean addAntArtifacts(org.netbeans.api.project.ant.AntArtifact[],java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected abstract boolean addLibraries(org.netbeans.api.project.libraries.Library[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected abstract boolean addRoots(java.net.URL[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected abstract boolean removeAntArtifacts(org.netbeans.api.project.ant.AntArtifact[],java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected abstract boolean removeLibraries(org.netbeans.api.project.libraries.Library[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected abstract boolean removeRoots(java.net.URL[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected abstract java.lang.String[] getExtensibleClassPathTypes(org.netbeans.api.project.SourceGroup)
meth protected abstract org.netbeans.api.project.SourceGroup[] getExtensibleSourceGroups()
meth protected boolean addProjects(org.netbeans.api.project.Project[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected boolean addRoots(java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected boolean removeRoots(java.net.URI[],org.netbeans.api.project.SourceGroup,java.lang.String) throws java.io.IOException
meth protected final java.lang.String performSharabilityHeuristics(java.net.URI,org.netbeans.spi.project.support.ant.AntProjectHelper) throws java.io.IOException,java.net.URISyntaxException
meth protected static java.net.URI[] convertURLsToURIs(java.net.URL[])
supr java.lang.Object
hcls Accessor

CLSS public abstract interface org.netbeans.spi.project.ActionProvider
fld public final static java.lang.String COMMAND_BUILD = "build"
fld public final static java.lang.String COMMAND_CLEAN = "clean"
fld public final static java.lang.String COMMAND_COMPILE_SINGLE = "compile.single"
fld public final static java.lang.String COMMAND_COPY = "copy"
fld public final static java.lang.String COMMAND_DEBUG = "debug"
fld public final static java.lang.String COMMAND_DEBUG_SINGLE = "debug.single"
fld public final static java.lang.String COMMAND_DEBUG_STEP_INTO = "debug.stepinto"
fld public final static java.lang.String COMMAND_DEBUG_TEST_SINGLE = "debug.test.single"
fld public final static java.lang.String COMMAND_DELETE = "delete"
fld public final static java.lang.String COMMAND_MOVE = "move"
fld public final static java.lang.String COMMAND_PROFILE = "profile"
fld public final static java.lang.String COMMAND_PROFILE_SINGLE = "profile.single"
fld public final static java.lang.String COMMAND_PROFILE_TEST_SINGLE = "profile.test.single"
fld public final static java.lang.String COMMAND_REBUILD = "rebuild"
fld public final static java.lang.String COMMAND_RENAME = "rename"
fld public final static java.lang.String COMMAND_RUN = "run"
fld public final static java.lang.String COMMAND_RUN_SINGLE = "run.single"
fld public final static java.lang.String COMMAND_TEST = "test"
fld public final static java.lang.String COMMAND_TEST_SINGLE = "test.single"
meth public abstract boolean isActionEnabled(java.lang.String,org.openide.util.Lookup)
meth public abstract java.lang.String[] getSupportedActions()
meth public abstract void invokeAction(java.lang.String,org.openide.util.Lookup)

CLSS public abstract interface org.netbeans.spi.project.ProjectConfiguration
meth public abstract java.lang.String getDisplayName()

CLSS public abstract interface org.netbeans.spi.project.ui.CustomizerProvider
meth public abstract void showCustomizer()

CLSS public abstract interface org.netbeans.spi.project.ui.CustomizerProvider2
intf org.netbeans.spi.project.ui.CustomizerProvider
meth public abstract void showCustomizer(java.lang.String,java.lang.String)

CLSS public abstract interface org.netbeans.spi.project.ui.LogicalViewProvider
intf org.netbeans.spi.project.ui.PathFinder
meth public abstract org.openide.nodes.Node createLogicalView()

CLSS public abstract interface org.netbeans.spi.project.ui.PathFinder
meth public abstract org.openide.nodes.Node findPath(org.openide.nodes.Node,java.lang.Object)

CLSS public abstract interface org.netbeans.spi.project.ui.support.NodeFactory
innr public abstract interface static !annotation Registration
meth public abstract org.netbeans.spi.project.ui.support.NodeList<?> createNodes(org.netbeans.api.project.Project)

CLSS public org.openide.nodes.AbstractNode
cons public init(org.openide.nodes.Children)
cons public init(org.openide.nodes.Children,org.openide.util.Lookup)
fld protected java.text.MessageFormat displayFormat
fld protected org.openide.util.actions.SystemAction[] systemActions
 anno 0 java.lang.Deprecated()
meth protected final org.openide.nodes.CookieSet getCookieSet()
meth protected final org.openide.nodes.Sheet getSheet()
meth protected final void setCookieSet(org.openide.nodes.CookieSet)
 anno 0 java.lang.Deprecated()
meth protected final void setSheet(org.openide.nodes.Sheet)
meth protected org.openide.nodes.Sheet createSheet()
meth protected org.openide.util.actions.SystemAction[] createActions()
 anno 0 java.lang.Deprecated()
meth protected void createPasteTypes(java.awt.datatransfer.Transferable,java.util.List<org.openide.util.datatransfer.PasteType>)
meth public <%0 extends org.openide.nodes.Node$Cookie> {%%0} getCookie(java.lang.Class<{%%0}>)
meth public boolean canCopy()
meth public boolean canCut()
meth public boolean canDestroy()
meth public boolean canRename()
meth public boolean hasCustomizer()
meth public final org.openide.util.datatransfer.PasteType[] getPasteTypes(java.awt.datatransfer.Transferable)
meth public final void setIconBaseWithExtension(java.lang.String)
meth public java.awt.Component getCustomizer()
meth public java.awt.Image getIcon(int)
meth public java.awt.Image getOpenedIcon(int)
meth public java.awt.datatransfer.Transferable clipboardCopy() throws java.io.IOException
meth public java.awt.datatransfer.Transferable clipboardCut() throws java.io.IOException
meth public java.awt.datatransfer.Transferable drag() throws java.io.IOException
meth public javax.swing.Action getPreferredAction()
meth public org.openide.nodes.Node cloneNode()
meth public org.openide.nodes.Node$Handle getHandle()
meth public org.openide.nodes.Node$PropertySet[] getPropertySets()
meth public org.openide.util.HelpCtx getHelpCtx()
meth public org.openide.util.actions.SystemAction getDefaultAction()
 anno 0 java.lang.Deprecated()
meth public org.openide.util.actions.SystemAction[] getActions()
 anno 0 java.lang.Deprecated()
meth public org.openide.util.datatransfer.NewType[] getNewTypes()
meth public org.openide.util.datatransfer.PasteType getDropType(java.awt.datatransfer.Transferable,int,int)
meth public void setDefaultAction(org.openide.util.actions.SystemAction)
 anno 0 java.lang.Deprecated()
meth public void setIconBase(java.lang.String)
 anno 0 java.lang.Deprecated()
meth public void setName(java.lang.String)
supr org.openide.nodes.Node
hfds DEFAULT_ICON,DEFAULT_ICON_BASE,DEFAULT_ICON_EXTENSION,ICON_BASE,NO_NEW_TYPES,NO_PASTE_TYPES,OPENED_ICON_BASE,iconBase,iconExtension,icons,lookup,overridesGetDefaultAction,preferredAction,sheet,sheetCookieL
hcls SheetAndCookieListener

CLSS public abstract org.openide.nodes.Node
cons protected init(org.openide.nodes.Children)
cons protected init(org.openide.nodes.Children,org.openide.util.Lookup)
fld public final static java.lang.String PROP_COOKIE = "cookie"
fld public final static java.lang.String PROP_DISPLAY_NAME = "displayName"
fld public final static java.lang.String PROP_ICON = "icon"
fld public final static java.lang.String PROP_LEAF = "leaf"
fld public final static java.lang.String PROP_NAME = "name"
fld public final static java.lang.String PROP_OPENED_ICON = "openedIcon"
fld public final static java.lang.String PROP_PARENT_NODE = "parentNode"
fld public final static java.lang.String PROP_PROPERTY_SETS = "propertySets"
fld public final static java.lang.String PROP_SHORT_DESCRIPTION = "shortDescription"
fld public final static org.openide.nodes.Node EMPTY
innr public abstract interface static Cookie
innr public abstract interface static Handle
innr public abstract static IndexedProperty
innr public abstract static Property
innr public abstract static PropertySet
intf org.openide.util.HelpCtx$Provider
intf org.openide.util.Lookup$Provider
meth protected final boolean hasPropertyChangeListener()
meth protected final void fireCookieChange()
meth protected final void fireDisplayNameChange(java.lang.String,java.lang.String)
meth protected final void fireIconChange()
meth protected final void fireNameChange(java.lang.String,java.lang.String)
meth protected final void fireNodeDestroyed()
meth protected final void fireOpenedIconChange()
meth protected final void firePropertyChange(java.lang.String,java.lang.Object,java.lang.Object)
meth protected final void firePropertySetsChange(org.openide.nodes.Node$PropertySet[],org.openide.nodes.Node$PropertySet[])
meth protected final void fireShortDescriptionChange(java.lang.String,java.lang.String)
meth protected final void setChildren(org.openide.nodes.Children)
meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException
meth public <%0 extends org.openide.nodes.Node$Cookie> {%%0} getCookie(java.lang.Class<{%%0}>)
meth public abstract boolean canCopy()
meth public abstract boolean canCut()
meth public abstract boolean canDestroy()
meth public abstract boolean canRename()
meth public abstract boolean hasCustomizer()
meth public abstract java.awt.Component getCustomizer()
meth public abstract java.awt.Image getIcon(int)
meth public abstract java.awt.Image getOpenedIcon(int)
meth public abstract java.awt.datatransfer.Transferable clipboardCopy() throws java.io.IOException
meth public abstract java.awt.datatransfer.Transferable clipboardCut() throws java.io.IOException
meth public abstract java.awt.datatransfer.Transferable drag() throws java.io.IOException
meth public abstract org.openide.nodes.Node cloneNode()
meth public abstract org.openide.nodes.Node$Handle getHandle()
meth public abstract org.openide.nodes.Node$PropertySet[] getPropertySets()
meth public abstract org.openide.util.HelpCtx getHelpCtx()
meth public abstract org.openide.util.datatransfer.NewType[] getNewTypes()
meth public abstract org.openide.util.datatransfer.PasteType getDropType(java.awt.datatransfer.Transferable,int,int)
meth public abstract org.openide.util.datatransfer.PasteType[] getPasteTypes(java.awt.datatransfer.Transferable)
meth public boolean equals(java.lang.Object)
meth public final boolean isLeaf()
meth public final javax.swing.JPopupMenu getContextMenu()
meth public final org.openide.nodes.Children getChildren()
meth public final org.openide.nodes.Node getParentNode()
meth public final org.openide.util.Lookup getLookup()
meth public final void addNodeListener(org.openide.nodes.NodeListener)
meth public final void addPropertyChangeListener(java.beans.PropertyChangeListener)
meth public final void removeNodeListener(org.openide.nodes.NodeListener)
meth public final void removePropertyChangeListener(java.beans.PropertyChangeListener)
meth public int hashCode()
meth public java.lang.String getHtmlDisplayName()
meth public java.lang.String toString()
meth public javax.swing.Action getPreferredAction()
meth public javax.swing.Action[] getActions(boolean)
meth public org.openide.util.actions.SystemAction getDefaultAction()
 anno 0 java.lang.Deprecated()
meth public org.openide.util.actions.SystemAction[] getActions()
 anno 0 java.lang.Deprecated()
meth public org.openide.util.actions.SystemAction[] getContextActions()
 anno 0 java.lang.Deprecated()
meth public void destroy() throws java.io.IOException
meth public void setDisplayName(java.lang.String)
meth public void setHidden(boolean)
 anno 0 java.lang.Deprecated()
meth public void setName(java.lang.String)
meth public void setShortDescription(java.lang.String)
supr java.beans.FeatureDescriptor
hfds BLOCK_EVENTS,INIT_LOCK,LOCK,TEMPL_COOKIE,err,hierarchy,listeners,lookups,parent,warnedBadProperties
hcls LookupEventList,PropertyEditorRef

CLSS public final org.openide.util.HelpCtx
cons public init(java.lang.Class<?>)
 anno 0 java.lang.Deprecated()
cons public init(java.lang.String)
cons public init(java.net.URL)
 anno 0 java.lang.Deprecated()
fld public final static org.openide.util.HelpCtx DEFAULT_HELP
innr public abstract interface static Displayer
innr public abstract interface static Provider
meth public boolean display()
meth public boolean equals(java.lang.Object)
meth public int hashCode()
meth public java.lang.String getHelpID()
meth public java.lang.String toString()
meth public java.net.URL getHelp()
meth public static org.openide.util.HelpCtx findHelp(java.awt.Component)
meth public static org.openide.util.HelpCtx findHelp(java.lang.Object)
meth public static void setHelpIDString(javax.swing.JComponent,java.lang.String)
supr java.lang.Object
hfds err,helpCtx,helpID

CLSS public abstract interface static org.openide.util.HelpCtx$Provider
 outer org.openide.util.HelpCtx
meth public abstract org.openide.util.HelpCtx getHelpCtx()

CLSS public abstract org.openide.util.Lookup
cons public init()
fld public final static org.openide.util.Lookup EMPTY
innr public abstract interface static Provider
innr public abstract static Item
innr public abstract static Result
innr public final static Template
meth public <%0 extends java.lang.Object> java.util.Collection<? extends {%%0}> lookupAll(java.lang.Class<{%%0}>)
meth public <%0 extends java.lang.Object> org.openide.util.Lookup$Item<{%%0}> lookupItem(org.openide.util.Lookup$Template<{%%0}>)
meth public <%0 extends java.lang.Object> org.openide.util.Lookup$Result<{%%0}> lookupResult(java.lang.Class<{%%0}>)
meth public abstract <%0 extends java.lang.Object> org.openide.util.Lookup$Result<{%%0}> lookup(org.openide.util.Lookup$Template<{%%0}>)
meth public abstract <%0 extends java.lang.Object> {%%0} lookup(java.lang.Class<{%%0}>)
meth public static org.openide.util.Lookup getDefault()
supr java.lang.Object
hfds LOG,defaultLookup,defaultLookupProvider
hcls DefLookup,Empty

CLSS public abstract interface static org.openide.util.Lookup$Provider
 outer org.openide.util.Lookup
meth public abstract org.openide.util.Lookup getLookup()

