diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/AbstractReceiverDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/AbstractReceiverDescriptor.java index 19c8657fb32..64cf9dcbbf8 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/AbstractReceiverDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/AbstractReceiverDescriptor.java @@ -6,7 +6,7 @@ import org.jetbrains.jet.lang.types.JetType; /** * @author abreslav */ -public class AbstractReceiverDescriptor implements ReceiverDescriptor { +public abstract class AbstractReceiverDescriptor implements ReceiverDescriptor { protected final JetType receiverType; public AbstractReceiverDescriptor(@NotNull JetType receiverType) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ClassReceiver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ClassReceiver.java index 53cd89136e2..85be4e2f593 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ClassReceiver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ClassReceiver.java @@ -1,5 +1,6 @@ package org.jetbrains.jet.lang.resolve.scopes.receivers; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; /** @@ -10,4 +11,9 @@ public class ClassReceiver extends ImplicitReceiverDescriptor { public ClassReceiver(ClassDescriptor classDescriptor) { super(classDescriptor, classDescriptor.getDefaultType()); } + + @Override + public R accept(@NotNull ReceiverDescriptorVisitor visitor, D data) { + return visitor.visitClassReceiver(this, data); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExpressionReceiver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExpressionReceiver.java index e66cd98226f..d7a50974481 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExpressionReceiver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExpressionReceiver.java @@ -20,4 +20,9 @@ public class ExpressionReceiver extends AbstractReceiverDescriptor implements Re public JetExpression getExpression() { return expression; } + + @Override + public R accept(@NotNull ReceiverDescriptorVisitor visitor, D data) { + return visitor.visitExpressionReceiver(this, data); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExtensionReceiver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExtensionReceiver.java index 6a54c7ac18d..834b1420c42 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExtensionReceiver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ExtensionReceiver.java @@ -12,4 +12,9 @@ public class ExtensionReceiver extends ImplicitReceiverDescriptor { public ExtensionReceiver(@NotNull CallableDescriptor callableDescriptor, @NotNull JetType receiverType) { super(callableDescriptor, receiverType); } + + @Override + public R accept(@NotNull ReceiverDescriptorVisitor visitor, D data) { + return visitor.visitExtensionReceiver(this, data); + } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ReceiverDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ReceiverDescriptor.java index 9b9bd0df20c..df07e5769d5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ReceiverDescriptor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ReceiverDescriptor.java @@ -20,6 +20,11 @@ public interface ReceiverDescriptor { return false; } + @Override + public R accept(@NotNull ReceiverDescriptorVisitor visitor, D data) { + return visitor.visitNoReceiver(this, data); + } + @Override public String toString() { return "NO_RECEIVER"; @@ -30,4 +35,6 @@ public interface ReceiverDescriptor { JetType getType(); boolean exists(); + + R accept(@NotNull ReceiverDescriptorVisitor visitor, D data); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ReceiverDescriptorVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ReceiverDescriptorVisitor.java new file mode 100644 index 00000000000..f7ba43b15aa --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/ReceiverDescriptorVisitor.java @@ -0,0 +1,26 @@ +package org.jetbrains.jet.lang.resolve.scopes.receivers; + +/** + * @author abreslav + */ +public class ReceiverDescriptorVisitor { + public R visitNoReceiver(ReceiverDescriptor noReceiver, D data) { + return null; + } + + public R visitTransientReceiver(TransientReceiver receiver, D data) { + return null; + } + + public R visitExtensionReceiver(ExtensionReceiver receiver, D data) { + return null; + } + + public R visitExpressionReceiver(ExpressionReceiver receiver, D data) { + return null; + } + + public R visitClassReceiver(ClassReceiver classReceiver, D data) { + return null; + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/TransientReceiver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/TransientReceiver.java index 7364960e682..ca79ac48409 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/TransientReceiver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/receivers/TransientReceiver.java @@ -13,4 +13,9 @@ public class TransientReceiver extends AbstractReceiverDescriptor { public TransientReceiver(@NotNull JetType type) { super(type); } + + @Override + public R accept(@NotNull ReceiverDescriptorVisitor visitor, D data) { + return visitor.visitTransientReceiver(this, data); + } }