Got rid of methods of MemberNavigationStrategy.

This commit is contained in:
Evgeny Gerashchenko
2013-01-11 17:37:10 +04:00
parent 41fe1a55a5
commit 6d567750d1
2 changed files with 34 additions and 64 deletions
@@ -23,10 +23,8 @@ import com.google.common.collect.Sets;
import com.intellij.util.Function; import com.intellij.util.Function;
import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor; import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
@@ -36,11 +34,34 @@ import org.jetbrains.jet.renderer.DescriptorRenderer;
import org.jetbrains.jet.util.CommonSuppliers; import org.jetbrains.jet.util.CommonSuppliers;
import java.util.Collection; import java.util.Collection;
import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
public class MemberMatching { public class MemberMatching {
/* DECLARATIONS ROUGH MATCHING */ /* DECLARATIONS ROUGH MATCHING */
@Nullable
private static JetTypeReference getReceiverType(@NotNull JetNamedDeclaration propertyOrFunction) {
if (propertyOrFunction instanceof JetNamedFunction) {
return ((JetNamedFunction) propertyOrFunction).getReceiverTypeRef();
}
if (propertyOrFunction instanceof JetProperty) {
return ((JetProperty) propertyOrFunction).getReceiverTypeRef();
}
throw new IllegalArgumentException("Neither function nor declaration: " + propertyOrFunction.getClass().getName());
}
@NotNull
private static List<JetParameter> getValueParameters(@NotNull JetNamedDeclaration propertyOrFunction) {
if (propertyOrFunction instanceof JetNamedFunction) {
return ((JetNamedFunction) propertyOrFunction).getValueParameters();
}
if (propertyOrFunction instanceof JetProperty) {
return Collections.emptyList();
}
throw new IllegalArgumentException("Neither function nor declaration: " + propertyOrFunction.getClass().getName());
}
private static String getTypeShortName(@NotNull JetTypeReference typeReference) { private static String getTypeShortName(@NotNull JetTypeReference typeReference) {
JetTypeElement typeElement = typeReference.getTypeElement(); JetTypeElement typeElement = typeReference.getTypeElement();
assert typeElement != null; assert typeElement != null;
@@ -86,8 +107,8 @@ public class MemberMatching {
@NotNull Decl a, @NotNull Decl a,
@NotNull Decl b @NotNull Decl b
) { ) {
boolean sameReceiverPresence = (navigationStrategy.getReceiverType(a) == null) == (navigationStrategy.getReceiverType(b) == null); boolean sameReceiverPresence = (getReceiverType(a) == null) == (getReceiverType(b) == null);
boolean sameParametersCount = navigationStrategy.getValueParameters(a).size() == navigationStrategy.getValueParameters(b).size(); boolean sameParametersCount = getValueParameters(a).size() == getValueParameters(b).size();
return sameReceiverPresence && sameParametersCount; return sameReceiverPresence && sameParametersCount;
} }
@@ -96,8 +117,8 @@ public class MemberMatching {
@NotNull Decl a, @NotNull Decl a,
@NotNull Decl b @NotNull Decl b
) { ) {
JetTypeReference aReceiver = navigationStrategy.getReceiverType(a); JetTypeReference aReceiver = getReceiverType(a);
JetTypeReference bReceiver = navigationStrategy.getReceiverType(b); JetTypeReference bReceiver = getReceiverType(b);
if ((aReceiver == null) != (bReceiver == null)) { if ((aReceiver == null) != (bReceiver == null)) {
return false; return false;
} }
@@ -106,8 +127,8 @@ public class MemberMatching {
return false; return false;
} }
List<JetParameter> aParameters = navigationStrategy.getValueParameters(a); List<JetParameter> aParameters = getValueParameters(a);
List<JetParameter> bParameters = navigationStrategy.getValueParameters(b); List<JetParameter> bParameters = getValueParameters(b);
if (aParameters.size() != bParameters.size()) { if (aParameters.size() != bParameters.size()) {
return false; return false;
} }
@@ -132,7 +153,7 @@ public class MemberMatching {
@NotNull Decl declaration, @NotNull Decl declaration,
@NotNull CallableDescriptor descriptor @NotNull CallableDescriptor descriptor
) { ) {
JetTypeReference declarationReceiver = navigationStrategy.getReceiverType(declaration); JetTypeReference declarationReceiver = getReceiverType(declaration);
ReceiverParameterDescriptor descriptorReceiver = descriptor.getReceiverParameter(); ReceiverParameterDescriptor descriptorReceiver = descriptor.getReceiverParameter();
if (declarationReceiver == null && descriptorReceiver == null) { if (declarationReceiver == null && descriptorReceiver == null) {
return true; return true;
@@ -148,8 +169,8 @@ public class MemberMatching {
@NotNull Decl declaration, @NotNull Decl declaration,
@NotNull Descr descriptor @NotNull Descr descriptor
) { ) {
List<JetParameter> declarationParameters = navigationStrategy.getValueParameters(declaration); List<JetParameter> declarationParameters = getValueParameters(declaration);
List<ValueParameterDescriptor> descriptorParameters = navigationStrategy.getValueParameters(descriptor); List<ValueParameterDescriptor> descriptorParameters = descriptor.getValueParameters();
if (descriptorParameters.size() != declarationParameters.size()) { if (descriptorParameters.size() != declarationParameters.size()) {
return false; return false;
} }
@@ -16,66 +16,15 @@
package org.jetbrains.jet.plugin.libraries; package org.jetbrains.jet.plugin.libraries;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import java.util.Collections;
import java.util.List;
interface MemberNavigationStrategy<Decl extends JetNamedDeclaration, Descr extends CallableDescriptor> { interface MemberNavigationStrategy<Decl extends JetNamedDeclaration, Descr extends CallableDescriptor> {
@NotNull
List<JetParameter> getValueParameters(@NotNull Decl declaration);
@NotNull
List<ValueParameterDescriptor> getValueParameters(@NotNull Descr descriptor);
@Nullable
JetTypeReference getReceiverType(@NotNull Decl declaration);
class FunctionStrategy implements MemberNavigationStrategy<JetNamedFunction, FunctionDescriptor> { class FunctionStrategy implements MemberNavigationStrategy<JetNamedFunction, FunctionDescriptor> {
@NotNull
@Override
public List<JetParameter> getValueParameters(@NotNull JetNamedFunction declaration) {
return declaration.getValueParameters();
}
@NotNull
@Override
public List<ValueParameterDescriptor> getValueParameters(@NotNull FunctionDescriptor descriptor) {
return descriptor.getValueParameters();
}
@Nullable
@Override
public JetTypeReference getReceiverType(@NotNull JetNamedFunction declaration) {
return declaration.getReceiverTypeRef();
}
} }
class PropertyStrategy implements MemberNavigationStrategy<JetProperty, VariableDescriptor> { class PropertyStrategy implements MemberNavigationStrategy<JetProperty, VariableDescriptor> {
@NotNull
@Override
public List<JetParameter> getValueParameters(@NotNull JetProperty declaration) {
return Collections.emptyList();
}
@NotNull
@Override
public List<ValueParameterDescriptor> getValueParameters(@NotNull VariableDescriptor descriptor) {
return Collections.emptyList();
}
@Nullable
@Override
public JetTypeReference getReceiverType(@NotNull JetProperty declaration) {
return declaration.getReceiverTypeRef();
}
} }
} }