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.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.ReceiverParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.TypeParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.JetType;
@@ -36,11 +34,34 @@ import org.jetbrains.jet.renderer.DescriptorRenderer;
import org.jetbrains.jet.util.CommonSuppliers;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Set;
public class MemberMatching {
/* 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) {
JetTypeElement typeElement = typeReference.getTypeElement();
assert typeElement != null;
@@ -86,8 +107,8 @@ public class MemberMatching {
@NotNull Decl a,
@NotNull Decl b
) {
boolean sameReceiverPresence = (navigationStrategy.getReceiverType(a) == null) == (navigationStrategy.getReceiverType(b) == null);
boolean sameParametersCount = navigationStrategy.getValueParameters(a).size() == navigationStrategy.getValueParameters(b).size();
boolean sameReceiverPresence = (getReceiverType(a) == null) == (getReceiverType(b) == null);
boolean sameParametersCount = getValueParameters(a).size() == getValueParameters(b).size();
return sameReceiverPresence && sameParametersCount;
}
@@ -96,8 +117,8 @@ public class MemberMatching {
@NotNull Decl a,
@NotNull Decl b
) {
JetTypeReference aReceiver = navigationStrategy.getReceiverType(a);
JetTypeReference bReceiver = navigationStrategy.getReceiverType(b);
JetTypeReference aReceiver = getReceiverType(a);
JetTypeReference bReceiver = getReceiverType(b);
if ((aReceiver == null) != (bReceiver == null)) {
return false;
}
@@ -106,8 +127,8 @@ public class MemberMatching {
return false;
}
List<JetParameter> aParameters = navigationStrategy.getValueParameters(a);
List<JetParameter> bParameters = navigationStrategy.getValueParameters(b);
List<JetParameter> aParameters = getValueParameters(a);
List<JetParameter> bParameters = getValueParameters(b);
if (aParameters.size() != bParameters.size()) {
return false;
}
@@ -132,7 +153,7 @@ public class MemberMatching {
@NotNull Decl declaration,
@NotNull CallableDescriptor descriptor
) {
JetTypeReference declarationReceiver = navigationStrategy.getReceiverType(declaration);
JetTypeReference declarationReceiver = getReceiverType(declaration);
ReceiverParameterDescriptor descriptorReceiver = descriptor.getReceiverParameter();
if (declarationReceiver == null && descriptorReceiver == null) {
return true;
@@ -148,8 +169,8 @@ public class MemberMatching {
@NotNull Decl declaration,
@NotNull Descr descriptor
) {
List<JetParameter> declarationParameters = navigationStrategy.getValueParameters(declaration);
List<ValueParameterDescriptor> descriptorParameters = navigationStrategy.getValueParameters(descriptor);
List<JetParameter> declarationParameters = getValueParameters(declaration);
List<ValueParameterDescriptor> descriptorParameters = descriptor.getValueParameters();
if (descriptorParameters.size() != declarationParameters.size()) {
return false;
}
@@ -16,66 +16,15 @@
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.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
import org.jetbrains.jet.lang.psi.*;
import java.util.Collections;
import java.util.List;
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> {
@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> {
@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();
}
}
}