package org.eclipse.ui.tests.dialogs;

/*
 * (c) Copyright IBM Corp. 2000, 2001.
 * All Rights Reserved.
 */

import org.eclipse.swt.widgets.Shell;
 
/**
 * FOR USE BY TESTS ONLY!
 * <p>
 * Stub class that provides access to classes visible to the package
 * <code>org.eclipse.ui.views.tasklist</code>.  For the purpose
 * of testing.
 * </p>
 * @private
 */
public class TaskListTestStub {
	//Prevent instantiation
	private TaskListTestStub(){}
	
	/**
	 * Gives access to an instance of FiltersDialog.
	 * @return FiltersDialog an instance of FiltersDialog.
	 */
/**
 * 1GJWD2E: ITPUI:ALL - Test classes should not be released in public packages.
 * 
	public static FiltersDialog newFiltersDialog(Shell parentShell) {
		return new FiltersDialog(parentShell);
	}
 */
}

