Bug 64011 JavaProjectSourceContainer does not search for non-Java files
Java project source containers can only find Java Source and nothing else. It will only look java files from <JavaProject>/<JavaSource> directory. The Java Project may contain more than just Java files. For example, a web project which is also a Java Project contains JSP and HTML files. In this case, these other sources cannot be located by JavaProjectSourceContainer even though the project is part of the source lookup path. Adding a raw project source container to look for non-Java files may interfere with the source location function of the Java Project Source Container (depending on the order of which the projects are specified). If a Raw Project Source Container is placed in front of the Java Project Container, the Raw Project Source Container may not compute source for a Java file correctly due to its lack of knowledge about classpaths, source inclusion/exclusion filters, etc. JavaProjectSourceContainer should find source for non-Java files and it should look in directories other than the Java-Source directory.
org.eclipse.jdt.ui.examples.javafamily/src/org/eclipse/jsp/launching/TomcatSourcePathComputer.java
/* (non-Javadoc)
	 * @see org.eclipse.debug.core.sourcelookup.ISourcePathComputerDelegate#computeSourceContainers(org.eclipse.debug.core.ILaunchConfiguration, org.eclipse.core.runtime.IProgressMonitor)
	 */
	public ISourceContainer[] computeSourceContainers(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
		ISourceContainer[] containers = super.computeSourceContainers(configuration, monitor);
		String root = configuration.getAttribute(TomcatLaunchDelegate.ATTR_WEB_APP_ROOT, (String)null);
		ISourceContainer folder = null;
		if (root != null) {
			IPath path = new Path(root);
			IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(path);
			if (resource != null && resource instanceof IFolder) {
				folder = new FolderSourceContainer((IFolder)resource, true);
			} 
		}	
		if (folder == null) {
			return containers;
		} else {
			ISourceContainer[] all = new ISourceContainer[containers.length + 1];
			System.arraycopy(containers, 0, all, 0, containers.length);
			all[containers.length] = folder;
			return all;
		}
	}
}