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;
|
package org.jetbrains.jet.lang.descriptors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author Stepan Koltsov
|
||||||
*/
|
*/
|
||||||
public class DeclarationDescriptorVisitor<R, D> {
|
public interface DeclarationDescriptorVisitor<R, D> {
|
||||||
public R visitDeclarationDescriptor(DeclarationDescriptor descriptor, D data) {
|
R visitNamespaceDescriptor(NamespaceDescriptor descriptor, D data);
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitVariableDescriptor(VariableDescriptor descriptor, D data) {
|
R visitVariableDescriptor(VariableDescriptor descriptor, D data);
|
||||||
return visitDeclarationDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitFunctionDescriptor(FunctionDescriptor descriptor, D data) {
|
R visitFunctionDescriptor(FunctionDescriptor descriptor, D data);
|
||||||
return visitDeclarationDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, D data) {
|
R visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, D data);
|
||||||
return visitDeclarationDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitNamespaceDescriptor(NamespaceDescriptor descriptor, D data) {
|
R visitClassDescriptor(ClassDescriptor descriptor, D data);
|
||||||
return visitDeclarationDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitClassDescriptor(ClassDescriptor descriptor, D data) {
|
R visitModuleDeclaration(ModuleDescriptor descriptor, D data);
|
||||||
return visitDeclarationDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitModuleDeclaration(ModuleDescriptor descriptor, D data) {
|
R visitConstructorDescriptor(ConstructorDescriptor constructorDescriptor, D data);
|
||||||
return visitDeclarationDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitConstructorDescriptor(ConstructorDescriptor constructorDescriptor, D data) {
|
R visitScriptDescriptor(ScriptDescriptor scriptDescriptor, D data);
|
||||||
return visitFunctionDescriptor(constructorDescriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitScriptDescriptor(ScriptDescriptor scriptDescriptor, D data) {
|
R visitLocalVariableDescriptor(LocalVariableDescriptor descriptor, D data);
|
||||||
return visitDeclarationDescriptor(scriptDescriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitLocalVariableDescriptor(LocalVariableDescriptor descriptor, D data) {
|
R visitPropertyDescriptor(PropertyDescriptor descriptor, D data);
|
||||||
return visitVariableDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitPropertyDescriptor(PropertyDescriptor descriptor, D data) {
|
R visitValueParameterDescriptor(ValueParameterDescriptor descriptor, D data);
|
||||||
return visitVariableDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitValueParameterDescriptor(ValueParameterDescriptor descriptor, D data) {
|
R visitPropertyGetterDescriptor(PropertyGetterDescriptor descriptor, D data);
|
||||||
return visitVariableDescriptor(descriptor, data);
|
|
||||||
}
|
|
||||||
|
|
||||||
public R visitPropertyGetterDescriptor(PropertyGetterDescriptor descriptor, D data) {
|
R visitPropertySetterDescriptor(PropertySetterDescriptor 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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
+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 RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor();
|
||||||
|
|
||||||
private final DeclarationDescriptorVisitor<Void, StringBuilder> subVisitor = new RenderDeclarationDescriptorVisitor() {
|
private final DeclarationDescriptorVisitorEmptyBodies<Void, StringBuilder> subVisitor = new RenderDeclarationDescriptorVisitor() {
|
||||||
@Override
|
@Override
|
||||||
public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) {
|
public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) {
|
||||||
renderTypeParameter(descriptor, builder, false);
|
renderTypeParameter(descriptor, builder, false);
|
||||||
@@ -248,11 +248,6 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
|||||||
StringBuilder stringBuilder = new StringBuilder();
|
StringBuilder stringBuilder = new StringBuilder();
|
||||||
declarationDescriptor.accept(rootVisitor, 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()) {
|
if (shouldRenderDefinedIn()) {
|
||||||
appendDefinedIn(declarationDescriptor, stringBuilder);
|
appendDefinedIn(declarationDescriptor, stringBuilder);
|
||||||
}
|
}
|
||||||
@@ -296,12 +291,12 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class RenderDeclarationDescriptorVisitor extends DeclarationDescriptorVisitor<Void, StringBuilder> {
|
private class RenderDeclarationDescriptorVisitor implements DeclarationDescriptorVisitor<Void, StringBuilder> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitValueParameterDescriptor(ValueParameterDescriptor descriptor, StringBuilder builder) {
|
public Void visitValueParameterDescriptor(ValueParameterDescriptor descriptor, StringBuilder builder) {
|
||||||
builder.append(renderKeyword("value-parameter")).append(" ");
|
builder.append(renderKeyword("value-parameter")).append(" ");
|
||||||
return super.visitValueParameterDescriptor(descriptor, builder);
|
return visitVariableDescriptor(descriptor, builder);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -309,6 +304,11 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
|||||||
return visitVariableDescriptor(descriptor, builder, false);
|
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) {
|
protected Void visitVariableDescriptor(VariableDescriptor descriptor, StringBuilder builder, boolean skipValVar) {
|
||||||
JetType type = descriptor.getType();
|
JetType type = descriptor.getType();
|
||||||
if (descriptor instanceof ValueParameterDescriptor) {
|
if (descriptor instanceof ValueParameterDescriptor) {
|
||||||
@@ -412,6 +412,16 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
|||||||
return null;
|
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) {
|
private void renderValueParameters(FunctionDescriptor descriptor, StringBuilder builder) {
|
||||||
builder.append("(");
|
builder.append("(");
|
||||||
for (Iterator<ValueParameterDescriptor> iterator = descriptor.getValueParameters().iterator(); iterator.hasNext(); ) {
|
for (Iterator<ValueParameterDescriptor> iterator = descriptor.getValueParameters().iterator(); iterator.hasNext(); ) {
|
||||||
@@ -495,6 +505,12 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void visitScriptDescriptor(ScriptDescriptor scriptDescriptor, StringBuilder data) {
|
||||||
|
renderName(scriptDescriptor, data);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitClassDescriptor(ClassDescriptor descriptor, StringBuilder builder) {
|
public Void visitClassDescriptor(ClassDescriptor descriptor, StringBuilder builder) {
|
||||||
String keyword;
|
String keyword;
|
||||||
|
|||||||
+2
-3
@@ -17,12 +17,11 @@
|
|||||||
package org.jetbrains.jet.plugin.references;
|
package org.jetbrains.jet.plugin.references;
|
||||||
|
|
||||||
import com.intellij.psi.*;
|
import com.intellij.psi.*;
|
||||||
import com.intellij.psi.impl.source.tree.PsiCommentImpl;
|
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import com.intellij.testFramework.ResolveTestCase;
|
import com.intellij.testFramework.ResolveTestCase;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
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.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
|
import org.jetbrains.jet.lang.types.lang.JetStandardClasses;
|
||||||
import org.jetbrains.jet.plugin.PluginTestCaseBase;
|
import org.jetbrains.jet.plugin.PluginTestCaseBase;
|
||||||
@@ -78,7 +77,7 @@ public class StandardLibraryReferenceResolverTest extends ResolveTestCase {
|
|||||||
|
|
||||||
private static Collection<DeclarationDescriptor> getAllStandardDescriptors(DeclarationDescriptor baseDescriptor) {
|
private static Collection<DeclarationDescriptor> getAllStandardDescriptors(DeclarationDescriptor baseDescriptor) {
|
||||||
final ArrayList<DeclarationDescriptor> descriptors = new ArrayList<DeclarationDescriptor>();
|
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) {
|
private Void visitDescriptors(Collection<? extends DeclarationDescriptor> descriptors) {
|
||||||
for (DeclarationDescriptor descriptor : descriptors) {
|
for (DeclarationDescriptor descriptor : descriptors) {
|
||||||
descriptor.acceptVoid(this);
|
descriptor.acceptVoid(this);
|
||||||
|
|||||||
@@ -226,7 +226,7 @@ public final class Intrinsics {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("ConstantConditions")
|
@SuppressWarnings("ConstantConditions")
|
||||||
private final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisitor<Void, Void> {
|
private final class IntrinsicDeclarationVisitor extends DeclarationDescriptorVisitorEmptyBodies<Void, Void> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @Nullable Void nothing) {
|
public Void visitClassDescriptor(@NotNull ClassDescriptor descriptor, @Nullable Void nothing) {
|
||||||
|
|||||||
Reference in New Issue
Block a user