diff --git a/.idea/dictionaries/geevee.xml b/.idea/dictionaries/geevee.xml
index 0d265b53852..7891ab0ccaa 100644
--- a/.idea/dictionaries/geevee.xml
+++ b/.idea/dictionaries/geevee.xml
@@ -5,6 +5,7 @@
klass
proto
protoc
+ protos
ubuntu
diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/CliSourcesMemberFilter.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/CliSourcesMemberFilter.kt
deleted file mode 100644
index 060cfc63a9d..00000000000
--- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/CliSourcesMemberFilter.kt
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * 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.kotlin.incremental
-
-import org.jetbrains.jet.lang.psi.JetFile
-import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter
-import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor
-import org.jetbrains.jet.descriptors.serialization.ProtoBuf
-import org.jetbrains.jet.descriptors.serialization.NameResolver
-import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf
-import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils
-import org.jetbrains.jet.lang.resolve.java.JvmClassName
-
-public class CliSourcesMemberFilter(files: Collection, removedPackageParts: Collection): MemberFilter {
- val packagePartClassNames = (
- files.map { PackagePartClassUtils.getPackagePartInternalName(it) }
- + removedPackageParts.map { it.getInternalName() }
- ).toSet()
-
- override fun acceptPackagePartClass(container: PackageFragmentDescriptor, member: ProtoBuf.Callable, nameResolver: NameResolver): Boolean {
- if (member.hasExtension(JavaProtoBuf.implClassName)) {
- val shortName = nameResolver.getName(member.getExtension(JavaProtoBuf.implClassName)!!)
- val fqName = container.fqName.child(shortName)
- val internalName = JvmClassName.byFqNameWithoutInnerClasses(fqName).getInternalName()
- return internalName !in packagePartClassNames
- }
- return true
- }
-}
\ No newline at end of file
diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt
index b81b8e573d6..28497a07128 100644
--- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt
+++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/kotlin/incremental/IncrementalPackageFragmentProvider.kt
@@ -40,6 +40,11 @@ import org.jetbrains.jet.utils.addToStdlib.singletonOrEmptyList
import org.jetbrains.jet.storage.NotNullLazyValue
import org.jetbrains.jet.lang.psi.JetNamedFunction
import org.jetbrains.jet.lang.psi.JetProperty
+import org.jetbrains.jet.descriptors.serialization.ProtoBuf
+import org.jetbrains.jet.lang.resolve.kotlin.PackagePartClassUtils
+import org.jetbrains.jet.descriptors.serialization.JavaProtoBuf
+import org.jetbrains.jet.lang.resolve.java.JvmClassName
+import org.jetbrains.jet.descriptors.serialization.PackageData
public class IncrementalPackageFragmentProvider(
sourceFiles: Collection,
@@ -52,7 +57,10 @@ public class IncrementalPackageFragmentProvider(
) : PackageFragmentProvider {
- val memberFilter = CliSourcesMemberFilter(sourceFiles, incrementalCache.getRemovedPackageParts(moduleId, sourceFiles))
+ val packagePartsToNotLoadFromCache = (
+ sourceFiles.map { PackagePartClassUtils.getPackagePartInternalName(it) }
+ + incrementalCache.getRemovedPackageParts(moduleId, sourceFiles).map { it.getInternalName() }
+ ).toSet()
val fqNameToSubFqNames = MultiMap()
val fqNameToPackageFragment = HashMap()
@@ -107,22 +115,32 @@ public class IncrementalPackageFragmentProvider(
JetScope.EMPTY
}
else {
- val packageData = JavaProtoBufUtil.readPackageDataFrom(packageDataBytes)
- DeserializedPackageMemberScope(
- storageManager,
- this,
- deserializers,
- memberFilter,
- descriptorFinder,
- packageData
- )
+ IncrementalPackageScope(JavaProtoBufUtil.readPackageDataFrom(packageDataBytes))
}
-
}
override fun getMemberScope(): JetScope {
return _memberScope()
}
+
+ private inner class IncrementalPackageScope(val packageData: PackageData) : DeserializedPackageMemberScope(
+ storageManager, this@IncrementalPackageFragment, deserializers, descriptorFinder, packageData
+ ) {
+ override fun filteredMemberProtos(allMemberProtos: Collection): Collection {
+ return allMemberProtos
+ .filter {
+ member ->
+ if (member.hasExtension(JavaProtoBuf.implClassName)) {
+ val shortName = packageData.getNameResolver().getName(member.getExtension(JavaProtoBuf.implClassName)!!)
+ val internalName = JvmClassName.byFqNameWithoutInnerClasses(fqName.child(shortName)).getInternalName()
+ internalName !in packagePartsToNotLoadFromCache
+ }
+ else {
+ true
+ }
+ }
+ }
+ }
}
}
diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java
index 9d2b73281d7..ad74c37b0c6 100644
--- a/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java
+++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/AbstractLoadJavaTest.java
@@ -33,7 +33,6 @@ import org.jetbrains.jet.cli.jvm.compiler.JetCoreEnvironment;
import org.jetbrains.jet.config.CommonConfigurationKeys;
import org.jetbrains.jet.config.CompilerConfiguration;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
-import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter;
import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.JetFile;
diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java
index 63ec8f213c1..97ff219b3ec 100644
--- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java
+++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/kotlin/DeserializedDescriptorResolver.java
@@ -24,7 +24,6 @@ import org.jetbrains.jet.descriptors.serialization.DescriptorFinder;
import org.jetbrains.jet.descriptors.serialization.JavaProtoBufUtil;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedClassDescriptor;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope;
-import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver;
@@ -110,7 +109,6 @@ public final class DeserializedDescriptorResolver {
String[] data = readData(kotlinClass, PACKAGE_FACADE);
if (data != null) {
return new DeserializedPackageMemberScope(storageManager, descriptor, deserializers,
- MemberFilter.ALWAYS_TRUE,
javaDescriptorFinder, JavaProtoBufUtil.readPackageDataFrom(data));
}
return null;
diff --git a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java
index f5f9d3c824f..e6a3e2b329e 100644
--- a/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java
+++ b/core/descriptors/src/org/jetbrains/jet/lang/types/lang/BuiltinsPackageFragment.java
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.descriptors.serialization.*;
import org.jetbrains.jet.descriptors.serialization.descriptors.DeserializedPackageMemberScope;
import org.jetbrains.jet.descriptors.serialization.descriptors.Deserializers;
-import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter;
import org.jetbrains.jet.lang.descriptors.ModuleDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor;
import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptorImpl;
@@ -53,7 +52,7 @@ class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl {
packageFragmentProvider = new BuiltinsPackageFragmentProvider();
// TODO: support annotations
- members = new DeserializedPackageMemberScope(storageManager, this, Deserializers.UNSUPPORTED, MemberFilter.ALWAYS_TRUE,
+ members = new DeserializedPackageMemberScope(storageManager, this, Deserializers.UNSUPPORTED,
new BuiltInsDescriptorFinder(storageManager), new PackageData(nameResolver, loadPackage()));
}
diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java
index 1ed6a5f62d8..035de4cc5f5 100644
--- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java
+++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedMemberScope.java
@@ -20,6 +20,7 @@ import kotlin.Function0;
import kotlin.Function1;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.ReadOnly;
import org.jetbrains.jet.descriptors.serialization.DescriptorDeserializer;
import org.jetbrains.jet.descriptors.serialization.Flags;
import org.jetbrains.jet.descriptors.serialization.ProtoBuf;
@@ -52,8 +53,7 @@ public abstract class DeserializedMemberScope implements JetScope {
private final DeclarationDescriptor containingDeclaration;
private final DescriptorDeserializer deserializer;
- // Never modified after creation
- private final Map> membersProtos;
+ private final NotNullLazyValue