diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinJavaInspectionTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinJavaInspectionTest.kt deleted file mode 100644 index 221e1da989b..00000000000 --- a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinJavaInspectionTest.kt +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license - * that can be found in the license/LICENSE.txt file. - */ - -package org.jetbrains.kotlin.idea.perf - -import com.intellij.codeInspection.InspectionManager -import com.intellij.codeInspection.LocalInspectionTool -import com.intellij.codeInspection.LocalInspectionToolSession -import com.intellij.codeInspection.ProblemsHolder -import com.intellij.codeInspection.ex.InspectionToolRegistrar -import com.intellij.codeInspection.ex.Tools -import com.intellij.ide.highlighter.JavaFileType -import com.intellij.lang.java.JavaLanguage -import com.intellij.openapi.roots.ProjectFileIndex -import com.intellij.openapi.vfs.VirtualFile -import com.intellij.profile.codeInspection.ProjectInspectionProfileManager -import com.intellij.psi.PsiFile -import com.intellij.psi.search.DelegatingGlobalSearchScope -import com.intellij.psi.search.FileTypeIndex -import com.intellij.psi.search.GlobalSearchScope -import com.intellij.psi.search.ProjectScope -import org.jetbrains.kotlin.idea.project.ProjectStructureUtil -import org.jetbrains.kotlin.idea.refactoring.toPsiFile -import org.jetbrains.kotlin.idea.util.ProjectRootsUtil -import kotlin.system.measureNanoTime - -class AllKotlinJavaInspectionTest : AllKotlinTest() { - override fun provideFiles(): Collection { - val scope = object : DelegatingGlobalSearchScope(ProjectScope.getContentScope(project)) { - val index = ProjectFileIndex.getInstance(myProject) - override fun contains(file: VirtualFile): Boolean { - return super.contains(file) && - ProjectRootsUtil.isInContent(myProject, file, true, false, false, false, index) - } - } - - return FileTypeIndex.getFiles(JavaFileType.INSTANCE, scope) - } - - private lateinit var profileTools: List - - override fun setUp() { - - super.setUp() - - val wrappers = InspectionToolRegistrar.getInstance().createTools().map { it.tool } - - enableInspectionTools(*wrappers.toTypedArray()) - - profileTools = ProjectInspectionProfileManager.getInstance(project).currentProfile.getAllEnabledInspectionTools(project) - } - - class ExceptionWhileInspection(inspectionId: String, cause: Throwable) : RuntimeException(inspectionId, cause) - - override fun doTest(file: VirtualFile): PerFileTestResult { - - val results = mutableMapOf() - var totalNs = 0L - - val psiFile = file.toPsiFile(project) ?: run { - return PerFileTestResult(results, totalNs, listOf(AssertionError("PsiFile not found for $file"))) - } - - val errors = mutableListOf() - - for (profileTool in profileTools) { - val localInspectionTool = profileTool.tool.tool as? LocalInspectionTool ?: continue - if (profileTool.tool.language !in setOf(null, "java", "UAST", JavaLanguage.INSTANCE.id)) continue - val result = measureNanoTime { - try { - localInspectionTool.analyze(psiFile) - } catch (t: Throwable) { - val myEx = ExceptionWhileInspection(profileTool.tool.id, t) - myEx.printStackTrace() - errors += myEx - } - } - results[profileTool.tool.id] = result - totalNs += result - if (errors.isNotEmpty()) break - } - - return PerFileTestResult(results, totalNs, errors) - } - - private fun LocalInspectionTool.analyze(file: PsiFile) { - if (file.textRange == null) return - - val holder = ProblemsHolder(InspectionManager.getInstance(file.project), file, false) - val session = LocalInspectionToolSession(file, file.textRange.startOffset, file.textRange.endOffset) - val visitor = this.buildVisitor(holder, false, session) - file.acceptRecursively(visitor) - } - -} \ No newline at end of file diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinInspectionTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectInspectionTest.kt similarity index 80% rename from idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinInspectionTest.kt rename to idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectInspectionTest.kt index ba72f78d4d7..340dd8b849d 100644 --- a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinInspectionTest.kt +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectInspectionTest.kt @@ -14,18 +14,14 @@ import com.intellij.codeInspection.ex.Tools import com.intellij.openapi.vfs.VirtualFile import com.intellij.profile.codeInspection.ProjectInspectionProfileManager import com.intellij.psi.PsiFile -import com.intellij.psi.search.FileTypeIndex -import com.intellij.psi.search.ProjectScope -import org.jetbrains.kotlin.idea.KotlinFileType import org.jetbrains.kotlin.idea.refactoring.toPsiFile -import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import kotlin.system.measureNanoTime -class AllKotlinInspectionTest : AllKotlinTest() { - override fun provideFiles(): Collection { - val scope = KotlinSourceFilterScope.projectSources(ProjectScope.getContentScope(project), project) - return FileTypeIndex.getFiles(KotlinFileType.INSTANCE, scope) - } +abstract class WholeProjectInspectionTest : WholeProjectPerformanceTest() { + + abstract override fun provideFiles(): Collection + + class ExceptionWhileInspection(inspectionId: String, cause: Throwable) : RuntimeException(inspectionId, cause) private lateinit var profileTools: List @@ -40,7 +36,8 @@ class AllKotlinInspectionTest : AllKotlinTest() { profileTools = ProjectInspectionProfileManager.getInstance(project).currentProfile.getAllEnabledInspectionTools(project) } - class ExceptionWhileInspection(inspectionId: String, cause: Throwable) : RuntimeException(inspectionId, cause) + + abstract fun isEnabledInspection(tools: Tools): Boolean override fun doTest(file: VirtualFile): PerFileTestResult { @@ -55,7 +52,7 @@ class AllKotlinInspectionTest : AllKotlinTest() { for (profileTool in profileTools) { val localInspectionTool = profileTool.tool.tool as? LocalInspectionTool ?: continue - if (profileTool.tool.language !in setOf(null, "kotlin", "UAST")) continue + if (!isEnabledInspection(profileTool)) continue val result = measureNanoTime { try { localInspectionTool.analyze(psiFile) @@ -73,7 +70,7 @@ class AllKotlinInspectionTest : AllKotlinTest() { return PerFileTestResult(results, totalNs, errors) } - private fun LocalInspectionTool.analyze(file: PsiFile) { + protected fun LocalInspectionTool.analyze(file: PsiFile) { if (file.textRange == null) return val holder = ProblemsHolder(InspectionManager.getInstance(file.project), file, false) diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectJavaInspectionTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectJavaInspectionTest.kt new file mode 100644 index 00000000000..bca67e852ed --- /dev/null +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectJavaInspectionTest.kt @@ -0,0 +1,41 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.perf + +import com.intellij.codeInspection.ex.Tools +import com.intellij.ide.highlighter.JavaFileType +import com.intellij.lang.java.JavaLanguage +import com.intellij.openapi.roots.ProjectFileIndex +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.search.DelegatingGlobalSearchScope +import com.intellij.psi.search.FileTypeIndex +import com.intellij.psi.search.ProjectScope +import org.jetbrains.kotlin.idea.util.ProjectRootsUtil + +class WholeProjectJavaInspectionTest : WholeProjectInspectionTest() { + + override fun provideFiles(): Collection { + val scope = object : DelegatingGlobalSearchScope(ProjectScope.getContentScope(project)) { + val index = ProjectFileIndex.getInstance(myProject) + override fun contains(file: VirtualFile): Boolean { + if (!super.contains(file)) return false + return ProjectRootsUtil.isInContent( + myProject, + file, + includeProjectSource = true, + includeLibrarySource = false, + includeLibraryClasses = false, + includeScriptDependencies = false, + fileIndex = index + ) + } + } + + return FileTypeIndex.getFiles(JavaFileType.INSTANCE, scope) + } + + override fun isEnabledInspection(tools: Tools) = tools.tool.language !in setOf(null, "java", "UAST", JavaLanguage.INSTANCE.id) +} \ No newline at end of file diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinInspectionTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinInspectionTest.kt new file mode 100644 index 00000000000..8ab46363f53 --- /dev/null +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinInspectionTest.kt @@ -0,0 +1,22 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.perf + +import com.intellij.codeInspection.ex.Tools +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.search.FileTypeIndex +import com.intellij.psi.search.ProjectScope +import org.jetbrains.kotlin.idea.KotlinFileType +import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope + +class WholeProjectKotlinInspectionTest : WholeProjectInspectionTest() { + override fun provideFiles(): Collection { + val scope = KotlinSourceFilterScope.projectSources(ProjectScope.getContentScope(project), project) + return FileTypeIndex.getFiles(KotlinFileType.INSTANCE, scope) + } + + override fun isEnabledInspection(tools: Tools) = tools.tool.language in setOf(null, "kotlin", "UAST") +} \ No newline at end of file diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceTest.kt similarity index 98% rename from idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinTest.kt rename to idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceTest.kt index 8999710a6a4..56dff883c0a 100644 --- a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinTest.kt +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceTest.kt @@ -23,7 +23,7 @@ import java.io.File import java.io.PrintWriter import java.io.StringWriter -abstract class AllKotlinTest : DaemonAnalyzerTestCase() { +abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase() { private val rootProjectFile: File = File("../perfTestProject").absoluteFile private val statsFile: File = File("build/stats.csv").absoluteFile