public static IProject createInvisibleProjectIfNotExist(IPath workspaceRoot) throws OperationCanceledException, CoreException {
String invisibleProjectName = ProjectUtils.getWorkspaceInvisibleProjectName(workspaceRoot);
IProject invisibleProject = ResourcesPlugin.getWorkspace().getRoot().getProject(invisibleProjectName);
if (!invisibleProject.exists()) {
JavaLanguageServerPlugin.getProjectsManager().createJavaProject(invisibleProject, null, null, "bin", null);
IFolder workspaceLinkFolder = invisibleProject.getFolder(ProjectUtils.WORKSPACE_LINK);
if (!workspaceLinkFolder.isLinked()) {
try {
JDTUtils.createFolders(workspaceLinkFolder.getParent(), null);
workspaceLinkFolder.createLink(workspaceRoot.toFile().toURI(), IResource.REPLACE, null);
} catch (CoreException e) {
invisibleProject.delete(true, null);
throw new CoreException(new Status(IStatus.ERROR, IConstants.PLUGIN_ID,
Messages.format("Failed to create linked resource from ''{0}'' to the invisible project ''{1}''.", new String[] { workspaceRoot.toString(), invisibleProjectName }), e));
}
}
}
return invisibleProject;
}