@@ -412,19 +412,12 @@ final Node logicalViewForProject(
412412 // PropertyChangeListener & NodeListener impl -----------------------------------------
413413
414414 @ Override
415- public void propertyChange ( PropertyChangeEvent e ) {
416- if ( OpenProjectList .PROPERTY_OPEN_PROJECTS .equals ( e .getPropertyName () ) ) {
417- RP .post (new Runnable () {
418- public @ Override void run () {
419- setKeys (getKeys ());
420- }
421- });
422- } else if ( PROP_DISPLAY_NAME .equals (e .getPropertyName ()) ) {
423- RP .schedule (new Runnable () {
424- public @ Override void run () {
425- setKeys ( getKeys () );
426- }
427- }, 500 , TimeUnit .MILLISECONDS );
415+ public void propertyChange (PropertyChangeEvent e ) {
416+ switch (e .getPropertyName ()) {
417+ case OpenProjectList .PROPERTY_OPEN_PROJECTS ->
418+ RP .post (() -> setKeys (getKeys ()));
419+ case PROP_DISPLAY_NAME ->
420+ RP .schedule (() -> setKeys (getKeys ()), 500 , TimeUnit .MILLISECONDS );
428421 }
429422 }
430423
@@ -627,10 +620,14 @@ public BadgingNode(ProjectChildren ch, ProjectChildren.Pair p, Node n, boolean l
627620 this .ch = ch ;
628621 this .pair = p ;
629622 this .logicalView = logicalView ;
630- OpenProjectList .log (Level .FINER , "BadgingNode init {0}" , toStringForLog ()); // NOI18N
623+ if (LOG .isLoggable (Level .FINER )) {
624+ LOG .log (Level .FINER , "BadgingNode init {0}" , toStringForLog ()); // NOI18N
625+ }
631626 OpenProjectList .getDefault ().addPropertyChangeListener (WeakListeners .propertyChange (this , OpenProjectList .getDefault ()));
632627 setProjectFilesAsynch ();
633- OpenProjectList .log (Level .FINER , "BadgingNode finished {0}" , toStringForLog ()); // NOI18N
628+ if (LOG .isLoggable (Level .FINER )) {
629+ LOG .log (Level .FINER , "BadgingNode finished {0}" , toStringForLog ()); // NOI18N
630+ }
634631 AnnotationListener annotationListener = new AnnotationListener (this );
635632 annotationListener .init ();
636633 result .addLookupListener (annotationListener );
@@ -655,18 +652,25 @@ private void replaceProject(Project newProj) {
655652 if (newProj == pair .project ) {
656653 return ;
657654 }
658- } catch (IOException ex ) {
659- OpenProjectList .log (Level .INFO , "No project for " + pair .fo , ex ); // NOI18N
660- } catch (IllegalArgumentException ex ) {
661- OpenProjectList .log (Level .INFO , "No project for " + pair .fo , ex ); // NOI18N
655+ } catch (IOException | IllegalArgumentException ex ) {
656+ OpenProjectList .LOGGER .log (Level .INFO , "No project for " + pair .fo , ex ); // NOI18N
662657 }
658+ }
659+
660+ // fast path before lookup. This method can be hot during startup.
661+ if (newProj != null && !pair .fo .equals (newProj .getProjectDirectory ())) {
662+ return ;
663+ }
663664
665+ if (OpenProjectList .LOGGER .isLoggable (Level .FINER )) {
666+ OpenProjectList .log (Level .FINER , "replacing for {0}" , toStringForLog ());
664667 }
665-
666- OpenProjectList .log (Level .FINER , "replacing for {0}" , toStringForLog ());
668+
667669 Project p = getLookup ().lookup (Project .class );
668670 if (p == null ) {
669- OpenProjectList .log (Level .FINE , "no project in lookup {0}" , toStringForLog ());
671+ if (OpenProjectList .LOGGER .isLoggable (Level .FINE )) {
672+ OpenProjectList .log (Level .FINE , "no project in lookup {0}" , toStringForLog ());
673+ }
670674 return ;
671675 }
672676 FileObject fo = p .getProjectDirectory ();
@@ -696,24 +700,26 @@ private void replaceProject(Project newProj) {
696700 n = Node .EMPTY ;
697701 }
698702 }
699- OpenProjectList .log (Level .FINER , "change original: {0}" , n );
700- OpenProjectList .log (Level .FINER , "children before change original: {0}" , getChildren ());
701- OpenProjectList .log (Level .FINER , "delegate children before change original: {0}" , getOriginal ().getChildren ());
703+ if (OpenProjectList .LOGGER .isLoggable (Level .FINER )) {
704+ OpenProjectList .log (Level .FINER , "change original: {0}" , n );
705+ OpenProjectList .log (Level .FINER , "children before change original: {0}" , getChildren ());
706+ OpenProjectList .log (Level .FINER , "delegate children before change original: {0}" , getOriginal ().getChildren ());
707+ }
702708 changeOriginal (n , true );
703- OpenProjectList .log (Level .FINER , "delegate after change original: {0}" , getOriginal ());
704- OpenProjectList .log (Level .FINER , "name after change original: {0}" , getName ());
705- OpenProjectList .log (Level .FINER , "children after change original: {0}" , getChildren ());
706- OpenProjectList .log (Level .FINER , "delegate children after change original: {0}" , getOriginal ().getChildren ());
709+ if (OpenProjectList .LOGGER .isLoggable (Level .FINER )) {
710+ OpenProjectList .log (Level .FINER , "delegate after change original: {0}" , getOriginal ());
711+ OpenProjectList .log (Level .FINER , "name after change original: {0}" , getName ());
712+ OpenProjectList .log (Level .FINER , "children after change original: {0}" , getChildren ());
713+ OpenProjectList .log (Level .FINER , "delegate children after change original: {0}" , getOriginal ().getChildren ());
714+ }
707715 BadgingLookup bl = (BadgingLookup ) getLookup ();
708716 bl .setMyLookups (n .getLookup ());
709- OpenProjectList .log (Level .FINER , "done {0}" , toStringForLog ());
717+ if (OpenProjectList .LOGGER .isLoggable (Level .FINER )) {
718+ OpenProjectList .log (Level .FINER , "done {0}" , toStringForLog ());
719+ }
710720 setProjectFilesAsynch ();
711721 } else {
712- FileObject newDir ;
713- if (newProj != null ) {
714- newDir = newProj .getProjectDirectory ();
715- } else {
716- newDir = null ;
722+ if (newProj == null ) {
717723 //#228790 use RP instead of EventQueue.invokeLater, job can block on project write mutex
718724 RP .post (new Runnable () {
719725 @ Override
@@ -722,7 +728,10 @@ public void run() {
722728 }
723729 });
724730 }
725- OpenProjectList .log (Level .FINER , "wrong directories. current: " + fo + " new " + newDir );
731+ if (OpenProjectList .LOGGER .isLoggable (Level .FINER )) {
732+ FileObject newDir = newProj .getProjectDirectory ();
733+ OpenProjectList .log (Level .FINER , "wrong directories. current: " + fo + " new " + newDir );
734+ }
726735 }
727736 }
728737
@@ -925,16 +934,14 @@ private Image getIcon(int type, boolean opened) {
925934 }
926935
927936 @ Override
928- public void propertyChange ( PropertyChangeEvent e ) {
929- if ( OpenProjectList .PROPERTY_MAIN_PROJECT .equals ( e .getPropertyName () ) ) {
930- mainCache = null ;
931- fireDisplayNameChange ( null , null );
932- }
933- if ( OpenProjectList .PROPERTY_REPLACE .equals (e .getPropertyName ())) {
934- replaceProject ((Project )e .getNewValue ());
935- }
936- if (SourceGroup .PROP_CONTAINERSHIP .equals (e .getPropertyName ())) {
937- setProjectFilesAsynch ();
937+ public void propertyChange (PropertyChangeEvent e ) {
938+ switch (e .getPropertyName ()) {
939+ case OpenProjectList .PROPERTY_MAIN_PROJECT -> {
940+ mainCache = null ;
941+ fireDisplayNameChange (null , null );
942+ }
943+ case OpenProjectList .PROPERTY_REPLACE -> replaceProject ((Project )e .getNewValue ());
944+ case SourceGroup .PROP_CONTAINERSHIP -> setProjectFilesAsynch ();
938945 }
939946 }
940947
0 commit comments