From 2a0d81a6fe8fb2402b79b2d9f56f8114b3823fe5 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 9 Oct 2013 20:39:00 +0400 Subject: [PATCH] Introduced package view and fragment classes. --- .../jet/lang/resolve/lazy/ResolveSession.java | 6 ++++ .../jvm/compiler/ExpectedLoadErrorsUtil.java | 5 +++ .../compiler/JdkAnnotationsValidityTest.java | 5 +++ .../jet/test/util/DescriptorValidator.java | 32 +++++++++++++++++ .../util/RecursiveDescriptorProcessor.java | 12 +++++++ .../RecursiveDescriptorProcessorTest.java | 14 ++++++++ .../DeclarationDescriptorVisitor.java | 5 +++ .../lang/descriptors/NamespaceDescriptor.java | 1 + .../PackageFragmentDescriptor.java | 33 ++++++++++++++++++ .../descriptors/PackageViewDescriptor.java | 34 +++++++++++++++++++ ...clarationDescriptorVisitorEmptyBodies.java | 10 ++++++ .../jet/renderer/DescriptorRendererImpl.java | 28 +++++++++++++++ .../BuiltInsReferenceResolverTest.java | 7 ++++ 13 files changed, 192 insertions(+) create mode 100644 core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageFragmentDescriptor.java create mode 100644 core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageViewDescriptor.java diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java index 4b6d20162d0..ed82050c784 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/ResolveSession.java @@ -359,6 +359,12 @@ public class ResolveSession implements KotlinCodeAnalyzer { return null; } + @Override + public Void visitPackageViewDescriptor(PackageViewDescriptor descriptor, Void data) { + ForceResolveUtil.forceResolveAllContents(descriptor); + return super.visitPackageViewDescriptor(descriptor, data); + } + @Override public Void visitClassDescriptor(ClassDescriptor descriptor, Void data) { ForceResolveUtil.forceResolveAllContents(descriptor); diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/ExpectedLoadErrorsUtil.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/ExpectedLoadErrorsUtil.java index 24f62696397..4435573211e 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/ExpectedLoadErrorsUtil.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/ExpectedLoadErrorsUtil.java @@ -65,6 +65,11 @@ public class ExpectedLoadErrorsUtil { return visitDeclarationRecursively(descriptor, descriptor.getMemberScope()); } + @Override + public Void visitPackageViewDescriptor(PackageViewDescriptor descriptor, Void data) { + return visitDeclarationRecursively(descriptor, descriptor.getMemberScope()); + } + @Override public Void visitClassDescriptor(ClassDescriptor descriptor, Void data) { return visitDeclarationRecursively(descriptor, descriptor.getDefaultType().getMemberScope()); diff --git a/compiler/tests/org/jetbrains/jet/jvm/compiler/JdkAnnotationsValidityTest.java b/compiler/tests/org/jetbrains/jet/jvm/compiler/JdkAnnotationsValidityTest.java index dc493fc5a86..d5249349e0e 100644 --- a/compiler/tests/org/jetbrains/jet/jvm/compiler/JdkAnnotationsValidityTest.java +++ b/compiler/tests/org/jetbrains/jet/jvm/compiler/JdkAnnotationsValidityTest.java @@ -183,6 +183,11 @@ public class JdkAnnotationsValidityTest extends UsefulTestCase { return visitDeclarationRecursively(descriptor, descriptor.getMemberScope()); } + @Override + public Void visitPackageViewDescriptor(PackageViewDescriptor descriptor, Void data) { + return visitDeclarationRecursively(descriptor, descriptor.getMemberScope()); + } + @Override public Void visitClassDescriptor(ClassDescriptor descriptor, Void data) { // skip java.util.Collection, etc. diff --git a/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java b/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java index b189a77adba..a0524dfc746 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java +++ b/compiler/tests/org/jetbrains/jet/test/util/DescriptorValidator.java @@ -182,6 +182,22 @@ public class DescriptorValidator { return true; } + @Override + public Boolean visitPackageFragmentDescriptor( + PackageFragmentDescriptor descriptor, DiagnosticCollector collector + ) { + validateScope(descriptor.getMemberScope(), collector); + return true; + } + + @Override + public Boolean visitPackageViewDescriptor( + PackageViewDescriptor descriptor, DiagnosticCollector collector + ) { + validateScope(descriptor.getMemberScope(), collector); + return true; + } + @Override public Boolean visitVariableDescriptor( VariableDescriptor descriptor, DiagnosticCollector collector @@ -368,6 +384,22 @@ public class DescriptorValidator { return null; } + @Override + public Void visitPackageFragmentDescriptor( + PackageFragmentDescriptor descriptor, JetScope scope + ) { + return null; + } + + @Override + public Void visitPackageViewDescriptor( + PackageViewDescriptor descriptor, JetScope scope + ) { + // TODO + //assertFound(scope, descriptor, scope.getPackage(descriptor.getName())); + return null; + } + @Override public Void visitVariableDescriptor( VariableDescriptor descriptor, JetScope scope diff --git a/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessor.java b/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessor.java index dc99a9b3128..3a51d007244 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessor.java +++ b/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessor.java @@ -65,6 +65,18 @@ public class RecursiveDescriptorProcessor { && visitChildren(descriptor.getValueParameters(), data); } + @Override + public Boolean visitPackageFragmentDescriptor(PackageFragmentDescriptor descriptor, D data) { + return applyWorker(descriptor, data) + && visitChildren(descriptor.getMemberScope().getAllDescriptors(), data); + } + + @Override + public Boolean visitPackageViewDescriptor(PackageViewDescriptor descriptor, D data) { + return applyWorker(descriptor, data) + && visitChildren(descriptor.getMemberScope().getAllDescriptors(), data); + } + @Override public Boolean visitNamespaceDescriptor(NamespaceDescriptor descriptor, D data) { return applyWorker(descriptor, data) diff --git a/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessorTest.java b/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessorTest.java index 5fd6153054f..bc7f97b4b77 100644 --- a/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessorTest.java +++ b/compiler/tests/org/jetbrains/jet/test/util/RecursiveDescriptorProcessorTest.java @@ -97,6 +97,20 @@ public class RecursiveDescriptorProcessorTest extends KotlinTestWithEnvironment return true; } + @Override + public Boolean visitPackageFragmentDescriptor( + PackageFragmentDescriptor descriptor, Void data + ) { + add(descriptor); + return true; + } + + @Override + public Boolean visitPackageViewDescriptor(PackageViewDescriptor descriptor, Void data) { + add(descriptor); + return true; + } + @Override public Boolean visitVariableDescriptor(VariableDescriptor descriptor, Void data) { add(descriptor); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java index 0fb1f274e05..013b7939d8f 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java @@ -17,8 +17,13 @@ package org.jetbrains.jet.lang.descriptors; public interface DeclarationDescriptorVisitor { + @Deprecated R visitNamespaceDescriptor(NamespaceDescriptor descriptor, D data); + R visitPackageFragmentDescriptor(PackageFragmentDescriptor descriptor, D data); + + R visitPackageViewDescriptor(PackageViewDescriptor descriptor, D data); + R visitVariableDescriptor(VariableDescriptor descriptor, D data); R visitFunctionDescriptor(FunctionDescriptor descriptor, D data); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/NamespaceDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/NamespaceDescriptor.java index d796606986f..7b93787651d 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/NamespaceDescriptor.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/NamespaceDescriptor.java @@ -21,6 +21,7 @@ import org.jetbrains.jet.lang.descriptors.impl.NamespaceDescriptorParent; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.scopes.JetScope; +@Deprecated public interface NamespaceDescriptor extends ClassOrNamespaceDescriptor, NamespaceDescriptorParent { @NotNull JetScope getMemberScope(); diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageFragmentDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageFragmentDescriptor.java new file mode 100644 index 00000000000..31a4c52c4da --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageFragmentDescriptor.java @@ -0,0 +1,33 @@ +/* + * 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; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; + +public interface PackageFragmentDescriptor extends ClassOrNamespaceDescriptor { + @NotNull + @Override + ModuleDescriptor getContainingDeclaration(); + + @NotNull + FqName getFqName(); + + @NotNull + JetScope getMemberScope(); +} diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageViewDescriptor.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageViewDescriptor.java new file mode 100644 index 00000000000..830a181642a --- /dev/null +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/PackageViewDescriptor.java @@ -0,0 +1,34 @@ +/* + * 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; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.resolve.scopes.JetScope; + +public interface PackageViewDescriptor extends DeclarationDescriptor { + @Override + @Nullable + PackageViewDescriptor getContainingDeclaration(); + + @NotNull + FqName getFqName(); + + @NotNull + JetScope getMemberScope(); +} diff --git a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorVisitorEmptyBodies.java b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorVisitorEmptyBodies.java index 45b51a4fdee..0eeb407ef52 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorVisitorEmptyBodies.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/descriptors/impl/DeclarationDescriptorVisitorEmptyBodies.java @@ -43,6 +43,16 @@ public class DeclarationDescriptorVisitorEmptyBodies implements Declaratio return visitDeclarationDescriptor(descriptor, data); } + @Override + public R visitPackageFragmentDescriptor(PackageFragmentDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + + @Override + public R visitPackageViewDescriptor(PackageViewDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + @Override public R visitClassDescriptor(ClassDescriptor descriptor, D data) { return visitDeclarationDescriptor(descriptor, data); diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index d725bbe9332..3a7d28ef2b3 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -687,6 +687,18 @@ public class DescriptorRendererImpl implements DescriptorRenderer { renderName(namespace, builder); } + private void renderPackageView(@NotNull PackageViewDescriptor packageView, @NotNull StringBuilder builder) { + builder.append(renderKeyword("package")).append(" "); + renderName(packageView, builder); + } + + private void renderPackageFragment(@NotNull PackageFragmentDescriptor fragment, @NotNull StringBuilder builder) { + builder.append(renderKeyword("package-fragment")).append(" "); + renderName(fragment, builder); + builder.append(" in context of "); + renderName(fragment.getContainingDeclaration(), builder); + } + /* STUPID DISPATCH-ONLY VISITOR */ private class RenderDeclarationDescriptorVisitor extends DeclarationDescriptorVisitorEmptyBodies { @@ -737,6 +749,22 @@ public class DescriptorRendererImpl implements DescriptorRenderer { return null; } + @Override + public Void visitPackageFragmentDescriptor( + PackageFragmentDescriptor descriptor, StringBuilder builder + ) { + renderPackageFragment(descriptor, builder); + return null; + } + + @Override + public Void visitPackageViewDescriptor( + PackageViewDescriptor descriptor, StringBuilder builder + ) { + renderPackageView(descriptor, builder); + return null; + } + @Override public Void visitModuleDeclaration(ModuleDescriptor descriptor, StringBuilder builder) { renderModuleOrScript(descriptor, builder); diff --git a/idea/tests/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolverTest.java b/idea/tests/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolverTest.java index 3ccca1ff9c0..fd1e2a347a6 100644 --- a/idea/tests/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolverTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/references/BuiltInsReferenceResolverTest.java @@ -21,6 +21,7 @@ import com.intellij.psi.util.PsiTreeUtil; import com.intellij.testFramework.ResolveTestCase; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.descriptors.PackageViewDescriptor; import org.jetbrains.jet.lang.descriptors.impl.DeclarationDescriptorVisitorEmptyBodies; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; @@ -101,6 +102,12 @@ public class BuiltInsReferenceResolverTest extends ResolveTestCase { return visitDescriptors(descriptor.getMemberScope().getAllDescriptors()); } + @Override + public Void visitPackageViewDescriptor(PackageViewDescriptor descriptor, Void data) { + descriptors.add(descriptor); + return visitDescriptors(descriptor.getMemberScope().getAllDescriptors()); + } + @Override public Void visitDeclarationDescriptor(DeclarationDescriptor descriptor, Void data) { descriptors.add(descriptor);