Skip to content

Commit f3e7eeb

Browse files
authored
Revert "[CQ] remove dead Icon creation, outline service code" (#8229)
This reverts commit a82aa73. This previous commit may have borked devtools toolwindows; reverting for now to investigate... Sorry for the noise! --- - [x] I’ve reviewed the contributor guide and applied the relevant portions to this PR. <details> <summary>Contribution guidelines:</summary><br> - See our [contributor guide]([https://github.com/dart-lang/sdk/blob/main/CONTRIBUTING.md](https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview) for general expectations for PRs. - Larger or significant changes should be discussed in an issue before creating a PR. - Dart contributions to our repos should follow the [Dart style guide](https://dart.dev/guides/language/effective-dart) and use `dart format`. - Java and Kotlin contributions should strive to follow Java and Kotlin best practices ([discussion](#8098)). </details>
1 parent 85db686 commit f3e7eeb

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+567
-9
lines changed

flutter-idea/src/icons/FlutterIcons.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,27 +9,53 @@ private static Icon load(String path) {
99
return IconLoader.getIcon(path, FlutterIcons.class);
1010
}
1111

12+
public static final Icon FlutterDefault = load("/icons/expui/flutter.svg");
1213
public static final Icon DevToolsDeepLinks = load("/icons/expui/deepLinks.svg");
1314
public static final Icon DevTools = load("/icons/expui/devTools.svg");
1415
public static final Icon DevToolsExtensions = load("/icons/expui/extensions.svg");
1516
public static final Icon DevToolsInspector = load("icons/expui/inspector.svg");
1617
public static final Icon PropertyEditor = load("/icons/expui/propertyEditor.svg");
18+
19+
public static final Icon Flutter_13_2x = load("/icons/[email protected]");
20+
public static final Icon Flutter_64 = load("/icons/flutter_64.png");
21+
public static final Icon Flutter_64_2x = load("/icons/[email protected]");
1722
public static final Icon Flutter = load("/icons/flutter.png");
1823
public static final Icon Flutter_2x = load("/icons/[email protected]");
24+
public static final Icon Flutter_inspect = load("/icons/flutter_inspect.png");
1925
public static final Icon Flutter_test = load("/icons/flutter_test.png");
26+
public static final Icon Flutter_badge = load("/icons/flutter_badge.png");
27+
2028
public static final Icon Phone = load("/icons/phone.png");
29+
public static final Icon Feedback = load("/icons/feedback.png");
2130
public static final Icon RefreshItems = load("/icons/refresh_items.png");
2231

2332
public static final Icon Dart_16 = load("/icons/dart_16.svg");
2433

2534
public static final Icon HotReload = load("/icons/hot-reload.png");
2635
public static final Icon HotRestart = load("/icons/hot-restart.png");
36+
37+
public static final Icon HotReloadRun = load("/icons/reload_run.png");
38+
public static final Icon HotReloadDebug = load("/icons/reload_debug.png");
39+
40+
public static final Icon DebugBanner = load("/icons/debugBanner.png");
41+
public static final Icon DebugPaint = load("/icons/debugPaint.png");
42+
public static final Icon RepaintRainbow = load("/icons/repaintRainbow.png");
43+
2744
public static final Icon BazelRun = load("/icons/bazel_run.png");
2845

2946
public static final Icon CustomClass = load("/icons/custom/class.png");
3047
public static final Icon CustomClassAbstract = load("/icons/custom/class_abstract.png");
48+
public static final Icon CustomFields = load("/icons/custom/fields.png");
49+
public static final Icon CustomInterface = load("/icons/custom/interface.png");
3150
public static final Icon CustomMethod = load("/icons/custom/method.png");
3251
public static final Icon CustomMethodAbstract = load("/icons/custom/method_abstract.png");
52+
public static final Icon CustomProperty = load("/icons/custom/property.png");
3353
public static final Icon CustomInfo = load("/icons/custom/info.png");
54+
55+
public static final Icon AndroidStudioNewProject = load("/icons/template_new_project.png");
56+
public static final Icon AndroidStudioNewPackage = load("/icons/template_new_package.png");
57+
public static final Icon AndroidStudioNewPlugin = load("/icons/template_new_plugin.png");
58+
public static final Icon AndroidStudioNewModule = load("/icons/template_new_module.png");
59+
3460
public static final Icon AttachDebugger = load("/icons/attachDebugger.png");
3561
}

flutter-idea/src/io/flutter/ProjectOpenActivity.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,17 @@ private static void excludeAndroidFrameworkDetector(@NotNull Project project) {
115115
}
116116

117117
private static class PackagesOutOfDateNotification extends Notification {
118+
@NotNull private final Project myProject;
119+
@NotNull private final PubRoot myRoot;
120+
118121
public PackagesOutOfDateNotification(@NotNull Project project, @NotNull PubRoot root) {
119122
super("Flutter Packages", "The pubspec.yaml file has been modified since " +
120123
"the last time 'flutter pub get' was run.", NotificationType.INFORMATION);
121124
setIcon(FlutterIcons.Flutter);
122125

126+
myProject = project;
127+
myRoot = root;
128+
123129
//noinspection DialogTitleCapitalization
124130
addAction(new AnAction("Run 'flutter pub get'") {
125131
@Override

flutter-idea/src/io/flutter/dart/FlutterRequestUtilities.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ public class FlutterRequestUtilities {
2828
private static final String OFFSET = "offset";
2929
private static final String SUBSCRIPTIONS = "subscriptions";
3030

31+
private static final String METHOD_FLUTTER_GET_CHANGE_ADD_FOR_DESIGN_TIME_CONSTRUCTOR = "flutter.getChangeAddForDesignTimeConstructor";
3132
private static final String METHOD_FLUTTER_SET_SUBSCRIPTIONS = "flutter.setSubscriptions";
3233
private static final String METHOD_FLUTTER_GET_WIDGET_DESCRIPTION = "flutter.getWidgetDescription";
3334
private static final String METHOD_FLUTTER_SET_WIDGET_PROPERTY_VALUE = "flutter.setWidgetPropertyValue";

flutter-idea/src/io/flutter/editor/ColorPickerProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,16 @@
55
*/
66
package io.flutter.editor;
77

8+
import com.intellij.openapi.extensions.ExtensionPointName;
89
import com.intellij.openapi.ui.popup.Balloon;
910
import org.jetbrains.annotations.Nullable;
1011

1112
import javax.swing.*;
1213
import java.awt.*;
1314

1415
public interface ColorPickerProvider {
16+
ExtensionPointName<ColorPickerProvider> EP_NAME = ExtensionPointName.create("io.flutter.colorPickerProvider");
17+
1518
interface ColorListener {
1619
void colorChanged(@Nullable Color var1, Object var2);
1720
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/*
2+
* Copyright 2016 The Chromium Authors. All rights reserved.
3+
* Use of this source code is governed by a BSD-style license that can be
4+
* found in the LICENSE file.
5+
*/
6+
package io.flutter.editor;
7+
8+
import com.intellij.openapi.editor.markup.GutterIconRenderer;
9+
import com.intellij.openapi.project.DumbAware;
10+
import com.intellij.psi.PsiElement;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
import javax.swing.*;
14+
import java.util.Objects;
15+
16+
public class FlutterIconRenderer extends GutterIconRenderer implements DumbAware {
17+
private final Icon myIcon;
18+
private final String myId;
19+
20+
public FlutterIconRenderer(Icon icon, PsiElement element) {
21+
myIcon = icon;
22+
myId = element.getText();
23+
}
24+
25+
public String getTooltipText() {
26+
return myId;
27+
}
28+
29+
@NotNull
30+
@Override
31+
public Icon getIcon() {
32+
return myIcon;
33+
}
34+
35+
@Override
36+
public boolean equals(Object o) {
37+
if (this == o) return true;
38+
if (o == null || getClass() != o.getClass()) return false;
39+
40+
final FlutterIconRenderer renderer = (FlutterIconRenderer)o;
41+
return Objects.equals(myId, renderer.myId);
42+
}
43+
44+
@Override
45+
public int hashCode() {
46+
return myId.hashCode();
47+
}
48+
}

flutter-idea/src/io/flutter/logging/DiagnosticsNode.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import com.google.gson.JsonElement;
1010
import com.google.gson.JsonNull;
1111
import com.google.gson.JsonObject;
12+
import com.intellij.openapi.diagnostic.Logger;
1213
import com.intellij.openapi.util.text.StringUtil;
1314
import io.flutter.run.daemon.FlutterApp;
1415
import io.flutter.utils.CustomIconMaker;
@@ -44,6 +45,8 @@
4445
* also available via the getValue() method.
4546
*/
4647
public class DiagnosticsNode {
48+
private static final @NotNull Logger LOG = Logger.getInstance(DiagnosticsNode.class);
49+
4750
private static final CustomIconMaker iconMaker = new CustomIconMaker();
4851

4952
private DiagnosticsNode parent;
@@ -138,7 +141,18 @@ public boolean getShowSeparator() {
138141
public String getDescription() {
139142
return getStringMember("description");
140143
}
141-
144+
145+
/**
146+
* Returns a transformed rect that describes the bounding box for an element
147+
* <p>
148+
*/
149+
public TransformedRect getTransformToRoot() {
150+
if (!json.has("transformToRoot")) {
151+
return null;
152+
}
153+
return new TransformedRect(json.getAsJsonObject("transformToRoot"));
154+
}
155+
142156
/**
143157
* Priority level of the diagnostic used to control which diagnostics should
144158
* be shown and filtered.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/*
2+
* Copyright 2024 The Chromium Authors. All rights reserved.
3+
* Use of this source code is governed by a BSD-style license that can be
4+
* found in the LICENSE file.
5+
*/
6+
package io.flutter.logging;
7+
8+
import com.google.gson.JsonObject;
9+
10+
import java.awt.geom.Rectangle2D;
11+
12+
public class TransformedRect {
13+
final JsonObject json;
14+
15+
public TransformedRect(JsonObject json) {
16+
this.json = json;
17+
}
18+
19+
public Rectangle2D getRectangle() {
20+
return new Rectangle2D.Double(
21+
json.getAsJsonPrimitive("left").getAsDouble(),
22+
json.getAsJsonPrimitive("top").getAsDouble(),
23+
json.getAsJsonPrimitive("width").getAsDouble(),
24+
json.getAsJsonPrimitive("height").getAsDouble()
25+
);
26+
}
27+
}

flutter-idea/src/io/flutter/pub/PubRoot.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
* That is, a directory containing (at a minimum) a pubspec.yaml file.
3232
*/
3333
public class PubRoot {
34+
public static final String ANALYSIS_OPTIONS_YAML = "analysis_options.yaml";
3435
public static final String DOT_DART_TOOL = ".dart_tool";
3536
public static final String DOT_PACKAGES = ".packages";
3637
public static final String PUBSPEC_YAML = "pubspec.yaml";
@@ -446,7 +447,7 @@ public Module getModule(@NotNull Project project) {
446447
}
447448
return ProjectRootManager.getInstance(project).getFileIndex().getModuleForFile(pubspec);
448449
}
449-
450+
450451
@Override
451452
public String toString() {
452453
return "PubRoot(" + root.getName() + ")";

flutter-idea/src/io/flutter/run/FlutterReloadManager.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
package io.flutter.run;
77

88
import com.google.common.collect.ImmutableMap;
9+
import com.intellij.codeInsight.hint.HintManager;
10+
import com.intellij.codeInsight.hint.HintManagerImpl;
11+
import com.intellij.codeInsight.hint.HintUtil;
912
import com.intellij.concurrency.JobScheduler;
1013
import com.intellij.execution.ExecutionException;
1114
import com.intellij.execution.configurations.GeneralCommandLine;
@@ -42,6 +45,7 @@
4245
import com.intellij.psi.PsiErrorElement;
4346
import com.intellij.psi.PsiFile;
4447
import com.intellij.psi.util.PsiTreeUtil;
48+
import com.intellij.ui.LightweightHint;
4549
import com.intellij.util.messages.MessageBusConnection;
4650
import com.intellij.util.ui.UIUtil;
4751
import com.jetbrains.lang.dart.ide.errorTreeView.DartProblemsView;
@@ -64,11 +68,13 @@
6468
import org.jetbrains.annotations.NotNull;
6569
import org.jetbrains.annotations.Nullable;
6670

71+
import javax.swing.*;
6772
import java.nio.charset.StandardCharsets;
6873
import java.util.HashMap;
6974
import java.util.List;
7075
import java.util.Map;
7176
import java.util.concurrent.TimeUnit;
77+
import java.util.concurrent.atomic.AtomicReference;
7278

7379
/**
7480
* Handle the mechanics of performing a hot reload on file save.
@@ -491,4 +497,22 @@ private boolean hasErrorsInFile(@NotNull Document document) {
491497
});
492498
return firstError != null;
493499
}
500+
501+
private LightweightHint showEditorHint(@NotNull Editor editor, String message, boolean isError) {
502+
final AtomicReference<LightweightHint> ref = new AtomicReference<>();
503+
504+
OpenApiUtils.safeInvokeAndWait(() -> {
505+
final JComponent component = isError
506+
? HintUtil.createErrorLabel(message)
507+
: HintUtil.createInformationLabel(message);
508+
final LightweightHint hint = new LightweightHint(component);
509+
ref.set(hint);
510+
HintManagerImpl.getInstanceImpl().showEditorHint(
511+
hint, editor, HintManager.UNDER,
512+
HintManager.HIDE_BY_ANY_KEY | HintManager.HIDE_BY_TEXT_CHANGE | HintManager.HIDE_BY_SCROLLING | HintManager.HIDE_BY_OTHER_HINT,
513+
isError ? 0 : 3000, false);
514+
});
515+
516+
return ref.get();
517+
}
494518
}

flutter-idea/src/io/flutter/settings/FlutterSettings.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public class FlutterSettings {
2222
private static final String verboseLoggingKey = "io.flutter.verboseLogging";
2323
private static final String formatCodeOnSaveKey = "io.flutter.formatCodeOnSave";
2424
private static final String organizeImportsOnSaveKey = "io.flutter.organizeImportsOnSave";
25+
private static final String showOnlyWidgetsKey = "io.flutter.showOnlyWidgets";
2526
private static final String syncAndroidLibrariesKey = "io.flutter.syncAndroidLibraries";
2627
private static final String showStructuredErrorsKey = "io.flutter.showStructuredErrors";
2728
private static final String includeAllStackTracesKey = "io.flutter.includeAllStackTraces";
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
/*
2+
* Copyright 2017 The Chromium Authors. All rights reserved.
3+
* Use of this source code is governed by a BSD-style license that can be
4+
* found in the LICENSE file.
5+
*/
6+
package io.flutter.utils;
7+
8+
import com.intellij.ui.JBColor;
9+
import com.intellij.util.ui.GraphicsUtil;
10+
11+
import javax.swing.*;
12+
import java.awt.*;
13+
import java.util.HashMap;
14+
import java.util.Map;
15+
16+
public class ColorIconMaker {
17+
private final Map<Color, Icon> iconCache = new HashMap<>();
18+
private static final int iconMargin = 3;
19+
20+
public Icon getCustomIcon(Color color) {
21+
if (!iconCache.containsKey(color)) {
22+
final Icon icon = new Icon() {
23+
public void paintIcon(Component c, Graphics g, int x, int y) {
24+
final Graphics2D g2 = (Graphics2D)g.create();
25+
26+
try {
27+
GraphicsUtil.setupAAPainting(g2);
28+
// draw a black and gray grid to use as the background to disambiguate
29+
// opaque colors from translucent colors.
30+
g2.setColor(JBColor.white);
31+
g2.fillRect(x + iconMargin, y + iconMargin, getIconWidth() - iconMargin * 2, getIconHeight() - iconMargin * 2);
32+
g2.setColor(JBColor.gray);
33+
g2.fillRect(x + iconMargin, y + iconMargin, getIconWidth() / 2 - iconMargin, getIconHeight() / 2 - iconMargin);
34+
g2.fillRect(x + getIconWidth() / 2, y + getIconHeight() / 2, getIconWidth() / 2 - iconMargin, getIconHeight() / 2 - iconMargin);
35+
g2.setColor(color);
36+
g2.fillRect(x + iconMargin, y + iconMargin, getIconWidth() - iconMargin * 2, getIconHeight() - iconMargin * 2);
37+
g2.setColor(JBColor.black);
38+
g2.drawRect(x + iconMargin, y + iconMargin, getIconWidth() - iconMargin * 2, getIconHeight() - iconMargin * 2);
39+
}
40+
finally {
41+
g2.dispose();
42+
}
43+
}
44+
45+
public int getIconWidth() {
46+
return 22; // TODO(jacob): customize the icon height based on the font size.
47+
}
48+
49+
public int getIconHeight() {
50+
return 22; // TODO(jacob): customize the icon height based on the font size.
51+
}
52+
};
53+
54+
iconCache.put(color, icon);
55+
}
56+
57+
return iconCache.get(color);
58+
}
59+
}

flutter-idea/src/io/flutter/utils/CustomIconMaker.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ public CustomIconMaker() {
2828

2929
}
3030

31+
public Icon getCustomIcon(String fromText) {
32+
return getCustomIcon(fromText, IconKind.kClass, false);
33+
}
34+
3135
public Icon getCustomIcon(String fromText, IconKind kind) {
3236
return getCustomIcon(fromText, kind, false);
3337
}
@@ -42,7 +46,7 @@ public Icon getCustomIcon(String fromText, IconKind kind, boolean isAbstract) {
4246

4347
if (!iconCache.containsKey(mapKey)) {
4448
final Icon baseIcon = isAbstract ? kind.abstractIcon : kind.icon;
45-
49+
4650
final Icon icon = LayeredIcon.layeredIcon(() -> new Icon[]{baseIcon, new Icon() {
4751
public void paintIcon(Component c, Graphics g, int x, int y) {
4852
final Graphics2D g2 = (Graphics2D)g.create();
@@ -100,9 +104,24 @@ public Icon fromWidgetName(String name) {
100104
return getCustomIcon(name, isPrivate ? CustomIconMaker.IconKind.kMethod : CustomIconMaker.IconKind.kClass);
101105
}
102106

107+
public Icon fromInfo(String name) {
108+
if (name == null) {
109+
return null;
110+
}
111+
112+
if (name.isEmpty()) {
113+
return null;
114+
}
115+
116+
return getCustomIcon(name, CustomIconMaker.IconKind.kInfo);
117+
}
118+
103119
public enum IconKind {
104120
kClass("class", FlutterIcons.CustomClass, FlutterIcons.CustomClassAbstract),
121+
kField("fields", FlutterIcons.CustomFields),
122+
kInterface("interface", FlutterIcons.CustomInterface),
105123
kMethod("method", FlutterIcons.CustomMethod, FlutterIcons.CustomMethodAbstract),
124+
kProperty("property", FlutterIcons.CustomProperty),
106125
kInfo("info", FlutterIcons.CustomInfo);
107126

108127
public final String name;

0 commit comments

Comments
 (0)