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
fActionSet.setContext(new ActionContext(getSelection()));
		fActionSet.fillContextMenu(menu);
		fActionSet.setContext(null);
	}
	private void makeActions() {
		final PerformanceStats stats= PerformanceStats.getStats(PERF_MAKE_ACTIONS, this);
		stats.startRun();
		fActionSet= new PackageExplorerActionGroup(this);
		if (fWorkingSetModel != null)
			fActionSet.getWorkingSetActionGroup().setWorkingSetModel(fWorkingSetModel);
		stats.endRun();
	}
	
	
	
	private void initDragAndDrop() {
		initDrag();
		initDrop();
	}
	private void initDrag() {
		int ops= DND.DROP_COPY | DND.DROP_MOVE | DND.DROP_LINK;
		Transfer[] transfers= new Transfer[] {
			LocalSelectionTransfer.getInstance(), 
			ResourceTransfer.getInstance(),
			FileTransfer.getInstance()};
		TransferDragSourceListener[] dragListeners= new TransferDragSourceListener[] {
			new SelectionTransferDragAdapter(fViewer),
			new ResourceTransferDragAdapter(fViewer),
			new FileTransferDragAdapter(fViewer)
		};