1
0
Fork 0

clarify logic around scoped and member access expressions

pull/357/head
Sara Itani 2017-04-12 16:53:03 -07:00
parent 35ce3af324
commit d6d9712134
1 changed files with 10 additions and 36 deletions

View File

@ -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);