Skip to content

Commit 15eb215

Browse files
authored
Fix track-widget-creation on Windows
#2205 There were two bugs in how we handled windows file paths that were converted to URIs.
1 parent 52d2fd4 commit 15eb215

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

src/io/flutter/inspector/InspectorService.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.google.gson.*;
1010
import com.intellij.openapi.Disposable;
1111
import com.intellij.openapi.application.ApplicationManager;
12+
import com.intellij.openapi.util.SystemInfo;
1213
import com.intellij.xdebugger.XSourcePosition;
1314
import com.jetbrains.lang.dart.ide.runner.server.vmService.VmServiceConsumers;
1415
import com.jetbrains.lang.dart.ide.runner.server.vmService.frame.DartVmServiceValue;
@@ -118,7 +119,14 @@ public void connectionClosed() {
118119
}
119120
final ArrayList<String> rootDirectories = new ArrayList<>();
120121
for (PubRoot root : app.getPubRoots()) {
121-
rootDirectories.add(root.getRoot().getCanonicalPath());
122+
String path = root.getRoot().getCanonicalPath();
123+
if (SystemInfo.isWindows) {
124+
// TODO(jacobr): remove after https://github.com/flutter/flutter-intellij/issues/2217.
125+
// The problem is setPubRootDirectories is currently expecting
126+
// valid URIs as opposed to windows paths.
127+
path = "file:///" + path;
128+
}
129+
rootDirectories.add(path);
122130
}
123131
setPubRootDirectories(rootDirectories);
124132
});

src/io/flutter/inspector/InspectorSourceLocation.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import com.google.gson.JsonArray;
99
import com.google.gson.JsonObject;
10+
import com.intellij.openapi.util.SystemInfo;
1011
import com.intellij.openapi.vfs.LocalFileSystem;
1112
import com.intellij.openapi.vfs.VirtualFile;
1213
import com.intellij.xdebugger.XSourcePosition;
@@ -30,8 +31,13 @@ public VirtualFile getFile() {
3031
return parent != null ? parent.getFile() : null;
3132
}
3233

33-
// We have to strip the file:// prefix from the Dart file path for compatibility.
34-
final String filePrefix = "file://";
34+
// We have to strip the file:// or file:/// prefix depending on the
35+
// operating system to convert from paths stored as URIs to local operating
36+
// system paths.
37+
// TODO(jacobr): remove this workaround after the code in package:flutter
38+
// is fixed to return operating system paths instead of URIs.
39+
// https://github.com/flutter/flutter-intellij/issues/2217
40+
final String filePrefix = SystemInfo.isWindows ? "file:///" : "file://";
3541
if (fileName.startsWith(filePrefix)) {
3642
fileName = fileName.substring(filePrefix.length());
3743
}

src/io/flutter/view/InspectorPanel.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.intellij.util.ui.ColumnInfo;
2222
import com.intellij.util.ui.JBUI;
2323
import com.intellij.util.ui.tree.TreeUtil;
24+
import com.intellij.xdebugger.XSourcePosition;
2425
import io.flutter.FlutterBundle;
2526
import io.flutter.editor.FlutterMaterialIcons;
2627
import io.flutter.inspector.*;
@@ -1097,8 +1098,10 @@ private void syncSelectionHelper(boolean maybeRerootSubtree, DiagnosticsNode det
10971098
final DiagnosticsNode diagnostic = getSelectedDiagnostic();
10981099
if (diagnostic != null) {
10991100
if (isCreatedByLocalProject(diagnostic)) {
1100-
diagnostic.getCreationLocation().getXSourcePosition().createNavigatable(getFlutterApp().getProject())
1101-
.navigate(false);
1101+
XSourcePosition position = diagnostic.getCreationLocation().getXSourcePosition();
1102+
if (position != null) {
1103+
position.createNavigatable(getFlutterApp().getProject()).navigate(false);
1104+
}
11021105
}
11031106
}
11041107
if (myPropertiesPanel != null) {

0 commit comments

Comments
 (0)