无法在 intellijIDEA 的 .dart 文件中打开 toUpperCase() 或 toLowerCase() 的实现或声明



在Intellij IDEA中使用.dart文件单击F12显示Declaration,或者Ctrl+Alt+B显示Implementation不适用于UpperCase((或LowerCase((方法

它们与roundToDouble((和to round((配合良好

有什么办法解决这个问题吗?

编辑:下面是youtube上有人可以做的截图!在此处输入图像描述

因为String不是作为SDK的一部分实现的,而是特定于运行时的(您在SDK中看到的String类只是abstract类(。因此,如果你正在编译到JavaScript,你将使用另一个实现(正确地说,是对JavaScript中相同方法的直接调用(。

在VM中,CCD_;打补丁的";进入该类:https://github.com/dart-lang/sdk/blob/ea50b03cbee9971a3e3f1cc5c832fc2dfb941654/sdk/lib/_internal/vm/lib/string_patch.dart

但正如你所看到的:

String toUpperCase() native "String_toUpperCase";
String toLowerCase() native "String_toLowerCase";

这两个方法实际上是通过对C++实现的调用来实现的。所以我们需要看看这里:https://github.com/dart-lang/sdk/blob/78df4ac452dd3ba69ac0c78559f6dde51eeeadb2/runtime/lib/string.cc

我们在哪里找到:

DEFINE_NATIVE_ENTRY(String_toLowerCase, 0, 1) {
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(!receiver.IsNull());
return String::ToLowerCase(receiver);
}
DEFINE_NATIVE_ENTRY(String_toUpperCase, 0, 1) {
const String& receiver =
String::CheckedHandle(zone, arguments->NativeArgAt(0));
ASSERT(!receiver.IsNull());
return String::ToUpperCase(receiver);
}

此实现可以在以下位置找到:https://github.com/dart-lang/sdk/blob/da9697feb96364360bfaedbb1c661c20bf7a4cb0/runtime/vm/object.cc#L22023

StringPtr String::ToUpperCase(const String& str, Heap::Space space) {
// TODO(cshapiro): create a fast-path for OneByteString instances.
return Transform(CaseMapping::ToUpper, str, space);
}
StringPtr String::ToLowerCase(const String& str, Heap::Space space) {
// TODO(cshapiro): create a fast-path for OneByteString instances.
return Transform(CaseMapping::ToLower, str, space);
}

此处可以找到CaseMapping:https://github.com/dart-lang/sdk/blob/da9697feb96364360bfaedbb1c661c20bf7a4cb0/runtime/platform/unicode.h#L170

等等…:(

最新更新