From 1ca80f74fd277b3c1362f9592b369f794ae8dcd3 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Wed, 13 Jun 2012 21:11:08 +0400 Subject: [PATCH] better DeclarationDescriptorVisitor * it is interface * no methods for abstract classes * DescriptorRenderer now uses it do not forget about anything --- .../DeclarationDescriptorVisitor.java | 64 +++---------- ...clarationDescriptorVisitorEmptyBodies.java | 95 +++++++++++++++++++ .../jet/resolve/DescriptorRenderer.java | 32 +++++-- .../StandardLibraryReferenceResolverTest.java | 5 +- .../k2js/translate/intrinsic/Intrinsics.java | 2 +- 5 files changed, 137 insertions(+), 61 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java index de75842143b..2ba9c419332 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitor.java @@ -17,66 +17,32 @@ package org.jetbrains.jet.lang.descriptors; /** - * @author abreslav + * @author Stepan Koltsov */ -public class DeclarationDescriptorVisitor { - public R visitDeclarationDescriptor(DeclarationDescriptor descriptor, D data) { - return null; - } +public interface DeclarationDescriptorVisitor { + R visitNamespaceDescriptor(NamespaceDescriptor descriptor, D data); - public R visitVariableDescriptor(VariableDescriptor descriptor, D data) { - return visitDeclarationDescriptor(descriptor, data); - } + R visitVariableDescriptor(VariableDescriptor descriptor, D data); - public R visitFunctionDescriptor(FunctionDescriptor descriptor, D data) { - return visitDeclarationDescriptor(descriptor, data); - } + R visitFunctionDescriptor(FunctionDescriptor descriptor, D data); - public R visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, D data) { - return visitDeclarationDescriptor(descriptor, data); - } + R visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, D data); - public R visitNamespaceDescriptor(NamespaceDescriptor descriptor, D data) { - return visitDeclarationDescriptor(descriptor, data); - } + R visitClassDescriptor(ClassDescriptor descriptor, D data); - public R visitClassDescriptor(ClassDescriptor descriptor, D data) { - return visitDeclarationDescriptor(descriptor, data); - } + R visitModuleDeclaration(ModuleDescriptor descriptor, D data); - public R visitModuleDeclaration(ModuleDescriptor descriptor, D data) { - return visitDeclarationDescriptor(descriptor, data); - } + R visitConstructorDescriptor(ConstructorDescriptor constructorDescriptor, D data); - public R visitConstructorDescriptor(ConstructorDescriptor constructorDescriptor, D data) { - return visitFunctionDescriptor(constructorDescriptor, data); - } + R visitScriptDescriptor(ScriptDescriptor scriptDescriptor, D data); - public R visitScriptDescriptor(ScriptDescriptor scriptDescriptor, D data) { - return visitDeclarationDescriptor(scriptDescriptor, data); - } + R visitLocalVariableDescriptor(LocalVariableDescriptor descriptor, D data); - public R visitLocalVariableDescriptor(LocalVariableDescriptor descriptor, D data) { - return visitVariableDescriptor(descriptor, data); - } + R visitPropertyDescriptor(PropertyDescriptor descriptor, D data); - public R visitPropertyDescriptor(PropertyDescriptor descriptor, D data) { - return visitVariableDescriptor(descriptor, data); - } + R visitValueParameterDescriptor(ValueParameterDescriptor descriptor, D data); - public R visitValueParameterDescriptor(ValueParameterDescriptor descriptor, D data) { - return visitVariableDescriptor(descriptor, data); - } + R visitPropertyGetterDescriptor(PropertyGetterDescriptor descriptor, D data); - public R visitPropertyGetterDescriptor(PropertyGetterDescriptor descriptor, D data) { - return visitPropertyAccessorDescriptor(descriptor, data); - } - - private R visitPropertyAccessorDescriptor(PropertyAccessorDescriptor descriptor, D data) { - return visitFunctionDescriptor(descriptor, data); - } - - public R visitPropertySetterDescriptor(PropertySetterDescriptor descriptor, D data) { - return visitPropertyAccessorDescriptor(descriptor, data); - } + R visitPropertySetterDescriptor(PropertySetterDescriptor descriptor, D data); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java new file mode 100644 index 00000000000..342ce25e21a --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/DeclarationDescriptorVisitorEmptyBodies.java @@ -0,0 +1,95 @@ +/* + * Copyright 2010-2012 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; + +/** + * @author abreslav + */ +public class DeclarationDescriptorVisitorEmptyBodies implements DeclarationDescriptorVisitor { + public R visitDeclarationDescriptor(DeclarationDescriptor descriptor, D data) { + return null; + } + + @Override + public R visitVariableDescriptor(VariableDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + + @Override + public R visitFunctionDescriptor(FunctionDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + + @Override + public R visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + + @Override + public R visitNamespaceDescriptor(NamespaceDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + + @Override + public R visitClassDescriptor(ClassDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + + @Override + public R visitModuleDeclaration(ModuleDescriptor descriptor, D data) { + return visitDeclarationDescriptor(descriptor, data); + } + + @Override + public R visitConstructorDescriptor(ConstructorDescriptor constructorDescriptor, D data) { + return visitFunctionDescriptor(constructorDescriptor, data); + } + + @Override + public R visitScriptDescriptor(ScriptDescriptor scriptDescriptor, D data) { + return visitDeclarationDescriptor(scriptDescriptor, data); + } + + @Override + public R visitLocalVariableDescriptor(LocalVariableDescriptor descriptor, D data) { + return visitVariableDescriptor(descriptor, data); + } + + @Override + public R visitPropertyDescriptor(PropertyDescriptor descriptor, D data) { + return visitVariableDescriptor(descriptor, data); + } + + @Override + public R visitValueParameterDescriptor(ValueParameterDescriptor descriptor, D data) { + return visitVariableDescriptor(descriptor, data); + } + + @Override + public R visitPropertyGetterDescriptor(PropertyGetterDescriptor descriptor, D data) { + return visitPropertyAccessorDescriptor(descriptor, data); + } + + private R visitPropertyAccessorDescriptor(PropertyAccessorDescriptor descriptor, D data) { + return visitFunctionDescriptor(descriptor, data); + } + + @Override + public R visitPropertySetterDescriptor(PropertySetterDescriptor descriptor, D data) { + return visitPropertyAccessorDescriptor(descriptor, data); + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index 72423cfb1fa..ff7853683da 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -78,7 +78,7 @@ public class DescriptorRenderer implements Renderer { private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor(); - private final DeclarationDescriptorVisitor subVisitor = new RenderDeclarationDescriptorVisitor() { + private final DeclarationDescriptorVisitorEmptyBodies subVisitor = new RenderDeclarationDescriptorVisitor() { @Override public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) { renderTypeParameter(descriptor, builder, false); @@ -248,11 +248,6 @@ public class DescriptorRenderer implements Renderer { StringBuilder stringBuilder = new StringBuilder(); declarationDescriptor.accept(rootVisitor, stringBuilder); - if (stringBuilder.length() == 0) { - // don't use toString here because render may be called from toString - stringBuilder.append(declarationDescriptor.getClass().getName() + "@" + System.identityHashCode(declarationDescriptor)); - } - if (shouldRenderDefinedIn()) { appendDefinedIn(declarationDescriptor, stringBuilder); } @@ -296,12 +291,12 @@ public class DescriptorRenderer implements Renderer { return s; } - private class RenderDeclarationDescriptorVisitor extends DeclarationDescriptorVisitor { + private class RenderDeclarationDescriptorVisitor implements DeclarationDescriptorVisitor { @Override public Void visitValueParameterDescriptor(ValueParameterDescriptor descriptor, StringBuilder builder) { builder.append(renderKeyword("value-parameter")).append(" "); - return super.visitValueParameterDescriptor(descriptor, builder); + return visitVariableDescriptor(descriptor, builder); } @Override @@ -309,6 +304,11 @@ public class DescriptorRenderer implements Renderer { return visitVariableDescriptor(descriptor, builder, false); } + @Override + public Void visitLocalVariableDescriptor(LocalVariableDescriptor descriptor, StringBuilder builder) { + return visitVariableDescriptor(descriptor, builder); + } + protected Void visitVariableDescriptor(VariableDescriptor descriptor, StringBuilder builder, boolean skipValVar) { JetType type = descriptor.getType(); if (descriptor instanceof ValueParameterDescriptor) { @@ -412,6 +412,16 @@ public class DescriptorRenderer implements Renderer { return null; } + @Override + public Void visitPropertyGetterDescriptor(PropertyGetterDescriptor descriptor, StringBuilder data) { + return visitFunctionDescriptor(descriptor, data); + } + + @Override + public Void visitPropertySetterDescriptor(PropertySetterDescriptor descriptor, StringBuilder data) { + return visitFunctionDescriptor(descriptor, data); + } + private void renderValueParameters(FunctionDescriptor descriptor, StringBuilder builder) { builder.append("("); for (Iterator iterator = descriptor.getValueParameters().iterator(); iterator.hasNext(); ) { @@ -495,6 +505,12 @@ public class DescriptorRenderer implements Renderer { return null; } + @Override + public Void visitScriptDescriptor(ScriptDescriptor scriptDescriptor, StringBuilder data) { + renderName(scriptDescriptor, data); + return null; + } + @Override public Void visitClassDescriptor(ClassDescriptor descriptor, StringBuilder builder) { String keyword; diff --git a/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java b/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java index 59d7432229b..46905c4475a 100644 --- a/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/references/StandardLibraryReferenceResolverTest.java @@ -17,12 +17,11 @@ package org.jetbrains.jet.plugin.references; import com.intellij.psi.*; -import com.intellij.psi.impl.source.tree.PsiCommentImpl; 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.DeclarationDescriptorVisitor; +import org.jetbrains.jet.lang.descriptors.DeclarationDescriptorVisitorEmptyBodies; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.types.lang.JetStandardClasses; import org.jetbrains.jet.plugin.PluginTestCaseBase; @@ -78,7 +77,7 @@ public class StandardLibraryReferenceResolverTest extends ResolveTestCase { private static Collection getAllStandardDescriptors(DeclarationDescriptor baseDescriptor) { final ArrayList descriptors = new ArrayList(); - baseDescriptor.acceptVoid(new DeclarationDescriptorVisitor() { + baseDescriptor.acceptVoid(new DeclarationDescriptorVisitorEmptyBodies() { private Void visitDescriptors(Collection descriptors) { for (DeclarationDescriptor descriptor : descriptors) { descriptor.acceptVoid(this); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java index f0bf23ec6b8..2d54401d80b 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/intrinsic/Intrinsics.java @@ -226,7 +226,7 @@ public final class Intrinsics { } @SuppressWarnings("ConstantConditions") - private final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisitor { + private final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisitorEmptyBodies { @Override public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @Nullable Void nothing) {