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>> membersProtos; private final MemoizedFunctionToNotNull> functions; private final MemoizedFunctionToNotNull> properties; @@ -63,12 +63,17 @@ public abstract class DeserializedMemberScope implements JetScope { @NotNull StorageManager storageManager, @NotNull DeclarationDescriptor containingDeclaration, @NotNull DescriptorDeserializer deserializer, - @NotNull Collection membersList + @NotNull final Collection membersList ) { this.containingDeclaration = containingDeclaration; this.deserializer = deserializer; - this.membersProtos = groupByName(membersList); + this.membersProtos = storageManager.createLazyValue(new Function0>>() { + @Override + public Map> invoke() { + return groupByName(filteredMemberProtos(membersList)); + } + }); this.functions = storageManager.createMemoizedFunction(new Function1>() { @Override public Collection invoke(Name name) { @@ -89,6 +94,12 @@ public abstract class DeserializedMemberScope implements JetScope { }); } + @NotNull + @ReadOnly + protected Collection filteredMemberProtos(@NotNull Collection allMemberProtos) { + return allMemberProtos; + } + @NotNull private Map> groupByName(@NotNull Collection membersList) { Map> map = new HashMap>(); @@ -106,7 +117,7 @@ public abstract class DeserializedMemberScope implements JetScope { @NotNull private Collection computeMembersByName(Name name, Filter callableKind) { - List memberProtos = membersProtos.get(name); + List memberProtos = membersProtos.invoke().get(name); Collection descriptors = new LinkedHashSet(memberProtos != null ? memberProtos.size() : 0); if (memberProtos != null) { @@ -191,7 +202,7 @@ public abstract class DeserializedMemberScope implements JetScope { private Collection computeAllDescriptors() { Collection result = new LinkedHashSet(0); - for (Name name : membersProtos.keySet()) { + for (Name name : membersProtos.invoke().keySet()) { result.addAll(getFunctions(name)); result.addAll(getProperties(name)); } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java index a5f4afb9c4a..76a65f495f7 100644 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java +++ b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/DeserializedPackageMemberScope.java @@ -41,13 +41,12 @@ public class DeserializedPackageMemberScope extends DeserializedMemberScope { @NotNull StorageManager storageManager, @NotNull PackageFragmentDescriptor packageDescriptor, @NotNull Deserializers deserializers, - @NotNull MemberFilter memberFilter, @NotNull DescriptorFinder descriptorFinder, @NotNull PackageData packageData ) { super(storageManager, packageDescriptor, DescriptorDeserializer.create(storageManager, packageDescriptor, packageData.getNameResolver(), descriptorFinder, deserializers), - getFilteredMembers(packageDescriptor, packageData.getPackageProto(), memberFilter, packageData.getNameResolver())); + packageData.getPackageProto().getMemberList()); this.descriptorFinder = descriptorFinder; this.packageFqName = packageDescriptor.getFqName(); } @@ -79,20 +78,4 @@ public class DeserializedPackageMemberScope extends DeserializedMemberScope { protected ReceiverParameterDescriptor getImplicitReceiver() { return null; } - - @NotNull - private static Collection getFilteredMembers( - @NotNull PackageFragmentDescriptor packageDescriptor, - @NotNull ProtoBuf.Package packageProto, - @NotNull MemberFilter memberFilter, - @NotNull NameResolver nameResolver - ) { - List result = new ArrayList(); - for (ProtoBuf.Callable member : packageProto.getMemberList()) { - if (memberFilter.acceptPackagePartClass(packageDescriptor, member, nameResolver)) { - result.add(member); - } - } - return result; - } } diff --git a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/MemberFilter.kt b/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/MemberFilter.kt deleted file mode 100644 index 1aa333db7fa..00000000000 --- a/core/serialization/src/org/jetbrains/jet/descriptors/serialization/descriptors/MemberFilter.kt +++ /dev/null @@ -1,31 +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.descriptors.serialization.descriptors - -import org.jetbrains.jet.descriptors.serialization.ProtoBuf -import org.jetbrains.jet.descriptors.serialization.NameResolver -import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor - -public trait MemberFilter { - fun acceptPackagePartClass(container: PackageFragmentDescriptor, member: ProtoBuf.Callable, nameResolver: NameResolver): Boolean - - class object { - public val ALWAYS_TRUE: MemberFilter = object : MemberFilter { - override fun acceptPackagePartClass(container: PackageFragmentDescriptor, member: ProtoBuf.Callable, nameResolver: NameResolver): Boolean = true - } - } -} \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt b/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt index 420bc9495c4..f69828af521 100644 --- a/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt +++ b/idea/src/org/jetbrains/jet/plugin/caches/resolve/KotlinResolveCache.kt @@ -30,7 +30,6 @@ import org.jetbrains.jet.plugin.util.ApplicationUtils import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace import org.jetbrains.jet.di.InjectorForTopDownAnalyzerForJvm import org.jetbrains.jet.context.SimpleGlobalContext -import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter import org.jetbrains.jet.lang.resolve.TopDownAnalysisParameters import com.intellij.openapi.progress.ProcessCanceledException import com.intellij.psi.util.CachedValueProvider diff --git a/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt b/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt index 0e728a5217b..12435a8b69b 100644 --- a/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt +++ b/idea/src/org/jetbrains/jet/plugin/libraries/DeserializerForDecompiler.kt @@ -43,7 +43,6 @@ import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe import org.jetbrains.jet.lang.resolve.kotlin.DescriptorDeserializers import org.jetbrains.jet.lang.resolve.kotlin.DescriptorDeserializersStorage import org.jetbrains.jet.lang.resolve.kotlin.ConstantDescriptorDeserializer -import org.jetbrains.jet.descriptors.serialization.descriptors.MemberFilter import org.jetbrains.jet.lang.resolve.java.structure.JavaClass public fun DeserializerForDecompiler(classFile: VirtualFile): DeserializerForDecompiler { @@ -71,7 +70,6 @@ public class DeserializerForDecompiler(val packageDirectory: VirtualFile, val di storageManager, createDummyPackageFragment(packageFqName), deserializers, - MemberFilter.ALWAYS_TRUE, descriptorFinder, JavaProtoBufUtil.readPackageDataFrom(annotationData) )