diff options
author | Tor Norbye <tnorbye@google.com> | 2014-07-16 18:07:37 -0700 |
---|---|---|
committer | Tor Norbye <tnorbye@google.com> | 2014-07-16 18:09:03 -0700 |
commit | 65f60eb9011bb2c549a6d83ae31257480368ddc5 (patch) | |
tree | de0dca03bec460e8797332e5f460400f5cf6485f /plugins/coverage/src/com/intellij/coverage/IdeaClassFinder.java | |
parent | 9ea67227e8fdcf8ed37e65bb96e32767291d0f4f (diff) | |
download | idea-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.java | 78 |
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; + } +} |