diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinLightClassTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinLightClassTest.kt new file mode 100644 index 00000000000..f0ec8464b6a --- /dev/null +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/AllKotlinLightClassTest.kt @@ -0,0 +1,49 @@ +/* + * 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.openapi.vfs.VirtualFile +import org.jetbrains.kotlin.asJava.toLightClass +import org.jetbrains.kotlin.cfg.pseudocode.containingDeclarationForPseudocode +import org.jetbrains.kotlin.idea.refactoring.toPsiFile +import org.jetbrains.kotlin.psi.KtClassOrObject +import org.jetbrains.kotlin.psi.KtVisitorVoid +import kotlin.system.measureNanoTime + +class AllKotlinLightClassTest : WholeProjectPerformanceTest(), WholeProjectKotlinFileProvider { + + 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() + + val result = measureNanoTime { + try { + // Build light class by PsiFile + psiFile.acceptRecursively(object : KtVisitorVoid() { + override fun visitClassOrObject(classOrObject: KtClassOrObject) { + if (classOrObject.containingDeclarationForPseudocode != null) return + val lightClass = classOrObject.toLightClass() ?: return + lightClass.hashCode() + } + }) + + } catch (t: Throwable) { + t.printStackTrace() + errors += t + } + } + results["LightClasses_Top"] = result + totalNs += result + + return PerFileTestResult(results, totalNs, errors) + } +} \ No newline at end of file diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectFileProvider.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectFileProvider.kt new file mode 100644 index 00000000000..323d5b3332e --- /dev/null +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectFileProvider.kt @@ -0,0 +1,13 @@ +/* + * 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.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile + +interface WholeProjectFileProvider { + fun provideFiles(project: Project): Collection +} \ No newline at end of file diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectInspectionTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectInspectionTest.kt index 340dd8b849d..9bec8b6dd87 100644 --- a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectInspectionTest.kt +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectInspectionTest.kt @@ -19,8 +19,6 @@ import kotlin.system.measureNanoTime abstract class WholeProjectInspectionTest : WholeProjectPerformanceTest() { - abstract override fun provideFiles(): Collection - class ExceptionWhileInspection(inspectionId: String, cause: Throwable) : RuntimeException(inspectionId, cause) private lateinit var profileTools: List diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectJavaInspectionTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectJavaInspectionTest.kt index bca67e852ed..09898356c87 100644 --- a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectJavaInspectionTest.kt +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectJavaInspectionTest.kt @@ -8,6 +8,7 @@ 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.project.Project import com.intellij.openapi.roots.ProjectFileIndex import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.search.DelegatingGlobalSearchScope @@ -17,7 +18,7 @@ import org.jetbrains.kotlin.idea.util.ProjectRootsUtil class WholeProjectJavaInspectionTest : WholeProjectInspectionTest() { - override fun provideFiles(): Collection { + override fun provideFiles(project: Project): Collection { val scope = object : DelegatingGlobalSearchScope(ProjectScope.getContentScope(project)) { val index = ProjectFileIndex.getInstance(myProject) override fun contains(file: VirtualFile): Boolean { diff --git a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinFileProvider.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinFileProvider.kt new file mode 100644 index 00000000000..cd3d92e07ba --- /dev/null +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinFileProvider.kt @@ -0,0 +1,20 @@ +/* + * 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.openapi.project.Project +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 + +interface WholeProjectKotlinFileProvider : WholeProjectFileProvider { + override fun provideFiles(project: Project): Collection { + val scope = KotlinSourceFilterScope.projectSources(ProjectScope.getContentScope(project), project) + return FileTypeIndex.getFiles(KotlinFileType.INSTANCE, scope) + } +} \ 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 index 8ab46363f53..612764acf1a 100644 --- a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinInspectionTest.kt +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectKotlinInspectionTest.kt @@ -6,17 +6,7 @@ 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) - } +class WholeProjectKotlinInspectionTest : WholeProjectInspectionTest(), WholeProjectKotlinFileProvider { 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/WholeProjectPerformanceTest.kt b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceTest.kt index 56dff883c0a..964d6dedb7e 100644 --- a/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceTest.kt +++ b/idea/performanceTests/org/jetbrains/kotlin/idea/perf/WholeProjectPerformanceTest.kt @@ -9,21 +9,14 @@ import com.intellij.codeInsight.daemon.DaemonAnalyzerTestCase import com.intellij.ide.impl.ProjectUtil import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ex.ApplicationEx -import com.intellij.openapi.vfs.VfsUtil import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiElement import com.intellij.psi.PsiElementVisitor -import com.intellij.psi.PsiFile -import com.intellij.psi.PsiManager -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 import java.io.File import java.io.PrintWriter import java.io.StringWriter -abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase() { +abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase(), WholeProjectFileProvider { private val rootProjectFile: File = File("../perfTestProject").absoluteFile private val statsFile: File = File("build/stats.csv").absoluteFile @@ -43,8 +36,6 @@ abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase() { protected abstract fun doTest(file: VirtualFile): PerFileTestResult - abstract fun provideFiles(): Collection - fun testWholeProjectPerformance() { tcSuite(this::class.simpleName ?: "Unknown") { @@ -67,7 +58,7 @@ abstract class WholeProjectPerformanceTest : DaemonAnalyzerTestCase() { } tcSuite("TotalPerFile") { - val files = provideFiles() + val files = provideFiles(project) files.forEach { val filePath = File(it.path).relativeTo(tmp).path.replace(File.separatorChar, '/')