Bug 93613 [package explorer] Inner class org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.PackageExplorerProblemTreeViewer has links to its instance in parent
Class org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart.PackageExplorerProblemTreeViewer is referencing fViewer field from PackageExplorerPart, which is actually instance of PackageExplorerProblemTreeViewer class. Should be methods getFilters() and getContentProvider() called directly and in method filter() "this" should be used instead of fViewer. Also, in order to make PackageExplorerProblemTreeViewer more reusable (e.g. to allow splits or multiple views) it would make sense to make this inner class static and keep states of isFlat and showWorkingSets flags in this class instead of the PackageExplorerPart class.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerPart.java
static final String TAG_SELECTION= "selection"; 
	static final String TAG_EXPANDED= "expanded"; 
	static final String TAG_ELEMENT= "element"; 
	static final String TAG_PATH= "path"; 
	static final String TAG_VERTICAL_POSITION= "verticalPosition"; 
	static final String TAG_HORIZONTAL_POSITION= "horizontalPosition"; 
	static final String TAG_FILTERS = "filters"; 
	static final String TAG_FILTER = "filter"; 
	static final String TAG_LAYOUT= "layout"; 
	static final String TAG_CURRENT_FRAME= "currentFramge"; 
	static final String TAG_ROOT_MODE= "rootMode"; 
	static final String SETTING_MEMENTO= "memento"; 
	
	private int fRootMode;
	private WorkingSetModel fWorkingSetModel;
	
	private PackageExplorerLabelProvider fLabelProvider;	
	private PackageExplorerContentProvider fContentProvider;
	private FilterUpdater fFilterUpdater;
	
	private PackageExplorerActionGroup fActionSet;
	private ProblemTreeViewer fViewer; 
	private Menu fContextMenu;		
	
	private IMemento fMemento;
	
	private ISelection fLastOpenSelection;
	private ISelectionChangedListener fPostSelectionListener;