From 846d8f65e099569b22521d042fb5c2ff55f88b60 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Mon, 28 Jan 2013 18:14:37 +0400 Subject: [PATCH] Refactoring: use delegation instead of subclassing --- .../lang/resolve/scopes/FilteringScope.java | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/FilteringScope.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/FilteringScope.java index a645582cd96..7a1ddc843e3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/FilteringScope.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/scopes/FilteringScope.java @@ -25,22 +25,27 @@ import org.jetbrains.jet.lang.resolve.name.LabelName; import org.jetbrains.jet.lang.resolve.name.Name; import java.util.Collection; +import java.util.List; -public class FilteringScope extends JetScopeAdapter { - private final Predicate predicate; +public class FilteringScope implements JetScope { + @NotNull private final JetScope workerScope; + @NotNull private final Predicate predicate; - public FilteringScope( - @NotNull JetScope workerScope, - @NotNull Predicate predicate - ) { - super(workerScope); + public FilteringScope(@NotNull JetScope workerScope, @NotNull Predicate predicate) { + this.workerScope = workerScope; this.predicate = predicate; } @NotNull @Override public Collection getFunctions(@NotNull Name name) { - return Collections2.filter(super.getFunctions(name), predicate); + return Collections2.filter(workerScope.getFunctions(name), predicate); + } + + @NotNull + @Override + public DeclarationDescriptor getContainingDeclaration() { + return workerScope.getContainingDeclaration(); } @Nullable @@ -50,56 +55,62 @@ public class FilteringScope extends JetScopeAdapter { @Override public NamespaceDescriptor getNamespace(@NotNull Name name) { - return filterDescriptor(super.getNamespace(name)); + return filterDescriptor(workerScope.getNamespace(name)); } @Override public ClassifierDescriptor getClassifier(@NotNull Name name) { - return filterDescriptor(super.getClassifier(name)); + return filterDescriptor(workerScope.getClassifier(name)); } @Override public ClassDescriptor getObjectDescriptor(@NotNull Name name) { - return filterDescriptor(super.getObjectDescriptor(name)); + return filterDescriptor(workerScope.getObjectDescriptor(name)); } @NotNull @Override public Collection getObjectDescriptors() { - return Collections2.filter(super.getObjectDescriptors(), predicate); + return Collections2.filter(workerScope.getObjectDescriptors(), predicate); } @NotNull @Override public Collection getProperties(@NotNull Name name) { - return Collections2.filter(super.getProperties(name), predicate); + return Collections2.filter(workerScope.getProperties(name), predicate); } @Override public VariableDescriptor getLocalVariable(@NotNull Name name) { - return filterDescriptor(super.getLocalVariable(name)); + return filterDescriptor(workerScope.getLocalVariable(name)); } @NotNull @Override public Collection getAllDescriptors() { - return Collections2.filter(super.getAllDescriptors(), predicate); + return Collections2.filter(workerScope.getAllDescriptors(), predicate); } @NotNull @Override - public Collection getDeclarationsByLabel(LabelName labelName) { - return Collections2.filter(super.getDeclarationsByLabel(labelName), predicate); + public List getImplicitReceiversHierarchy() { + return workerScope.getImplicitReceiversHierarchy(); + } + + @NotNull + @Override + public Collection getDeclarationsByLabel(@NotNull LabelName labelName) { + return Collections2.filter(workerScope.getDeclarationsByLabel(labelName), predicate); } @Override public PropertyDescriptor getPropertyByFieldReference(@NotNull Name fieldName) { - return filterDescriptor(super.getPropertyByFieldReference(fieldName)); + return filterDescriptor(workerScope.getPropertyByFieldReference(fieldName)); } @NotNull @Override public Collection getOwnDeclaredDescriptors() { - return Collections2.filter(super.getOwnDeclaredDescriptors(), predicate); + return Collections2.filter(workerScope.getOwnDeclaredDescriptors(), predicate); } }