summaryrefslogtreecommitdiff
path: root/plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java
diff options
context:
space:
mode:
authorTor Norbye <tnorbye@google.com>2014-07-16 18:07:37 -0700
committerTor Norbye <tnorbye@google.com>2014-07-16 18:09:03 -0700
commit65f60eb9011bb2c549a6d83ae31257480368ddc5 (patch)
treede0dca03bec460e8797332e5f460400f5cf6485f /plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java
parent9ea67227e8fdcf8ed37e65bb96e32767291d0f4f (diff)
downloadidea-65f60eb9011bb2c549a6d83ae31257480368ddc5.tar.gz
Snapshot idea/138.1029 from git://git.jetbrains.org/idea/community.git
Update from idea/138.538 to idea/138.1029 Change-Id: I828f829a968439a99ec67640990c18ff7c9b58ce
Diffstat (limited to 'plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java')
-rw-r--r--plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java78
1 files changed, 78 insertions, 0 deletions
diff --git a/plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java b/plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java
new file mode 100644
index 000000000000..e44dfe46d6f3
--- /dev/null
+++ b/plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java
@@ -0,0 +1,78 @@
+package com.intellij.coverage;
+
+import com.intellij.openapi.diagnostic.Logger;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleManager;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.CompilerModuleExtension;
+import com.intellij.openapi.vfs.VfsUtilCore;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.rt.coverage.util.classFinder.ClassFinder;
+import com.intellij.rt.coverage.util.classFinder.ClassPathEntry;
+import com.intellij.util.lang.UrlClassLoader;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+* @author anna
+*/
+class IdeaClassFinder extends ClassFinder {
+ private static final Logger LOG = Logger.getInstance("#" + IdeaClassFinder.class.getName());
+
+ private final Project myProject;
+ private final CoverageSuitesBundle myCurrentSuite;
+
+ public IdeaClassFinder(Project project, CoverageSuitesBundle currentSuite) {
+ super(obtainPatternsFromSuite(currentSuite), new ArrayList());
+ myProject = project;
+ myCurrentSuite = currentSuite;
+ }
+
+ private static List<Pattern> obtainPatternsFromSuite(CoverageSuitesBundle currentSuiteBundle) {
+ final List<Pattern> includePatterns = new ArrayList<Pattern>();
+ for (CoverageSuite currentSuite : currentSuiteBundle.getSuites()) {
+ for (String pattern : ((JavaCoverageSuite)currentSuite).getFilteredPackageNames()) {
+ includePatterns.add(Pattern.compile(pattern + ".*"));
+ }
+
+ for (String pattern : ((JavaCoverageSuite)currentSuite).getFilteredClassNames()) {
+ includePatterns.add(Pattern.compile(pattern));
+ }
+ }
+ return includePatterns;
+ }
+
+ @Override
+ protected Collection getClassPathEntries() {
+ final Collection entries = super.getClassPathEntries();
+ final Module[] modules = ModuleManager.getInstance(myProject).getModules();
+ for (Module module : modules) {
+ final CompilerModuleExtension extension = CompilerModuleExtension.getInstance(module);
+ if (extension != null) {
+ final VirtualFile outputFile = extension.getCompilerOutputPath();
+ try {
+ if (outputFile != null) {
+ final URL outputURL = VfsUtilCore.virtualToIoFile(outputFile).toURI().toURL();
+ entries.add(new ClassPathEntry(outputFile.getPath(), UrlClassLoader.build().urls(outputURL).get()));
+ }
+ if (myCurrentSuite.isTrackTestFolders()) {
+ final VirtualFile testOutput = extension.getCompilerOutputPathForTests();
+ if (testOutput != null) {
+ final URL testOutputURL = VfsUtilCore.virtualToIoFile(testOutput).toURI().toURL();
+ entries.add(new ClassPathEntry(testOutput.getPath(), UrlClassLoader.build().urls(testOutputURL).get()));
+ }
+ }
+ }
+ catch (MalformedURLException e1) {
+ LOG.error(e1);
+ }
+ }
+ }
+ return entries;
+ }
+}