private function resolveExpressionCallee( Node\CallExpression $node ) {
		$callee = $node->getCallee();

		// If the callee is a simple identifier it can simply be returned.
		// For example: __( "translation" ).
		if ( 'Identifier' === $callee->getType() ) {
			return [
				'name'     => $callee->getName(),
				'comments' => $callee->getLeadingComments(),
			];
		}

		// If the callee is a member expression resolve it to the property.
		// For example: wp.i18n.__( "translation" ) or u.__( "translation" ).
		if (
			'MemberExpression' === $callee->getType() &&
			'Identifier' === $callee->getProperty()->getType()
		) {
			// Make sure to unpack wp.i18n which is a nested MemberExpression.
			$comments = 'MemberExpression' === $callee->getObject()->getType()
				? $callee->getObject()->getObject()->getLeadingComments()
				: $callee->getObject()->getLeadingComments();

			return [
				'name'     => $callee->getProperty()->getName(),
				'comments' => $comments,
			];
		}

		// If the callee is a call expression as created by Webpack resolve it.
		// For example: Object(u.__)( "translation" ).
		if (
			'CallExpression' === $callee->getType() &&
			'Identifier' === $callee->getCallee()->getType() &&
			'Object' === $callee->getCallee()->getName() &&
			[] !== $callee->getArguments() &&
			'MemberExpression' === $callee->getArguments()[0]->getType()
		) {
			$property = $callee->getArguments()[0]->getProperty();

			// Matches minified webpack statements: Object(u.__)( "translation" ).
			if ( 'Identifier' === $property->getType() ) {
				return [
					'name'     => $property->getName(),
					'comments' => $callee->getCallee()->getLeadingComments(),
				];
			}

			// Matches unminified webpack statements:
			// Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__["__"])( "translation" );
			if ( 'Literal' === $property->getType() ) {
				return [
					'name'     => $property->getValue(),
					'comments' => $callee->getCallee()->getLeadingComments(),
				];
			}
		}

		// Unknown format.
		return false;
	}
private function resolveExpressionCallee( Node\CallExpression $node ) {
		$callee = $node->getCallee();

		// If the callee is a simple identifier it can simply be returned.
		// For example: __( "translation" ).
		if ( 'Identifier' === $callee->getType() ) {
			return [
				'name'     => $callee->getName(),
				'comments' => $callee->getLeadingComments(),
			];
		}

		// If the callee is a member expression resolve it to the property.
		// For example: wp.i18n.__( "translation" ) or u.__( "translation" ).
		if (
			'MemberExpression' === $callee->getType() &&
			'Identifier' === $callee->getProperty()->getType()
		) {
			// Make sure to unpack wp.i18n which is a nested MemberExpression.
			$comments = 'MemberExpression' === $callee->getObject()->getType()
				? $callee->getObject()->getObject()->getLeadingComments()
				: $callee->getObject()->getLeadingComments();

			return [
				'name'     => $callee->getProperty()->getName(),
				'comments' => $comments,
			];
		}

		// If the callee is a call expression as created by Webpack resolve it.
		// For example: Object(u.__)( "translation" ).
		if (
			'CallExpression' === $callee->getType() &&
			'Identifier' === $callee->getCallee()->getType() &&
			'Object' === $callee->getCallee()->getName() &&
			[] !== $callee->getArguments() &&
			'MemberExpression' === $callee->getArguments()[0]->getType()
		) {
			$property = $callee->getArguments()[0]->getProperty();

			// Matches minified webpack statements: Object(u.__)( "translation" ).
			if ( 'Identifier' === $property->getType() ) {
				return [
					'name'     => $property->getName(),
					'comments' => $callee->getCallee()->getLeadingComments(),
				];
			}

			// Matches unminified webpack statements:
			// Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__["__"])( "translation" );
			if ( 'Literal' === $property->getType() ) {
				return [
					'name'     => $property->getValue(),
					'comments' => $callee->getCallee()->getLeadingComments(),
				];
			}
		}

		// Unknown format.
		return false;
	}
private function resolveExpressionCallee ( Node \ CallExpression $ node ) { $ callee = $ node -> getCallee ( ) ; // If the callee is a simple identifier it can simply be returned. // For example: __( "translation" ). if ( 'Identifier' === $ callee -> getType ( ) ) { return [ 'name' => $ callee -> getName ( ) , 'comments' => $ callee -> getLeadingComments ( ) , ] ; } // If the callee is a member expression resolve it to the property. // For example: wp.i18n.__( "translation" ) or u.__( "translation" ). if ( 'MemberExpression' === $ callee -> getType ( ) && 'Identifier' === $ callee -> getProperty ( ) -> getType ( ) ) { // Make sure to unpack wp.i18n which is a nested MemberExpression. $ comments = 'MemberExpression' === $ callee -> getObject ( ) -> getType ( ) ? $ callee -> getObject ( ) -> getObject ( ) -> getLeadingComments ( ) : $ callee -> getObject ( ) -> getLeadingComments ( ) ; return [ 'name' => $ callee -> getProperty ( ) -> getName ( ) , 'comments' => $ comments , ] ; } // If the callee is a call expression as created by Webpack resolve it. // For example: Object(u.__)( "translation" ). if ( 'CallExpression' === $ callee -> getType ( ) && 'Identifier' === $ callee -> getCallee ( ) -> getType ( ) && 'Object' === $ callee -> getCallee ( ) -> getName ( ) && [ ] !== $ callee -> getArguments ( ) && 'MemberExpression' === $ callee -> getArguments ( ) [ 0 ] -> getType ( ) ) { $ property = $ callee -> getArguments ( ) [ 0 ] -> getProperty ( ) ; // Matches minified webpack statements: Object(u.__)( "translation" ). if ( 'Identifier' === $ property -> getType ( ) ) { return [ 'name' => $ property -> getName ( ) , 'comments' => $ callee -> getCallee ( ) -> getLeadingComments ( ) , ] ; } // Matches unminified webpack statements: // Object(_wordpress_i18n__WEBPACK_IMPORTED_MODULE_7__["__"])( "translation" ); if ( 'Literal' === $ property -> getType ( ) ) { return [ 'name' => $ property -> getValue ( ) , 'comments' => $ callee -> getCallee ( ) -> getLeadingComments ( ) , ] ; } } // Unknown format. return false ; }
Resolve the callee of a call expression using known formats.

@param Node\CallExpression $node The call expression whose callee to resolve.

@return array|bool Array containing the name and comments of the identifier if resolved. False if not.
Resolve the callee of a call expression using known formats .