Simplify the functions in Converter.

* Merged Converter() into StartConversion().
* Removed the argument of `key` from Predict().
* This is a preparation for updates with ConversionRequest in following CLs.

#codehealth

PiperOrigin-RevId: 699936135
This commit is contained in:
Hiroyuki Komatsu
2024-11-25 12:38:35 +00:00
parent 4a9ff1659d
commit b9d1c47842
3 changed files with 44 additions and 42 deletions

View File

@ -276,26 +276,21 @@ bool Converter::StartConversion(const ConversionRequest &original_request,
const ConversionRequest request = CreateConversionRequestWithType(
original_request, ConversionRequest::CONVERSION);
std::string conversion_key;
std::string key;
switch (request.composer_key_selection()) {
case ConversionRequest::CONVERSION_KEY:
conversion_key = request.composer().GetQueryForConversion();
key = request.composer().GetQueryForConversion();
break;
case ConversionRequest::PREDICTION_KEY:
conversion_key = request.composer().GetQueryForPrediction();
key = request.composer().GetQueryForPrediction();
break;
default:
ABSL_UNREACHABLE();
}
if (conversion_key.empty()) {
if (key.empty()) {
return false;
}
return Convert(request, conversion_key, segments);
}
bool Converter::Convert(const ConversionRequest &request,
const absl::string_view key, Segments *segments) const {
SetKey(segments, key);
if (!immutable_converter_->ConvertForRequest(request, segments)) {
// Conversion can fail for keys like "12". Even in such cases, rewriters
@ -377,9 +372,28 @@ void Converter::MaybeSetConsumedKeySizeToSegment(size_t consumed_key_size,
}
}
// TODO(noriyukit): |key| can be a member of ConversionRequest.
namespace {
std::string GetPredictionKey(const ConversionRequest &request) {
switch (request.request_type()) {
case ConversionRequest::PREDICTION:
case ConversionRequest::SUGGESTION:
return request.composer().GetQueryForPrediction();
case ConversionRequest::PARTIAL_PREDICTION:
case ConversionRequest::PARTIAL_SUGGESTION: {
const std::string prediction_key =
request.composer().GetQueryForConversion();
return std::string(Util::Utf8SubString(prediction_key, 0,
request.composer().GetCursor()));
}
default:
ABSL_UNREACHABLE();
}
}
} // namespace
bool Converter::Predict(const ConversionRequest &request,
const absl::string_view key, Segments *segments) const {
Segments *segments) const {
const std::string key = GetPredictionKey(request);
if (ShouldSetKeyForPrediction(key, *segments)) {
SetKey(segments, key);
}
@ -412,52 +426,43 @@ bool Converter::Predict(const ConversionRequest &request,
return IsValidSegments(request, *segments);
}
bool Converter::StartPrediction(const ConversionRequest &original_request,
Segments *segments) const {
const ConversionRequest request = CreateConversionRequestWithType(
original_request, ConversionRequest::PREDICTION);
std::string prediction_key = request.composer().GetQueryForPrediction();
return Predict(request, prediction_key, segments);
return Predict(request, segments);
}
bool Converter::StartSuggestion(const ConversionRequest &original_request,
Segments *segments) const {
const ConversionRequest request = CreateConversionRequestWithType(
original_request, ConversionRequest::SUGGESTION);
std::string prediction_key = request.composer().GetQueryForPrediction();
return Predict(request, prediction_key, segments);
return Predict(request, segments);
}
bool Converter::StartPartialSuggestion(
const ConversionRequest &original_request, Segments *segments) const {
const ConversionRequest request = CreateConversionRequestWithType(
original_request, ConversionRequest::PARTIAL_SUGGESTION);
const size_t cursor = request.composer().GetCursor();
if (cursor == 0 || cursor == request.composer().GetLength()) {
return StartSuggestion(request, segments);
const size_t cursor = original_request.composer().GetCursor();
if (cursor == 0 || cursor == original_request.composer().GetLength()) {
return StartSuggestion(original_request, segments);
}
std::string conversion_key = request.composer().GetQueryForConversion();
strings::Assign(conversion_key,
Util::Utf8SubString(conversion_key, 0, cursor));
return Predict(request, conversion_key, segments);
const ConversionRequest request = CreateConversionRequestWithType(
original_request, ConversionRequest::PARTIAL_SUGGESTION);
return Predict(request, segments);
}
bool Converter::StartPartialPrediction(
const ConversionRequest &original_request, Segments *segments) const {
const ConversionRequest request = CreateConversionRequestWithType(
original_request, ConversionRequest::PARTIAL_PREDICTION);
const size_t cursor = request.composer().GetCursor();
if (cursor == 0 || cursor == request.composer().GetLength()) {
return StartPrediction(request, segments);
const size_t cursor = original_request.composer().GetCursor();
if (cursor == 0 || cursor == original_request.composer().GetLength()) {
return StartPrediction(original_request, segments);
}
std::string conversion_key = request.composer().GetQueryForConversion();
strings::Assign(conversion_key,
Util::Utf8SubString(conversion_key, 0, cursor));
return Predict(request, conversion_key, segments);
const ConversionRequest request = CreateConversionRequestWithType(
original_request, ConversionRequest::PARTIAL_PREDICTION);
return Predict(request, segments);
}
void Converter::FinishConversion(const ConversionRequest &request,

View File

@ -168,11 +168,6 @@ class Converter final : public ConverterInterface {
std::string *value, uint16_t *id) const;
ABSL_MUST_USE_RESULT bool Predict(const ConversionRequest &request,
absl::string_view key,
Segments *segments) const;
ABSL_MUST_USE_RESULT bool Convert(const ConversionRequest &request,
absl::string_view key,
Segments *segments) const;
const dictionary::PosMatcher *pos_matcher_ = nullptr;

View File

@ -1164,12 +1164,14 @@ TEST_F(ConverterTest, PredictSetKey) {
orig_candidates_size = seg->candidates_size();
}
composer::Composer composer;
composer.SetPreeditTextForTestOnly(kPredictionKey);
const ConversionRequest request =
ConversionRequestBuilder()
.SetComposer(composer)
.SetRequestType(ConversionRequest::PREDICTION)
.Build();
ASSERT_TRUE(converter->Predict(request, kPredictionKey, &segments));
ASSERT_TRUE(converter->Predict(request, &segments));
ASSERT_EQ(segments.conversion_segments_size(), 1);
EXPECT_EQ(segments.conversion_segment(0).key(), kPredictionKey);