From b99753dd4fad20b5675605ddad6875f01397a429 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 19 Feb 2013 21:28:08 +0400 Subject: [PATCH] Builder class extracted --- .../impl/NamespaceDescriptorImpl.java | 45 ++------------ .../impl/ScopeBasedNamespaceLikeBuilder.java | 62 +++++++++++++++++++ 2 files changed, 67 insertions(+), 40 deletions(-) create mode 100644 core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScopeBasedNamespaceLikeBuilder.java diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/NamespaceDescriptorImpl.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/NamespaceDescriptorImpl.java index f5ea39d5ff0..89350b3f172 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/NamespaceDescriptorImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/NamespaceDescriptorImpl.java @@ -17,10 +17,6 @@ package org.jetbrains.jet.lang.descriptors.impl; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; -import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; -import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; -import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -32,10 +28,11 @@ import java.util.List; public class NamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl { private WritableScope memberScope; + private NamespaceLikeBuilder builder; public NamespaceDescriptorImpl(@NotNull NamespaceDescriptorParent containingDeclaration, - @NotNull List annotations, - @NotNull Name name) { + @NotNull List annotations, + @NotNull Name name) { super(containingDeclaration, annotations, name); } @@ -53,49 +50,17 @@ public class NamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl { return memberScope; } - @Override - public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) { - getMemberScope().addNamespace(namespaceDescriptor); - } - @NotNull @Override public FqName getFqName() { return DescriptorUtils.getFQName(this).toSafe(); } - private NamespaceLikeBuilder builder = null; + @NotNull public NamespaceLikeBuilder getBuilder() { if (builder == null) { - builder = new NamespaceLikeBuilder() { - @Override - public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) { - getMemberScope().addClassifierDescriptor(classDescriptor); - } - - @Override - public void addFunctionDescriptor(@NotNull SimpleFunctionDescriptor functionDescriptor) { - getMemberScope().addFunctionDescriptor(functionDescriptor); - } - - @Override - public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) { - getMemberScope().addPropertyDescriptor(propertyDescriptor); - } - - @NotNull - @Override - public DeclarationDescriptor getOwnerForChildren() { - return NamespaceDescriptorImpl.this; - } - - @Override - public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptorLite classObjectDescriptor) { - throw new IllegalStateException("Must be guaranteed not to happen by the parser"); - } - }; + builder = new ScopeBasedNamespaceLikeBuilder(this, getMemberScope()); } - return builder; } } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScopeBasedNamespaceLikeBuilder.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScopeBasedNamespaceLikeBuilder.java new file mode 100644 index 00000000000..db2df7f4b1f --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/ScopeBasedNamespaceLikeBuilder.java @@ -0,0 +1,62 @@ +/* + * Copyright 2010-2013 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.impl; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.PropertyDescriptor; +import org.jetbrains.jet.lang.descriptors.SimpleFunctionDescriptor; +import org.jetbrains.jet.lang.resolve.scopes.WritableScope; + +public class ScopeBasedNamespaceLikeBuilder implements NamespaceLikeBuilder { + private final DeclarationDescriptor containingDeclaration; + private final WritableScope scope; + + ScopeBasedNamespaceLikeBuilder( + @NotNull DeclarationDescriptor containingDeclaration, + @NotNull WritableScope scope + ) { + this.containingDeclaration = containingDeclaration; + this.scope = scope; + } + + @NotNull + @Override + public DeclarationDescriptor getOwnerForChildren() { + return containingDeclaration; + } + + @Override + public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) { + scope.addClassifierDescriptor(classDescriptor); + } + + @Override + public void addFunctionDescriptor(@NotNull SimpleFunctionDescriptor functionDescriptor) { + scope.addFunctionDescriptor(functionDescriptor); + } + + @Override + public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) { + scope.addPropertyDescriptor(propertyDescriptor); + } + + @Override + public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptorLite classObjectDescriptor) { + throw new IllegalStateException("Must be guaranteed not to happen by the parser"); + } +}