clarify logic around scoped and member access expressions
parent
35ce3af324
commit
d6d9712134
|
@ -308,9 +308,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (
|
else if (
|
||||||
($node instanceof Tolerant\Node\Expression\CallExpression &&
|
(($access = $node) instanceof Tolerant\Node\Expression\MemberAccessExpression)
|
||||||
($access = $node->callableExpression) instanceof Tolerant\Node\Expression\MemberAccessExpression)
|
|
||||||
|| (($access = $node) instanceof Tolerant\Node\Expression\MemberAccessExpression)
|
|
||||||
) {
|
) {
|
||||||
if ($access->memberName instanceof Tolerant\Node\Expression) {
|
if ($access->memberName instanceof Tolerant\Node\Expression) {
|
||||||
// Cannot get definition if right-hand side is expression
|
// Cannot get definition if right-hand side is expression
|
||||||
|
@ -352,7 +350,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
// var_dump($classFqn);
|
// var_dump($classFqn);
|
||||||
}
|
}
|
||||||
$memberSuffix = '->' . (string)($access->memberName->getText() ?? $access->memberName->getText($node->getFileContents()));
|
$memberSuffix = '->' . (string)($access->memberName->getText() ?? $access->memberName->getText($node->getFileContents()));
|
||||||
if ($node instanceof Tolerant\Node\Expression\CallExpression || $node->parent instanceof Tolerant\Node\Expression\CallExpression) {
|
if ($node->parent instanceof Tolerant\Node\Expression\CallExpression) {
|
||||||
// TODO - this is redundant
|
// TODO - this is redundant
|
||||||
$memberSuffix .= '()';
|
$memberSuffix .= '()';
|
||||||
}
|
}
|
||||||
|
@ -577,8 +575,10 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ($expr instanceof Tolerant\Node\Expression\CallExpression &&
|
if ($expr instanceof Tolerant\Node\Expression\CallExpression &&
|
||||||
!($expr->callableExpression instanceof Tolerant\Node\Expression\ScopedPropertyAccessExpression ||
|
!(
|
||||||
$expr->callableExpression instanceof Tolerant\Node\Expression\MemberAccessExpression)) {
|
$expr->callableExpression instanceof Tolerant\Node\Expression\ScopedPropertyAccessExpression ||
|
||||||
|
$expr->callableExpression instanceof Tolerant\Node\Expression\MemberAccessExpression)
|
||||||
|
) {
|
||||||
|
|
||||||
// Find the function definition
|
// Find the function definition
|
||||||
if ($expr->callableExpression instanceof Tolerant\Node\Expression) {
|
if ($expr->callableExpression instanceof Tolerant\Node\Expression) {
|
||||||
|
@ -594,29 +594,6 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
return $def->type;
|
return $def->type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
$isScopedPropertyAccess = $expr->callableExpression instanceof Tolerant\Node\Expression\ScopedPropertyAccessExpression;
|
|
||||||
$prefix = $isScopedPropertyAccess ?
|
|
||||||
$expr->callableExpression->scopeResolutionQualifier : $expr->callableExpression->dereferencableExpression;
|
|
||||||
|
|
||||||
if ($prefix instanceof Tolerant\Node\QualifiedName) {
|
|
||||||
$name = $prefix->getNamespacedName() ?? $prefix->getText();
|
|
||||||
} elseif ($prefix instanceof Tolerant\Token) {
|
|
||||||
// TODO DOES THIS EVER HAPPEN?
|
|
||||||
$name = $prefix->getText($expr->getText());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($name)) {
|
|
||||||
$memberNameText = $expr->callableExpression->memberName instanceof Node
|
|
||||||
? $expr->callableExpression->memberName->getText() : $expr->callableExpression->memberName->getText($expr->getFileContents());
|
|
||||||
$fqn = $name . ($isScopedPropertyAccess ? "::" : "->") . $memberNameText . "()";
|
|
||||||
|
|
||||||
$def = $this->index->getDefinition($fqn, true);
|
|
||||||
if ($def !== null) {
|
|
||||||
return $def->type;
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
}
|
}
|
||||||
if (strtolower((string)$expr->getText()) === 'true' || strtolower((string)$expr->getText()) === 'false') {
|
if (strtolower((string)$expr->getText()) === 'true' || strtolower((string)$expr->getText()) === 'false') {
|
||||||
return new Types\Boolean;
|
return new Types\Boolean;
|
||||||
|
@ -630,9 +607,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
return $def->type;
|
return $def->type;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (($expr instanceof Tolerant\Node\Expression\CallExpression &&
|
if (($access = $expr) instanceof Tolerant\Node\Expression\MemberAccessExpression) {
|
||||||
($access = $expr->callableExpression) instanceof Tolerant\Node\Expression\MemberAccessExpression)
|
|
||||||
|| ($access = $expr) instanceof Tolerant\Node\Expression\MemberAccessExpression) {
|
|
||||||
if ($access->memberName instanceof Tolerant\Node\Expression) {
|
if ($access->memberName instanceof Tolerant\Node\Expression) {
|
||||||
return new Types\Mixed;
|
return new Types\Mixed;
|
||||||
}
|
}
|
||||||
|
@ -658,7 +633,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
// var_dump($classFqn);
|
// var_dump($classFqn);
|
||||||
}
|
}
|
||||||
$fqn = $classFqn . '->' . $access->memberName->getText($expr->getFileContents());
|
$fqn = $classFqn . '->' . $access->memberName->getText($expr->getFileContents());
|
||||||
if ($expr instanceof Tolerant\Node\Expression\CallExpression) {
|
if ($expr->parent instanceof Tolerant\Node\Expression\CallExpression) {
|
||||||
$fqn .= '()';
|
$fqn .= '()';
|
||||||
}
|
}
|
||||||
// var_dump($fqn);
|
// var_dump($fqn);
|
||||||
|
@ -671,8 +646,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
$expr instanceof Tolerant\Node\Expression\CallExpression && ($scopedAccess = $expr->callableExpression) instanceof Tolerant\Node\Expression\ScopedPropertyAccessExpression
|
($scopedAccess = $expr) instanceof Tolerant\Node\Expression\ScopedPropertyAccessExpression
|
||||||
|| ($scopedAccess = $expr) instanceof Tolerant\Node\Expression\ScopedPropertyAccessExpression
|
|
||||||
) {
|
) {
|
||||||
$classType = $this->resolveClassNameToType($scopedAccess->scopeResolutionQualifier);
|
$classType = $this->resolveClassNameToType($scopedAccess->scopeResolutionQualifier);
|
||||||
// var_dump($classType);
|
// var_dump($classType);
|
||||||
|
@ -684,7 +658,7 @@ class TolerantDefinitionResolver implements DefinitionResolverInterface
|
||||||
// $fqn .= '$';
|
// $fqn .= '$';
|
||||||
// }
|
// }
|
||||||
$fqn .= $scopedAccess->memberName->getText() ?? $scopedAccess->memberName->getText($expr->getFileContents()); // TODO is there a cleaner way to do this?
|
$fqn .= $scopedAccess->memberName->getText() ?? $scopedAccess->memberName->getText($expr->getFileContents()); // TODO is there a cleaner way to do this?
|
||||||
if ($expr instanceof Tolerant\Node\Expression\CallExpression) {
|
if ($expr->parent instanceof Tolerant\Node\Expression\CallExpression) {
|
||||||
$fqn .= '()';
|
$fqn .= '()';
|
||||||
}
|
}
|
||||||
// var_dump($fqn);
|
// var_dump($fqn);
|
||||||
|
|
Loading…
Reference in New Issue