package org.fest.eclipse.assertions.util; import static org.eclipse.ui.PlatformUI.getWorkbench; import static org.fest.eclipse.assertions.util.StringConstants.EMPTY_STRING; import java.util.ArrayList; import java.util.List; import java.util.regex.Pattern; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; // LogHandler; public class PluginTools { private static final String JAVA_FILES_PATTERN = "**/*.java"; private static final Pattern MAVEN_RESOURCE_FOLDER = Pattern.compile("src/[^/]+/resources"); public static IEditorPart getOpenEditorPart() { IWorkbenchWindow window = getWorkbench().getActiveWorkbenchWindow(); if (window == null) return null; IWorkbenchPage page = window.getActivePage(); return page == null ? null : page.getActiveEditor(); } public static boolean isJavaFile(IWorkbenchPart part) { if (!(part instanceof IEditorPart)) return false; IFile file = (IFile) ((IEditorPart) part).getEditorInput().getAdapter(IFile.class); return file == null ? false : "java".equals(file.getFileExtension()); } public static IPackageFragmentRoot createPackageFragmentRoot(String projectName, String folderName) { IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(projectName); IJavaProject javaProject = JavaCore.create(project); try { for (IPackageFragmentRoot aSourceFolder : javaProject.getPackageFragmentRoots()) { if (folderName.equals(getPathStringWithoutProjectName(aSourceFolder))) { return aSourceFolder; } } } catch (JavaModelException e) { // LogHandler.getInstance().handleExceptionLog(e); } return null; } public static IPackageFragmentRoot getSourceFolder(ICompilationUnit compilationUnit) { IJavaElement element = compilationUnit; while (!(element instanceof IPackageFragmentRoot)) { element = element.getParent(); } return (IPackageFragmentRoot) element; } public static List<IPackageFragmentRoot> getAllSourceFolderFromProject(IJavaProject javaProject) { List<IPackageFragmentRoot> resultList = new ArrayList<IPackageFragmentRoot>(); try { for (IPackageFragmentRoot root : javaProject.getPackageFragmentRoots()) { if (!root.isArchive() && root.getRawClasspathEntry().getEntryKind() == IClasspathEntry.CPE_SOURCE) { resultList.add(root); } } } catch (JavaModelException e) { // TODO LogHandler.getInstance().handleExceptionLog(e); } return resultList; } public static List<IPackageFragmentRoot> findJavaSourceFoldersFor(IJavaProject project) { List<IPackageFragmentRoot> javaSourceFolders = new ArrayList<IPackageFragmentRoot>(); for (IPackageFragmentRoot sourceFolder : getAllSourceFolderFromProject(project)) { String sourceFolderPath = getPathStringWithoutProjectName(sourceFolder); if (!(excludesJavaFiles(sourceFolder) || isMavenLikeResourceFolder(sourceFolderPath))) { javaSourceFolders.add(sourceFolder); } } return javaSourceFolders; } private static boolean excludesJavaFiles(IPackageFragmentRoot srcFolder) { try { IPath[] exclusionPatterns = srcFolder.getRawClasspathEntry().getExclusionPatterns(); if (exclusionPatterns == null) { return false; } for (IPath exclusionPattern : exclusionPatterns) { if (JAVA_FILES_PATTERN.equals(exclusionPattern.toString())) { return true; } } } catch (JavaModelException e) { // LogHandler.getInstance().handleExceptionLog(e); } return false; } private static boolean isMavenLikeResourceFolder(String srcFolderPath) { return MAVEN_RESOURCE_FOLDER.matcher(srcFolderPath).matches(); } public static String getPathStringWithoutProjectName(IPackageFragmentRoot sourceFolder) { return sourceFolder == null ? EMPTY_STRING : sourceFolder.getPath().removeFirstSegments(1).toString(); } }