001/* 002 * Copyright 2010-2013 JetBrains s.r.o. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 017package org.jetbrains.jet.lang.descriptors.impl; 018 019import org.jetbrains.annotations.NotNull; 020import org.jetbrains.jet.lang.descriptors.*; 021import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; 022import org.jetbrains.jet.lang.resolve.DescriptorUtils; 023import org.jetbrains.jet.lang.resolve.name.FqName; 024import org.jetbrains.jet.lang.resolve.name.Name; 025import org.jetbrains.jet.lang.resolve.scopes.WritableScope; 026 027import java.util.List; 028 029public class NamespaceDescriptorImpl extends AbstractNamespaceDescriptorImpl { 030 031 private WritableScope memberScope; 032 033 public NamespaceDescriptorImpl(@NotNull NamespaceDescriptorParent containingDeclaration, 034 @NotNull List<AnnotationDescriptor> annotations, 035 @NotNull Name name) { 036 super(containingDeclaration, annotations, name); 037 } 038 039 public void initialize(@NotNull WritableScope memberScope) { 040 if (this.memberScope != null) { 041 throw new IllegalStateException("Namespace member scope reinitialize"); 042 } 043 044 this.memberScope = memberScope; 045 } 046 047 @Override 048 @NotNull 049 public WritableScope getMemberScope() { 050 return memberScope; 051 } 052 053 @Override 054 public void addNamespace(@NotNull NamespaceDescriptor namespaceDescriptor) { 055 getMemberScope().addNamespace(namespaceDescriptor); 056 } 057 058 @NotNull 059 @Override 060 public FqName getFqName() { 061 return DescriptorUtils.getFQName(this).toSafe(); 062 } 063 064 private NamespaceLikeBuilder builder = null; 065 public NamespaceLikeBuilder getBuilder() { 066 if (builder == null) { 067 builder = new NamespaceLikeBuilder() { 068 @Override 069 public void addClassifierDescriptor(@NotNull MutableClassDescriptorLite classDescriptor) { 070 getMemberScope().addClassifierDescriptor(classDescriptor); 071 } 072 073 @Override 074 public void addObjectDescriptor(@NotNull MutableClassDescriptorLite objectDescriptor) { 075 getMemberScope().addObjectDescriptor(objectDescriptor); 076 } 077 078 @Override 079 public void addFunctionDescriptor(@NotNull SimpleFunctionDescriptor functionDescriptor) { 080 getMemberScope().addFunctionDescriptor(functionDescriptor); 081 } 082 083 @Override 084 public void addPropertyDescriptor(@NotNull PropertyDescriptor propertyDescriptor) { 085 getMemberScope().addPropertyDescriptor(propertyDescriptor); 086 } 087 088 @NotNull 089 @Override 090 public DeclarationDescriptor getOwnerForChildren() { 091 return NamespaceDescriptorImpl.this; 092 } 093 094 @Override 095 public ClassObjectStatus setClassObjectDescriptor(@NotNull MutableClassDescriptorLite classObjectDescriptor) { 096 throw new IllegalStateException("Must be guaranteed not to happen by the parser"); 097 } 098 }; 099 } 100 101 return builder; 102 } 103}