From f38abd5258f20066006e78297f26d3c79828a5b2 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 30 Jul 2015 17:44:41 +0300 Subject: [PATCH] Refactor Descriptor renderer test to avoid creating ResolveElementCache explicitly --- .../AbstractDescriptorRendererTest.kt | 30 ++++++++----- ...ditionalResolveDescriptorRendererTest.java | 42 ----------------- ...AdditionalResolveDescriptorRendererTest.kt | 45 +++++++++++++++++++ 3 files changed, 65 insertions(+), 52 deletions(-) delete mode 100644 idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.java create mode 100644 idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.kt diff --git a/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt b/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt index 7f65dabe419..6c59597de23 100644 --- a/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/renderer/AbstractDescriptorRendererTest.kt @@ -21,12 +21,16 @@ import com.intellij.openapi.util.io.FileUtil import com.intellij.testFramework.UsefulTestCase import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment +import org.jetbrains.kotlin.container.ComponentProvider +import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor -import org.jetbrains.kotlin.frontend.di.createLazyResolveSession +import org.jetbrains.kotlin.frontend.di.createContainerForLazyResolve import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.resolve.CompilerEnvironment +import org.jetbrains.kotlin.resolve.TargetEnvironment import org.jetbrains.kotlin.resolve.jvm.TopDownAnalyzerFacadeForJVM import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform import org.jetbrains.kotlin.resolve.lazy.KotlinTestWithEnvironment @@ -34,28 +38,34 @@ import org.jetbrains.kotlin.resolve.lazy.ResolveSession import org.jetbrains.kotlin.resolve.lazy.declarations.FileBasedDeclarationProviderFactory import org.jetbrains.kotlin.test.ConfigurationKind import org.jetbrains.kotlin.test.JetTestUtils -import org.jetbrains.kotlin.types.DynamicTypesSettings import java.io.File import java.util.ArrayList public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment() { - protected open fun getDescriptor(declaration: JetDeclaration, resolveSession: ResolveSession): DeclarationDescriptor { - return resolveSession.resolveToDescriptor(declaration) + protected open fun getDescriptor(declaration: JetDeclaration, container: ComponentProvider): DeclarationDescriptor { + return container.get().resolveToDescriptor(declaration) } + protected open val targetEnvironment: TargetEnvironment + get() = CompilerEnvironment + public fun doTest(path: String) { val fileText = FileUtil.loadFile(File(path), true) val psiFile = JetPsiFactory(getProject()).createFile(fileText) val context = TopDownAnalyzerFacadeForJVM.createContextWithSealedModule(getProject()) - val resolveSession = createLazyResolveSession( + + val container = createContainerForLazyResolve( context, FileBasedDeclarationProviderFactory(context.storageManager, listOf(psiFile)), CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(), - JvmPlatform + JvmPlatform, + targetEnvironment ) + val resolveSession = container.get() + context.initializeModuleContents(resolveSession.getPackageFragmentProvider()) val descriptors = ArrayList() @@ -75,10 +85,10 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment when (declaringElement) { is JetFunctionType -> return is JetNamedFunction -> - addCorrespondingParameterDescriptor(getDescriptor(declaringElement, resolveSession) as FunctionDescriptor, parameter) + addCorrespondingParameterDescriptor(getDescriptor(declaringElement, container) as FunctionDescriptor, parameter) is JetPrimaryConstructor -> { val jetClassOrObject: JetClassOrObject = declaringElement.getContainingClassOrObject() - val classDescriptor = getDescriptor(jetClassOrObject, resolveSession) as ClassDescriptor + val classDescriptor = getDescriptor(jetClassOrObject, container) as ClassDescriptor addCorrespondingParameterDescriptor(classDescriptor.getUnsubstitutedPrimaryConstructor()!!, parameter) } else -> super.visitParameter(parameter) @@ -87,7 +97,7 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment override fun visitPropertyAccessor(accessor: JetPropertyAccessor) { val parent = accessor.getParent() as JetProperty - val propertyDescriptor = getDescriptor(parent, resolveSession) as PropertyDescriptor + val propertyDescriptor = getDescriptor(parent, container) as PropertyDescriptor if (accessor.isGetter()) { descriptors.add(propertyDescriptor.getGetter()!!) } @@ -102,7 +112,7 @@ public abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment } override fun visitDeclaration(element: JetDeclaration) { - val descriptor = getDescriptor(element, resolveSession) + val descriptor = getDescriptor(element, container) descriptors.add(descriptor) if (descriptor is ClassDescriptor) { // if class has primary constructor then we visit it later, otherwise add it artificially diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.java b/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.java deleted file mode 100644 index 642a2b6aac6..00000000000 --- a/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2010-2015 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.jetbrains.kotlin.idea.resolve; - -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; -import org.jetbrains.kotlin.idea.project.ResolveElementCache; -import org.jetbrains.kotlin.psi.JetClassInitializer; -import org.jetbrains.kotlin.psi.JetDeclaration; -import org.jetbrains.kotlin.psi.JetPsiUtil; -import org.jetbrains.kotlin.renderer.AbstractDescriptorRendererTest; -import org.jetbrains.kotlin.resolve.BindingContext; -import org.jetbrains.kotlin.resolve.jvm.platform.JvmPlatform; -import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode; -import org.jetbrains.kotlin.resolve.lazy.ResolveSession; - -public abstract class AbstractAdditionalResolveDescriptorRendererTest extends AbstractDescriptorRendererTest { - @NotNull - @Override - protected DeclarationDescriptor getDescriptor(@NotNull JetDeclaration declaration, @NotNull ResolveSession resolveSession) { - if (declaration instanceof JetClassInitializer || JetPsiUtil.isLocal(declaration)) { - ResolveElementCache resolveElementCache = new ResolveElementCache(resolveSession, getProject(), JvmPlatform.INSTANCE$); - //noinspection ConstantConditions - return resolveElementCache.resolveToElement(declaration, BodyResolveMode.FULL).get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration); - } - return resolveSession.resolveToDescriptor(declaration); - } -} diff --git a/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.kt b/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.kt new file mode 100644 index 00000000000..7c87fab9ae4 --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/resolve/AbstractAdditionalResolveDescriptorRendererTest.kt @@ -0,0 +1,45 @@ +/* + * Copyright 2010-2015 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.resolve + +import org.jetbrains.kotlin.container.ComponentProvider +import org.jetbrains.kotlin.container.get +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor +import org.jetbrains.kotlin.idea.project.IdeEnvironment +import org.jetbrains.kotlin.idea.project.ResolveElementCache +import org.jetbrains.kotlin.psi.JetClassInitializer +import org.jetbrains.kotlin.psi.JetDeclaration +import org.jetbrains.kotlin.psi.JetPsiUtil +import org.jetbrains.kotlin.renderer.AbstractDescriptorRendererTest +import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.TargetEnvironment +import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode +import org.jetbrains.kotlin.resolve.lazy.ResolveSession + +public abstract class AbstractAdditionalResolveDescriptorRendererTest : AbstractDescriptorRendererTest() { + override fun getDescriptor(declaration: JetDeclaration, container: ComponentProvider): DeclarationDescriptor { + if (declaration is JetClassInitializer || JetPsiUtil.isLocal(declaration)) { + return container.get() + .resolveToElement(declaration, BodyResolveMode.FULL) + .get(BindingContext.DECLARATION_TO_DESCRIPTOR, declaration)!! + } + return container.get().resolveToDescriptor(declaration) + } + + override val targetEnvironment: TargetEnvironment + get() = IdeEnvironment +}