From 65aac7ae1345eedf440dd8d789a1518f06c93c95 Mon Sep 17 00:00:00 2001 From: baratynskiy Date: Fri, 7 Apr 2017 16:10:21 +0300 Subject: [PATCH] Extract AbstractJavaResolverCache --- .../components/AbstractJavaResolverCache.kt | 52 +++++++++++++++++++ .../java/components/LazyResolveBasedCache.kt | 28 +--------- 2 files changed, 53 insertions(+), 27 deletions(-) create mode 100644 compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/AbstractJavaResolverCache.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/AbstractJavaResolverCache.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/AbstractJavaResolverCache.kt new file mode 100644 index 00000000000..2746733b229 --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/AbstractJavaResolverCache.kt @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2017 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.load.java.components + +import org.jetbrains.kotlin.descriptors.ClassDescriptor +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.tail +import org.jetbrains.kotlin.resolve.BindingContext +import org.jetbrains.kotlin.resolve.BindingTrace +import org.jetbrains.kotlin.resolve.lazy.ResolveSession +import org.jetbrains.kotlin.resolve.lazy.ResolveSessionUtils + +abstract class AbstractJavaResolverCache(private val resolveSession: ResolveSession) : JavaResolverCache { + + protected val trace: BindingTrace get() = resolveSession.trace + + override fun getClassResolvedFromSource(fqName: FqName): ClassDescriptor? { + return trace.get(BindingContext.FQNAME_TO_CLASS_DESCRIPTOR, fqName.toUnsafe()) ?: findInPackageFragments(fqName) + } + + private fun findInPackageFragments(fullFqName: FqName): ClassDescriptor? { + var fqName = if (fullFqName.isRoot) fullFqName else fullFqName.parent() + + while (true) { + val packageDescriptor = resolveSession.getPackageFragment(fqName) + if (packageDescriptor != null) { + val result = ResolveSessionUtils.findClassByRelativePath(packageDescriptor.getMemberScope(), fullFqName.tail(fqName)) + if (result != null) return result + } + + if (fqName.isRoot) break + fqName = fqName.parent() + } + + return null + } + +} \ No newline at end of file diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/LazyResolveBasedCache.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/LazyResolveBasedCache.kt index f2efb1cba0a..5c451f766a2 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/LazyResolveBasedCache.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/load/java/components/LazyResolveBasedCache.kt @@ -28,21 +28,11 @@ import org.jetbrains.kotlin.load.java.structure.impl.JavaClassImpl import org.jetbrains.kotlin.load.java.structure.impl.JavaElementImpl import org.jetbrains.kotlin.load.java.structure.impl.JavaFieldImpl import org.jetbrains.kotlin.load.java.structure.impl.JavaMethodImpl -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.tail import org.jetbrains.kotlin.resolve.BindingContext.* import org.jetbrains.kotlin.resolve.BindingContextUtils -import org.jetbrains.kotlin.resolve.BindingTrace import org.jetbrains.kotlin.resolve.lazy.ResolveSession -import org.jetbrains.kotlin.resolve.lazy.ResolveSessionUtils -class LazyResolveBasedCache(private val resolveSession: ResolveSession) : JavaResolverCache { - - private val trace: BindingTrace get() = resolveSession.trace - - override fun getClassResolvedFromSource(fqName: FqName): ClassDescriptor? { - return trace.get(FQNAME_TO_CLASS_DESCRIPTOR, fqName.toUnsafe()) ?: findInPackageFragments(fqName) - } +class LazyResolveBasedCache(resolveSession: ResolveSession) : AbstractJavaResolverCache(resolveSession) { override fun recordMethod(method: JavaMethod, descriptor: SimpleFunctionDescriptor) { BindingContextUtils.recordFunctionDeclarationToDescriptor(trace, (method as? JavaMethodImpl)?.psi ?: return, descriptor) @@ -60,20 +50,4 @@ class LazyResolveBasedCache(private val resolveSession: ResolveSession) : JavaRe trace.record(CLASS, (javaClass as? JavaClassImpl)?.psi ?: return, descriptor) } - private fun findInPackageFragments(fullFqName: FqName): ClassDescriptor? { - var fqName = if (fullFqName.isRoot) fullFqName else fullFqName.parent() - - while (true) { - val packageDescriptor = resolveSession.getPackageFragment(fqName) - if (packageDescriptor != null) { - val result = ResolveSessionUtils.findClassByRelativePath(packageDescriptor.getMemberScope(), fullFqName.tail(fqName)) - if (result != null) return result - } - - if (fqName.isRoot) break - fqName = fqName.parent() - } - - return null - } }