Introduced base PackageFragmentDescriptorImpl class,

This commit is contained in:
Evgeny Gerashchenko
2014-03-26 00:30:56 +04:00
parent b736d1602e
commit 00c0c1acd1
5 changed files with 54 additions and 104 deletions
@@ -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, D> R accept(DeclarationDescriptorVisitor<R, D> visitor, D data) {
return visitor.visitPackageFragmentDescriptor(this, data);
}
@NotNull
@Override
public FqName getFqName() {
return fqName;
}
@Override
public void forceResolveAllContents() {
ForceResolveUtil.forceResolveAllContents(memberScope);
@@ -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 <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D) = visitor.visitPackageFragmentDescriptor(this, data) as R
override fun substitute(substitutor: TypeSubstitutor) = this
override fun toString() = "lazy java package fragment: " + getFqName()
}
@@ -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 <R, D> accept(visitor: DeclarationDescriptorVisitor<R, D>, data: D): R =
visitor.visitPackageFragmentDescriptor(this, data) as R
override fun getContainingDeclaration(): ModuleDescriptor {
return super<DeclarationDescriptorNonRootImpl>.getContainingDeclaration() as ModuleDescriptor
}
override fun getFqName(): FqName = _fqName
}
@@ -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, D> R accept(DeclarationDescriptorVisitor<R, D> visitor, D data) {
return visitor.visitPackageFragmentDescriptor(this, data);
}
@NotNull
public PackageLikeBuilder getBuilder() {
return builder;
@@ -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, D> R accept(DeclarationDescriptorVisitor<R, D> 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