@Override
	public Object[] getChildren(Object parentElement) {
		if (parentElement instanceof IProject) {
			IProject project = (IProject) parentElement;
			IFile gruntFile = project.getFile(GRUNT_FILE);
			if (gruntFile.exists()) {
				return new Object[] {
						new TaskContainer(gruntFile, getTasks(gruntFile), false),
						new TaskContainer(gruntFile, aliasTasks, true)
				};
			}
		} else if (parentElement instanceof TaskContainer) {
			TaskContainer container = (TaskContainer) parentElement;
			List<String> tasks = container.tasks;
			mapFileToTasks(tasks, container.file);
			mapTasksToFile(tasks, container.file);
			if (container.alias) {
				List<AliasTask> retVal = new ArrayList<AliasTask>();
				for (String task : aliasTasks) {
					String definition = aliasTaskDefinitions.get(task);
					retVal.add(new AliasTask(task, definition));
				}
				return retVal.toArray(new AliasTask[0]);
			} else {
				return tasks.toArray(new String[0]);
			}
		}
		return Collections.emptyList().toArray(new Object[0]);
	}