Index: java/src/org/netbeans/modules/java/JavaDataObject.java =================================================================== RCS file: /cvs/java/src/org/netbeans/modules/java/JavaDataObject.java,v retrieving revision 1.163 diff -u -r1.163 JavaDataObject.java --- java/src/org/netbeans/modules/java/JavaDataObject.java 24 Sep 2002 13:22:09 -0000 1.163 +++ java/src/org/netbeans/modules/java/JavaDataObject.java 25 Nov 2002 20:06:41 -0000 @@ -160,7 +160,6 @@ private void init() { MultiDataObject.Entry entry = getPrimaryEntry(); - CookieSet cookies = getCookieSet(); PrimaryListener l = new PrimaryListener(); addPropertyChangeListener(l); @@ -168,7 +167,15 @@ fileChangeListener = WeakListener.fileChange(fileChangeListenerHook, entry.getFile()); classFileListener = new SecondaryListener(); lock = new Object(); - + + addPropertyChangeListener(new PropertyChangeListener() { + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(PROP_UPTODATE)) + updateInstanceCookie((Boolean)(evt.getNewValue())); + } + }); + addSourceChangeListener(null); + CookieSet cookies = getCookieSet(); Class[] cookieClasses = new Class[] { CompilerCookie.Build.class, CompilerCookie.Clean.class, @@ -183,23 +190,29 @@ InstanceCookie.class, }; cookies.add(cookieClasses, this); - - addPropertyChangeListener(new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals(PROP_UPTODATE)) - updateInstanceCookie((Boolean)(evt.getNewValue())); - } - }); + //XXX should convert JDO to implement ChangeListener directly. + //Commenting out for now - no need to create a useless change listener -TDB + /* cookies.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent evt) { // PENDING: fire cookies change on // individual Elements. } }); - addSourceChangeListener(null); + */ initialized = true; } + private boolean cookiesInitialized=false; + public Node.Cookie getCookie (Class clazz) { + if ((clazz == DataObject.class) || (clazz == JavaDataObject.class)) { + return this; + } +// System.err.println("COOKIE REQUEST: " + clazz + " on " + getName()); +// Thread.dumpStack(); + return super.getCookie(clazz); + } + /** * This overriden version will try to search for children on the first * invocation. @@ -965,7 +978,14 @@ String propName = evt.getPropertyName(); if ((propName == null) || (propName.equals(PROP_FILES))) { lissenToClasses(); - checkUpToDate(); + if (!isTemplate()) { + //commented code below useful for tracing property changes: +// System.err.println ("PROPERTY CHANGE: " + propName + " on " + getName() + "\n" + evt); +// RuntimeException rx = new RuntimeException ("foo"); +// ErrorManager.getDefault().notify(ErrorManager.INFORMATIONAL, rx); + checkUpToDate(); +// throw rx; + } } else if (PROP_PRIMARY_FILE.equals(propName)) { primaryFileMoved((FileObject)evt.getOldValue(), (FileObject)evt.getNewValue()); } else if (PROP_NAME.equals(propName)) { @@ -1198,10 +1218,12 @@ return "[JDO for " + getPrimaryFile() + "]"; // NOI18N } - /** Getter for property upToDate. + /** Getter for property upToDate. If isTemplate() is true, + * will always return Boolean.TRUE * @return Value of property upToDate. */ Boolean isUpToDate() { + if (this.isTemplate()) return Boolean.TRUE; if (upToDate == null) checkUpToDate(); return upToDate; Index: java/src/org/netbeans/modules/java/JavaNode.java =================================================================== RCS file: /cvs/java/src/org/netbeans/modules/java/JavaNode.java,v retrieving revision 1.92 diff -u -r1.92 JavaNode.java --- java/src/org/netbeans/modules/java/JavaNode.java 26 Jun 2002 13:37:10 -0000 1.92 +++ java/src/org/netbeans/modules/java/JavaNode.java 25 Nov 2002 20:06:41 -0000 @@ -122,12 +122,35 @@ * @param jdo the data object to represent */ public JavaNode (JavaDataObject jdo) { - this(jdo, new SourceChildren(JavaDataObject.getExplorerFactory(), jdo.getSource())); + this (jdo, new JavaSourceChildren (jdo)); currentBadges = new HashSet(); } + + //Workaround for issue #28623 - aggresively creating source element, classloading + private static final class JavaSourceChildren extends SourceChildren { + JavaDataObject jdo; + public JavaSourceChildren (JavaDataObject jdo) { + super (JavaDataObject.getExplorerFactory()); + this.jdo = jdo; + } + protected void addNotify() { + setElement (jdo.getSource()); + super.addNotify(); + } + protected void removeNotify() { + super.removeNotify(); + setElement (null); + } + } + boolean hasParser=false; private JavaParser findParser() { - return (JavaParser)getDataObject().getCookie(JavaParser.class); + JavaParser result = (JavaParser)getDataObject().getCookie(JavaParser.class); + if ((!hasParser) && (result != null)){ + result.addChangeListener(WeakListener.change(mixedListener, result)); + hasParser=true; + } + return result; } /** @@ -181,24 +204,19 @@ StateUpdater.getInstance().updateNode(this); } } - + private PropL mixedListener; private void initialize () { setIconBase(getBareIconBase()); JavaDataObject jdo = getJavaDataObject(); - SourceElement source = jdo.getSource(); +// SourceElement source = jdo.getSource(); // add a source property change listener that will modify the node's icon // as the source's status change. mixedListener = new PropL(); jdo.addPropertyChangeListener(WeakListener.propertyChange(mixedListener, jdo)); - JavaParser p = findParser(); - if (p != null) { - p.addChangeListener(WeakListener.change(mixedListener, p)); - } - StateUpdater.getInstance().registerNode(this); } @@ -399,16 +417,21 @@ } public Image getIcon(int type) { - preparseSource(); - - // assume setIconBase was already called. - String[] badges = getBadges(); + String[] badges=null; + if (!getJavaDataObject().isTemplate()) { + preparseSource(); + // assume setIconBase was already called. + badges = getBadges(); + } return iconCache.getIcon(super.getIcon(type), badges); } public Image getOpenedIcon(int type) { - preparseSource(); - String[] badges = getBadges(); + String[] badges = null; + if (!getJavaDataObject().isTemplate()) { + preparseSource(); + badges = getBadges(); + } return iconCache.getIcon(super.getOpenedIcon(type), badges); } @@ -518,9 +541,11 @@ */ protected void resolveIcons() { JavaDataObject jdo = getJavaDataObject(); + boolean isTemplate = jdo.isTemplate(); + //TDB - avoid classloading by turning off parsing for templates, bug 28623 + if (isTemplate) return; SourceElement source = jdo.getSource(); String desc = null; - boolean isTemplate = jdo.isTemplate(); java.util.Collection badges = new java.util.ArrayList(3); int status;