/** * Given the uri returns a {@link ICompilationUnit}. * May return null if it can not associate the uri with a Java * file. * * @param uriString * @return compilation unit */ public static ICompilationUnit resolveCompilationUnit(URI uri) { if (uri == null || JDT_SCHEME.equals(uri.getScheme()) || !uri.isAbsolute()){ return null; } IFile resource = (IFile) findResource(uri, ResourcesPlugin.getWorkspace().getRoot()::findFilesForLocationURI); if(resource != null){ if(!ProjectUtils.isJavaProject(resource.getProject())){ return null; } IJavaElement element = JavaCore.create(resource); if (element instanceof ICompilationUnit) { return (ICompilationUnit)element; } } if (resource == null) { return getFakeCompilationUnit(uri, new NullProgressMonitor()); } //the resource is not null but no compilation unit could be created (eg. project not ready yet) return null; }