better DeclarationDescriptorVisitor
* it is interface * no methods for abstract classes * DescriptorRenderer now uses it do not forget about anything
This commit is contained in:
+15
-49
@@ -17,66 +17,32 @@
|
||||
package org.jetbrains.jet.lang.descriptors;
|
||||
|
||||
/**
|
||||
* @author abreslav
|
||||
* @author Stepan Koltsov
|
||||
*/
|
||||
public class DeclarationDescriptorVisitor<R, D> {
|
||||
public R visitDeclarationDescriptor(DeclarationDescriptor descriptor, D data) {
|
||||
return null;
|
||||
}
|
||||
public interface DeclarationDescriptorVisitor<R, D> {
|
||||
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);
|
||||
}
|
||||
|
||||
+95
@@ -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<R, D> implements DeclarationDescriptorVisitor<R, D> {
|
||||
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);
|
||||
}
|
||||
}
|
||||
@@ -78,7 +78,7 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
|
||||
private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor();
|
||||
|
||||
private final DeclarationDescriptorVisitor<Void, StringBuilder> subVisitor = new RenderDeclarationDescriptorVisitor() {
|
||||
private final DeclarationDescriptorVisitorEmptyBodies<Void, StringBuilder> subVisitor = new RenderDeclarationDescriptorVisitor() {
|
||||
@Override
|
||||
public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) {
|
||||
renderTypeParameter(descriptor, builder, false);
|
||||
@@ -248,11 +248,6 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
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<DeclarationDescriptor> {
|
||||
return s;
|
||||
}
|
||||
|
||||
private class RenderDeclarationDescriptorVisitor extends DeclarationDescriptorVisitor<Void, StringBuilder> {
|
||||
private class RenderDeclarationDescriptorVisitor implements DeclarationDescriptorVisitor<Void, StringBuilder> {
|
||||
|
||||
@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<DeclarationDescriptor> {
|
||||
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<DeclarationDescriptor> {
|
||||
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<ValueParameterDescriptor> iterator = descriptor.getValueParameters().iterator(); iterator.hasNext(); ) {
|
||||
@@ -495,6 +505,12 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
||||
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;
|
||||
|
||||
+2
-3
@@ -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<DeclarationDescriptor> getAllStandardDescriptors(DeclarationDescriptor baseDescriptor) {
|
||||
final ArrayList<DeclarationDescriptor> descriptors = new ArrayList<DeclarationDescriptor>();
|
||||
baseDescriptor.acceptVoid(new DeclarationDescriptorVisitor<Void, Void>() {
|
||||
baseDescriptor.acceptVoid(new DeclarationDescriptorVisitorEmptyBodies<Void, Void>() {
|
||||
private Void visitDescriptors(Collection<? extends DeclarationDescriptor> descriptors) {
|
||||
for (DeclarationDescriptor descriptor : descriptors) {
|
||||
descriptor.acceptVoid(this);
|
||||
|
||||
@@ -226,7 +226,7 @@ public final class Intrinsics {
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisitor<Void, Void> {
|
||||
private final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisitorEmptyBodies<Void, Void> {
|
||||
|
||||
@Override
|
||||
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @Nullable Void nothing) {
|
||||
|
||||
Reference in New Issue
Block a user