From e70db866ad806c6b510f5fe051e8eb8d022bd7fb Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Tue, 28 Aug 2012 18:51:30 +0400 Subject: [PATCH] add 'getKotlinAnalogs' to ModuleConfiguration --- .../resolve/java/JavaBridgeConfiguration.java | 16 +++++++++----- .../resolve/java/JavaToKotlinTypesMap.java | 22 ++++++++++++++++--- .../jet/lang/DefaultModuleConfiguration.java | 9 ++++++++ .../jet/lang/ModuleConfiguration.java | 10 +++++++++ .../lazy/LazyResolveBuiltinClassesTest.java | 8 +++++++ .../resolve/lazy/LazyResolveTestUtil.java | 8 +++++++ .../project/AnalyzerFacadeWithCache.java | 12 +++++++++- .../k2js/analyze/JsConfiguration.java | 9 ++++++++ 8 files changed, 85 insertions(+), 9 deletions(-) diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java index 551c9e04720..8b156136597 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaBridgeConfiguration.java @@ -21,18 +21,21 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.ImportPath; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import javax.annotation.PostConstruct; import javax.inject.Inject; import java.util.Collection; +import java.util.Collections; /** * @author abreslav @@ -42,13 +45,9 @@ public class JavaBridgeConfiguration implements ModuleConfiguration { public static final ImportPath[] DEFAULT_JAVA_IMPORTS = new ImportPath[] { new ImportPath("java.lang.*") }; - @NotNull private Project project; - @NotNull private JavaSemanticServices javaSemanticServices; - @NotNull private ModuleConfiguration delegateConfiguration; - @NotNull private BuiltinsScopeExtensionMode builtinsScopeExtensionMode; @Inject @@ -90,5 +89,12 @@ public class JavaBridgeConfiguration implements ModuleConfiguration { delegateConfiguration.extendNamespaceScope(trace, namespaceDescriptor, namespaceMemberScope); } - + @NotNull + @Override + public Collection getKotlinAnalogs(@NotNull FqNameUnsafe className) { + if (className.isSafe()) { + return JavaToKotlinTypesMap.getInstance().getAllKotlinAnalogs(className.toSafe()); + } + return Collections.emptyList(); + } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinTypesMap.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinTypesMap.java index 1acc9e01bcd..75d7dd2197f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinTypesMap.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaToKotlinTypesMap.java @@ -16,6 +16,7 @@ package org.jetbrains.jet.lang.resolve.java; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; @@ -28,9 +29,7 @@ import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; import org.jetbrains.jet.lang.types.lang.PrimitiveType; import java.lang.annotation.Annotation; -import java.util.Iterator; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * @author svtk @@ -124,4 +123,21 @@ public class JavaToKotlinTypesMap { mappedTypeNames.add(javaClassName.getFqName()); classDescriptorMapForCovariantPositions.put(javaClassName, kotlinDescriptor); } + + @NotNull + public List getAllKotlinAnalogs(@NotNull FqName fqName) { + ClassDescriptor kotlinAnalog = classDescriptorMap.get(fqName); + ClassDescriptor kotlinCovariantAnalog = classDescriptorMapForCovariantPositions.get(fqName); + if (kotlinAnalog == null && kotlinCovariantAnalog == null) { + return Collections.emptyList(); + } + ArrayList descriptors = Lists.newArrayList(); + if (kotlinAnalog != null) { + descriptors.add(kotlinAnalog); + } + if (kotlinCovariantAnalog != null) { + descriptors.add(kotlinCovariantAnalog); + } + return descriptors; + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java b/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java index ac023f1884d..ff1aa9dbab5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/DefaultModuleConfiguration.java @@ -18,17 +18,20 @@ package org.jetbrains.jet.lang; import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetPsiFactory; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.ImportPath; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; import java.util.Collection; +import java.util.Collections; /** * @author svtk @@ -70,4 +73,10 @@ public class DefaultModuleConfiguration implements ModuleConfiguration { } } + + @NotNull + @Override + public Collection getKotlinAnalogs(@NotNull FqNameUnsafe className) { + return Collections.emptyList(); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/ModuleConfiguration.java b/compiler/frontend/src/org/jetbrains/jet/lang/ModuleConfiguration.java index 1d55fcf0c56..96be3d45fc8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/ModuleConfiguration.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/ModuleConfiguration.java @@ -17,12 +17,15 @@ package org.jetbrains.jet.lang; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import java.util.Collection; +import java.util.Collections; /** * @author abreslav @@ -37,6 +40,11 @@ public interface ModuleConfiguration { public void extendNamespaceScope(@NotNull BindingTrace trace, @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope) { } + @NotNull + @Override + public Collection getKotlinAnalogs(@NotNull FqNameUnsafe className) { + return Collections.emptyList(); + } }; void addDefaultImports(@NotNull Collection directives); @@ -47,4 +55,6 @@ public interface ModuleConfiguration { */ void extendNamespaceScope(@NotNull BindingTrace trace, @NotNull NamespaceDescriptor namespaceDescriptor, @NotNull WritableScope namespaceMemberScope); + @NotNull + Collection getKotlinAnalogs(@NotNull FqNameUnsafe className); } diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveBuiltinClassesTest.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveBuiltinClassesTest.java index c5ee355a4a7..0edfe822f3b 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveBuiltinClassesTest.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveBuiltinClassesTest.java @@ -25,6 +25,7 @@ import com.intellij.util.Function; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.ConfigurationKind; import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.test.util.NamespaceComparator; import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration; @@ -45,6 +46,7 @@ import org.junit.Test; import java.io.File; import java.io.IOException; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Map; @@ -114,5 +116,11 @@ public class LazyResolveBuiltinClassesTest extends KotlinTestWithEnvironment { @NotNull WritableScope namespaceMemberScope) { // DO nothing } + + @NotNull + @Override + public Collection getKotlinAnalogs(@NotNull FqNameUnsafe className) { + return Collections.emptyList(); + } } } diff --git a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java index 8b49d58043f..471ca5b8b15 100644 --- a/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java +++ b/compiler/tests/org/jetbrains/jet/lang/resolve/lazy/LazyResolveTestUtil.java @@ -29,6 +29,7 @@ import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.*; @@ -37,6 +38,7 @@ import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; import org.jetbrains.jet.lang.resolve.java.JavaPackageScope; import org.jetbrains.jet.lang.resolve.java.PsiClassFinder; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; @@ -115,6 +117,12 @@ public class LazyResolveTestUtil { namespaceMemberScope.importScope(javaPackageScope); } } + + @NotNull + @Override + public Collection getKotlinAnalogs(@NotNull FqNameUnsafe className) { + return Collections.emptyList(); + } }; ModuleDescriptor lazyModule = new ModuleDescriptor(Name.special("")); diff --git a/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java b/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java index 66d147c840d..d19ec091013 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java +++ b/idea/src/org/jetbrains/jet/plugin/project/AnalyzerFacadeWithCache.java @@ -38,6 +38,7 @@ import org.jetbrains.jet.di.InjectorForJavaDescriptorResolver; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils; @@ -50,6 +51,7 @@ import org.jetbrains.jet.lang.resolve.java.*; import org.jetbrains.jet.lang.resolve.lazy.FileBasedDeclarationProviderFactory; import org.jetbrains.jet.lang.resolve.lazy.ResolveSession; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.types.lang.JetStandardLibrary; @@ -106,6 +108,7 @@ public final class AnalyzerFacadeWithCache { AnalyzeExhaust analyzeExhaustHeaders = analyzeHeadersWithCacheOnFile(file, declarationProvider); BodiesResolveContext context = analyzeExhaustHeaders.getBodiesResolveContext(); + ModuleConfiguration moduleConfiguration = analyzeExhaustHeaders.getModuleConfiguration(); assert context != null : "Headers resolver should prepare and stored information for bodies resolve"; // Need to resolve bodies in given file and all in the same package @@ -114,7 +117,8 @@ public final class AnalyzerFacadeWithCache { Collections.emptyList(), new JetFilesProvider.SameJetFilePredicate(file), new DelegatingBindingTrace(analyzeExhaustHeaders.getBindingContext()), - context); + context, + moduleConfiguration); return new Result(exhaust, PsiModificationTracker.MODIFICATION_COUNT); } @@ -236,6 +240,12 @@ public final class AnalyzerFacadeWithCache { namespaceMemberScope.importScope(javaPackageScope); } } + + @NotNull + @Override + public Collection getKotlinAnalogs(@NotNull FqNameUnsafe className) { + return Collections.emptyList(); + } }; ModuleDescriptor lazyModule = new ModuleDescriptor(Name.special("")); diff --git a/js/js.translator/src/org/jetbrains/k2js/analyze/JsConfiguration.java b/js/js.translator/src/org/jetbrains/k2js/analyze/JsConfiguration.java index c69037c1b37..7ed29761dae 100644 --- a/js/js.translator/src/org/jetbrains/k2js/analyze/JsConfiguration.java +++ b/js/js.translator/src/org/jetbrains/k2js/analyze/JsConfiguration.java @@ -22,6 +22,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.BuiltinsScopeExtensionMode; import org.jetbrains.jet.lang.DefaultModuleConfiguration; import org.jetbrains.jet.lang.ModuleConfiguration; +import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetImportDirective; import org.jetbrains.jet.lang.psi.JetPsiFactory; @@ -30,11 +31,13 @@ import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.ImportPath; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import java.util.Arrays; import java.util.Collection; +import java.util.Collections; import java.util.List; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.isRootNamespace; @@ -102,4 +105,10 @@ public final class JsConfiguration implements ModuleConfiguration { } return false; } + + @NotNull + @Override + public Collection getKotlinAnalogs(@NotNull FqNameUnsafe className) { + return Collections.emptyList(); + } }