From 044a47905e98cfe82089d2b5ffe844bd8ac25fcc Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Wed, 2 Oct 2013 20:17:48 +0400 Subject: [PATCH] Get rid of dependency on Guava's Multimap Replace with a hand-written multi-map --- .../java/mapping/JavaToKotlinClassMap.java | 20 +++++++++++++------ .../lang/resolve/java/scope/MembersCache.java | 19 ++++++++++++------ 2 files changed, 27 insertions(+), 12 deletions(-) diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java index 437ec08ee6a..890895fe7b9 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/mapping/JavaToKotlinClassMap.java @@ -16,8 +16,6 @@ package org.jetbrains.jet.lang.resolve.java.mapping; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.PlatformToKotlinClassMap; @@ -57,7 +55,7 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements private final Map classDescriptorMap = new HashMap(); private final Map classDescriptorMapForCovariantPositions = new HashMap(); private final Map primitiveTypesMap = new HashMap(); - private final Multimap packagesWithMappedClasses = HashMultimap.create(); + private final Map> packagesWithMappedClasses = new HashMap>(); private JavaToKotlinClassMap() { init(); @@ -139,12 +137,21 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements private void register(@NotNull FqName javaClassName, @NotNull ClassDescriptor kotlinDescriptor) { classDescriptorMap.put(javaClassName, kotlinDescriptor); - packagesWithMappedClasses.put(javaClassName.parent(), kotlinDescriptor); + registerClassInPackage(javaClassName.parent(), kotlinDescriptor); } private void registerCovariant(@NotNull FqName javaClassName, @NotNull ClassDescriptor kotlinDescriptor) { classDescriptorMapForCovariantPositions.put(javaClassName, kotlinDescriptor); - packagesWithMappedClasses.put(javaClassName.parent(), kotlinDescriptor); + registerClassInPackage(javaClassName.parent(), kotlinDescriptor); + } + + private void registerClassInPackage(@NotNull FqName packageFqName, @NotNull ClassDescriptor kotlinDescriptor) { + Collection classesInPackage = packagesWithMappedClasses.get(packageFqName); + if (classesInPackage == null) { + classesInPackage = new HashSet(); + packagesWithMappedClasses.put(packageFqName, classesInPackage); + } + classesInPackage.add(kotlinDescriptor); } @NotNull @@ -178,6 +185,7 @@ public class JavaToKotlinClassMap extends JavaToKotlinClassMapBuilder implements if (!fqName.isSafe()) { return Collections.emptyList(); } - return packagesWithMappedClasses.get(fqName.toSafe()); + Collection result = packagesWithMappedClasses.get(fqName.toSafe()); + return result == null ? Collections.emptySet() : Collections.unmodifiableCollection(result); } } diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java index 0cac977ee83..5d9963f178d 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/scope/MembersCache.java @@ -16,8 +16,6 @@ package org.jetbrains.jet.lang.resolve.java.scope; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.Visibilities; @@ -29,10 +27,11 @@ import org.jetbrains.jet.lang.resolve.name.Name; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.Map; /* package */ final class MembersCache { - private final Multimap memberProcessingTasks = HashMultimap.create(); + private final Map> memberProcessingTasks = new HashMap>(); private final Map namedMembersMap = new HashMap(); @Nullable @@ -60,7 +59,13 @@ import java.util.Map; } private void addTask(@NotNull JavaNamedElement member, @NotNull RunOnce task) { - memberProcessingTasks.put(member.getName(), task); + Name name = member.getName(); + Collection tasks = memberProcessingTasks.get(name); + if (tasks == null) { + tasks = new HashSet(); + memberProcessingTasks.put(name, tasks); + } + tasks.add(task); } private void runTasksByName(Name name) { @@ -74,8 +79,10 @@ import java.util.Map; } private void runAllTasks() { - for (Runnable task : memberProcessingTasks.values()) { - task.run(); + for (Collection tasks : memberProcessingTasks.values()) { + for (Runnable task : tasks) { + task.run(); + } } }