Got rid of methods of MemberNavigationStrategy.
This commit is contained in:
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user