original_string: protected function replacePropertyExpression($matches) {
  		//count available matches
  		//this indicates the type of expression to replace
  		$total_matches = count($matches);
  		$type = $subindex = null;
  	
  		switch ($total_matches) {
  			/*
  			 * Property
  			 */
  			case 4: //#{PROPERTY@1[INDEX]@2?:TYPE@3}
  				$type = substr($matches[3], 1);
  			case 3: //#{PROPERTY@1[INDEX]@2}
  				$subindex = empty($matches[2]) ? null : substr($matches[2], 1, -1);
  			case 2: //#{PROPERTY@1}
  				$key = $matches[1];
  
  				//obtain type from annotation (when possible)
  				if (is_null($type) && $this->wrappedArg instanceof ObjectArgumentWrapper) {
  					if ($this->wrappedArg->getClassProfile()->isEntity()) {
  						$property = $this->wrappedArg->getClassProfile()->getProperty($key);
  						$type = $property->getType();
  					}
  				}
  	
  				return $this->getIndex($key, $subindex, $type);
  				break;
  	
  			/*
  			 * Interval
  			 */
  			case 9: //#{PROPERTY@4[LEFT_INDEX@6..RIGHT_INDEX@7]:TYPE@8}
  				$type = substr($matches[8], 1);
  			case 8: //#{PROPERTY@4[LEFT_INDEX@6..RIGHT_INDEX@7]}
  				$key = $matches[4];
  					
  				//obtain type from annotation (when possible)
  				if (is_null($type) && $this->wrappedArg instanceof ObjectArgumentWrapper) {
  					if ($this->wrappedArg->getClassProfile()->isEntity()) {
  						$property = $this->wrappedArg->getClassProfile()->getProperty($key);
  						$type = $property->getType();
  					}
  				}
  					
  				return $this->getRange($key, $matches[6], $matches[7], $type);
  				break;
  		}
  	}
code: protected function replacePropertyExpression($matches) {
  		//count available matches
  		//this indicates the type of expression to replace
  		$total_matches = count($matches);
  		$type = $subindex = null;
  	
  		switch ($total_matches) {
  			/*
  			 * Property
  			 */
  			case 4: //#{PROPERTY@1[INDEX]@2?:TYPE@3}
  				$type = substr($matches[3], 1);
  			case 3: //#{PROPERTY@1[INDEX]@2}
  				$subindex = empty($matches[2]) ? null : substr($matches[2], 1, -1);
  			case 2: //#{PROPERTY@1}
  				$key = $matches[1];
  
  				//obtain type from annotation (when possible)
  				if (is_null($type) && $this->wrappedArg instanceof ObjectArgumentWrapper) {
  					if ($this->wrappedArg->getClassProfile()->isEntity()) {
  						$property = $this->wrappedArg->getClassProfile()->getProperty($key);
  						$type = $property->getType();
  					}
  				}
  	
  				return $this->getIndex($key, $subindex, $type);
  				break;
  	
  			/*
  			 * Interval
  			 */
  			case 9: //#{PROPERTY@4[LEFT_INDEX@6..RIGHT_INDEX@7]:TYPE@8}
  				$type = substr($matches[8], 1);
  			case 8: //#{PROPERTY@4[LEFT_INDEX@6..RIGHT_INDEX@7]}
  				$key = $matches[4];
  					
  				//obtain type from annotation (when possible)
  				if (is_null($type) && $this->wrappedArg instanceof ObjectArgumentWrapper) {
  					if ($this->wrappedArg->getClassProfile()->isEntity()) {
  						$property = $this->wrappedArg->getClassProfile()->getProperty($key);
  						$type = $property->getType();
  					}
  				}
  					
  				return $this->getRange($key, $matches[6], $matches[7], $type);
  				break;
  		}
  	}
code_tokens: protected function replacePropertyExpression ( $ matches ) { //count available matches //this indicates the type of expression to replace $ total_matches = count ( $ matches ) ; $ type = $ subindex = null ; switch ( $ total_matches ) { /*
  			 * Property
  			 */ case 4 : //#{PROPERTY@1[INDEX]@2?:TYPE@3} $ type = substr ( $ matches [ 3 ] , 1 ) ; case 3 : //#{PROPERTY@1[INDEX]@2} $ subindex = empty ( $ matches [ 2 ] ) ? null : substr ( $ matches [ 2 ] , 1 , - 1 ) ; case 2 : //#{PROPERTY@1} $ key = $ matches [ 1 ] ; //obtain type from annotation (when possible) if ( is_null ( $ type ) && $ this -> wrappedArg instanceof ObjectArgumentWrapper ) { if ( $ this -> wrappedArg -> getClassProfile ( ) -> isEntity ( ) ) { $ property = $ this -> wrappedArg -> getClassProfile ( ) -> getProperty ( $ key ) ; $ type = $ property -> getType ( ) ; } } return $ this -> getIndex ( $ key , $ subindex , $ type ) ; break ; /*
  			 * Interval
  			 */ case 9 : //#{PROPERTY@4[LEFT_INDEX@6..RIGHT_INDEX@7]:TYPE@8} $ type = substr ( $ matches [ 8 ] , 1 ) ; case 8 : //#{PROPERTY@4[LEFT_INDEX@6..RIGHT_INDEX@7]} $ key = $ matches [ 4 ] ; //obtain type from annotation (when possible) if ( is_null ( $ type ) && $ this -> wrappedArg instanceof ObjectArgumentWrapper ) { if ( $ this -> wrappedArg -> getClassProfile ( ) -> isEntity ( ) ) { $ property = $ this -> wrappedArg -> getClassProfile ( ) -> getProperty ( $ key ) ; $ type = $ property -> getType ( ) ; } } return $ this -> getRange ( $ key , $ matches [ 6 ] , $ matches [ 7 ] , $ type ) ; break ; } }
docstring: Returns a string that replaces a property expression
  @param array $matches
  @return string
docstring_tokens: Returns a string that replaces a property expression