mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Introduce static-factory methods to PyCallableParameterImpl to avoid ambiguous PyCallableParameterImpl.new calls.
This commit is contained in:
@@ -340,7 +340,7 @@ public class PyParameterInfoHandler implements ParameterInfoHandler<PyArgumentLi
|
||||
final List<PyCallableParameter> results = new ArrayList<>();
|
||||
for (PyParameter component : parameter.getContents()) {
|
||||
if (component instanceof PyNamedParameter) {
|
||||
results.add(new PyCallableParameterImpl(component));
|
||||
results.add(PyCallableParameterImpl.psi(component));
|
||||
}
|
||||
else if (component instanceof PyTupleParameter) {
|
||||
results.addAll(getFlattenedTupleParameterComponents((PyTupleParameter)component));
|
||||
@@ -392,7 +392,7 @@ public class PyParameterInfoHandler implements ParameterInfoHandler<PyArgumentLi
|
||||
|
||||
@Override
|
||||
public void visitNamedParameter(PyNamedParameter param, boolean first, boolean last) {
|
||||
visitNonPsiParameter(new PyCallableParameterImpl(param), first, last);
|
||||
visitNonPsiParameter(PyCallableParameterImpl.psi(param), first, last);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -168,7 +168,7 @@ public class PyNamedTupleType extends PyClassTypeImpl implements PyCallableType
|
||||
|
||||
@NotNull
|
||||
private static PyCallableParameter fieldToCallableParameter(@NotNull String name, @NotNull FieldTypeAndDefaultValue typeAndDefaultValue) {
|
||||
return new PyCallableParameterImpl(name, typeAndDefaultValue.getType(), typeAndDefaultValue.getDefaultValue());
|
||||
return PyCallableParameterImpl.nonPsi(name, typeAndDefaultValue.getType(), typeAndDefaultValue.getDefaultValue());
|
||||
}
|
||||
|
||||
public enum DefinitionLevel {
|
||||
|
||||
@@ -647,7 +647,7 @@ public class PyTypingTypeProvider extends PyTypeProviderBase {
|
||||
final List<PyCallableParameter> parameters = new ArrayList<>();
|
||||
final PyListLiteralExpression listExpr = (PyListLiteralExpression)parametersExpr;
|
||||
for (PyExpression argExpr : listExpr.getElements()) {
|
||||
parameters.add(new PyCallableParameterImpl(null, Ref.deref(getType(argExpr, context))));
|
||||
parameters.add(PyCallableParameterImpl.nonPsi(Ref.deref(getType(argExpr, context))));
|
||||
}
|
||||
final PyType returnType = Ref.deref(getType(returnTypeExpr, context));
|
||||
return new PyCallableTypeImpl(parameters, returnType);
|
||||
|
||||
@@ -53,7 +53,7 @@ public class PyRemoveParameterQuickFix implements LocalQuickFix {
|
||||
public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor descriptor) {
|
||||
final PyParameter psi = PyUtil.as(descriptor.getPsiElement(), PyParameter.class);
|
||||
assert psi != null;
|
||||
final PyCallableParameter parameter = new PyCallableParameterImpl(psi);
|
||||
final PyCallableParameter parameter = PyCallableParameterImpl.psi(psi);
|
||||
|
||||
final PyFunction function = PsiTreeUtil.getParentOfType(psi, PyFunction.class);
|
||||
if (function != null) {
|
||||
|
||||
@@ -41,7 +41,7 @@ public class ParamHelper {
|
||||
* @param walker the walker with callbacks.
|
||||
*/
|
||||
public static void walkDownParamArray(PyParameter[] params, ParamWalker walker) {
|
||||
walkDownParameters(ContainerUtil.map(params, PyCallableParameterImpl::new), walker);
|
||||
walkDownParameters(ContainerUtil.map(params, PyCallableParameterImpl::psi), walker);
|
||||
}
|
||||
|
||||
public static void walkDownParameters(@NotNull List<PyCallableParameter> parameters, @NotNull ParamWalker walker) {
|
||||
@@ -74,7 +74,7 @@ public class ParamHelper {
|
||||
public static String getPresentableText(@NotNull PyParameter[] parameters,
|
||||
boolean includeDefaultValue,
|
||||
@Nullable TypeEvalContext context) {
|
||||
return getPresentableText(ContainerUtil.map(parameters, PyCallableParameterImpl::new), includeDefaultValue, context);
|
||||
return getPresentableText(ContainerUtil.map(parameters, PyCallableParameterImpl::psi), includeDefaultValue, context);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -100,7 +100,7 @@ public class ParamHelper {
|
||||
|
||||
@Override
|
||||
public void visitNamedParameter(PyNamedParameter param, boolean first, boolean last) {
|
||||
visitNonPsiParameter(new PyCallableParameterImpl(param), first, last);
|
||||
visitNonPsiParameter(PyCallableParameterImpl.psi(param), first, last);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1101,7 +1101,7 @@ public class PyCallExpressionHelper {
|
||||
final PyExpression arg = argumentComponents[i];
|
||||
if (arg != null) {
|
||||
if (param instanceof PyNamedParameter) {
|
||||
mappedParameters.put(arg, new PyCallableParameterImpl(param));
|
||||
mappedParameters.put(arg, PyCallableParameterImpl.psi(param));
|
||||
}
|
||||
else if (param instanceof PyTupleParameter) {
|
||||
final TupleMappingResults nestedResults = mapComponentsOfTupleParameter(arg, (PyTupleParameter)param);
|
||||
@@ -1114,11 +1114,11 @@ public class PyCallExpressionHelper {
|
||||
}
|
||||
}
|
||||
else {
|
||||
unmappedParameters.add(new PyCallableParameterImpl(param));
|
||||
unmappedParameters.add(PyCallableParameterImpl.psi(param));
|
||||
}
|
||||
}
|
||||
else {
|
||||
unmappedParameters.add(new PyCallableParameterImpl(param));
|
||||
unmappedParameters.add(PyCallableParameterImpl.psi(param));
|
||||
}
|
||||
}
|
||||
if (argumentComponents.length > parameterComponents.length) {
|
||||
|
||||
@@ -170,7 +170,7 @@ public class PyFunctionImpl extends PyBaseElementImpl<PyFunctionStub> implements
|
||||
.filter(PyCallableType.class::isInstance)
|
||||
.map(PyCallableType.class::cast)
|
||||
.map(callableType -> callableType.getParameters(context))
|
||||
.orElseGet(() -> ContainerUtil.map(getParameterList().getParameters(), PyCallableParameterImpl::new));
|
||||
.orElseGet(() -> ContainerUtil.map(getParameterList().getParameters(), PyCallableParameterImpl::psi));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -74,7 +74,7 @@ public class PyLambdaExpressionImpl extends PyElementImpl implements PyLambdaExp
|
||||
.filter(PyCallableType.class::isInstance)
|
||||
.map(PyCallableType.class::cast)
|
||||
.map(callableType -> callableType.getParameters(context))
|
||||
.orElseGet(() -> ContainerUtil.map(getParameterList().getParameters(), PyCallableParameterImpl::new));
|
||||
.orElseGet(() -> ContainerUtil.map(getParameterList().getParameters(), PyCallableParameterImpl::psi));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -177,13 +177,13 @@ public class PyNamedParameterImpl extends PyBaseElementImpl<PyNamedParameterStub
|
||||
@NotNull
|
||||
@Override
|
||||
public String getRepr(boolean includeDefaultValue, @Nullable TypeEvalContext context) {
|
||||
return new PyCallableParameterImpl(this).getPresentableText(includeDefaultValue, context);
|
||||
return PyCallableParameterImpl.psi(this).getPresentableText(includeDefaultValue, context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public PyType getArgumentType(@NotNull TypeEvalContext context) {
|
||||
return new PyCallableParameterImpl(this).getArgumentType(context);
|
||||
return PyCallableParameterImpl.psi(this).getArgumentType(context);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -253,7 +253,7 @@ public class PyNamedParameterImpl extends PyBaseElementImpl<PyNamedParameterStub
|
||||
if (context.allowCallContext(this)) {
|
||||
final List<PyType> types = new ArrayList<>();
|
||||
final PyResolveContext resolveContext = PyResolveContext.noImplicits().withTypeEvalContext(context);
|
||||
final PyCallableParameter parameter = new PyCallableParameterImpl(this);
|
||||
final PyCallableParameter parameter = PyCallableParameterImpl.psi(this);
|
||||
|
||||
processLocalCalls(
|
||||
func, call -> {
|
||||
|
||||
@@ -36,29 +36,39 @@ public class PyCallableParameterImpl implements PyCallableParameter {
|
||||
@Nullable private final PyExpression myDefaultValue;
|
||||
@Nullable private final PyParameter myElement;
|
||||
|
||||
public PyCallableParameterImpl(@Nullable String name, @Nullable PyType type) {
|
||||
this(name, type, null);
|
||||
}
|
||||
|
||||
public PyCallableParameterImpl(@Nullable String name, @Nullable PyType type, @Nullable PyExpression defaultValue) {
|
||||
private PyCallableParameterImpl(@Nullable String name,
|
||||
@Nullable Ref<PyType> type,
|
||||
@Nullable PyExpression defaultValue,
|
||||
@Nullable PyParameter element) {
|
||||
myName = name;
|
||||
myType = Ref.create(type);
|
||||
myType = type;
|
||||
myDefaultValue = defaultValue;
|
||||
myElement = null;
|
||||
}
|
||||
|
||||
public PyCallableParameterImpl(@NotNull PyParameter element) {
|
||||
myName = null;
|
||||
myType = null;
|
||||
myDefaultValue = null;
|
||||
myElement = element;
|
||||
}
|
||||
|
||||
public PyCallableParameterImpl(@NotNull PyParameter element, @Nullable PyType type) {
|
||||
myName = null;
|
||||
myType = Ref.create(type);
|
||||
myDefaultValue = null;
|
||||
myElement = element;
|
||||
@NotNull
|
||||
public static PyCallableParameter nonPsi(@Nullable PyType type) {
|
||||
return nonPsi(null, type);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static PyCallableParameter nonPsi(@Nullable String name, @Nullable PyType type) {
|
||||
return nonPsi(name, type, null);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static PyCallableParameter nonPsi(@Nullable String name, @Nullable PyType type, @Nullable PyExpression defaultValue) {
|
||||
return new PyCallableParameterImpl(name, Ref.create(type), defaultValue, null);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static PyCallableParameter psi(@NotNull PyParameter parameter) {
|
||||
return new PyCallableParameterImpl(null, null, null, parameter);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static PyCallableParameter psi(@NotNull PyParameter parameter, @Nullable PyType type) {
|
||||
return new PyCallableParameterImpl(null, Ref.create(type), null, parameter);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
|
||||
@@ -44,7 +44,7 @@ public class PyFunctionTypeImpl implements PyFunctionType {
|
||||
@NotNull private final List<PyCallableParameter> myParameters;
|
||||
|
||||
public PyFunctionTypeImpl(@NotNull PyCallable callable) {
|
||||
this(callable, ContainerUtil.map(callable.getParameterList().getParameters(), PyCallableParameterImpl::new));
|
||||
this(callable, ContainerUtil.map(callable.getParameterList().getParameters(), PyCallableParameterImpl::psi));
|
||||
}
|
||||
|
||||
public PyFunctionTypeImpl(@NotNull PyCallable callable, @NotNull List<PyCallableParameter> parameters) {
|
||||
|
||||
@@ -517,8 +517,8 @@ public class PyTypeChecker {
|
||||
final PyType substType = substitute(parameter.getType(context), substitutions, context);
|
||||
final PyParameter psi = parameter.getParameter();
|
||||
final PyCallableParameter subst = psi != null ?
|
||||
new PyCallableParameterImpl(psi, substType) :
|
||||
new PyCallableParameterImpl(parameter.getName(), substType, parameter.getDefaultValue());
|
||||
PyCallableParameterImpl.psi(psi, substType) :
|
||||
PyCallableParameterImpl.nonPsi(parameter.getName(), substType, parameter.getDefaultValue());
|
||||
substParams.add(subst);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,10 +266,10 @@ public class PyTypeParser {
|
||||
final ParseResult first = firstPair.getFirst();
|
||||
final List<ParseResult> second = firstPair.getSecond();
|
||||
result = first;
|
||||
parameters.add(new PyCallableParameterImpl(null, first.getType()));
|
||||
parameters.add(PyCallableParameterImpl.nonPsi(first.getType()));
|
||||
for (ParseResult r : second) {
|
||||
result = result.merge(r);
|
||||
parameters.add(new PyCallableParameterImpl(null, r.getType()));
|
||||
parameters.add(PyCallableParameterImpl.nonPsi(r.getType()));
|
||||
}
|
||||
result = result.merge(returnResult);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user