private List<String> getTasks(IFile gruntFile) {
		List<String> tasks = new ArrayList<String>();
		aliasTasks = new ArrayList<String>();
		if (!gruntFile.exists()) {
			Activator.getDefault().getLog().log(new Status(
					Status.ERROR, Activator.PLUGIN_ID,
					"Grunt file " + gruntFile.getName() + " in project " + gruntFile.getProject().getName() + " does not exist"));
			return tasks;
		}
		BufferedReader br = null;
		try {
			InputStream is = gruntFile.getContents();
			br = new BufferedReader(new InputStreamReader(is));
		} catch (CoreException e) {
			Activator.getDefault().getLog().log(new Status(
					Status.ERROR, Activator.PLUGIN_ID,
					"Cannot open Grunt file " + gruntFile.getName() + " in project " + gruntFile.getProject().getName(), e));
			return tasks;
		}

		try {
			String s;
			Pattern p1 = Pattern.compile("grunt\\.loadNpmTasks\\('(.*)'\\)");
			Pattern p2 = Pattern.compile("grunt\\.registerTask\\('([^']*)',\\s*\\[(.*)\\]");
			while ((s = br.readLine()) != null) {
				Matcher m1 = p1.matcher(s);
				Matcher m2 = p2.matcher(s);
				if (m1.find() && m1.groupCount() > 0) {
					String task = m1.group(1).replaceAll("grunt-(contrib-)*", "");
					tasks.add(task);
				} else if (m2.find() && m2.groupCount() > 0) {
					StringBuilder alias = new StringBuilder(m2.group(1));
					this.aliasTasks .add(alias.toString());
					if (m2.groupCount() > 1) {
						aliasTaskDefinitions.put(alias.toString(), m2.group(2).replaceAll("'", "").replaceAll(",", ", "));
					}
				}
			}
			return tasks;
		} catch (IOException e) {
			Activator.getDefault().getLog().log(new Status(
					Status.ERROR, Activator.PLUGIN_ID,
					"Error while reading Grunt file " + gruntFile.getName() + " in project " + gruntFile.getProject().getName(), e));
			return tasks;
		}
	}