From a1714d99cf51ffe3dd12beb4d62c4f6a9f0b1723 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Mon, 28 May 2012 17:34:44 +0400 Subject: [PATCH] DependencyClassByFqNameResolver --- .../resolve/java/JavaDescriptorResolver.java | 12 +++++- ...ependencyClassByQualifiedNameResolver.java | 35 ++++++++++++++++++ ...ClassByQualifiedNameResolverDummyImpl.java | 37 +++++++++++++++++++ .../jet/di/AllInjectorsGenerator.java | 3 ++ .../di/InjectorForTopDownAnalyzerForJs.java | 3 ++ 5 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolver.java create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolverDummyImpl.java diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index e69bf8ee9af..05ab28ca5d2 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -49,7 +49,7 @@ import java.util.*; /** * @author abreslav */ -public class JavaDescriptorResolver { +public class JavaDescriptorResolver implements DependencyClassByQualifiedNameResolver { public static final Name JAVA_ROOT = Name.special(""); @@ -307,6 +307,11 @@ public class JavaDescriptorResolver { return clazz; } + @Override + public ClassDescriptor resolveClass(@NotNull FqName qualifiedName) { + return resolveClass(qualifiedName, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN); + } + private ClassDescriptor resolveClass(@NotNull FqName qualifiedName, @NotNull DescriptorSearchRule searchRule, @NotNull List tasks) { if (qualifiedName.getFqName().endsWith(JvmAbi.TRAIT_IMPL_SUFFIX)) { // TODO: only if -$$TImpl class is created by Kotlin @@ -947,6 +952,11 @@ public class JavaDescriptorResolver { return scopeData.namespaceDescriptor; } + @Override + public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName) { + return resolveNamespace(qualifiedName, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN); + } + private NamespaceDescriptorParent resolveParentNamespace(FqName fqName) { if (fqName.isRoot()) { return FAKE_ROOT_MODULE; diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolver.java new file mode 100644 index 00000000000..ea2a370c637 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolver.java @@ -0,0 +1,35 @@ +/* + * Copyright 2010-2012 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.types; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; +import org.jetbrains.jet.lang.resolve.name.FqName; + +/** + * @author Stepan Koltsov + */ +public interface DependencyClassByQualifiedNameResolver { + + @Nullable + ClassDescriptor resolveClass(@NotNull FqName qualifiedName); + @Nullable + NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName); + +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolverDummyImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolverDummyImpl.java new file mode 100644 index 00000000000..786e2a1df44 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/DependencyClassByQualifiedNameResolverDummyImpl.java @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2012 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.types; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; +import org.jetbrains.jet.lang.resolve.name.FqName; + +/** + * @author Stepan Koltsov + */ +public class DependencyClassByQualifiedNameResolverDummyImpl implements DependencyClassByQualifiedNameResolver { + @Override + public ClassDescriptor resolveClass(@NotNull FqName qualifiedName) { + return null; + } + + @Override + public NamespaceDescriptor resolveNamespace(@NotNull FqName qualifiedName) { + return null; + } +} diff --git a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java index 2c026928cc6..5126603d4a0 100644 --- a/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java +++ b/injector-generator/src/org/jetbrains/jet/di/AllInjectorsGenerator.java @@ -31,6 +31,8 @@ import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.calls.CallResolver; import org.jetbrains.jet.lang.resolve.java.*; +import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolver; +import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl; import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; @@ -65,6 +67,7 @@ public class AllInjectorsGenerator { DependencyInjectorGenerator generator = new DependencyInjectorGenerator(false); generateInjectorForTopDownAnalyzerCommon(generator); generator.addParameter(ModuleConfiguration.class); + generator.addField(DependencyClassByQualifiedNameResolverDummyImpl.class); generator.generate("js/js.translator/src", "org.jetbrains.jet.di", "InjectorForTopDownAnalyzerForJs"); } diff --git a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java index 7986b6c610f..f0dc9a7bc0c 100644 --- a/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java +++ b/js/js.translator/src/org/jetbrains/jet/di/InjectorForTopDownAnalyzerForJs.java @@ -28,6 +28,7 @@ import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters; import org.jetbrains.jet.lang.resolve.ObservableBindingTrace; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.ModuleConfiguration; +import org.jetbrains.jet.lang.types.DependencyClassByQualifiedNameResolverDummyImpl; import org.jetbrains.jet.lang.resolve.DeclarationResolver; import org.jetbrains.jet.lang.resolve.AnnotationResolver; import org.jetbrains.jet.lang.resolve.calls.CallResolver; @@ -63,6 +64,7 @@ public class InjectorForTopDownAnalyzerForJs { private final ObservableBindingTrace observableBindingTrace; private final ModuleDescriptor moduleDescriptor; private final ModuleConfiguration moduleConfiguration; + private DependencyClassByQualifiedNameResolverDummyImpl dependencyClassByQualifiedNameResolverDummyImpl; private DeclarationResolver declarationResolver; private AnnotationResolver annotationResolver; private CallResolver callResolver; @@ -95,6 +97,7 @@ public class InjectorForTopDownAnalyzerForJs { this.observableBindingTrace = observableBindingTrace; this.moduleDescriptor = moduleDescriptor; this.moduleConfiguration = moduleConfiguration; + this.dependencyClassByQualifiedNameResolverDummyImpl = new DependencyClassByQualifiedNameResolverDummyImpl(); this.declarationResolver = new DeclarationResolver(); this.annotationResolver = new AnnotationResolver(); this.callResolver = new CallResolver();