diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyPackageDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyPackageDescriptor.java index 8602227142a..0c042828811 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyPackageDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/descriptors/LazyPackageDescriptor.java @@ -31,11 +31,9 @@ import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.scopes.JetScope; import org.jetbrains.jet.lang.types.TypeSubstitutor; -public class LazyPackageDescriptor extends DeclarationDescriptorImpl implements LazyEntity, PackageFragmentDescriptor { +public class LazyPackageDescriptor extends PackageFragmentDescriptorImpl implements LazyEntity { private final ResolveSession resolveSession; - private final ModuleDescriptor module; private final JetScope memberScope; - private final FqName fqName; private final PackageMemberDeclarationProvider declarationProvider; public LazyPackageDescriptor( @@ -44,10 +42,8 @@ public class LazyPackageDescriptor extends DeclarationDescriptorImpl implements @NotNull ResolveSession resolveSession, @NotNull PackageMemberDeclarationProvider declarationProvider ) { - super(Annotations.EMPTY, fqName.shortNameOrSpecial()); + super(module, fqName); this.resolveSession = resolveSession; - this.module = module; - this.fqName = fqName; this.declarationProvider = declarationProvider; this.memberScope = new LazyPackageMemberScope(resolveSession, declarationProvider, this); @@ -63,29 +59,6 @@ public class LazyPackageDescriptor extends DeclarationDescriptorImpl implements return memberScope; } - @NotNull - @Override - public ModuleDescriptor getContainingDeclaration() { - return module; - } - - @Nullable - @Override - public DeclarationDescriptor substitute(@NotNull TypeSubstitutor substitutor) { - return this; - } - - @Override - public R accept(DeclarationDescriptorVisitor visitor, D data) { - return visitor.visitPackageFragmentDescriptor(this, data); - } - - @NotNull - @Override - public FqName getFqName() { - return fqName; - } - @Override public void forceResolveAllContents() { ForceResolveUtil.forceResolveAllContents(memberScope); diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt index 1ba4a5387c2..8bd6b118737 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/descriptors/LazyJavaPackageFragment.kt @@ -17,6 +17,7 @@ import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider import org.jetbrains.jet.lang.descriptors.annotations.Annotations import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassStaticsPackageFragmentDescriptor import org.jetbrains.jet.lang.resolve.java.descriptor.JavaClassDescriptor +import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptorImpl class LazyPackageFragmentForJavaPackage( c: LazyJavaResolverContext, @@ -45,19 +46,13 @@ class LazyPackageFragmentForJavaClass( abstract class LazyJavaPackageFragment( protected val c: LazyJavaResolverContext, containingDeclaration: ModuleDescriptor, - private val _fqName: FqName, + fqName: FqName, createMemberScope: LazyJavaPackageFragment.() -> LazyJavaPackageFragmentScope -) : DeclarationDescriptorNonRootImpl(containingDeclaration, Annotations.EMPTY, _fqName.shortNameOrSpecial()), +) : PackageFragmentDescriptorImpl(containingDeclaration, fqName), JavaPackageFragmentDescriptor, LazyJavaDescriptor { private val _memberScope = createMemberScope() override fun getMemberScope(): LazyJavaPackageFragmentScope = _memberScope - override fun getFqName() = _fqName - - override fun accept(visitor: DeclarationDescriptorVisitor, data: D) = visitor.visitPackageFragmentDescriptor(this, data) as R - - override fun substitute(substitutor: TypeSubstitutor) = this - override fun toString() = "lazy java package fragment: " + getFqName() } \ No newline at end of file diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageFragmentDescriptorImpl.kt b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageFragmentDescriptorImpl.kt new file mode 100644 index 00000000000..a273f87e6ce --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageFragmentDescriptorImpl.kt @@ -0,0 +1,38 @@ +/* + * 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.descriptors + +import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorNonRootImpl +import org.jetbrains.jet.lang.resolve.name.FqName +import org.jetbrains.jet.lang.descriptors.annotations.Annotations +import org.jetbrains.jet.lang.types.TypeSubstitutor + +public abstract class PackageFragmentDescriptorImpl( + module: ModuleDescriptor, + val _fqName: FqName +) : DeclarationDescriptorNonRootImpl(module, Annotations.EMPTY, _fqName.shortNameOrSpecial()), PackageFragmentDescriptor { + override fun substitute(substitutor: TypeSubstitutor): DeclarationDescriptor? = this + + override fun accept(visitor: DeclarationDescriptorVisitor, data: D): R = + visitor.visitPackageFragmentDescriptor(this, data) as R + + override fun getContainingDeclaration(): ModuleDescriptor { + return super.getContainingDeclaration() as ModuleDescriptor + } + + override fun getFqName(): FqName = _fqName +} diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutablePackageFragmentDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutablePackageFragmentDescriptor.java index fce92d32d63..c47e6d49d21 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutablePackageFragmentDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/MutablePackageFragmentDescriptor.java @@ -18,10 +18,7 @@ package org.jetbrains.jet.lang.descriptors.impl; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorVisitor; -import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; -import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; +import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.Annotations; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.scopes.JetScope; @@ -30,52 +27,24 @@ import org.jetbrains.jet.lang.resolve.scopes.WritableScope; import org.jetbrains.jet.lang.resolve.scopes.WritableScopeImpl; import org.jetbrains.jet.lang.types.TypeSubstitutor; -public class MutablePackageFragmentDescriptor extends DeclarationDescriptorImpl implements PackageFragmentDescriptor { - - private final ModuleDescriptor module; - private final FqName fqName; +public class MutablePackageFragmentDescriptor extends PackageFragmentDescriptorImpl { private final WritableScope scope; private final PackageLikeBuilder builder; public MutablePackageFragmentDescriptor(@NotNull ModuleDescriptor module, @NotNull FqName fqName) { - super(Annotations.EMPTY, fqName.shortNameOrSpecial()); - this.module = module; - this.fqName = fqName; + super(module, fqName); scope = new WritableScopeImpl(JetScope.EMPTY, this, RedeclarationHandler.DO_NOTHING, "Members of " + fqName + " in " + module); scope.changeLockLevel(WritableScope.LockLevel.BOTH); builder = new ScopeBasedPackageLikeBuilder(this, scope); } - @NotNull - @Override - public ModuleDescriptor getContainingDeclaration() { - return module; - } - - @NotNull - @Override - public FqName getFqName() { - return fqName; - } - @NotNull @Override public WritableScope getMemberScope() { return scope; } - @Nullable - @Override - public DeclarationDescriptor substitute(@NotNull TypeSubstitutor substitutor) { - return this; - } - - @Override - public R accept(DeclarationDescriptorVisitor visitor, D data) { - return visitor.visitPackageFragmentDescriptor(this, data); - } - @NotNull public PackageLikeBuilder getBuilder() { return builder; 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 483c964a88f..ebebbcd650b 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 @@ -4,17 +4,17 @@ import kotlin.Function0; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.descriptors.serialization.*; -import org.jetbrains.jet.descriptors.serialization.descriptors.Deserializers; 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.*; -import org.jetbrains.jet.lang.descriptors.annotations.Annotations; -import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorImpl; +import org.jetbrains.jet.lang.descriptors.ModuleDescriptor; +import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptor; +import org.jetbrains.jet.lang.descriptors.PackageFragmentDescriptorImpl; +import org.jetbrains.jet.lang.descriptors.PackageFragmentProvider; import org.jetbrains.jet.lang.descriptors.impl.MutablePackageFragmentDescriptor; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.scopes.JetScope; -import org.jetbrains.jet.lang.types.TypeSubstitutor; import org.jetbrains.jet.storage.NotNullLazyValue; import org.jetbrains.jet.storage.StorageManager; @@ -26,15 +26,13 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements PackageFragmentDescriptor { +class BuiltinsPackageFragment extends PackageFragmentDescriptorImpl { private final DeserializedPackageMemberScope members; private final NameResolver nameResolver; - private final ModuleDescriptor module; private final PackageFragmentProvider packageFragmentProvider; public BuiltinsPackageFragment(@NotNull StorageManager storageManager, @NotNull ModuleDescriptor module) { - super(Annotations.EMPTY, KotlinBuiltIns.BUILT_INS_PACKAGE_NAME); - this.module = module; + super(module, KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME); nameResolver = NameSerializationUtil.deserializeNameResolver(getStream(BuiltInsSerializationUtil.getNameTableFilePath(getFqName()))); packageFragmentProvider = new BuiltinsPackageFragmentProvider(); @@ -67,29 +65,6 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa return packageFragmentProvider; } - @NotNull - @Override - public ModuleDescriptor getContainingDeclaration() { - return module; - } - - @Nullable - @Override - public DeclarationDescriptor substitute(@NotNull TypeSubstitutor substitutor) { - return this; - } - - @Override - public R accept(DeclarationDescriptorVisitor visitor, D data) { - return visitor.visitPackageFragmentDescriptor(this, data); - } - - @NotNull - @Override - public FqName getFqName() { - return KotlinBuiltIns.BUILT_INS_PACKAGE_FQ_NAME; - } - @NotNull private static InputStream getStream(@NotNull String path) { InputStream stream = getStreamNullable(path); @@ -105,7 +80,7 @@ class BuiltinsPackageFragment extends DeclarationDescriptorImpl implements Packa } private class BuiltinsPackageFragmentProvider implements PackageFragmentProvider { - private final PackageFragmentDescriptor rootPackage = new MutablePackageFragmentDescriptor(module, FqName.ROOT); + private final PackageFragmentDescriptor rootPackage = new MutablePackageFragmentDescriptor(getContainingDeclaration(), FqName.ROOT); @NotNull @Override