From 064612f0f39b161908dde10edbd3e61127983792 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Tue, 21 Jan 2014 13:56:01 +0400 Subject: [PATCH] Add cache delegating to lazy resolve session for source classes search --- .../java/resolver/LazyResolveBasedCache.kt | 76 +++++++++++++++++++ .../jet/lang/resolve/lazy/ResolveSession.java | 1 + 2 files changed, 77 insertions(+) create mode 100644 compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/LazyResolveBasedCache.kt diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/LazyResolveBasedCache.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/LazyResolveBasedCache.kt new file mode 100644 index 00000000000..06466d7614c --- /dev/null +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/resolver/LazyResolveBasedCache.kt @@ -0,0 +1,76 @@ +/* + * Copyright 2010-2014 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.jet.lang.resolve.java.resolver + +import org.jetbrains.jet.lang.descriptors.* +import org.jetbrains.jet.lang.resolve.java.structure.JavaClass +import org.jetbrains.jet.lang.resolve.java.structure.JavaElement +import org.jetbrains.jet.lang.resolve.java.structure.JavaField +import org.jetbrains.jet.lang.resolve.java.structure.JavaMethod +import org.jetbrains.jet.lang.resolve.lazy.ResolveSession +import org.jetbrains.jet.lang.resolve.lazy.ResolveSessionUtils +import org.jetbrains.jet.lang.resolve.name.FqName +import org.jetbrains.jet.lang.types.TypeProjection +import javax.inject.Inject +import java.util.Collections +import kotlin.properties.Delegates +import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns +import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.diagnostic.Logger +import org.jetbrains.jet.lang.resolve.java.structure.impl.JavaClassImpl + +public class LazyResolveBasedCache() : JavaResolverCache { + private var resolveSession by Delegates.notNull() + private var traceBasedCache = TraceBasedJavaResolverCache() + + class object { + private val LOG = Logger.getInstance(javaClass()) + } + + Inject + public fun setSession(resolveSession: ResolveSession) { + this.resolveSession = resolveSession + traceBasedCache.setTrace(this.resolveSession.getTrace()) + } + + override fun getClassResolvedFromSource(fqName: FqName): ClassDescriptor? { + val descriptor = traceBasedCache.getClassResolvedFromSource(fqName) + if (descriptor != null) return descriptor + + val classes = ResolveSessionUtils.getClassDescriptorsByFqName(resolveSession, fqName) + return if (classes.isNotEmpty()) classes.first() else null + } + + override fun getClass(javaClass: JavaClass): ClassDescriptor? { + return traceBasedCache.getClass(javaClass) ?: null + } + + override fun recordMethod(method: JavaMethod, descriptor: SimpleFunctionDescriptor) { + traceBasedCache.recordMethod(method, descriptor) + } + + override fun recordConstructor(element: JavaElement, descriptor: ConstructorDescriptor) { + traceBasedCache.recordConstructor(element, descriptor) + } + + override fun recordField(field: JavaField, descriptor: PropertyDescriptor) { + traceBasedCache.recordField(field, descriptor) + } + override fun recordClass(javaClass: JavaClass, descriptor: ClassDescriptor) { + traceBasedCache.recordClass(javaClass, descriptor) + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index d5bf2ed7ef8..d923457cc21 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -181,6 +181,7 @@ public class ResolveSession implements KotlinCodeAnalyzer { return new LazyPackageDescriptor(module, fqName, this, provider); } + @NotNull @Override public ModuleDescriptor getModuleDescriptor() { return module;