Buggy code:
public boolean isEditorPinned ( IEditorPart editor ) { } private boolean partChangeAffectsZoom ( IWorkbenchPartReference ref ) { } public void removeFastView ( IViewReference ref ) { } public void removePartListener ( IPartListener l ) { } public void removePartListener ( IPartListener2 l ) { } public void removePropertyChangeListener ( IPropertyChangeListener listener ) { } public void removeSelectionListener ( ISelectionListener listener ) { } public void removeSelectionListener ( String partId , ISelectionListener listener ) { } public void removePostSelectionListener ( ISelectionListener listener ) { } public void removePostSelectionListener ( String partId , ISelectionListener listener ) { } public void requestActivation ( IWorkbenchPart part ) { } public void resetPerspective ( ) { } public IStatus restoreState ( IMemento memento , IPerspectiveDescriptor activeDescritor ) { } public boolean saveAllEditors ( boolean confirm ) { } protected boolean savePart ( ISaveablePart saveable , IWorkbenchPart part , boolean confirm ) { } public boolean saveEditor ( IEditorPart editor , boolean confirm ) { } public void savePerspective ( ) { } public void savePerspectiveAs ( IPerspectiveDescriptor newDesc ) { } public IStatus saveState ( IMemento memento ) { } private void setActivePart ( IWorkbenchPart newPart ) { } public void setEditorAreaVisible ( boolean showEditorArea ) { } private void setPerspective ( Perspective newPersp ) { Perspective oldPersp = getActivePerspective ( ) ; if ( oldPersp == newPersp ) return ; if ( newPersp != null ) { IStatus status = newPersp . restoreState ( ) ; if ( ( status . getSeverity ( ) ) != ( IStatus . OK ) ) { String title = WorkbenchMessages . getString ( "WorkbenchPage.problemRestoringTitle" ) ; String msg = WorkbenchMessages . getString ( "WorkbenchPage.errorReadingState" ) ; ErrorDialog . openError ( getWorkbenchWindow ( ) . getShell ( ) , title , msg , status ) ; } } actionSwitcher . updateTopEditor ( null ) ; IWorkbenchPart oldActivePart = activePart ; setActivePart ( null ) ; if ( oldPersp != null ) { oldPersp . onDeactivate ( ) ; window . selectPerspectiveShortcut ( oldPersp . getDesc ( ) , this , false ) ; } perspList . setActive ( newPersp ) ; if ( newPersp != null ) { newPersp . onActivate ( ) ; window . firePerspectiveActivated ( this , newPersp . getDesc ( ) ) ; window . selectPerspectiveShortcut ( newPersp . getDesc ( ) , this , true ) ; } else { oldActivePart = null ; } window . updateActionSets ( ) ; window . updateFastViewBar ( ) ; updateVisibility ( oldPersp , newPersp ) ; if ( oldActivePart != null ) { String id = oldActivePart . getSite ( ) . getId ( ) ; oldPersp . setOldPartID ( id ) ; if ( ( oldActivePart instanceof IEditorPart ) && ( isEditorAreaVisible ( ) ) ) { activate ( oldActivePart ) ; } else if ( oldActivePart instanceof IViewPart ) { IEditorPart ed = editorMgr . getVisibleEditor ( ) ; if ( ed != null ) actionSwitcher . updateTopEditor ( ed ) ; if ( ( findView ( id ) ) != null ) { activate ( oldActivePart ) ; } else { activateOldPart ( newPersp ) ; } } else { activateOldPart ( newPersp ) ; } } else { IEditorPart ed = editorMgr . getVisibleEditor ( ) ; if ( ed != null ) { actionSwitcher . updateTopEditor ( ed ) ; } else { activateOldPart ( newPersp ) ; } } if ( ( ( getActivePart ( ) ) == null ) && ( ( activationList . getActive ( ) ) != null ) ) { activate ( activationList . getActive ( ) ) ; } if ( ( editorPresentation ) != null ) editorPresentation . showVisibleEditor ( ) ; final Workbench workbench = ( ( Workbench ) ( window . getWorkbench ( ) ) ) ; <START_BUG> if ( ( newPersp != null ) && ( workbench . hasIntroDescriptor ( ) ) ) { <END_BUG> if ( ( workbench . isIntroInWindow ( window ) ) && ( ! ( introPerspectives . contains ( newPersp . getDesc ( ) ) ) ) ) { try { showView ( INTRO_VIEW_ID , null , VIEW_CREATE ) ; } catch ( PartInitException e ) { WorkbenchPlugin . log ( IntroMessages . getString ( "Intro.could_not_show_part" ) , new Status ( IStatus . ERROR , WorkbenchPlugin . PI_WORKBENCH , IStatus . ERROR , IntroMessages . getString ( "Intro.could_not_show_part" ) , e ) ) ; } introPerspectives . add ( newPersp . getDesc ( ) ) ; } } } private void updateVisibility ( Perspective oldPersp , Perspective newPersp ) { } private void activateOldPart ( Perspective newPersp ) { } public void setPerspective ( final IPerspectiveDescriptor desc ) { } protected void resetToolBarLayout ( ) { } public void setWorkingSet ( IWorkingSet newWorkingSet ) { } public void showActionSet ( String actionSetID ) { } public IViewPart showView ( String viewID ) throws PartInitException { } public IViewPart showView ( final String viewID , final String secondaryID , final int mode ) throws PartInitException { } private boolean certifyMode ( int mode ) { } public void toggleFastView ( IViewReference ref ) { } public void toggleZoom ( IWorkbenchPartReference ref ) { } public void updateActionBars ( ) { } private void updateTabList ( IWorkbenchPart part ) { } public void updateTitle ( IViewReference ref ) { } void zoomOut ( ) { } private void zoomOutIfNecessary ( IWorkbenchPart part ) { } public int getEditorReuseThreshold ( ) { } public void setEditorReuseThreshold ( int openEditors ) { } public IEditorReference [ ] getSortedEditors ( ) { } protected IPerspectiveDescriptor [ ] getOpenedPerspectives ( ) { } protected IPerspectiveDescriptor [ ] getSortedPerspectives ( ) { } public IWorkbenchPartReference [ ] getSortedParts ( ) { } public IWorkbenchPartReference getReference ( IWorkbenchPart part ) { } private class ActivationList { List parts = new ArrayList ( ) ; void setActive ( IWorkbenchPart part ) { } void setActive ( IWorkbenchPartReference ref ) { }

Fix:
if ( ( newPersp != null ) && ( workbench . hasIntro ( ) ) ) {