From 2036f10d84fa9204a9fe8fc89810353e3e2a4d74 Mon Sep 17 00:00:00 2001 From: Dave Shuckerow Date: Tue, 5 Feb 2019 14:55:30 -0800 Subject: [PATCH 01/98] Revert some bad changes --- src/io/flutter/run/bazelTest/BazelTestRunner.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/io/flutter/run/bazelTest/BazelTestRunner.java b/src/io/flutter/run/bazelTest/BazelTestRunner.java index 8fb802a306..84c7a395d3 100644 --- a/src/io/flutter/run/bazelTest/BazelTestRunner.java +++ b/src/io/flutter/run/bazelTest/BazelTestRunner.java @@ -129,10 +129,10 @@ public void onTextAvailable(@NotNull ProcessEvent event, @NotNull Key outputType stdoutParser.appendOutput(text); for (String line : stdoutParser.getAvailableLines()) { - if (line.startsWith("{")) { + if (line.startsWith("[{")) { line = line.trim(); - final String json = line; + final String json = line.substring(1, line.length() - 1); dispatchJson(json); } } @@ -204,7 +204,7 @@ private void dispatchJson(String json) { return; } - final JsonPrimitive primEvent = obj.getAsJsonPrimitive("type"); + final JsonPrimitive primEvent = obj.getAsJsonPrimitive("event"); if (primEvent == null) { FlutterUtils.warn(LOG, "Missing event field in JSON from Flutter test: " + obj); return; From 5c62aba9c27f76a36d19d882aebfa9da5507bd08 Mon Sep 17 00:00:00 2001 From: Dave Shuckerow Date: Wed, 6 Feb 2019 14:13:15 -0800 Subject: [PATCH 02/98] Remove the check for analysis errors blocking reloads --- src/io/flutter/run/FlutterReloadManager.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/io/flutter/run/FlutterReloadManager.java b/src/io/flutter/run/FlutterReloadManager.java index 0229faa02a..6dcf3a6607 100644 --- a/src/io/flutter/run/FlutterReloadManager.java +++ b/src/io/flutter/run/FlutterReloadManager.java @@ -196,14 +196,6 @@ private void handleSaveAllNotification(@Nullable Editor editor) { return; } - if (hasErrors(app.getProject(), app.getModule(), editor.getDocument())) { - handlingSave.set(false); - - showAnalysisNotification("Reload not performed", "Analysis issues found", true); - - return; - } - final Notification notification = showRunNotification(app, null, "Reloading…", false); final long startTime = System.currentTimeMillis(); From 6560a40cc5ea2c84c1d0830acc15673887c0a17a Mon Sep 17 00:00:00 2001 From: David Shuckerow Date: Mon, 11 Feb 2019 18:34:56 -0600 Subject: [PATCH 03/98] Remove the (must sync) warning from the settings page. (#3184) --- src/io/flutter/FlutterBundle.properties | 1 - src/io/flutter/sdk/FlutterSettingsConfigurable.java | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/io/flutter/FlutterBundle.properties b/src/io/flutter/FlutterBundle.properties index dc34b49db4..e28b47f8df 100644 --- a/src/io/flutter/FlutterBundle.properties +++ b/src/io/flutter/FlutterBundle.properties @@ -224,4 +224,3 @@ settings.open.inspector.on.launch=Open Flutter Inspector view on app launch settings.hot.reload.on.save=Perform hot reload on save settings.disable.tracking.widget.creation=Disable tracking widget creation locations settings.enable.bazel.test.runner=Enable new Bazel test runner -settings.enable.bazel.test.runner.mustSyncClientWarning=(Sync required) diff --git a/src/io/flutter/sdk/FlutterSettingsConfigurable.java b/src/io/flutter/sdk/FlutterSettingsConfigurable.java index 81d02bb750..ce973dd17f 100644 --- a/src/io/flutter/sdk/FlutterSettingsConfigurable.java +++ b/src/io/flutter/sdk/FlutterSettingsConfigurable.java @@ -111,10 +111,7 @@ public void mouseClicked(MouseEvent e) { final Workspace workspace = Workspace.load(myProject); if (workspace == null || workspace.getTestScript() == null) { myUseNewBazelTestRunner.setEnabled(false); - myUseNewBazelTestRunner.setText(FlutterBundle.message("settings.enable.bazel.test.runner") + " " - + FlutterBundle.message("settings.enable.bazel.test.runner.mustSyncClientWarning")); } else { - myUseNewBazelTestRunner.setText(FlutterBundle.message("settings.enable.bazel.test.runner")); myUseNewBazelTestRunner.setEnabled(true); } } @@ -301,8 +298,7 @@ private void updateVersionTextIfCurrent(@NotNull FlutterSdk sdk, @NotNull String final FlutterSdk current = FlutterSdk.forPath(getSdkPathText()); if (current == null) { myVersionLabel.setText(""); - } - else { + } else { myVersionLabel.setText(value); } } From a8065aaa1900ac4e635f2e5f171fcdf2e81ca39d Mon Sep 17 00:00:00 2001 From: Jacob Richman Date: Mon, 11 Feb 2019 19:16:09 -0800 Subject: [PATCH 04/98] Avoid NPE if addPerfListener is called out of order with creating (#3182) --- src/io/flutter/perf/FlutterWidgetPerf.java | 7 ++++++- .../perf/FlutterWidgetPerfManager.java | 21 +++++++++++++++++++ src/io/flutter/perf/WidgetPerfListener.java | 1 + .../flutter/view/WidgetPerfSummaryView.java | 11 +++++++--- .../flutter/perf/FlutterWidgetPerfTest.java | 2 ++ 5 files changed, 38 insertions(+), 4 deletions(-) diff --git a/src/io/flutter/perf/FlutterWidgetPerf.java b/src/io/flutter/perf/FlutterWidgetPerf.java index 019ba1eec5..31a1163045 100644 --- a/src/io/flutter/perf/FlutterWidgetPerf.java +++ b/src/io/flutter/perf/FlutterWidgetPerf.java @@ -63,7 +63,7 @@ class StatsForReportKind { private boolean requestInProgress = false; private long lastRequestTime; - private final List perfListeners = new ArrayList<>(); + private final Set perfListeners = new HashSet<>(); private final Map editorDecorations = new HashMap<>(); private final TIntObjectHashMap knownLocationIds = new TIntObjectHashMap<>(); @@ -246,6 +246,11 @@ public void addPerfListener(PerfModel listener) { perfListeners.add(listener); } + @Override + public void removePerfListener(PerfModel listener) { + perfListeners.remove(listener); + } + private StatsForReportKind getStatsForKind(PerfReportKind kind) { StatsForReportKind report = stats.get(kind); if (report == null) { diff --git a/src/io/flutter/perf/FlutterWidgetPerfManager.java b/src/io/flutter/perf/FlutterWidgetPerfManager.java index 7373f34004..d5e51bd31b 100644 --- a/src/io/flutter/perf/FlutterWidgetPerfManager.java +++ b/src/io/flutter/perf/FlutterWidgetPerfManager.java @@ -62,6 +62,8 @@ public FlutterWidgetPerf getCurrentStats() { private boolean trackRepaintWidgets = trackRepaintWidgetsDefault; private boolean debugIsActive; + private final Set listeners = new HashSet<>(); + /** * File editors visible to the user that might contain widgets. */ @@ -197,6 +199,10 @@ private void debugActive(Project project, FlutterViewMessages.FlutterDebugEvent (TextEditor textEditor) -> new EditorPerfDecorations(textEditor, app), path -> new DocumentFileLocationMapper(path, app.getProject()) ); + + for (PerfModel listener : listeners) { + currentStats.addPerfListener(listener); + } } public void stateChanged(FlutterApp.State newState) { @@ -318,6 +324,21 @@ public void dispose() { if (currentStats != null) { currentStats.dispose(); currentStats = null; + listeners.clear(); + } + } + + public void addPerfListener(PerfModel listener) { + listeners.add(listener); + if (currentStats != null) { + currentStats.addPerfListener(listener); + } + } + + public void removePerfListener(PerfModel listener) { + listeners.remove(listener); + if (currentStats != null) { + currentStats.removePerfListener(listener); } } } diff --git a/src/io/flutter/perf/WidgetPerfListener.java b/src/io/flutter/perf/WidgetPerfListener.java index 2a5a92ec11..ca3754d9cd 100644 --- a/src/io/flutter/perf/WidgetPerfListener.java +++ b/src/io/flutter/perf/WidgetPerfListener.java @@ -18,4 +18,5 @@ public interface WidgetPerfListener { void onNavigation(); void addPerfListener(PerfModel listener); + void removePerfListener(PerfModel listener); } diff --git a/src/io/flutter/view/WidgetPerfSummaryView.java b/src/io/flutter/view/WidgetPerfSummaryView.java index 1a78993a58..65bf0db77f 100644 --- a/src/io/flutter/view/WidgetPerfSummaryView.java +++ b/src/io/flutter/view/WidgetPerfSummaryView.java @@ -19,7 +19,7 @@ import java.awt.*; import java.awt.event.ActionEvent; -class WidgetPerfSummaryView extends JPanel { +class WidgetPerfSummaryView extends JPanel implements Disposable { private static final int REFRESH_TABLE_DELAY = 100; private final FlutterApp app; private final FlutterWidgetPerfManager perfManager; @@ -45,14 +45,19 @@ class WidgetPerfSummaryView extends JPanel { table = new WidgetPerfTable(app, parentDisposable, metric); - perfManager.getCurrentStats().addPerfListener(table); + Disposer.register(parentDisposable, this); + + perfManager.addPerfListener(table); add(ScrollPaneFactory.createScrollPane(table), BorderLayout.CENTER); // Perf info and tips myWidgetPerfTipsPanel = new WidgetPerfTipsPanel(parentDisposable, app); + } - Disposer.register(parentDisposable, refreshTableTimer::stop); + public void dispose() { + perfManager.removePerfListener(table); + refreshTableTimer.stop(); } public WidgetPerfTipsPanel getWidgetPerfTipsPanel() { diff --git a/testSrc/unit/io/flutter/perf/FlutterWidgetPerfTest.java b/testSrc/unit/io/flutter/perf/FlutterWidgetPerfTest.java index 42fd230dd0..c9c005c7b1 100644 --- a/testSrc/unit/io/flutter/perf/FlutterWidgetPerfTest.java +++ b/testSrc/unit/io/flutter/perf/FlutterWidgetPerfTest.java @@ -515,6 +515,8 @@ public void testOverallStatsCalculation() throws InterruptedException, Execution // Verify that an idle event occurs once we wait the idle time delay. Thread.sleep(IDLE_DELAY_MILISECONDS); assertEquals(1, perfModel.idleCount); + + flutterWidgetPerf.removePerfListener(perfModel); flutterWidgetPerf.dispose(); } } From 33f521aec27724f3be05a116cb7ee642780ecbd8 Mon Sep 17 00:00:00 2001 From: David Shuckerow Date: Tue, 12 Feb 2019 12:12:38 -0600 Subject: [PATCH 05/98] More intelligently enable support for detaching from Flutter apps on exit (#3185) --- src/io/flutter/run/daemon/DaemonApi.java | 18 +++++++++++++++ src/io/flutter/run/daemon/DaemonEvent.java | 7 ++++-- src/io/flutter/run/daemon/FlutterApp.java | 23 ++++++++++++++++--- .../flutter/run/daemon/DaemonEventTest.java | 8 +++---- 4 files changed, 47 insertions(+), 9 deletions(-) diff --git a/src/io/flutter/run/daemon/DaemonApi.java b/src/io/flutter/run/daemon/DaemonApi.java index 3d021110cd..b92dc5cba8 100644 --- a/src/io/flutter/run/daemon/DaemonApi.java +++ b/src/io/flutter/run/daemon/DaemonApi.java @@ -79,6 +79,10 @@ CompletableFuture stopApp(@NotNull String appId) { return send("app.stop", new AppStop(appId)); } + CompletableFuture detachApp(@NotNull String appId) { + return send("app.detach", new AppDetach(appId)); + } + void cancelPending() { // We used to complete the commands with exceptions here (completeExceptionally), but that generally was surfaced // to the user as an exception in the tool. We now choose to not complete the command at all. @@ -425,6 +429,20 @@ Boolean parseResult(JsonElement result) { } } + @SuppressWarnings("unused") + private static class AppDetach extends Params { + @NotNull final String appId; + + AppDetach(@NotNull String appId) { + this.appId = appId; + } + + @Override + Boolean parseResult(JsonElement result) { + return GSON.fromJson(result, Boolean.class); + } + } + @SuppressWarnings("unused") private static class AppServiceExtension extends Params { final String appId; diff --git a/src/io/flutter/run/daemon/DaemonEvent.java b/src/io/flutter/run/daemon/DaemonEvent.java index 297ab2c19b..da53e6f634 100644 --- a/src/io/flutter/run/daemon/DaemonEvent.java +++ b/src/io/flutter/run/daemon/DaemonEvent.java @@ -176,10 +176,14 @@ void accept(Listener listener) { @SuppressWarnings("unused") static class AppStarting extends DaemonEvent { + public static final String LAUNCH_MODE_RUN = "run"; + public static final String LAUNCH_MODE_ATTACH = "attach"; + // "event":"app.start" String appId; String deviceId; String directory; + String launchMode; boolean supportsRestart; void accept(Listener listener) { @@ -257,8 +261,7 @@ boolean isFinished() { void accept(Listener listener) { if (isStarting()) { listener.onAppProgressStarting(this); - } - else { + } else { listener.onAppProgressFinished(this); } } diff --git a/src/io/flutter/run/daemon/FlutterApp.java b/src/io/flutter/run/daemon/FlutterApp.java index 176366f1e9..483a9f7e86 100644 --- a/src/io/flutter/run/daemon/FlutterApp.java +++ b/src/io/flutter/run/daemon/FlutterApp.java @@ -79,6 +79,14 @@ public class FlutterApp { private @Nullable String myBaseUri; private @Nullable ConsoleView myConsole; + /** + * The command with which the app was launched. + *

+ * Should be "run" if the app was `flutter run` and "attach" if the app was `flutter attach`. + */ + private @Nullable String myLaunchMode; + + private @Nullable List myPubRoots; private int reloadCount; @@ -305,6 +313,10 @@ void setBaseUri(@NotNull String uri) { myBaseUri = uri; } + void setLaunchMode(@NotNull String launchMode) { + myLaunchMode = launchMode; + } + /** * Perform a hot restart of the the app. */ @@ -421,8 +433,7 @@ public CompletableFuture callServiceExtension(String methodName, Map return whenFlutterIsolateResumed().thenComposeAsync((ignored) -> myDaemonApi.callAppServiceExtension(myAppId, methodName, params) ); - } - else { + } else { return myDaemonApi.callAppServiceExtension(myAppId, methodName, params); } } @@ -512,7 +523,12 @@ public Future shutdownAsync() { // Do the rest in the background to avoid freezing the Swing dispatch thread. AppExecutorUtil.getAppExecutorService().submit(() -> { // Try to shut down gracefully (need to wait for a response). - final Future stopDone = myDaemonApi.stopApp(appId); + final Future stopDone; + if (DaemonEvent.AppStarting.LAUNCH_MODE_ATTACH.equals(myLaunchMode)) { + stopDone = myDaemonApi.detachApp(appId); + } else { + stopDone = myDaemonApi.stopApp(appId); + } final Stopwatch watch = Stopwatch.createStarted(); while (watch.elapsed(TimeUnit.SECONDS) < 10 && getState() == State.TERMINATING) { try { @@ -707,6 +723,7 @@ public void onDaemonLogMessage(@NotNull DaemonEvent.LogMessage message) { @Override public void onAppStarting(DaemonEvent.AppStarting event) { app.setAppId(event.appId); + app.setLaunchMode(event.launchMode); } @Override diff --git a/testSrc/unit/io/flutter/run/daemon/DaemonEventTest.java b/testSrc/unit/io/flutter/run/daemon/DaemonEventTest.java index 2b371333fe..6766523d2e 100644 --- a/testSrc/unit/io/flutter/run/daemon/DaemonEventTest.java +++ b/testSrc/unit/io/flutter/run/daemon/DaemonEventTest.java @@ -15,8 +15,8 @@ import java.util.Arrays; import java.util.List; -import static org.junit.Assert.assertEquals; import static io.flutter.testing.JsonTesting.curly; +import static org.junit.Assert.assertEquals; /** * Verifies that we can read events sent using the Flutter daemon protocol. @@ -46,7 +46,7 @@ public void onDaemonShowMessage(DaemonEvent.ShowMessage event) { @Override public void onAppStarting(DaemonEvent.AppStarting event) { - logEvent(event, event.appId, event.deviceId, event.directory); + logEvent(event, event.appId, event.deviceId, event.directory, event.launchMode); } @Override @@ -122,8 +122,8 @@ public void canReceiveShowMessage() { @Test public void canReceiveAppStarting() { - send("app.start", curly("appId:42", "deviceId:456", "directory:somedir")); - checkLog("AppStarting: 42, 456, somedir"); + send("app.start", curly("appId:42", "deviceId:456", "directory:somedir", "launchMode:run")); + checkLog("AppStarting: 42, 456, somedir", "run"); } @Test From dfe528a500e2a6501675ab167997128fcf7f4caf Mon Sep 17 00:00:00 2001 From: stevemessick Date: Tue, 12 Feb 2019 15:00:04 -0800 Subject: [PATCH 06/98] Reorder console filters (#3186) --- src/io/flutter/run/SdkAttachConfig.java | 13 +----- src/io/flutter/run/SdkRunConfig.java | 42 ++++++++++++++----- .../flutter/run/daemon/DaemonConsoleView.java | 2 - 3 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/io/flutter/run/SdkAttachConfig.java b/src/io/flutter/run/SdkAttachConfig.java index 55516e57c5..134a1ffabf 100644 --- a/src/io/flutter/run/SdkAttachConfig.java +++ b/src/io/flutter/run/SdkAttachConfig.java @@ -20,7 +20,6 @@ import com.intellij.execution.configurations.GeneralCommandLine; import com.intellij.execution.configurations.RunConfiguration; import com.intellij.execution.configurations.RuntimeConfigurationError; -import com.intellij.execution.filters.TextConsoleBuilder; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; @@ -30,11 +29,9 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiElement; import com.intellij.refactoring.listeners.RefactoringElementListener; -import com.jetbrains.lang.dart.ide.runner.DartConsoleFilter; import com.jetbrains.lang.dart.sdk.DartConfigurable; import com.jetbrains.lang.dart.sdk.DartSdk; import io.flutter.FlutterBundle; -import io.flutter.console.FlutterConsoleFilter; import io.flutter.dart.DartPlugin; import io.flutter.pub.PubRoot; import io.flutter.run.daemon.FlutterApp; @@ -102,15 +99,7 @@ public void flutterSdkRemoved() { }; LaunchState launcher = new AttachState(env, mainFile.getAppDir(), mainFile.getFile(), this, createAppCallback); - - // Set up additional console filters. - TextConsoleBuilder builder = launcher.getConsoleBuilder(); - builder.addFilter(new DartConsoleFilter(env.getProject(), mainFile.getFile())); - - if (module != null) { - builder.addFilter(new FlutterConsoleFilter(module)); - } - + addConsoleFilters(launcher, env, mainFile, module); return launcher; } diff --git a/src/io/flutter/run/SdkRunConfig.java b/src/io/flutter/run/SdkRunConfig.java index 18459e870d..07d571890d 100644 --- a/src/io/flutter/run/SdkRunConfig.java +++ b/src/io/flutter/run/SdkRunConfig.java @@ -5,18 +5,28 @@ */ package io.flutter.run; +import static java.nio.file.FileVisitResult.CONTINUE; + import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonPrimitive; import com.intellij.execution.ExecutionException; import com.intellij.execution.Executor; -import com.intellij.execution.configurations.*; +import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.execution.configurations.GeneralCommandLine; +import com.intellij.execution.configurations.LocatableConfigurationBase; +import com.intellij.execution.configurations.RefactoringListenerProvider; +import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.configurations.RuntimeConfigurationError; +import com.intellij.execution.configurations.RuntimeConfigurationException; import com.intellij.execution.filters.TextConsoleBuilder; +import com.intellij.execution.filters.UrlFilter; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.runners.RunConfigurationWithSuppressedDefaultRunAction; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; @@ -40,16 +50,18 @@ import io.flutter.run.daemon.FlutterDevice; import io.flutter.run.daemon.RunMode; import io.flutter.sdk.FlutterSdkManager; -import org.jdom.Element; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.nio.file.*; +import java.nio.file.FileSystems; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.PathMatcher; +import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; - -import static java.nio.file.FileVisitResult.CONTINUE; +import org.jdom.Element; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; /** * Run configuration used for launching a Flutter app using the Flutter SDK. @@ -139,7 +151,7 @@ public LaunchState getState(@NotNull Executor executor, @NotNull ExecutionEnviro final MainFile mainFile = MainFile.verify(launchFields.getFilePath(), env.getProject()).get(); final Project project = env.getProject(); final RunMode mode = RunMode.fromEnv(env); - final Module module = ModuleUtil.findModuleForFile(mainFile.getFile(), env.getProject()); + final Module module = ModuleUtilCore.findModuleForFile(mainFile.getFile(), env.getProject()); final LaunchState.CreateAppCallback createAppCallback = (device) -> { if (device == null) return null; @@ -212,7 +224,14 @@ public void flutterSdkRemoved() { }; final LaunchState launcher = new LaunchState(env, mainFile.getAppDir(), mainFile.getFile(), this, createAppCallback); + addConsoleFilters(launcher, env, mainFile, module); + return launcher; + } + protected void addConsoleFilters(@NotNull LaunchState launcher, + @NotNull ExecutionEnvironment env, + @NotNull MainFile mainFile, + @Nullable Module module) { // Set up additional console filters. final TextConsoleBuilder builder = launcher.getConsoleBuilder(); builder.addFilter(new DartConsoleFilter(env.getProject(), mainFile.getFile())); @@ -220,8 +239,7 @@ public void flutterSdkRemoved() { if (module != null) { builder.addFilter(new FlutterConsoleFilter(module)); } - - return launcher; + builder.addFilter(new UrlFilter()); } @NotNull @@ -233,12 +251,14 @@ public GeneralCommandLine getCommand(@NotNull ExecutionEnvironment env, @Nullabl return fields.createFlutterSdkRunCommand(project, mode, FlutterLaunchMode.fromEnv(env), device); } + @Override @Nullable public String suggestedName() { final String filePath = fields.getFilePath(); return filePath == null ? null : PathUtil.getFileName(filePath); } + @Override public SdkRunConfig clone() { final SdkRunConfig clone = (SdkRunConfig)super.clone(); clone.fields = fields.copy(); diff --git a/src/io/flutter/run/daemon/DaemonConsoleView.java b/src/io/flutter/run/daemon/DaemonConsoleView.java index 8907936377..bc0d5a0742 100644 --- a/src/io/flutter/run/daemon/DaemonConsoleView.java +++ b/src/io/flutter/run/daemon/DaemonConsoleView.java @@ -9,7 +9,6 @@ import com.intellij.execution.configurations.SearchScopeProvider; import com.intellij.execution.filters.TextConsoleBuilder; import com.intellij.execution.filters.TextConsoleBuilderImpl; -import com.intellij.execution.filters.UrlFilter; import com.intellij.execution.impl.ConsoleViewImpl; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.ui.ConsoleView; @@ -47,7 +46,6 @@ protected ConsoleView createConsole() { // Set up basic console filters. (More may be added later.) builder.addFilter(new DartRelativePathsConsoleFilter(env.getProject(), workDir.getPath())); - builder.addFilter(new UrlFilter()); launcher.setConsoleBuilder(builder); } From 7803ceb18b687babf38ed271d7d25dfe0820eea9 Mon Sep 17 00:00:00 2001 From: stevemessick Date: Tue, 12 Feb 2019 15:14:36 -0800 Subject: [PATCH 07/98] NewModuleTest passes (#3174) * NewModuleTest passes * cleanup * merge --- flutter-studio/README.md | 59 ++- flutter-studio/flutter-studio.iml | 1 + .../flutter_projects/simple_app/src.zip | Bin 0 -> 132046 bytes .../flutter_projects/simple_plugin/src.zip | Bin 0 -> 149834 bytes .../gui/framework/FlutterGuiTestRule.java | 352 +++++++----------- .../fixture/FlutterFrameFixture.java | 10 + .../fixture/FlutterWelcomeFrameFixture.java | 1 + .../framework/fixture/IdeaFrameFixture.java | 96 +++-- .../gui/framework/fixture/MacMenuFixture.java | 16 +- .../framework/fixture/MenuItemFixture.java | 4 +- .../FlutterProjectStepFixture.java | 20 +- .../FlutterSettingsStepFixture.java | 16 +- .../NewFlutterModuleWizardFixture.java | 8 +- .../NewFlutterProjectWizardFixture.java | 11 +- .../flutter/GradleDependencyFetcherTest.java | 12 +- .../io/flutter/tests/gui/NewModuleTest.java | 71 ++-- .../io/flutter/tests/gui/NewProjectTest.java | 10 +- .../flutter/tests/util/ProjectWrangler.java | 191 ++++++++++ .../io/flutter/tests/util/WizardUtils.java | 2 +- 19 files changed, 512 insertions(+), 368 deletions(-) create mode 100644 flutter-studio/testData/flutter_projects/simple_app/src.zip create mode 100644 flutter-studio/testData/flutter_projects/simple_plugin/src.zip create mode 100644 flutter-studio/testSrc/io/flutter/tests/util/ProjectWrangler.java diff --git a/flutter-studio/README.md b/flutter-studio/README.md index eaeea4dfb9..34e903401e 100644 --- a/flutter-studio/README.md +++ b/flutter-studio/README.md @@ -40,35 +40,54 @@ the Android Studio dev team. Currently that is 2018.2. To run the tests create a Junit Run Configuration for class `io.flutter.tests.gui.NewProjectTest`. Set its working directory -to the `bin` directory of the Android Studio sources. For -example: `/Volumes/android/studio-master-dev/tools/idea/bin` +to the root directory of the Android Studio sources. For +example: `/Volumes/android/studio-master-dev/tools/idea` Set it to use the classpath of module `flutter-studio`. It needs to run with Java 8 or later. The VM options are a bit complex. Here's mine (formatted with newlines in place of spaces): ```bash --ea --Xbootclasspath/p:../out/classes/production/boot --Xms512m --Xmx1024m --Didea.is.internal=true --Didea.platform.prefix=AndroidStudio --Dandroid.extra_templates.path=../../../sdk/templates --Dapple.laf.useScreenMenuBar=true --Dcom.apple.mrj.application.apple.menu.about.name=AndroidStudio --Dsun.awt.disablegrab=true --Dawt.useSystemAAFontSettings=lcd --Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine --Dmrj.version=mac --Dcom.apple.macos.useScreenMenuBar=true --Dapple.laf.useScreenMenuBar=true --Dflutter.home=/path/to/flutter +-Xms512m +-Xmx4096m +-ea +-XX:ReservedCodeCacheSize=240m +-XX:+UseConcMarkSweepGC +-XX:SoftRefLRUPolicyMSPerMB=50 +-XX:MaxJavaStackTraceDepth=10000 +-Didea.is.internal=true +-Didea.platform.prefix=AndroidStudio +-Dandroid.extra_templates.path=../../../sdk/templates +-Dmrj.version=mac +-Dcom.apple.macos.useScreenMenuBar=true +-Dapple.laf.useScreenMenuBar=true +-Dcom.apple.mrj.application.apple.menu.about.name=AndroidStudio +-Dsun.awt.disablegrab=true +-Dawt.useSystemAAFontSettings=lcd +-Dsun.io.useCanonCaches=false +-Djava.net.preferIPv4Stack=true +-Didea.jre.check=true +-Didea.debug.mode=true +-Dflutter.home=/Users/messick/src/flutter/flutter +-Dsun.java2d.renderer=sun.java2d.marlin.MarlinRenderingEngine +-Dplugin.path=/Volumes/android/studio-master-dev/prebuilts/tools/common/kotlin-plugin/Kotlin +-Didea.config.path=/tmp/idea-test/config +-Didea.system.path=/tmp/idea-test/system +-Didea.plugins.path=/tmp/idea-test/plugins +-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 ``` -Don't forget to adjust the path to your Flutter SDK in the last one. - If you're not using a Mac then delete these: - mrj.version - com.apple.macos.useScreenMenuBar - apple.laf.useScreenMenuBar +The last line causes the test to be forked in a remote JVM +that's waiting for a debug connection. Make a 'Remote' run +config and launch it after launching the Flutter test run +config to get it running. + +Got past React native issue by defining custom JDK that includes +Javascript and CSS lib dir contents from IntelliJ plugins. +Also disabled JS plugins, not sure that helped. +The custom JDK causes the Javascript plugin to be loaded +twice, so there's a hack in the test runner to compensate. diff --git a/flutter-studio/flutter-studio.iml b/flutter-studio/flutter-studio.iml index 2d89dfbbd2..04294d2d86 100644 --- a/flutter-studio/flutter-studio.iml +++ b/flutter-studio/flutter-studio.iml @@ -7,6 +7,7 @@ + diff --git a/flutter-studio/testData/flutter_projects/simple_app/src.zip b/flutter-studio/testData/flutter_projects/simple_app/src.zip new file mode 100644 index 0000000000000000000000000000000000000000..d9b1d339a016071f8f144e5aadf327e866cb6484 GIT binary patch literal 132046 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%0AMOCV=7% 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%0D1VYj}M@hd?Ii|!>_6h%`(JOkbKxK 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 K;!fBC^8WzmHk4-o literal 0 HcmV?d00001 diff --git a/flutter-studio/testData/flutter_projects/simple_plugin/src.zip b/flutter-studio/testData/flutter_projects/simple_plugin/src.zip new file mode 100644 index 0000000000000000000000000000000000000000..550f6d921eb299b197ae77ab8ced7d83eed019d8 GIT binary patch literal 149834 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

n8by- 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%0Dy4 zMlcME4X<*N9UbMYrXbMfLeHPyq?Qvl#(P4-B zVbx~Zio^^K9=w^Pg^6eA^j&;l>lAgaKfxCZw47Dd-hsnKX>z*`^Af!zd+-M=Y)P@$ zSLc)V`fLJtbX*yB_fvK*llJY%(XLAqhF(1X_qn-!z_n zEqF&>Sl)A4(fmG-l?cERV5@5nFpxEOFfy@}2N;>y+1u(`+S3>-DMAB*Qa@;Z{ruh> zoMC~0!7BQIfxv>_tDSm8)xh-d!tvg_3uQ}GOs$s1f5=S>{SYbd*1{sMz^;(vbxH7f zXNClNZ=Zx7BAjn6CYm;Z`imt+zf{l+MJzxH6bP~Aqr?Ry?rMi2yWBYKZNX844>=Gu z(V?y^h&ZR5Gpa2kD))CbvW|CxmOa4^QTEQBTwB^ZhDO`O$$pN_-Ys%bHwYMpxu zmAncGWCrMY%Cqrnwi^+bbHom`y85~x|CTT+;C(ZGK~Vqs!TtSa@ax(EXw0o`txReE zSp2W#k}>~v@qgRoUkOm~@&c-YLEk0Yd$KU*f7!33u7jn%v4XxW0ANXDXK!WeqGzRR zYw*W#XR&=6zsYA=plo5c!iM;ksl7ex#D^~>ZY24ISM0>h_yRu(_LX!LMA2Y4#sKSn zaZ}t;FAbR?!w-|LY`(5-vIEJ}U0kSIf5n<4sCbcG2sloWTGTRC=|LVr22j-~#MKMM9dEeZe)m zySyG0NrY*WOBrg0@(ZJ*AH?1&$<^V*V9tAE@wrAdvH?XAy(Rlp7Z-l_#jCQTf*p|t z68jFG9MjE_FSO0WfcGLUKkdJ7V{)Foov0X-$9*RI*|h|YF^8nL#&-AQ^D~?qe){Gb zM&##?oL8tRNmcRAWw`om;!~Vv7*BAWkZuTR}JgWB#q+1D3MCWY%&=bBpO0+KxiNgJ=QS*Xx;mBy7pn6(a=~-l_FWB znF&RZJ2(>G^%5!?L6aM7jzM(#i`6=n_FwXa%53%&|xOfXe z)PWuiMbM7@aGPPHzdpU1Mwv;CV&$)5_CsA95T+Z}m`m7+X-FMx@fe-~g#(62iu=Kz z7fAJ(gH1!lH8Y3~ad|;HNcf=L@!4y&32?mH7R3F=IdFZyN8Yy1dJNyz=GU({a%y7F zOY|{%C&Jc^$e2?kLh55g)z>vULk6e;Cpfmrq|K`&5l#}WP9EKvemJyJ75MkmkaceJ zfh%DgXSi!fx`khr-E$NOo%+_u#i`F2Q8?kJ+3DcPj4mfNBlwosnlqyZk zMjs2|h{f)WeDG{8yau*h8oQ&qUA_rm8&}Jgb@C;V{aLpDV*AwHpxW&B9D+jcmi*^` z$@WsZCjVV_Pf(JwTcJbzcBsZFeZ$>$ImBFLd~d+R!M07%rvhgzNdZv|o(lq!RM$#%`>ekKMKR z#x4?2x;@K>@?f}=Ui5qsy`P>v{!UZ?QwQP{XGW%wo3wfO8S4N5!AMux9IRjM=(~cc z2sp<|PSR)|!l9JYx!`y7Vy@DICCX3BmPh2stsM`Yn-R;gB;jOcgOMB>xc7Rn?#r-R zS`HD(!uNr*=U)-4b}&X)R#lW2Q+KeX7=2ZwKW&;}NT@PwjkEnayJ6mbc?WqO-&(NW zbuUuH@jcs1RYgaCDua;6np>%b2(8L|Zq;eTg{orZP-(MnG@2d$<`kNvK3?CC1-2rhnZXW&j|FKJWsQsB0zUsuz;rn9K+GiwusP~RbDwNfmmcN zoKiE%;K>30?)S9xC8_o(QV;8~Jfv|%BTC7Eg=+dV5u(EalLXfiqiExoagu9a46@u^ zwfw$TXuckDS%9TXc_(PJnpOs^&w*9t!QXwg6w1%02S`nad>cf`<5%bvA>1g3JNS|k z&&RJVA%X~c0G&`FbgQ^O$;j}jrTR+@Em_?+!uarT>*yC6`bdO|^j>V`BPWDGY|IqG zT;{~Yd-ch>1rmB}nSz=N2=l-_TLl^BWzOr0$=karno-NAvRuD69|u3rfa*4BM<+;4 z>T#;Avpw3s*M7$p0iW{U)#}cB!~8uPSp1@Wi@$2P5C2u6N=0_V`0^qKUOuA;XfX-m zWe4XX5}y!e_Vw0Mf2qEp*#qpIZ;W+UeA!S z2k77S@RxOJ8@B1t`o4!^{~PP{FZA@wI{nrD!8&z_l7jt%p024N+HQa^)&)8J*C~HY z5fC<}+xI%^V}pjgxz(m%%vl_~IwvE6`17X6ky52FaF)cnr(@0q#xV4IegwiO9-UVe zu9B!6p;U2|YH6)WNPX=&mEW$w6kpNS6wbGFLw_Lz3C^%47>`Yuen5wz>)u{3HaEx+ zcFb!we*J<$Gqb-fDe@t%c4y%AWO2H=Vi^n1yZIc?mnV1zVzpA2M_o_d64A}Ww`o;s zd)Zy!iy!*mcIcPMDoDabg!QgtF5eL&oZnNKn5Cf=jkWo^(f(J9mG-}G$auU&R2m&h zz~XpSc5#?vjB{&AX{Zcqh8mH;{t^;oyPkX$3?mEMJsR;ztoiWOT9-q?&aGDMgq zmWItHlgSEDOD9LY7xWub^YM>Ko!Jwi>4*?_iqh76^AHYWtu`R~Jp@_3R`kykY>|01 z8np-Vc%xF8sOL2dewMxB1oSKD^_3DsD3il&;!Li_;RV9L` z17;J}ndyA$3!>6rdc9NkPX+B-IuG%~%u?`}Tl(&90NW_!ZdWqKZf{sZt4VYG$>}vv zDZ(wjpAKVFulx+P=2C#=`RmwbYrm%wu#iJ5c78czjf7Iou|>q#KCv=~Rj<^3{$xve z8-?Yb3li$Jxj!5OEd+b>nD{CJy)L)rnr<>&22%hF6V^v(y6?+`PUj1j*cmG)6G{^}c` zZ%<>b=ltvIU&)&0zmoO2hMHZTD6(gwSAg&|f`wC4_=i)dOLKE*m=qH*b>7UoGjl}M z9<*5oav+CQ`stq@buiJ*#JqRuW;{#C1^|HJ{uMy!@umH3J*_Tf0AXUo-RZ}v*tqqf z#A%p|MQi5%((UDG#c14$JHR>fxSKWm0Rka?ReP+Zlj!8G5dpL`?z--2sJ-dz$^OQq zzD5~#Lp{X-0ct3??mAArVjky1vt!X}4=5)_<0{-N;DKhfvUjP*B&~8gE$rA7^ec+a z{$r)?^LWq~I;D&V4oIJgiDC0Zqpqw6!K7P`hl*q;K_8t|>3Nfh3EES^MRlV&%)6%w zT)HEBRex__FZwe^e_-`0mqll~&My~6-5qwRr>NHWgp`FUd_&feVK8=md)Rd5Mxtj+ zCK0YUf!l#&;8DFb<88)tNM@rYh9B;nI7o!?OoZ9%Pn^*P!5GV{&hqIf; zw1*U6pzU0F=s4ycUF!8r>UQ=g|H-lnNe1-BnKtQV_FcBzlU%t-wmdIfOS3tNi8G^3 z;?NSFcE`@{;QXNDku8hkF2g~a>j(eFIdZ!`8eTYrdz6(;247VKUGH~vKj2LSoM=Xs z11^Jvla|sb=S*xJxNu!~jV;{=J*E>|wE=pyCFQ0;r{WiUsNOC=<*W}bbkuFFhy;Uo zz>&wx%bY9FIk)bE9<2^=PBvpRvIoU**Y$#IR*1fo2X58b5U+0$GPNtpA;ifcmacaTablhibI_GG zD$y8$==H9AehfVl{Mh>p*JnXz>NIui@EotR{ix8Z-4iBEh-~o+Kvxs4_(Ab+Zgcf8B3RV_my>OKkJYJcdk^wM<4ZNRm1B+1YRb} zLR9}~_vc0cfBFQDomCZT#r*`_cCg!fQj6lC%fzhH%jOCfzepu5taNDG0Y}gP6@n~aQdO*!DIjvz7|YK z9MQQ4wL30Xm4{HraXKrxIK8Xj`AMvc!a>9BL_ps}z zjikPi%M>E{Xw8!lPT+xl*HFPfYwU@k9Y^Ku)}Bz1l4tjkU|~%F6!Er;4f-KqP#K|n zP+S1^{CS^2;oFMxD9M~FlM;oE0pC^0t;MVx%nriD^<+$-NlOs3LZr!*)LQIL z!S#6neAaIe3G70lcB~nNm32#FubON%?nZN+Izh#g4K8!SnvQIHz_CWL{A23-k_t>- z%n}KGyvxiHhSan!J~3rOngz^mczAN9tm4kX!>>zy$+6jl^o2WGhUVreSZT?WPFBk6 z<%^LLk#r~ai{>0h5AfA}4@8bRdeTWoK(@$E`1=c+k`LT=(9l!md|=krNFcA|%|fV%U_MKO%f5LeGrlyLE9_%y`<(*fq?z z1e;+R;(m1$4h3ts*F&(D4wE5v#Lx=jtywT}8f-yo=O7fHLi1||bGZ!_6dCUl5J5tQF-~$(2#0VX(nv(vCGiXB2TY%~<7* z*J&D5_`MhVa;xbbo92@Y0YNrG+<6#SbII1MU53+k|Gq8NZZk2^%`GG24?0I`%TC0K z?CLf`hJ*O^WGE~++P75qp~Gz5^5rNJ>LqxpXl&uWvW9NCfSoKj12Yhkj#&+pNbCXH z#Ftvk*f->2Wv0ANV$r3V1;L^IDk&11)L%XO(};8}PjV9q^8&LNcY?*Zjq=9Dgm~w& zNh8P`pKth^I~CF<7bhoa2T@s}0QLgTj}`~B3hJLGWO}bmvfVxQqDGe9L{a&Q8iUolfWvre_RP z4Xnssf~=*Ldim8VPm%%DY(gujEt{0Xd>q}OqFAS*{5#_^-_?D!j7URyt^MZNz@Lxf zq`AkYFiuMYi9b-}`-5D-(HI=)?K`hrLp6YF^p+A+p#G)YOJ zcO;4MRDXfWB6&cfh~-8G+~rN=mar&PM;fM<>mU&+MGrg+57ide)!Ij(qCT~9DVB4l zWPiIP&h1bh3;2jKX6p07H?-?br_Eb=FqDug1<9FV-jY}N!Vp1%dYrWXBP=qlsBfS{ zvX^6WwLjJta&@vSUrh1GO>$g5=E%VKJkox(prBIMDP9=&o>ubF*)D(*!Jrd)K`8}@ z#N;-!T3gD&qbe_}LJI~TV0nf(H_5FhD@lxS##%mKF|3GSN)l}S+Ay(^mYZ@2VJejKK z&=TKSReU>VChWL^qy*^ox+y;y|J9wc?G29y)5lQ+*vn%A1GItU{1Y9=@@V?2F~p7! z@M0<^xsgiLHZ~pu)Ma%oDZt3R*3Cq*23X3r7!9VW(9AkjWoES-CZ|NYSw@y7)1sLs zTRVu)vC@fbr|cRlDSf)CWZ-tua6-Z2YQy{NaiUvLq9~pq^0BgnUV^(dzDi2X11SX2 zD(o3qV&#o8?~nhnC_rjV(uI??hLIDMGI|x{I#RqPj6zT;}`|2_IAf0S&=3U%6RLzPBVm!DeE9CC)p+@hCs6ApN zToju^(v?CeXxz=%f9@J7inw15iiwtWkA+%nHx5lba}#Z{@e#lTPb!_q2m?;N(3<+k4^_|UMpn5 zjfG$kw^BEhm7UksT}SL^Y;`}rim!g;XN=mr55b#L##$OU%)oMVaUbM1Q=xh-Y?JR_ z&Dx}p+a^tmLN@;-YCI0f0^ zDO4jXK%>drK&*WlNz^(*tVjCcg^|}H_tWf563xK+3nM)Y=}-6S+Xnnjw7o^&m!DeE z+V?hZmABvT*9M^_WLohLHmaW#9E&wQq-(qMINaJCxjWiD zesk`zYrD8aE7Otj@&`=zmt2AW=yRk0?_T_z^_{G2&Frjo^#T6_H=Hi3k)ho?nw0zt zQTpEurEg_v53sbid%ueQb$kO|d)>bRm%s4@*40!Ejmwcse5RZjo2*k}m}8Wc7af(^g`T7xp`j6#l-`$@^`=m%Rsu4s1`Szm1{~x=6cqX_@kYmG zrK^G{#c9QBtLvaDrY0q+=c@oSaWrI;^T3u$;gup72XU_85Sji*W4sTjZw#;i*!|1V{^GNCU;{`6i*6*$yklOV?|8xQYcKr? zEBLz={cSXP2g`S__WS?+W%xf%a9m?c<2NUGuCi&BMu+HmsqN#e&0lY#NtQ|pAEHQM zQCPShC4x>fmsS%)PkpT2$q3;q&?dVNNF9OQxww9OS$F#MfS%^h4n7nP<9QJYk$DP) zASCGGezCDRzUg60J3#hE>Fy6E{b^7wT5`Rph8W46c{JT_@ODBtvuwS8f(5JHX>jF0 z`ygH@PBuq?XEy;^3!BqLu)6C!{`USD1f|lza()Yc&E6pF4kL_=^cd0R?4vjJo$GH&T^JcT# zIyNo>iL+Hq2Y5e-rgpR^MVxP?)(I(eqvovbp)4R|m2t6 zFsV}ej=rkG#@e0Db<~(PqlO{j9um`-&GdPpu!mhR(ov1A>JaXl4}?jxnlg-dZqP3? zYsSfjE|ZdQmZ_Z;oh*tzk#pUn+0l~Vk?eMwEa7p>6!3%)mX=8_G0fj9vu8S`Ff;%x zN?&HdKrt2FO89z;@zeo$qCgaD#eV*>~P0e+K@(Ra-X3847v}s0 zqyL6K{su?~zxPJ`?xX+JrRjSk{3pE$0`we=-g)m`o*J4M{lR;`5b58b(h3t}5)%|s zVoI_wLoyT#2x8RYGN0w3Xg-q<(NfA;kB*6bUVt1vf=D>nFF+%xyOo!Z6Q8}MjE%d# zo?)0xXpY}DY$*cS|0p4^5N+_M(3f8`MX+RymV2M&dmR`c;(szz`FHosuZWNTFXkF5 zZzumTOyTclTlhX(CE~>VLi}NnKjiq|;zFkhJuNxk{UG4)fh7MZ$N%$~-W^K9wz?L8 zU)t#(VE8(~O!NXIpiO5repD=pjTA!rn^nQ| zs~DuG5^1Z~8E%#ePPP;5UwmnjQS>?OAuxPI4Mqf623DP?@wP)2?eJd4so$UuMQxNZ zP%MkOZ3C^dqKyjJ5O)T-Vf+9nM5la1?h!~E*m;>y>>1J@DwL!NuhmtfWhKB@6n&Ua zHM+#4LM_q;UPV4>NU7&ZD}$QmUrSR3`TH8A2PB9jKZJI-%1KehT1wKY@`Ir5OK!0_i%az*p{ zp>ZI_mqLlu+>tBLC+fNqRUh!jFvpdm^=Y~31%F6mT(UW*jVq_Am+-UHmd<@TNp?S? z6J}5e?(UlYFotn)XwS2G&azLa0=Qi`vu$`2xuZwQZm>`B9}DHdI z_7~N(syRNlCWL$_usZF_wtbW@ZYcn@PyM=Z(iQjkH7N~HN4@`^B*wz%IqH1rYTHeF z-c~L=!V7;?=f=l9y_PD)D(qgoBl58`t(#yPGvf^t83gAx0!LGC;A&m_Z=&Uw-apee zJ%xCGCzuTd1oZJAc39TRz|h1T@K-(l8(9*dBw4QS@%UwM#=)m%z51;9+g!cX7NjF(aY3<&OuLm_;Fu!dz z3`1rcs$YVv1Zg(%*nxPGH=eO#Mb69#m5fD^6C20pcubH-zYYSNcl^izb?h-O79@=GI(z4zH$KkvcV%4v);Q=jr1c=I(&Vy~pEd1l6q z9`E1mSh_l7eO+JEZhxi|yTGHty%+`=;4QCYH$-FvV<;=wONG;21;$r#SF3^wpWI@y z8_oH+VUmFE3t4mE%h>zcOJTODlV?a!K+VC+5;7_fQ&U4CopyWwXa0~)7+~pS%c*O3 zAGbQ1(!K^lO7wI;CI%c9H+HOPLv4f35rCeNMKe6yHritH}Y76M=)5A z6uS3EfY|~!cT+ms4M>E;#IIRlP0MLY-?p+p>O{eGdI<0VHmRhVnjC&|^qphmB@N(u zs?Q(PbaKHTr#Ga)Z!HhQLOD*+9LO9>5F}` zRHf^pQX>W9CpLSr3T#%_$26TYBh%@hVb-t#t;}XCcnmBGb_kRznYMG{f%A;D8KxAO zqoiAvGrPcc+*TE;Q{B`*62Txe0(php z=If)d$`n$>JsbPYYRohhqF1EEsZp~C$DXslOxjN>!B4mq^HJOQ4|h+BPCl;*3@j#Y zR0`ieEq-llzsEi?5_YFB!N6Qv7FDrA0oyLrl@gE$xT|c)lB9+6ZTDdBiNtlAKiOY#v=--n@x`8<+slxp<8^iSJgwYjkAtSqz-x|oe|MV`e8QYGtbLHiSsfnk2XL}K$)9-v11?oGJo z=8S|5uA#35DUL|!rAL%40c-Ncd=ExSJ7qJsGXOxEQ-X@bqUvL`hR2acq_>HTSdoS0 zf_bs#mahgsnTxT#owoIl)Qg3^ApVMJ2fIq9q4FJ9?0cuO(pxj8Ab;sdEeD!PA7E69 zQt9?CUzKGox9-+fc!S<+{z>_JV)f_+zeEtqtb?B2mlh_&JZQM19?n&QR)2|Kx}=;v}qk=-|9BUqZ=uVAk_-3QNEVQ1iK#5Ti8ZjNwKT z2b50e9_}S18VN|5=JXZ3w9N-2pWD9HeO{8!5qogB4`rmo6bG0c`#i7%cMSrMp(nh@{ea0m$jm8}Uqhz{n#c&)=%PGP zoEG;x&(7lyx1ETjeACdmQ4jThEq6BtO@S@&hzOlDI^?m2pb;agTC=mn94J&PZb zDfFGWbN>7Ync_rFz8d@kU5>=oCaab?VHKOwJUC7YzueD~R(Vx*k7gUW-6@|Mhjg2*)^w+s{8 zEY=XME?57|yc)E0TD1T+;o-6}+!%AK*&$Na>1PuwCu6_opMOYu?oT6eknrVbt8bPNXQT#Olc*#+d@9k}! z#I0ZX`yI1JjZ&uEF0@iuDUvZ)d0d^H@yldUa**J^+U%11 zaNCOj^VJ9R!B%7B=Yk-lr8>*3AWTR#QjP-DR3$=U%Q8)7lcdc|B;=<%&;28;yxPse zr11GHIC<^+yjk3F26dOUnm>LK%R!V~Ud~<&Yoi-P|B;0B71xy1Tok=D#xBev{84g#;@<^-We&Vh0TxoZ=ZU8xd_Y+eJ4w&yt=ca@Psf3>*rmDkw*E1$y0!Qb?bSwkfCKh<_>E=>e#CR^JyD` z&&+2nCbP2`9XtGA@+bRqvLb%&Z^5FLM03d(rBvjRZm`js!~=1FA{c)sY@z06 zaUqPpq=VzWHpCzNQn#LWEpd? zD9HC9FXTUoL>eO#dlMr|E8D-=z5hf8Iw-DMuF}DI+^aMnX?TmO-UAENmgqEED=1DIWFL|~~=cv^;Fik7YWxRPS~Bs<|@4rbyn z_lVFBSEyM~KHQ+4F%Xu5k-PI#?!0Z7LN^)~N{q(t{=|*6K>?Z5hB9^8!FHm$on3A0 z+c1~fhhsjAoI%2U%Sv9Znp472!*auLJ1Yn4e6xFNU*a$iAPegbge@+JE4UnGM6%XE zl!tgwVKqOphF4Tk`)Jc8HgMsGEjD#RX^+$ignA6|)X|y&kuw(*VDp_Z2=e`@%Y+vW z6UwxhuzpukM@e@q?#|we4PDR^c0t?~u={la5jX`nftzAvc(z;QDCJ=oM9#0+B~AQJ zf%4~S#7Dd35D-TanhmcYpo3GeqO!dRXSWi!o%Ua(dvTot&m2K)gIEntP(G9@7A`+x zqP(`OqK{t7Z@AI206R82={_gAKYEs1r{uDcOM42uYQU4fjc;SUM7?M{0In9@6X?Gs zw)D_N_kddt$rE0DbB>(IJRUT+$QWx&NKNo~a+Ez1*=1=#`=S-jV&Eso#9B2z+w5aL z1L)+=zNl07>c{epujl33#W2|`yeKI) z2Y#p((cO2GyQ3S*nX=aR@MC*;#+Aqm6Aos<5Eg`}1y%Bv)j?g#7^vCt@&n>Cu8as2 zW(he}w+~gHNlE_)DZX)vBK9Ha9OkmS@*ufPF*$?gq_o#l>E)}3(jjcIgbo1P{9&#s zLLm7htS9m4(1$o$pUdVtfboFk*69toS-p;s8azgfnRm)Lne>(#7UD`~q(@_10H&AJ zm{5CA^rr_e`mdvIpA9UZD)mKdcA7IiM%eL$REO{tn&|fc>wYI ziXrM}|8aesXBm4d7svg9@v-4hc5KS5R6CGlrv1 zc!~xHxzC+3l9MfwZ-PU;6B!}O$<&*)n}DH92(8ivktf zww6xO8ExLCkF^~e9wzx!6<(F|r3K`#$+4&TXH_1)n4b2#^(d((3;F*l$w zveh;C4soMoNQQmu>g4HJ=ALO+OG zOfViV<4F2z6c`&H2_i2$o-Z!i;>ZuW0Es`aNhA~la{>|YtzkuajXASvbydRi0w^gW zn7Q=~MJ=WBhPFkQf%2}r_vucc$sWe)YhLspn1P;ebQ{OYE$Iu2g{RklnA+m1F_9bj z42z&Iew1jIJRa&D_)w2`23Z-Ct}>9_+K{jcA-xO3v~9-v|8Vz~QFSg!*eEW+9fAac zy9Fn>ySux)yX(f?gS&fhg1bv_cXz*J&d9m*otbmye*Z3u-fQhYRd2ujbX8Z?Q@z7L z;!VE8TRQla%c1QBAC8I*mQSD7ijntAk7FeUiPC@6dLUC7Y4@v&X)XgJru&f&?La)k zTI3$6B&E|`kq9_&+`?I(8T()yZ%nBK^-3*S6X4)bH zy=Y74SvPN+on|=%L1>dZm^s@Rp?A?EA9vQTg5T4|iR-*{ETGwGDI2uGi){M9|Euz( z24{ZyBz6|(2bg0mrOmp{UAeGywDJYkpq-mzc3;6ztYPP>xCD@9G#TjITD~S$X4oq% zfKp#Pd#HYx^uUqqm#KvseM^cVgJ&6fsjWmMlq2mFxKD8;_QM>7bY+5ldk*qHac9fC zTwnYx7kVs{O~@HN*H|S=j=dZdIqucof7>dwXP}u*WnoFrmx)vw^kFR*IIFdq@hzAbSN}5hES+q&VUMGbQ*sf`6wp7TOEf5 z^4n9S#Q1Y4l)maMSe>++yIE+KnjS6G%3YqPibG?uNrmj&eC<50%`@~r=m z%=?>nl+?8{H8Qk!pmF(K@bd?W13?*HD}Nr?);%kojEwa>CNezwMn~G)X|HRr$Pm{-Arxi~rti{#v779YBA&K!3dS zzfThUp;)`WP+k6G(ZBE7`;Ve6O>Hc7ZKy2`Y)t=j2LCGOXtj$Lr@X`K`}^ShFA)3N zi}^K!->Wgz*S7dum+*TD+s5j*3fiv%&mZ`jBiM8My`9)iJsq9(n`;|rkSPfKkuF#w zlv5ikaJg9G3MAsL2UFsmP{Cr@Nb(2K;t!e4p$Emh#i8U0fu!=5K4ITMJoq$xzv$l| zN9S^XY4ik*ABSEUNr;Q5lKI-j;k7d=ZJHQVS*-6UUOpX6}{+*@3jV5BLRYL8|Txgk{~>-+jr z#xoz12=)NZ2n9t(hKY%JJ)YI!_4aVJx8~3DTHvMo%`ZQbCXxWJe@%;xe8vEO-L2aH zVL7LuK+rtlp8fT$a`&h;?FVCH0!P#3bwY-+vptd5+f|pfQ!m@mo%f~r@Yg)b_S5jn z?XtGvg+{HBzN{O!uk*u)CutQKPLIv|ow+MFIke1LMG62nj#H>HDl!2(Eo*{@xP$X7g$4MGMJ0z>--ZR}hjns^ zd2)%ha)k9Y4b$@{FT|rGhnY7gd@6nd8r`uh%j6IcLU#?B!B5#t&uV>>b( zI~x5<3!Pg_{o6A=_w^bw?w;pj*uzsl z(g1tugBRy?sV{StUT}=T^EFk^mBR}k(en&$+T)sK5fw~-#(&Gk>SN%2C~6#9Q`DYY zVz@3Lt5w-M;RL$=;$K*rHOyWZK=NPE{rlSWf3&FvcDl~GdVkqx|LV4`HU{*?y78{1hsS{eM)fBy%YY8fpl_k#{L@Qy9;oQvr=St`yB7``)1 z7PtOlJqwUm7cjlWZn^j^LU>KYZQQ!?EfRRFXVd<0WO#QGh&Tx{ODZGfW}!XRbL}|u zC;BSPSDJ6R7_5&x->{acQgh!3R4zvlZKSNgQb5F9aZrd&mhAA?`IaGQKM2wfqEB}& zB4l7G7M9m<3WbrSVXrmeP)lhiiXKO#wEN0&RHAP5HGpn`BlxmkISJDQkK8gOvVk^O z&y^oxa9zT}qudkqe0Lj5niA$j`UX|pDIzg@tzS-2;b{n2iBu@;UEXpVdU5P{0Labj z*IttAAf0?|4q~XV8qJfURY*aQTw^?)Jqs^O6QW3Z)FN|^G8hN4M-R>A$0Lze|%=wbhd3_IV%_|3I#SDNSP_@+-Bs!Jd~8F&ZGF3Z{$){h^1+)3w@E(ZR> z@b{Vhr9qQ|E=I<~b_fj4{2YrWq>!q1NP)p*t06}oRs)+L)b;*y90ly2 zu2K~R3L(Wwhtf%aghRCM0*e#Z$%d6K-w95Nro!!K{;_GOiyC*Cp;Ht1G{pu;7#gys zlOGySRXcMlG!7<{w38B})n*iwc}!F%3j}`5bbS}J5vb|c#sAXvoS&@I89V#gV4m$e z-=ICld=V-H*VXGdKdtGVQv>tTLy0K`HFHV>y1Sg9>5h0tgaQ@=b*>4MJyH7ry*QD2 zk)g@c^doH0_A$C;27m;=<^oJSayo!aj9!??1qL&5A{MbC7O^(7Seuzg>zIny3Tsc%AU*(~;`%Taa-ywUg0Y;-{QPmIV!rHSziRJwv745+!3)Z6u7jTiMvv z5>=QRUFk9>FFsm?Gla#w8HVs|ZLU56}t zv&UQ|b!D;xdhilGiBaMY9p2w2X=sj_M`&lJLK^JzEX4~y)DyL0?kTGUEO;VkfW3WAAqqm*j0pi@W~;EOG1VStMBa zq$Z_e>UGI{8@*u7T6_Ru_+FUIq>Z`IR3zr<2D7U4x!(W88M%+f(@icLKw646dikV$ zqnD2J!wt%tYRtuQfe&VaJT_|=%>GbdG^X;Ci-JANTiHFPNaj3@p#qtfGz%>mv}=@7 zoxHJH_2f641CM?%5Ek4g^gp&;){JZuNw2cMS;!ya?cp!}?)t z?}p0LLkxosjHTq>4!Q{Y@f7xFJ1qMvtQ#-vV;Afr0W5?rY#%-B92V^D10ZMvP;db- zf(Go00+bE_b14AkMF2A!pn)fT*d(dnM0;RgWn^EadtYH_U!!YZu6JK;bYJPmzS8i% zQvbeI|Ndm>{^YWP5@lEfOejl!TtHs{rMmJ2m);YU{8SW z3&0lz6O@zzLP`%dbpZ1V^!BR`erh)+Ljt|Q$A6rqdA_{=jw`x8E8?gT3(Rg+sjRAvyy1rAte~?((z3kfBah_+ ze?3~%tP+>3`h$YyEMxsF&$R|_fEEz{ATo|vZIl!pI0U7)XtXw+zmE?;-wzMO1@G7A z2S*gzj`#3(>dwIywz%o$me0+`=9|b7KO9XY9g=e4C@`m-d_cOIng%@1dHw2wjyoa$ ze*fD8UQnD`*xDLXJ(yTP45IV-x#kWHx)Y;6)@e6{VfZ6wapcfxUZ zs5T#NofS^$eO!^lGyl*`^TsZ`Zlu_kGdx?Xalidt%I1kBtLa|lY`R+KCMSx6{m$c& zu(j4K@~CadTNB6b5T$VZ=+LD`w)L{!$T&Ftrsv46S@y-2f|k~)V4aGPcKot4 zzF^0e+;W^y?t5Y>7A^vM#)CjDN4L?MDaKp(OH!0JddAK3^R3TpX83JIhsR^SYPGoI zbIpBzZy^y)ySvwvp!oypsG$AJczER~8>#KZ(nSFBw9Z`0hej`Gg<}b^6^FQC!c%d_ znn-~6j5v8z5$$3<`seD>1!2mYcZ<}V`XXbCJNknIH>f)KAMMZCq&L`f1 z5h8^@DFVC0$Bo{Mw2reX94`8gCT8DI(Lm9TSdxt6XABak4KBps9F5erug?~iJ&%VX zNUdKvk%^B_Q7;e1N}Z<|Jh+7YTYFe4U9K)?S)M+2o!3NYs$E$vk#M1@wr-9}T?vdH zuxO~gEi2wRoSe5`(h56XppFabhW~u2q>?w;lsN=K4(BRm{i_HC z_yjTFiL*C*mDvGSpQ8&Lji29b_p|0_xW~ctF=j7!93+NCC+qg56{jZ@PKlny{DtDe zM_FLO3_y6HRD@kw=4``SodjD%8TlQy%B+zpCvOi=hFd?qSxY0TNEcR0j)Ph7q>bHf zz6Nt|Ib_sh%d3bxX(oihjWA_TaEYIEni0={anvH;oCGR?AfmXB+VZwR@rGkOs!Y1j z8HUaW)6bx_`7XI=Z4a^mn6O*vU7|s`TU0jNOw0_&KGI` zBDOW=1(8N(`DNX?NZ}myTbat(mk>P&O>c-ce25oB2!BL~7EU2a79na{p;}gV=*Jt{$ z`^JBB9PhaohJlLcVnFsZ)(<1Ppiu+Zv|dd3_p4X|gvn)cDaTjI>BGs(r72&JlG{F} zw59bhJoeTWilC0hm8sAuwn&xO);e431`G`i4i0y|TQ$zgM>X!F`ig;|rZY|*42FxhSK7TF z(q5{sVy`t%Ti;(A*J>^9^+q@3vE$FxlF1+1`+}@nC3qvFz6q>T1@rZc_uOT`Y?vo^<)74BxPc?Z2SIWa?Ze@PjGxfw7p!Y{wK#KMDpDhsZz?|%E>Tq{( zcDU*bF_}cINn~Oxo4L$8r3~OlV!qKdZ7B&|%nk1$OCY|iY`mPuHdO#CL zq6p>PLpbKrIidy$)e|4AXfR+2Jn#40kPYMonzae1@lEG7t~}M5qVB8@n(#{bpufz6 z?z_w?uM?_!*vSlq;tqmFOJzVF8K-jk=G-;ybt`Yvcth)1odry?pm*gKO)3i&KsKbH z*XwHA+3ff9)jbyk@~LD);eaehFH2XOcxvQ-hBu$kav}U^u0(Xv2`MLs2qcDDKGvdq ziJgcfrCPm}p?KhU0UN?ix}A_FM~7_kN`J(-?kQ*bxQvXeyf4jU z1d4vBIO@qFjcqNR&JM0f5$Q z9EJ`73!MH>g8c;O%eVPV)T9%rw%L^#HVL{i55DAF<+pi{IQ9ee0!Ml*=myPOABNGS zdPn*r)$#ewYWW7Koy2zed-y?3Pcwq}wL{0aY&U+kZqh`Q5TQ>{ydl{Q_0gU3V_5}H zQ)%F_o1VdHW7Ea2Zv-4IwI9;fxyCa_nQ8e^H+K0h>F`_DhItYxJV zxo9LI#i_0byyjITOr;RXj@UtdKT}#o0TP%RZupwkNWN zOQ6M_lH+?5iNEaJo2ewk+wYR8|K6|l`wpu=^l)anPJeIY{0~hg|H|Y2yKLe=^J;&S zZEF2n(d&N}|EE=se~35wi#=$+mGJ(37Qer5_dma(_gVZy&2I$bzxSj5ms$OGnERzJ z>^sjQ<@-Ud_1((J|J9fF@9O^98uWkMvi$2k{Eg%M>tX)jqUDI_uU5aZ(asru0|v%2 z@H!4=lU9N;uo+lsP60!)ypy~UpPehImQ4NfOfX))dZDfzRXukGb-HLSX$7b_H&_E; z0_6%$IETv%#Mc^D4;meoe~Z$G5p=nsI&c_7~gcA#2iU2G(bOn>HKlFafsS(C4x8UYAjY)xgeK_v9~;ij(|zR z87^sk39^w%!{730Gz9$+q;wJ@)sD5;`d?uG_Z-FVJGTBaO!TcS|Fp#W$CcziJ&OJf z?Z4#zo!S2XQ4il=!r$-p{Kmuk4fTIj_rI7DS)=*{lkb6y%RB!68utH8_pf_!dG#Gk zolG5EY5s}*|G=bjl&Y5Er-xm>Lc<%5{j?7v2ttpK2%90Pr$s$QRFhHodB&S`loGZ` zf@>w?tU~X;GZa6*tq}Co{BxxTJ5zn=Rf;;t{NQJZx!5q7!6X2%CWgfx_F*C{PY`L$VvvNFHoH zM};W@taAN|VY2%Nbaxvvm*q0F>eN@fwgvamvviPd^%WWsP(YUTQO`HpbQQs8YY$ow zM2j^iN)7tBpM;$q{tIX3_ZO1?J3ms*)M!5pnXNafwMbVRCA6QR*qsn#lwV4B{jHeBCd< zJ0$$OZNvBjoA4V+@lPT1$Hwf_e-`L$_l})^G>re+w0|(uUsm{ESX`gPYJY110t$FH zBY%X&zdz|e1poGx`tM)g4TRl)>;D0?f!5J<#S(j1EHzjz>%V_&;k|$S`k#BTmcAQl zz58DHR#9)KXs9^z$Z)k3(@aRoAgA>K^A~ds1jMI=KoxfV3>fVE403yoh%kqWhmwF& z3;`DZP1>(?&@}AX8(iU)B;Fe}9w|Bj5lvREAP&hhJ|#6iF(*GQI3XuLH6_(j!9YcC zmBTAJ2RAM`F{L2!8*spPD0(S2im5yceo|^S3I-f(lRox-FgGt7u;<`U0#8Y?zR!|Q zkw$L{McxU%uLxL-!l3%*ac@ef4_SgMIB>@&k~nYEl)J!v1%cjzNpB>ZZ;xoY94zYQ z9H9EhLhOX*proW(WLQPO5CQ9&_DYgw%8x+%v(f2Z9`1bXc);ca<|5FcVW$!%_ifJv zsKMfyC|a%LXFuopML@EBxnTKu&(LpYM6>MV{3CY{T@~ZS2dQQJ(RXhX@e*OeM#R)$ zYrg3uL7CZ+sYQwF;ugztcMOpM@d`ssMw-;&lC#-bmCXWwSc5kt;Rq3aWi^%n(>jxT z{>JthlUEj&?s;OLR|P{&Bg?yZ>s;#m!_b;j_1jWU_ZzpP!ljKJb9Ib!-IM$LVt3EM zSwc&&Pk3!}XnAd5jBjnmRtF1Tb!-G~ERY}VN5TF5XWnKn$IHI3!b{tLl~yiv0|!>3 zT!}!ymyQVFD%FUzYRzZ<6Zt&2;jj1Vx(ZvB1|U4!OI<0Hnf>H=r(^R!rf1cCpq<5Y z_JKr9WOOKps2d)WO;DMMZxXOI49b})KQ~RbC$4GHZS8+|-(e@P6yxmM6bB`KJVev# zSix{*o5VAD&?bXZhV0VXSjx)ukj)!bo4_hP&k7MW)Rve-MEe>NVwHAXL8*oxt8`Zs ztD{5%jrdUtk32ev^UJyvW7MnKC&W$F&fXtRpNgKYvAk!q2?c704SHVKIb+7sN&fLquYEWmY?RG3n8m z=y^TzT`megdt`0BiqlT

^|lFp5VnTLzCo%93bWyfD}cJsb0PgaR7DSs_M=wmkXOTxik z>ei`#AOnj{cH%Gf{y5P`JcgiV>9JL$q6@`TE{SgG8Ty(f>+F_)s&Ii}ndXf$=^eoy z`UcnH-5)RF@TT4C2mQe4=;i0P0G|J3;j*R(4NissmbWz2Lo(>OF_HuwxrPzelL3IH z&wRXj-EWIP@NwF8+=T|-Q0I{xqJWHXk#Z_wjuWW1^1&-(>B=!Iz?>10C~CJXijJ=^ zgBa&H*!iKNefyDU;yRz+ll;rK%oGJ2z6uoxpH~+1X7Hk07fPe(SmU-yDJhP%eQ|N zX4Vl%7&3=++z8nN>_F&35kiqV3@gGb)BZMYuyjr6kXeFs1oRj@zlME}TJ0s)O%y7I>@FNIHnpMG!rdBSy z{L(SZX?%Yn9&f9<&QXh|S(umRV(kaWN)gv0zQ29`dnLigJuwDmf;&3%GBW|%GGVf`1r+L!G0&?j7U-54Ks zfG&M>6ZLMe-N36LPx2T+d~^r{?N}=iY(zz6A(}9Kh4d&As8o*Mne-sPA4jL(d^%a7 z>2nXmew>?-_Z99s)-z>0Y#AvT9aE&Z$vT__p(RtY2xgE7(+C=gl3oyg-isX&bcEk= zpur$TcyQs@;VIp}jFAVNYUQc?^M4G=~oZ<9x)rDBVOY3t9`gZQ=kRRqt1 zWY%zq%S4}ed>b&MYm7`PQXth~!+x@l6--y-W{?x^@OL_29N0N0Y7PiUl)`iQk&`fg z9B{mU^3uVKjDV$6rcIK@31KRC%kV1CUSH&g+-{~_R)_$-9qlan2&PtWq+ zt2WQC3&ynT}p+~n2XMum@)M8Vt_8YuSZPo)m zEGpTEPhS_7N_QQB!iE1WlnSF+5I*jGU^`~JsR*SY{kBFe4UyPM*} zB0<4D`K1ek!NMn^(}4nVq_X(w%Z!*nU$nsz9U2Pjkr5=0{6j3uV%_grhk=8KD3Xyk zs=a+QWfl$bXPSvWu&?{1gFqIH zN||4TR1UyNb_kl}P;nhNsj1{+K3Titl?jELHV3Fxq)cO0hlDm18M%B zjLj6}izmR#k~oKPuq0?_G9_qGMMfU`U71@i=c~d&X@*Tye%i;i!tEtN7c#XoZp@`xkW8yz8fK9rgC zq~7QFcw{t%_W1a6Yfj{Fe8t5@!MsXEn!vzXw9WVf*y10Yl$$*cD_j!EKn19RisKL%G{d5$Jqe zfhUEOO#xht2S zmZDPim866IkDlac39%i5%KKBEosll=IJi* z8J^7jEj3qp&{4`+u4`SSH-ytgl(&$R?I%x|op`oxP$pN%-PSJvTcu(eBMx`HT-epN`tvQZLaG zJychY9yz`7qILc4s)!D}l=9@5e*!;bn0V^H~&_mp92Ii z_<+|%PEF`-m~&b({O=?qLreNW0m`}xzPxC6=q1(C1YD7eQ@U-+HTZh12z_V%EQ5!0 zL#01)^o*?xyhdKy=U$)FGiE_qn{%NO#IWa$!+S#gnr+uVW$fyDTi)%bq4$K+V4|lb?P&3ZhN{a%FTKB8qMz%JN={DM)G;d-;3{WsF@CF1XdLvldwk&dT&cSlWr& z7Q2bctc$JXR1zi^Kc~&X*{|l5n_Z>1AYstajI@-;6DtyLa^%e)x3&uyQdhv4Z2(v# z!%64CkC|x1R*J9R3@F&a5S0vqx7d_vn}fv9c&_cNKvRLwNl|&|kGXIR?@!pX@c0n& zgL~4hpjEgj@4^U{67-y?Zeu&nL@z${WOIb_`;dzb;vYd;`f(vCf9d*&%Fs<8D#u;y zLocSqge=kZCCnI65t|8ZYrwx@S^9X}u8jtofRbVIxRV$A!RPw(?&{ngDA5YJCJc`a+!JMpwZBWkz*)`P%9;>BCN8ic3 zfka_unPu_}I60Y@iEFHr7to$U-^h(RZgu=H9fMtv$+A*NQ+u{3Rjb_M-M%{c(y{gh z;vi>eIWQnvP_-s#=<|Z=n#iZPPMHWi%>Cu);sJ#kg)@0Rg~+r2_Eo7($-W56LtTzAcFP*A*!qCZ}l3FG&RFH7~+S2DY$gnEsR) zT(F25nN%(Dry&TTgpLnyrjE+CAP!LV_hy-v4vPuSAw|qEstYmU%$bvCUBS?W7lThr zGm{gdQap*HhBs+iwa^YEER|a0J;_YOoGDrJy|nB_9>*3t2|29uKKF_HjcFwm{5I;$cEt>IEX;tG zZu@=>$P5~Io)lH={4dL*-(lGWaf7>j-9=2c{LDx}q~t5}4+4*|AJHzX6|g@5kS|8r z);E<~L!%-ac0S>6?LwHi1dn`Qzs{Dwp<*LryM-;2yBS%VzNK2ddK}^qiRfz=g<{qI zQTV3ib^v}T6zj)tz0BU9&96NEvnUi4ov?Iv4M66uli+uw&%jP?)CWLXJVm-QbSoGHKK2oDuFZCM$6_Il>|#gA4vgDA(OOLRck!jND8+(8 zBB-kJW&uQBYv#($i(m|wdsz$(4`jViw9wWkh|9DW5>M>lkQ|Hw8nzXbhH3s*kJ1(R zZ4U7fKnw03+-K>*xZH8+)uv?w{^F=Yef|t>SHXc1%bE))H|RA2vkeqDIK&BT_ud78 z#lv8W;7IQFK(8pyT>9r3Ql4zGrT}+nkVAr@E+zCDf$etkeG*!?n6fdY+sGQ@%*7WE z#pD}Z-pD&PM$kv6ta;>3C}fjZQe+X7ZLVNSQ~o|7OoA3DxTTyp4?#c|s9Lh8(0LsX z+Tf5I=M+ha%GVCkE$eE>g`apx3m+5B;?f}YnjS~NU#+T$I0hU2NrJpAo9d~>q@Es| zTtxfAlZ-dlK#j(hf)%!b1UoRvG4Lss%@N!?+x?BvY43w5dgyJwd7gjInIJw;PJ=CP zUr$*v&BOk5w9Q-v{RH`()iR=o5ClK#oyPxSPPX|ruUSx+vG_(0<&VOBg1#*)&!f7O&3O~J2iJ!~*zgASMia_t==@yF z(zmnCx?;D>CHL_1?9q8jFhCr3mI9LhQ~qt0iclUZ4`~j13w>FvffO+$YZ@V(8r=Se zhCj}-4xYhJ_Q2wf=q9P@`isLK786*UMbx<4_Dkeant;0VpRgh5A+KCNP1Fg+z4`<0!sE+Zku9< zg$?8@KJLuDoAvM6ozac%P2-Ph^3T;lD2aXDJ>;PnGpGiUw`RF(7@dB~h_tXMDBHXo zKAb@#Mjvq=t_<&V3pAl-*!gj-R8eH5-)@IUb4QiIPKb+veui@veXj+|FNe-S|4#H8 zXINKFSfRy`Ubqq;?pDR!T7)6RMmTqZ1G{qt$Cl*W9%-ktO`3WGR{L3(eT*1$`$_x) zGL~vKX`P_?gP&w;kjndyaoa>lAjjC>W>a#4rwa?Mes-6Pmg#^bk=)8iBV&1`>{%u? zh$w~wn=;5w9P5}Ia7+4ZD_<|<&RPa?@;FA`2XM|re>A$3PoyezOm zmZ^;%+c(|4qB>MANlW>zRP`~BruyD#J@4$J6#R4My3qx^tWb-D(4se-s4J+kJuoRL3O4`I8;9bB zRX};reQk~3Vax#1M%^5ai3px#Z6ryy0D-SZBbA2c6EAVgq>-VZg|Oq&q$(TgW{AYa zAt*@vHFQvgDBBF!zB?++Ol?K(EMNUS$m*zy)kt0lac}0FK0o0FtmS<$+pwu~;3Rr9x*K5s6dx z_^}oe1o!3oL>D$0i<$Od7d9n}*MdYIsPp~IeLuGGbp@~x?J>SwR~kcrmjhRm)4r78 z1}Ufz!dH8Y4bHep^}`;kYZ~laNcZcTvBEW9PB8C%sgP-Z&K#5vG-6-nrgcZO+~qTJ zzV-x&trq8bFv=MG>{2b`)}pvj4{#q*AAXu1tzaFZ@KwyF zm%4eWCoJ_lA&0wF>4I{dsu~F+M8!Zo=;$fR_uM$Fx9a6u;=NUg8S}KygKB-QbLEY0 zXp2%gCj&pTQP5@#-3Idk--x5G2qUOC4;S>nzfQYNA?D_@=z(ZsI{?p$WYJmwxXrG;16lds)V&`6Hj3rjW#=|X|DpkC1cR9q_1*H^BE+5m)EWy$REVMX}ICC z{P`FrXicKdcPOa}`LUdpkM?=6q*TYcWV+1qL=qxjIq<@{SV%bM7$$V4qyb7lsx3Ox zenZ`<=aj%>UOii;Y`+b&WR0gnY&QEtiFOB`SzL?C5F2hISD3yiG5bKRqVHE7>T6zp zo^Rr6T3U{fjSz8>F@2}ui^iEBW<~V|=~YYam11}$r<7ten6=v?eaU*~)+;XOOhg1K zp;nS4}D)#JQrCV>M3z*pq1IqwB@(&C7|M!JFZzM5fnYuortiw}U!MC^@>A1t=rdid%Wa@1G#34j(TCRNyIb84Q_KAwO0{z;A zNDF}q+IeEW)SNzsf>|FNe93y0i; zrXne(_2C|F2h@z-i6R>xhAg?+SITn)Iw{?B=pZX>Phv_le;{3)NuNNkHxk<1V;dbn z+Cdm}vB)hn2yr#*uFIghg@cxQU@kOiF({T^m8;gJ!&YW z2W7ZgPOc99beC>_YY|b3ohbb3d&tBtwK1T0wYARHAN-}FkX~_IinSveOBK1f##CdH z)O5`#*$tl=^9Q;82%MxiW}t~f?8s^EgrU3s4h?sSGTpBQL zN55p+X<@Bo)T9=X?<4lGxq_o#V}D*~bqsW1*Pnkm3I2o>CamB>v&U!;?LBR5g_$VS zk+q>om}%fx1|4vzb-B5lB^6eBv6=Gmh!Q&lojxHsk_h=(rNpAnp&oO6lqO6!VAs`z z(&ZlZh63`;?)f$DkYKncp2!!UE}WxICe6At&E>X?o%)`lb=X|u#A_)=;QO9ur(I@* zN?eQAwG^y1RzIm?H>pxf3EqB;Afi1IpoL%nZJQdQY4jx6{i%rSW9ss81jEIib~}vy zah-)eAt;cBEC>+dGk5#MB0C$liu&7AbZR;9Nrc_qq%;SgUbx!mVEQt4ZF#x1%*@c) zb!Fw{v8MJx^ybj`a46FhV8gTaWa+k<;P^;-G^Z|o_hc_iwVXbIKoDh3;uyf0N~T6j z2owT7p=Z#FN*M)Rc?%Er%4LrppM$X2!|qFrq~b17OonS7MFvS7)gt+I3+Dq)GV!9t zF(t0q?Z(9iojD#OZ=?k*bM#yIIN>q*nh<%@H(WaXb3_&QZm_D&iHkOh3IY1uZeI6P zw6NDxSvpKlPBTn8eWj9tN=_EX<>Id+l*AO+EaO$X4@g6~K}O?)n!Vn)_ecY6a)T?q z+{B2U+c^uLD+GLVJ|G=lPv<^{22MTQ@tpe0>z|ecB*(vvY+U&<^=R58b-#Y#xw&XN zgC9J;_G2jGsLL3_mOU@H;Dh10Ibiy><3)4`ua|lFy32F8)UxTG<^Z91&d5{CzsJMn zGg?gPz2A7F-ZC-CG>V6tCbF~boFoVT`Lk-^*HPMK_E-Q*WE#rhXXr4hWH!~MyqEx+ zAsv<>>TS*?hhuro2)0Wo&5^btmf<^^QCu#ycBfI#(mJ38lTsLFrriK(=v^;L)57)`ETTOQ0DwZqmhPfi#tn zEhlx8hTN1_zuqET*H{B|7KzegI&cTFkqbha)!5OX9cFO*OwVsk{buO7vAZEx0f7q- z!~9BPw@fJIbrpM0-@OtaZ^$Hm+Fgy^*MBB-#RI#)a#0)i%~Ri-nuRG4Fg3y*6XEzQ zVCw-TmuyK=R-B`|mncS8Zef=W2Re_O2Ooz-cnF<7HR4|Oc+Q+dbc$s-ADY7n4xluU zryay|viodmkPg|`6?RkMCXx@;KSeTsHGs-ai526(K)mmLcwgsUdRBcuz!`s9m%>HAg+8d3ZJv z0;iD`$wC$3vfg7#f9X7$B?vvtrj(>Bm=cT0ZoBanQqq?u4_EQV6&0hLh10P50?4yr zntWHF(1Ep6WW)ZlOfK#4n=_N!4n^6KhZc63kGlhN-<(e z*@}M3SB~5*3BL-YmmsfPGFq#Xenq9C!I*T!)P^2r!y0UO`koXtnbcZ4Y)2w-J=8-w zqIdzZ_~;)>bGds=u!1_m(C=-< z%HatpEm$;oPkG4nGT0iCuQK(TppYgbTE0sN*b>d|jFXNMVk77VaB@|infCg>p3-~+ z6NgqdiW=G>Ss{crX)k0Ax7%uAO{e{VB1WMs9ABDxt&!MZ$fQO&Xij5U(h8Y}CAU;S&ugcAF{Y91TGajEqwDW0y-EC_+kPNMG)k5E>bTAfCW%&`b1*)t~FP>x@6cnvM1C#;Oc zJi-y}V^Qpw^A;ARBw-~=qo-`ejunE`CkrDYNa9cmc(ZCl(lvx?GC)$o%(f4WmJFz*!q*n2CK{;RKR8!C&lsj?)tuj>;xDG1 z6?7B7NZw@Zq;>FgsyD4)2Bc`jS?6zJ1r*xR{Pf3QDzV^}rBk1bH>LDGeUN3ED4x1n zl6uInC_F#C-k1 zCilsG4m9EV)cOETYxeFB%Fkr_TvNg3+3`+hyESrOGHeIN_pa_GZoW=GVT_0`_ndY$ zerco%v&hPV#kwC$cilnKDhI0u@h4;IZfc^6KdN^!qxHeTpP#!_`gdXNKB0Wl783TZ};zxjC(Sk&6p!en!d zFi*vKMzT2Ru&yku3T=c%`*2A}Lxn1}M9L6Txf=g2D@Li*{Hd{09=3LKUQbB?7_E52xM5vjyf_(oWdmf8rTbQKiYwCGmCKYa5XYRz%i`t_c99v>$*-D-XXejH_H^LqRSbKHXZSenv-SJj+oG2(o#ek05`A1$~KQGY!s zq}rWt$l~v@J{i27+xCEI+pMHI(@pYtetsyOeYrj)%JwoK4~5BZy1XRB5k6F@g4{VUeaT) z31VlFuALx_my>?wHRzz~eLd$RprO zh!Wi)DMR(b5mNtDDv!@Vi)l4Z$PGVH%w=MvC=;zk_tV%(@@{;q9z@RFF`3v+Ti+zq zP!6{ z0TnZg6Og1_i>{ol)%4G4JagT^4B+%V9*HapmJpBQY1@OmyZ}b`CATbstjx=^`hr96 zC9Ogo%PPpAok@f?ID(>%r=t#!0gGr91rsv>Go9&^=J{+qwkew_YTA7J`GbfXS8IJg zA$v?mRrz>xe_do5^1ew0Hf^~-u>+%}FFaGHK&cXbGNJ+>=(%J^L|V;=8lF!E)UkW? zt01S`-T|9zkhG_a)4rxh` zV}pleHQW-&P;0ncAup`=xtU?f=#mA@I0L-t5~Qwd33j8Rt$c~rxoY8;%(0=DOz~v1 z-f(TaC*PbNf4uk;2vG5UClwKX8SPM0MXC2h7C`z$t8M{1e$`0vBO9)XMv zRlFzAM{4Q{u(Gn;5?-<4*yy-M7_O8+M^fYJ0!(Gtar8CE8kaVcV{H+=B6@)WZ?4Q9 zX)giNUs7jmYpa3H$Ijf_kkh8WW__H|O{a^~o!NK1pIED243Agq!A@1g@NEV40EpR9 zWcdaAT>_mowT1zv&F^U*WpjjQ->e=ZyF5NEOjQ_qb4}?U(L8QBe^Mv(drBcBXSnRY z0w;Vkbf9TZn_%NqE8SDxBfkW8=ReK+jk)liP~Xw@oPuO)X(7;_7PW7?S?J27HRt5a ztYN7ZSnV!t`SCe^Jmt?z69^lt^2g0v1+OB_iJAeiHunauSwiVb-kX3!I)Y}1a8DrS z-%(1Ujpt031jt+#P|ZK*+-OCtkzIfFPu6|tVwC&S5rI|W z<$)6p3vY<*76CI@5t5!0R^0`N2K9)*4^~z7J#V@{?zcz4Ex7HKXan;L#+Cp+!ia)c z(jM1Y`ARJ-Ig<^tFM?b6Y8jNjYEW4{D!1Sf=5-!mh*HN(zLbVmio$v26kPB~0*@sE z=TXm*5jY{`$pG?omgRUl`R^nwHw}YDi;xf)SwE(rOp26{t0}c+A(gHPiN1G*6>HMNl=r z$1WoEFDl+5YO=ZkQ1$}Tfu8+A2;(xt_kf30bkGvnuK?t7!)=9G@UZDIE3cVW zYQw6bt_nTe>kU}}v~+&h#5!VcyZP!ogCXHCiCY;^mkCCHS}Yx!cYjiH;;-iZWd&AV zY!kQAI{pOL+jJxQuPQ`0s_4mC(i{_ZOT)pDQG4;Wqr`E_CE}sLZLa z*NCC85AA_3>q-;xfEU8)Dq)YEfb^}{5KkC|JH(4GMibuPCvx4B!51u0%qYN+8$j3Y zp_KO~to;iCR<9iWz{RS;r$@Lh*eEYcq%I)J_g+e#+BvIxdy4A<{8{K-gK_fex!4)E zb?^6D$V;fktRF;K#A)dq_LCC!hRB)6V2EpuwrMf@jLjR;TCS@5Ibz3^!@_5IcY6WD zlH7h5IK{5loD&1KXE0lAVc#rc23V5}xTSEQ1za$TT{796maF>lc(6ytY+#&XU3=F+ zOsFMKluM3EBUL?Qmagq!rQ-_Go|S)B!*6}92b`_zc=i6JU?D+{`#(f5Pe|(BQTpzn zWL~J0SF9vosTPP!DETS=I*_K_GQB}-$Ow1|bG+(KWZzJ52=S?A)6H4FHks6Nwx5fg zJ0g1|0(EY2T*keZ&T-46=j%yN)(6LqA%w16_OVxmhVw;=dau>(=ShdMVy zqG9Jyfs=j#B0Nc|F`Z!(NbTit{W`?mD-D>a2OhOUFX=2=wCe@^9)%Mq#C7J>7kJZn zVfNQ{N6umImt>D#BibD}+hl?C1kZoxIa7zEoy~uZW84KV-VI#Ar;z;vAnEtZ_M6z; zCy473U*Mcr8NqLcEZ<|za<_1IpoP0``UkF(boh39!-3u>ZinL~prX$f>7o!`U>O+m z#eWc=(2K0K#o$YBZ|`VDYmOX&GW|+KW?oStShK(;{na)@Uc*EUi5EQP52pT^2ui6a znuDLfr=9#uErrPs^6}O#!G)j6Z-4>~M5(+LK&>GpikF`5*6DgTYj}M{=|9G&i&bHX zUr)1nH(_gGoOnFR4^Y{%?BcyNiU1 zfu&OusY6Gynl5A=SdK**N`nVFTzG;}xb*FLEq^0KfW|Z#&(`r8gz%qBl?#r9Ls<8tjS!rFk%r2mxoroK)W* z{PyJ8O9*{dPew>(ASpz&LRvAg)>j$;e-^iAkA15f4jp}dlOGX#Qy(CImVbBD5=Boy zQUvl=%E(_|1melR3juH#k!A#pW}MciZl7XnTv@WoCizKASAK?FUU=&vK)KeTr6#~( zu6AazDW}X9$<@60;cF~#lUbbEXwpz+CAO_hnXZxm+@aBfI)k?vepv!$t*8{`!fK_R z7MJTlnvR;W;L3EqD^txNYFc7IBj_YNorW=J*Y;Ka6hn0-K4u!Q7ECJtECI zERJC>hcOjXQ#&H5{AC{^&rJk4O9s} z=uw?)TN+Z*e!4zLvf0YII3~GQyfz=DEIo}mu4Bq+>?w%qQDIDXV=n8WJb6J5uBGCc zjah_%2C`()6nAJkBiX=ts+^~~PqY;nKu|;J4&DmltR2S%C|NGr54V8iifX==cqjZj zCJHDJULXzW1=Sl$N&wB7-17`eWUE5t3FvT)*KD?)Vr<`k?r{mZI^v4bJwgaj=Jeom z(@Pl=QVfc3@KnS&m}M?_wb>@-02);9fEsl6j`iMgFcxhvRx|_;*+Xi89ja&8P5J5( zpptWNh3TqFAIQ{fDk}#Hs|0tc{E7{Fqm$-L5dzHz4E?qWjJ1$L)*{KqhI^D31RT5} z5D|3to;UO*(7*rBd(&BT7BIEIQSWgR8IN*7q?I?#A@DR$K4OO;PP~7g#K^MdeW^L2h++6={J?=!wC^C%Z&^NeZG8d z?@E>^uieQ36ybf#c>kUVHpRfAM2LsV9$@JM)GkWLA`>l3OfQ)6=+`dECt|?WpitC8#3znWP+KI+>pqxI zvirCivh9IP0~U3htBYN{Z59cU#10w#lbrn6HlxVXe3x^?%1~YJHO94vGfiw))=N~R zjp6I;8LkDgonwWE_C5H+*%xGw|Lf{$!QEu9Uv>fYey=8pcfgI&)0czlZ&xU2DCDAT z3dAmfONR;GQZ5;TKoGZpF?Wab3&wCtu2t!yUDE1MKL46SUd?cv9SzBpEaAI=UDt!H zcldwq4#ihmNf!TRi7@~GDE?a)QxSI)BbWcP#w=OQLmx*4^N&o!xGmdakZnQ>B_$21 z&BCy z-~9lv-QDZ7G+X1Q4Xoc)=4c>E_NVcS20tJA&^iZ3U*f~JH-H|*UL>G5 zr9VCRT{1uq)ui0}eKSEv(DmiRcL9dxZZR{ByD>vsRz5WNC zZlTUX;=n=PU?g5{(1U=*62|IGRY5sw^^>%mdZh7~{4K8OTFt$U4Dp2@s!(PFX9!xj zo5d*c{7qteIg z77wNpQ_?6D_~k1`X)Nb-yv7z1>6j3YU;V?=@2V(j9z49fpU>(c17!oNHbdv?E_y`8 z@Wv%0E>6NRQasUVDO>sJkonspzo(l+2=iTP`tpIYCfLapAuqi_Pf?qj5zdX=>x6y_ z8o114S$&g`mj|_8mSZ^$qvMTK+h%uY4t66| zHN`U;LEr1HL7u>ff8INd>@GF8(Jo-HCQj}1ct*+=GfpoYarJ%zH^e1=G zD9Y7GrPFk*nqZ(^FP40=-itGXk~++lrXvd%m4v}z z#oG&0nRDa_f;JzD9N`y=MrI5|*{`)=Dm}F)+_lH+cdfGF+iZ0hzEs%eax&zFCpkrA zX;l@q^@vT9oPJ)nM%|+ahBrdFQBrJPhE*A1VwNoDikFVJ?pZTfu0|>S zX$E~>rF%fF`uUSAiQYw7lh^LQOSq}s;FB*@nKndU-k~ltwo_{?UiQZ7JIJMD@6M6f zfTZMEQ-|8r!4`}j6#6=sX1|!>ti)j(CylA9zB{{MVKz-OhJ}-Qb2e(H!V|q4KCs(p ziLSv*<$7pBHBu)vTv^VI zOE*O$)GLWFeLe1cg=9q@W_VFwJGHwvhsB6n;K*oF+?Z3k=(?N&Do56KQTFDLOsHsD zZ6{hAD64Y!pP7JWnd|*{3Et|^SJH&>yEZ(wXG$Y_)Dl?YWjs8|3m7ksL|2(a+X<^` zA6TU)i{VqX36O3_)K;jU$?oTic0&x=;aV!d;(=Nam10GxJ5+|RhzcsHB&uG;YASLH zDO6`T41>=0IUFk{?{?olh0L54BSYIPFqG*mk1O>+a?eBpPk;HF*CGR%8!()wsvOTN zw?Wb(>Q590;CXw;1y^BPw6E2`^O;TCp`WcG#l*; z{V)>;P3bAY`XSafTIJtFWlhekboU@l^UVcO@4V5}=D`vZqjnjesE5))!wq7eJ{UaYAU>DDxtS+uzmsv?j7I$Q5U4^i6yjBD1oJ z&D9##J`m{1`lp1-FPk^ko0K`tVMfYg%$E*BU~fRbm&3JAW9tqpv$TX24U;UqjtdiXuyMPOO=iy z-4iqX=cLW?XWL;f|yh@ zSKbJV1ig3Lh-%EWW;Fcj3`kO!(ID(f$J-i+yk{euy58y?3^X#DNg2tajjo|(@B>SozdKjmx>h(yF)UpRUlgxTKSEJ-O z9IgCzkKXE59lo@0#eaRf_XM?*S0JmOxD)kouZ>{epN85gC|CgORT+lsl6mm%)ZQUX zb*pHDzg4`m1--pL^o8`SjW~AC4S20o4~8#O4{3zLlUE>a-wK7NdW*w{uP7T1RViX5 z>?J#Xh||V{=S0OHHlo5C9aZ+m$(6sC;K|=pg5s+-WX@5($Mjx_ zot4O#{k#VS)l16NO9+)4AEcKO{Y#cn$ImK#y=D4Wi)r1)kFkBX==^%mM_ZM>v3C{j zbohJ7!+UEFz~AzdUkNby5!=;WSlirKS;#wBIv}#X zySqN0`kO8jbefoI3oBZz+6D;v@&X*h+vbF!IN3$yaAap`4Uu@h6h9nOQG&T(6zoY@ z`9>#i7Au+zbj3A2JpN8x5I+WUKM~T$drLgXZDUiwY_(eKkY$2>MDI7LOX!14OYvnm z;zQ*f2b#RjOy_gZukt`d)`OWvG7nR`eDnqF zj)K?C)Al!$30=^eG@zDkV5^oG{j^xNBQjVq`(&zx&^jcry+e!6DmC1gtUt-zMKY9z zY|%`VEMHK)s(0A1y~DR*PTF~U?o^g@X4rpXsmu0X-vUGU59FYJs`lyMs1q$u1g{qo z3%5VoLVEXav3`F0S&ARP!Is`z!=l|N-_gVV8Sw*2@ocMAS~*saLZ3OT+vdTHP5)r9 z@^^An9DH=hd^%um+-8%hmunT(N|Z2)LS-eq|CtP?`&AA8pi*Ta5s8hNt1HzSjVef^ zUtv-TKJ7x0X*N+{+$oR9Cxa3uC_@odcBjOu5VWZ-T4T_L%nCHTP9lgpoFHq|o+cNq zCLB&CDUwb!!CEg4f})TgE?KXRD8-^cT5;aQc|-lpn@A6?=s?Y7Y7AG5B_KkxJS3v1 zx2up*9&TdT-q*s$i^pC)S0~^W#fT^vpOzyXv)GtlXi9Wcfo*sSfh&_{ln;@)g~)3W zWVuRWm1$ONF&l3rIeong!J-grrIEus z0ZqJWS|ZNADYVGvaLg)YgpD#^7Vc6IzN!#sqmG=q$0kyh`g(}Qwcj-?tY{Z^O^C)U z_cCf1_K5W)%^sc6@$t^GBe=Ny>NtC^4~NFP=;9pHuyn{okGGsy9Ui}whS*A1q#071 z1sNkMrUjRz`r9)(y4R?AVe-+Wr zh{HeDn#!DTzn(Jca+35_G3z!0B_^wrUe3|92hIN_p5h$!rh_Q${O3f4CFcvsM9T&-K ze$8!69>;nSbopziO!rpAE$4pwG|F+=CFfL8^IlqjZ#wku-D6g@XCM%t7%@D(!GvWh zyRZ>Be)I9ck~?rPhkg4G&-O@~^|SJ~U>7s4N8z4~PEd*iUka;QM?VHDy@BuiDj!P9Anz6X?wB}+qc&I+ z7U^F+`h_?rn&!Z2d!98JfdIH-Z(2bRA>ks14j~5-kY3(M&>dLh^>vw%cDE={A!PDv z2hbl2@?e2I0b+ajniv!pxDTL9J1h~4bEbWyNZM5Wfl3s_CLU4(b-xzqpgyn`AevBQ z3kpOase;gC^Aji{7u6F)RpQ8(X@By1EszA-H8vER=+s%lBQ=-uHW-3Ug!&68X-=`! z8N-v2A!H1e<>&Z+FC(|PL$Mw;lSMZ(r`(GAUt)22(%MuP4_+t)gVBf)(+zW72{OMd z+Nc@vb~hq|<(Jk$wi+_qib3lJRC5GU-(zUn+(vWb5$z~&d&fR-a!SUc?Gp;WlL|c$ z;HMO-i*vpnf(?Z=2InrY-Or~GwK6YVg2*xv zm0EKGZGW9q&cHecb)nt0ru1Y9Uds#R*#bQ$<^@)2%NwDYj}R6s!S$b3F)8tx5E}t?3J4VJmU4z)CHyx0v;zIL{b3$sd8#c8Fop z1kzeq^MtP;Ww0;4MYP7&T$|$#zeaXn;Z#dsfz)JweR(&?d;&2MnJoB^X~xLSTNsRyaSQ6_Tj=I zb!BjIb7fUb)QSE*!{X{zn>n&Z%(!xWtf02Ij^+{C5zyo0b=BD2b;f%-=0n;t*S|1s z^Fm*jJ-$1AyZusYGz<2D{6$r8LP`UuB3+a$J&aZ2MC^lIl3J_3)XHGv#%%D)pivwR zn=~gbWmkILAlZBX>Q1;%4e5iJsE*K>hUZ?7TS#(af4yT?O832nKp|-qnVx|XeG<%YeCy1j~}5y2yY0|=-P3c^4@ zy(S3*Ng^wV%Z9LgEFatm(by=A2>myv5R4I%yS(Q+#Yl0pFf-vn7=+f4F-)O-fxU@*T>op~-B1Tc zU~GbU$%Z}3=+Isp48G+c{M{hi7X&}ry*)~7*vCAEZ@{RbyY@lUK{!QD)B)vr4#IuY zlpmRB)2!&7HV8SfyKcVEL>;#cyVY8u>b~qG8>*@?SrjF)O}ho=D`iu-%na2Ba7wAY zhRut+G#zlh7)+n8 zo^$N&P^-v~5`)}^p1X(U?w>EE4I3S9DLw1_PkbW?g)O zm!Z|%yX3WwJ3=To(FAu0DO~XYL(pBU z`&DtV>lDOl!?f%xV`SE<4%xP93gPMJ)qE&$>5WLY267 zM!^xkR7Y>`ym0Xk;JJRn77@LR4&~mQK=3cq5cy56P7N6JH%jPb#j(kjo?{lbF{ecB zRY%D=(EIhAzfe!p+kt0wpe~Iq;asrbRbq z@J$ak_kAy9**ICz$}76|hRSZisDdvOr)8^04oj!0;FcuSeow+~S)u}GQHML7s?Rq| z^|Y_vjizG|XR=1}n6cj#O=~|uZWv=ewp&g^rcb>SV3UeJUabbObSpC1^68C_1YD`K zekra?Y0qIQ8FflupiW;n*yB0Y{@QUpj{~>DZny>F*8d5MJ~`>IN`zIL4~T-Qp^y+O zxOVd(X1^1l(h2mL{1dXx;BlYdW0)UOUwu*BpUAhq{KXVbzvAc>g*{C8h@oRHTU_4X zrK0bu2PIu|UlO_11-K1zJJKs$G06GIr`5_Qz*! zWPNjeGZIaBZ6{5WA2_+g1B|x(1~W(z(gsYE3Nc53BiTG#!0G~q2!Fl-l$%0}6F=01B!HFZ_uQ%?aP^g`3H+=gVH?z8h0^Gec=zP(@$u}q&hDVpP7Tn zGJ`KFzfy5>e4YxX8u)H6VaHA58ALv}eT!*Ph$-4C%>ANfaJ8l&H?(fW;u>AI6)K;Q zvsD}6h)YyFgcBfOl4YE*JKAb&*2itBN-xV9%^_I$$e$GrRg?V8OrSE_--Yf>7$I2S zs<;TIYC1n{eb{Ne)taPDY>_BVUA`pw*)?^76alvl zVPJT7=K8)W6e=)p^(6Yff@>e?Dxl_sD4A?|dqNV0Rsx)C$>Wu+;SY%yf1|;v^h6(Q zN&~z(#dBjN_tyT)nq^A@%eW>$0032B0055v!J1_fX*(kWYheo~XGaS|m;W1JCs|QT z3R?i>XU24U*}2l8xn)DE$s^3_a^pZtN&pFjuqhY~-sYLEF2n9w zL@tr4MprG;yYE&7wandv5o_5M0vlHP%@8i_MtGE;#r&-lt{>w2{f<6?*R-(ZhzGuM z#Y1dR_r=q_#QeDRW8B_KLkkHFi!v2Itd~rAFC-Y!fanU+c>dhP(P4pA6cU=XwEmH^11c5lso1qf(5B3vHY53{0v}A7#8}g-!$U(Z7&7fc_Z?2}Y9Gm=FK}Qt$u(g#Uf;)&B^opcd|jVutB!+Stj= z4a13sq)ri60&9Ik1eMUVL=xw^$uz`ahhJ!NfX3aM<eiy z(qc_9cc7xoqgk!0^@aY0zI2+oeTAqxMgJc2`nhxHm3!)SI+^U3>j&EB`lV!I6kG?) zIlo1ZrDbwRVXt!JAU#q51v;vd)dx()7X%-9LTor2NQE~bX5uY9GOEIIh)k7nCxHro zsATxQ2!*F`kLj(-lB;y@;Vm$Xeos2jgH>=nisG#?tajHHRZI1j5i$Md39vIO+!

3%aXz2Mj7V{+1uH_!b{kYQjT&IEq9d z5Sdz#J*G1ACMstd8dhgVo4Xn-@uxaP8rtrqilqhbhUMST)Kvd$gIf5m7IL)f)KIdKG$H@=_ynM>gVP z!rbkQS=y+~GtO-@+H_TMDaI?T#AMcF(PK+JQ~wSmR>44H0u`nB8WJs-8P-kTlX4Y` z

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 Nn+t_m)o>D4_y+^^`h)-g literal 0 HcmV?d00001 diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/FlutterGuiTestRule.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/FlutterGuiTestRule.java index aeca799f06..51e3b7b32b 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/FlutterGuiTestRule.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/FlutterGuiTestRule.java @@ -5,30 +5,48 @@ */ package com.android.tools.idea.tests.gui.framework; -import com.android.testutils.TestUtils; -import com.android.tools.idea.gradle.util.LocalProperties; -import com.android.tools.idea.sdk.IdeSdks; +import static com.android.testutils.TestUtils.getWorkspaceRoot; +import static com.android.testutils.TestUtils.runningFromBazel; +import static com.android.tools.idea.tests.gui.framework.GuiTests.setUpDefaultProjectCreationLocationPath; +import static com.google.common.truth.TruthJUnit.assume; +import static com.intellij.openapi.util.io.FileUtil.sanitizeFileName; +import static org.fest.reflect.core.Reflection.field; +import static org.fest.reflect.core.Reflection.method; +import static org.fest.reflect.core.Reflection.type; + import com.android.tools.idea.tests.gui.framework.fixture.FlutterFrameFixture; import com.android.tools.idea.tests.gui.framework.fixture.FlutterWelcomeFrameFixture; import com.android.tools.idea.tests.gui.framework.fixture.IdeFrameFixture; -import com.android.tools.idea.tests.gui.framework.fixture.IdeaFrameFixture; -import com.android.tools.idea.projectsystem.TestProjectSystem; import com.android.tools.idea.tests.gui.framework.matcher.Matchers; +import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; import com.intellij.openapi.application.ApplicationManager; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.io.FileUtil; -import com.intellij.openapi.util.io.FileUtilRt; -import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.impl.IdeFrameImpl; +import io.flutter.tests.util.ProjectWrangler; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dialog; +import java.awt.Frame; +import java.awt.KeyboardFocusManager; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.KeyEvent; +import java.beans.PropertyChangeListener; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Hashtable; +import java.util.List; +import java.util.concurrent.TimeUnit; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; import org.fest.swing.core.Robot; import org.fest.swing.exception.WaitTimedOutError; -import org.jdom.Document; -import org.jdom.Element; -import org.jdom.input.SAXBuilder; -import org.jdom.xpath.XPath; +import org.fest.swing.timing.Wait; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.junit.AssumptionViolatedException; @@ -39,29 +57,11 @@ import org.junit.runners.model.MultipleFailureException; import org.junit.runners.model.Statement; -import javax.swing.*; -import java.awt.*; -import java.awt.event.KeyEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Hashtable; -import java.util.List; -import java.util.concurrent.TimeUnit; - -import static com.android.testutils.TestUtils.*; -import static com.android.tools.idea.tests.gui.framework.GuiTests.setUpDefaultProjectCreationLocationPath; -import static com.google.common.truth.TruthJUnit.assume; -import static com.intellij.openapi.util.io.FileUtil.sanitizeFileName; -import static org.fest.reflect.core.Reflection.*; - /** * A GUI test rule is used to drive GUI tests. It provides access to top-level * UI elements, such as dialogs, IDE frame, and welcome screen (when no projects * are open). - * + *

* For example: * FlutterGuiTestRule myGuiTest = new FlutterGuiTestRule(); * WizardUtils.createNewApplication(myGuiTest); @@ -69,29 +69,27 @@ * EditorFixture editor = ideFrame.getEditor(); * editor.waitUntilErrorAnalysisFinishes(); * ... - * + *

* {@link TestRule}s can do everything that could be done previously with * methods annotated with {@link org.junit.Before}, * {@link org.junit.After}, {@link org.junit.BeforeClass}, or * {@link org.junit.AfterClass}, but they are more powerful, and more easily * shared between projects and classes. */ -@SuppressWarnings("Duplicates") // Adapted from com.android.tools.idea.tests.gui.framework.GuiTestRule +@SuppressWarnings({"Duplicates", "unused", "deprecation"}) +// Adapted from com.android.tools.idea.tests.gui.framework.GuiTestRule public class FlutterGuiTestRule implements TestRule { /** * Hack to solve focus issue when running with no window manager */ private static final boolean HAS_EXTERNAL_WINDOW_MANAGER = Toolkit.getDefaultToolkit().isFrameStateSupported(Frame.MAXIMIZED_BOTH); - - private FlutterFrameFixture myIdeFrameFixture; - @Nullable private String myTestDirectory; - + /* By nesting a pair of timeouts (one around just the test, one around the entire rule chain), we ensure that Rule code executing + * before/after the test gets a chance to run, while preventing the whole rule chain from running forever. + */ + private static final int DEFAULT_TEST_TIMEOUT_MINUTES = 3; private final RobotTestRule myRobotTestRule = new RobotTestRule(); private final LeakCheck myLeakCheck = new LeakCheck(); - - private Timeout myTimeout = new Timeout(5, TimeUnit.MINUTES); - private final PropertyChangeListener myGlobalFocusListener = e -> { Object oldValue = e.getOldValue(); if ("permanentFocusOwner".equals(e.getPropertyName()) && oldValue instanceof Component && e.getNewValue() == null) { @@ -104,6 +102,10 @@ public class FlutterGuiTestRule implements TestRule { } } }; + private FlutterFrameFixture myIdeFrameFixture; + @Nullable private String myTestDirectory; + private Timeout myInnerTimeout = new DebugFriendlyTimeout(DEFAULT_TEST_TIMEOUT_MINUTES, TimeUnit.MINUTES); + private Timeout myOuterTimeout = new DebugFriendlyTimeout(DEFAULT_TEST_TIMEOUT_MINUTES + 2, TimeUnit.MINUTES); private IdeFrameFixture myOldIdeFrameFixture; public FlutterGuiTestRule withLeakCheck() { @@ -117,13 +119,15 @@ public Statement apply(final Statement base, final Description description) { // TODO(messick) Update this. RuleChain chain = RuleChain.emptyRuleChain() .around(new LogStartAndStop()) + .around(myRobotTestRule) + .around(myOuterTimeout) // Rules should be inside this timeout when possible + .around(new IdeControl(myRobotTestRule::getRobot)) .around(new BlockReloading()) .around(new BazelUndeclaredOutputs()) - .around(myRobotTestRule) .around(myLeakCheck) .around(new IdeHandling()) .around(new ScreenshotOnFailure()) - .around(myTimeout); + .around(myInnerTimeout); // Perf logging currently writes data to the Bazel-specific TEST_UNDECLARED_OUTPUTS_DIR. Skipp logging if running outside of Bazel. if (runningFromBazel()) { @@ -133,43 +137,6 @@ public Statement apply(final Statement base, final Description description) { return chain.apply(base, description); } - private class IdeHandling implements TestRule { - @NotNull - @Override - public Statement apply(final Statement base, final Description description) { - return new Statement() { - @Override - public void evaluate() throws Throwable { - if (!runningFromBazel()) { - // when state can be bad from previous tests, check and skip in that case - assume().that(GuiTests.fatalErrorsFromIde()).named("IDE errors").isEmpty(); - assumeOnlyWelcomeFrameShowing(); - } - setUp(description.getMethodName()); - List errors = new ArrayList<>(); - try { - base.evaluate(); - } catch (MultipleFailureException e) { - errors.addAll(e.getFailures()); - } catch (Throwable e) { - errors.add(e); - } finally { - try { - boolean hasTestPassed = errors.isEmpty(); - errors.addAll(tearDown()); // shouldn't throw, but called inside a try-finally for defense in depth - if (hasTestPassed && !errors.isEmpty()) { // If we get a problem during tearDown, take a snapshot. - new ScreenshotOnFailure().failed(errors.get(0), description); - } - } finally { - //noinspection ThrowFromFinallyBlock; assertEmpty is intended to throw here - MultipleFailureException.assertEmpty(errors); - } - } - } - }; - } - } - private void assumeOnlyWelcomeFrameShowing() { try { FlutterWelcomeFrameFixture.find(robot()); @@ -194,16 +161,6 @@ private void setUp(@NotNull String methodName) { } } - private static ImmutableList thrownFromRunning(Runnable r) { - try { - r.run(); - return ImmutableList.of(); - } - catch (Throwable e) { - return ImmutableList.of(e); - } - } - protected void tearDownProject() { if (!robot().finder().findAll(Matchers.byType(IdeFrameImpl.class).andIsShowing()).isEmpty()) { ideFrame().closeProject(); @@ -220,7 +177,12 @@ private ImmutableList tearDown() { if (!HAS_EXTERNAL_WINDOW_MANAGER) { KeyboardFocusManager.getCurrentKeyboardFocusManager().removePropertyChangeListener(myGlobalFocusListener); } - errors.addAll(GuiTests.fatalErrorsFromIde()); + errors.addAll( + FluentIterable + .from(GuiTests.fatalErrorsFromIde()) + // A hack to allow tests to pass despite duplicate JavaScript plugins. + // TODO(messick) Fix the JDK so this isn't required. + .filter(error -> !error.getCause().getMessage().contains("Duplicate plugin id:JavaScript")).toList()); fixMemLeaks(); return errors.build(); } @@ -259,18 +221,6 @@ private List checkForPopupMenus() { return errors; } - // Note: this works with a cooperating window manager that returns focus properly. It does not work on bare Xvfb. - private static Dialog getActiveModalDialog() { - Window activeWindow = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); - if (activeWindow instanceof Dialog) { - Dialog dialog = (Dialog)activeWindow; - if (dialog.getModalityType() == Dialog.ModalityType.APPLICATION_MODAL) { - return dialog; - } - } - return null; - } - private void fixMemLeaks() { myIdeFrameFixture = null; @@ -281,128 +231,44 @@ private void fixMemLeaks() { field("containerMap").ofType(Hashtable.class).in(manager).get().clear(); } - public FlutterFrameFixture importSimpleLocalApplication() throws IOException { - return importProjectAndWaitForProjectSyncToFinish("SimpleLocalApplication"); - } - - /** - * @deprecated use importSimpleLocalApplication that doesn't use remote repositories. - */ - @Deprecated() public FlutterFrameFixture importSimpleApplication() throws IOException { - return importProjectAndWaitForProjectSyncToFinish("SimpleApplication"); - } - - public FlutterFrameFixture importMultiModule() throws IOException { - return importProjectAndWaitForProjectSyncToFinish("MultiModule"); + return importProject("simple_app"); } - public FlutterFrameFixture importProjectAndWaitForProjectSyncToFinish(@NotNull String projectDirName) throws IOException { - return importProjectAndWaitForProjectSyncToFinish(projectDirName, null); + public FlutterFrameFixture openSimpleApplication() throws IOException { + return openProject("simple_app"); } - public FlutterFrameFixture importProjectAndWaitForProjectSyncToFinish(@NotNull String projectDirName, @Nullable String buildFilePath) throws IOException { - importProject(projectDirName, buildFilePath); - //testSystem().waitForProjectSyncToFinish(baseIdeFrame()); - return ideFrame(); + public FlutterFrameFixture importProject(@NotNull String name) throws IOException { + return importProjectAndWaitForProjectSyncToFinish(name); } - public FlutterFrameFixture importProject(@NotNull String projectDirName) throws IOException { - return importProject(projectDirName, null); + public FlutterFrameFixture openProject(@NotNull String name) throws IOException { + return openProjectAndWaitForProjectSyncToFinish(name); } - public FlutterFrameFixture importProject(@NotNull String projectDirName, @Nullable String buildFilePath) throws IOException { - File testProjectDir = setUpProject(projectDirName); - //testSystem().importProject(testProjectDir, robot(), buildFilePath); + public FlutterFrameFixture importProjectAndWaitForProjectSyncToFinish(@NotNull String projectDirName) throws IOException { + importOrOpenProject(projectDirName, true).waitForProjectSyncToFinish(); return ideFrame(); } - /** - * Sets up a project before using it in a UI test: - *

- * - * @param projectDirName the name of the project's root directory. Tests are located in testData/guiTests. - * @throws IOException if an unexpected I/O error occurs. - */ - private File setUpProject(@NotNull String projectDirName) throws IOException { - File projectPath = copyProjectBeforeOpening(projectDirName); - - updateLocalProperties(projectPath); - cleanUpProjectForImport(projectPath); - return projectPath; - } - - public File copyProjectBeforeOpening(@NotNull String projectDirName) throws IOException { - File masterProjectPath = getMasterProjectDirPath(projectDirName); - - File projectPath = getTestProjectDirPath(projectDirName); - if (projectPath.isDirectory()) { - FileUtilRt.delete(projectPath); - } - FileUtil.copyDir(masterProjectPath, projectPath); - return projectPath; - } - - protected void updateLocalProperties(File projectPath) throws IOException { - LocalProperties localProperties = new LocalProperties(projectPath); - localProperties.setAndroidSdkPath(IdeSdks.getInstance().getAndroidSdkPath()); - localProperties.save(); - } - - @NotNull - protected File getMasterProjectDirPath(@NotNull String projectDirName) { - return new File(GuiTests.getTestProjectsRootDirPath(), projectDirName); + public FlutterFrameFixture openProjectAndWaitForProjectSyncToFinish(@NotNull String projectDirName) throws IOException { + importOrOpenProject(projectDirName, false).waitForProjectSyncToFinish(); + return ideFrame(); } - @NotNull - protected File getTestProjectDirPath(@NotNull String projectDirName) { - return new File(GuiTests.getProjectCreationDirPath(myTestDirectory), projectDirName); - } + public FlutterFrameFixture importOrOpenProject(@NotNull String projectDirName, boolean isImport) throws IOException { + ProjectWrangler wrangler = new ProjectWrangler(myTestDirectory); + VirtualFile toSelect = VfsUtil.findFileByIoFile(wrangler.setUpProject(projectDirName, isImport), true); + ApplicationManager.getApplication().invokeAndWait(() -> wrangler.openProject(toSelect)); - public void cleanUpProjectForImport(@NotNull File projectPath) { - File dotIdeaFolderPath = new File(projectPath, Project.DIRECTORY_STORE_FOLDER); - if (dotIdeaFolderPath.isDirectory()) { - File modulesXmlFilePath = new File(dotIdeaFolderPath, "modules.xml"); - if (modulesXmlFilePath.isFile()) { - SAXBuilder saxBuilder = new SAXBuilder(); - try { - Document document = saxBuilder.build(modulesXmlFilePath); - XPath xpath = XPath.newInstance("//*[@fileurl]"); - //noinspection unchecked - List modules = xpath.selectNodes(document); - int urlPrefixSize = "file://$PROJECT_DIR$/".length(); - for (Element module : modules) { - String fileUrl = module.getAttributeValue("fileurl"); - if (!StringUtil.isEmpty(fileUrl)) { - String relativePath = FileUtil.toSystemDependentName(fileUrl.substring(urlPrefixSize)); - File imlFilePath = new File(projectPath, relativePath); - if (imlFilePath.isFile()) { - FileUtilRt.delete(imlFilePath); - } - // It is likely that each module has a "build" folder. Delete it as well. - File buildFilePath = new File(imlFilePath.getParentFile(), "build"); - if (buildFilePath.isDirectory()) { - FileUtilRt.delete(buildFilePath); - } - } - } - } - catch (Throwable ignored) { - // if something goes wrong, just ignore. Most likely it won't affect project import in any way. - } - } - FileUtilRt.delete(dotIdeaFolderPath); - } + Wait.seconds(5).expecting("Project to be open").until(() -> ProjectManager.getInstance().getOpenProjects().length != 0); + // TODO(messick) Find a way to start the IDE without the tip-of-the-day showing -- this is flaky, fails if dialog has focus. + ideFrame().dismissTipDialog(); + // After the project is opened there will be an indexing and an analysis phase, and these can happen in any order. + // Waiting for indexing to finish, makes sure analysis will start next or all analysis was done already. + GuiTests.waitForProjectIndexingToFinish(ProjectManager.getInstance().getOpenProjects()[0]); + return ideFrame(); } public void waitForBackgroundTasks() { @@ -453,7 +319,71 @@ public IdeFrameFixture baseIdeFrame() { } public FlutterGuiTestRule withTimeout(long timeout, @NotNull TimeUnit timeUnits) { - myTimeout = new Timeout(timeout, timeUnits); + myInnerTimeout = new Timeout(timeout, timeUnits); + myOuterTimeout = new Timeout(timeUnits.toSeconds(timeout) + 120, TimeUnit.SECONDS); return this; } + + private static ImmutableList thrownFromRunning(Runnable r) { + try { + r.run(); + return ImmutableList.of(); + } + catch (Throwable e) { + return ImmutableList.of(e); + } + } + + // Note: this works with a cooperating window manager that returns focus properly. It does not work on bare Xvfb. + private static Dialog getActiveModalDialog() { + Window activeWindow = KeyboardFocusManager.getCurrentKeyboardFocusManager().getActiveWindow(); + if (activeWindow instanceof Dialog) { + Dialog dialog = (Dialog)activeWindow; + if (dialog.getModalityType() == Dialog.ModalityType.APPLICATION_MODAL) { + return dialog; + } + } + return null; + } + + private class IdeHandling implements TestRule { + @NotNull + @Override + public Statement apply(final Statement base, final Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + if (!runningFromBazel()) { + // when state can be bad from previous tests, check and skip in that case + assume().that(GuiTests.fatalErrorsFromIde()).named("IDE errors").isEmpty(); + assumeOnlyWelcomeFrameShowing(); + } + setUp(description.getMethodName()); + List errors = new ArrayList<>(); + try { + base.evaluate(); + } + catch (MultipleFailureException e) { + errors.addAll(e.getFailures()); + } + catch (Throwable e) { + errors.add(e); + } + finally { + try { + boolean hasTestPassed = errors.isEmpty(); + errors.addAll(tearDown()); // shouldn't throw, but called inside a try-finally for defense in depth + if (hasTestPassed && !errors.isEmpty()) { // If we get a problem during tearDown, take a snapshot. + new ScreenshotOnFailure().failed(errors.get(0), description); + } + } + finally { + //noinspection ThrowFromFinallyBlock; assertEmpty is intended to throw here + MultipleFailureException.assertEmpty(errors); + } + } + } + }; + } + } } diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterFrameFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterFrameFixture.java index dd679153d6..83c9862e77 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterFrameFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterFrameFixture.java @@ -11,8 +11,10 @@ import com.android.tools.idea.tests.gui.framework.matcher.Matchers; import com.intellij.openapi.wm.impl.IdeFrameImpl; import org.fest.swing.core.Robot; +import org.fest.swing.fixture.DialogFixture; import org.jetbrains.annotations.NotNull; +@SuppressWarnings({"MethodOverridesStaticMethodOfSuperclass", "UnusedReturnValue"}) public class FlutterFrameFixture extends IdeaFrameFixture { private FlutterFrameFixture(@NotNull Robot robot, @NotNull IdeFrameImpl target) { super(robot, target); @@ -33,6 +35,14 @@ public NewFlutterModuleWizardFixture findNewModuleWizard() { return NewFlutterModuleWizardFixture.find(this); } + public FlutterFrameFixture dismissTipDialog() { + DialogFixture tipDialog = findDialog("Tip of the Day"); + if (tipDialog != null) { + tipDialog.close(); + } + return this; + } + public void waitForProjectSyncToFinish() { GuiTests.waitForBackgroundTasks(robot()); } diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterWelcomeFrameFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterWelcomeFrameFixture.java index 7c6670ead0..71b45fd60d 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterWelcomeFrameFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/FlutterWelcomeFrameFixture.java @@ -14,6 +14,7 @@ import org.jetbrains.annotations.NotNull; // Adapted from com.android.tools.idea.tests.gui.framework.fixture.WelcomeFrameFixture +@SuppressWarnings("SameParameterValue") public class FlutterWelcomeFrameFixture extends ComponentFixture { private static final String NEW_PROJECT_WELCOME_ID = "flutter.NewProject.welcome"; // See META-INF/studio-contribs.xml diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/IdeaFrameFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/IdeaFrameFixture.java index 83ba47b3f2..6de2a9d14e 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/IdeaFrameFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/IdeaFrameFixture.java @@ -5,6 +5,19 @@ */ package com.android.tools.idea.tests.gui.framework.fixture; +import static com.android.tools.idea.gradle.util.BuildMode.ASSEMBLE; +import static com.android.tools.idea.gradle.util.BuildMode.SOURCE_GEN; +import static com.android.tools.idea.gradle.util.GradleUtil.getGradleBuildFile; +import static com.android.tools.idea.ui.GuiTestingService.EXECUTE_BEFORE_PROJECT_BUILD_IN_GUI_TEST_KEY; +import static java.awt.event.InputEvent.CTRL_MASK; +import static java.awt.event.InputEvent.META_MASK; +import static org.fest.swing.edt.GuiActionRunner.execute; +import static org.jetbrains.plugins.gradle.settings.DistributionType.LOCAL; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + import com.android.ide.common.repository.GradleVersion; import com.android.tools.idea.gradle.dsl.api.GradleBuildModel; import com.android.tools.idea.gradle.plugin.AndroidPluginVersionUpdater; @@ -26,9 +39,7 @@ import com.android.tools.idea.tests.gui.framework.fixture.gradle.GradleBuildModelFixture; import com.android.tools.idea.tests.gui.framework.fixture.gradle.GradleProjectEventListener; import com.android.tools.idea.tests.gui.framework.fixture.gradle.GradleToolWindowFixture; -import com.android.tools.idea.projectsystem.TestProjectSystem; import com.android.tools.idea.tests.gui.framework.matcher.Matchers; -import com.android.tools.idea.ui.GuiTestingService; import com.google.common.collect.Lists; import com.intellij.ide.actions.ShowSettingsUtilImpl; import com.intellij.openapi.Disposable; @@ -46,6 +57,21 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.wm.impl.IdeFrameImpl; import com.intellij.util.ThreeState; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.KeyboardFocusManager; +import java.awt.Point; +import java.awt.event.KeyEvent; +import java.io.File; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Function; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; import org.fest.swing.core.GenericTypeMatcher; import org.fest.swing.core.Robot; import org.fest.swing.edt.GuiQuery; @@ -60,39 +86,13 @@ import org.jetbrains.plugins.gradle.settings.GradleProjectSettings; import org.jetbrains.plugins.gradle.settings.GradleSettings; -import javax.swing.*; -import java.awt.*; -import java.awt.event.KeyEvent; -import java.io.File; -import java.io.IOException; -import java.util.Arrays; -import java.util.List; -import java.util.Objects; -import java.util.concurrent.atomic.AtomicReference; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import static com.android.tools.idea.gradle.util.BuildMode.ASSEMBLE; -import static com.android.tools.idea.gradle.util.BuildMode.SOURCE_GEN; -import static com.android.tools.idea.gradle.util.GradleUtil.getGradleBuildFile; -import static com.android.tools.idea.ui.GuiTestingService.EXECUTE_BEFORE_PROJECT_BUILD_IN_GUI_TEST_KEY; -import static java.awt.event.InputEvent.CTRL_MASK; -import static java.awt.event.InputEvent.META_MASK; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.fail; -import static org.fest.swing.edt.GuiActionRunner.execute; -import static org.jetbrains.plugins.gradle.settings.DistributionType.LOCAL; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -@SuppressWarnings("Duplicates") // Adapted from IdeFrameFixture in uitest-framework module, due to private constructor. +@SuppressWarnings({"Duplicates", "unused", "UnusedReturnValue", "RedundantSuppression", "SameParameterValue", "deprecation"}) +// Adapted from IdeFrameFixture in uitest-framework module, due to private constructor. public class IdeaFrameFixture extends ComponentFixture { @NotNull private final GradleProjectEventListener myGradleProjectEventListener; @NotNull private final Modules myModules; @NotNull private final IdeFrameFixture myIdeFrameFixture; // Replaces 'this' when creating component fixtures. - private TestProjectSystem myTestProjectSystem; private EditorFixture myEditor; private boolean myIsClosed; @@ -111,11 +111,6 @@ public class IdeaFrameFixture extends ComponentFixture resultRef.get() != null); + .until(() -> resultRef.get() != null); return resultRef.get(); } @@ -353,7 +348,7 @@ public FileFixture findExistingFileByRelativePath(@NotNull String relativePath) * Returns the virtual file corresponding to the given path. The path must be relative to the project root directory * (the top-level directory containing all source files associated with the project). * - * @param relativePath a file path relative to the project root directory + * @param relativePath a file path relative to the project root directory * @param requireExists if true, this method asserts that the given path corresponds to an existing file * @return the virtual file corresponding to the given path, or null if requireExists is false and the file does not exist */ @@ -373,10 +368,6 @@ public VirtualFile findFileByRelativePath(@NotNull String relativePath, boolean return file; } - public void setTestProjectSystem(TestProjectSystem testProjectSystem) { - myTestProjectSystem = testProjectSystem; - } - @NotNull public IdeaFrameFixture requestProjectSync() { return requestProjectSync(null); @@ -608,13 +599,13 @@ public IdeaFrameFixture setGradleJvmArgs(@NotNull String jvmArgs) { } @NotNull - public IdeaFrameFixture updateGradleWrapperVersion(@NotNull String version) throws IOException { + public IdeaFrameFixture updateGradleWrapperVersion(@NotNull String version) { GradleWrapper.find(getProject()).updateDistributionUrlAndDisplayFailure(version); return this; } @NotNull - public IdeaFrameFixture updateAndroidGradlePluginVersion(@NotNull String version) throws IOException { + public IdeaFrameFixture updateAndroidGradlePluginVersion(@NotNull String version) { ApplicationManager.getApplication().invokeAndWait( () -> { AndroidPluginVersionUpdater versionUpdater = AndroidPluginVersionUpdater.getInstance(getProject()); @@ -631,19 +622,13 @@ public GradleBuildModelFixture parseBuildFileForModule(@NotNull String moduleNam Ref buildModelRef = new Ref<>(); new ReadAction() { @Override - protected void run(@NotNull Result result) throws Throwable { + protected void run(@NotNull Result result) { buildModelRef.set(GradleBuildModel.parseBuildFile(buildFile, getProject())); } }.execute(); return new GradleBuildModelFixture(buildModelRef.get()); } - private static class NoOpDisposable implements Disposable { - @Override - public void dispose() { - } - } - public void selectApp(@NotNull String appName) { ActionButtonFixture runButton = findRunApplicationButton(); Container actionToolbarContainer = GuiQuery.getNonNull(() -> runButton.target().getParent()); @@ -697,4 +682,15 @@ public IdeaFrameFixture setIdeFrameSize(@NotNull Dimension size) { target().setSize(size); return this; } + + @NotNull + public static IdeaFrameFixture find(@NotNull final Robot robot) { + return new IdeaFrameFixture(robot, GuiTests.waitUntilShowing(robot, Matchers.byType(IdeFrameImpl.class))); + } + + private static class NoOpDisposable implements Disposable { + @Override + public void dispose() { + } + } } diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MacMenuFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MacMenuFixture.java index 73cf7356d6..46a94324dc 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MacMenuFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MacMenuFixture.java @@ -5,6 +5,9 @@ */ package com.android.tools.idea.tests.gui.framework.fixture; +import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; + import com.android.tools.idea.tests.gui.framework.GuiTests; import com.android.tools.idea.tests.gui.framework.matcher.Matchers; import com.google.common.base.Joiner; @@ -12,18 +15,15 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Ref; import com.intellij.openapi.wm.impl.IdeFrameImpl; +import java.awt.Container; +import java.util.Arrays; +import java.util.List; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; import org.fest.swing.core.Robot; import org.fest.swing.timing.Wait; import org.jetbrains.annotations.NotNull; -import javax.swing.*; -import java.awt.*; -import java.util.Arrays; -import java.util.List; - -import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth.assertWithMessage; - // Use the MenuItemFixture from fest to control Mac menus. public class MacMenuFixture extends MenuFixture { diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MenuItemFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MenuItemFixture.java index 34be81f830..506984c5d2 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MenuItemFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/MenuItemFixture.java @@ -5,12 +5,12 @@ */ package com.android.tools.idea.tests.gui.framework.fixture; +import javax.swing.JMenuItem; import org.fest.swing.core.Robot; import org.fest.swing.fixture.JMenuItemFixture; import org.jetbrains.annotations.NotNull; -import javax.swing.*; - +@SuppressWarnings("UnusedReturnValue") public class MenuItemFixture extends JMenuItemFixture { public MenuItemFixture(@NotNull Robot robot, @NotNull JMenuItem target) { super(robot, target); diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterProjectStepFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterProjectStepFixture.java index c81dbc720e..6c0ad7b694 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterProjectStepFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterProjectStepFixture.java @@ -5,26 +5,28 @@ */ package com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard; +import static com.google.common.truth.Truth.assertThat; +import static org.fest.swing.edt.GuiActionRunner.execute; + import com.android.tools.idea.tests.gui.framework.fixture.wizard.AbstractWizardFixture; import com.android.tools.idea.tests.gui.framework.fixture.wizard.AbstractWizardStepFixture; import com.intellij.openapi.ui.TextFieldWithBrowseButton; import com.intellij.ui.components.JBLabel; import io.flutter.project.FlutterProjectStep; +import java.awt.Component; +import java.io.File; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JRootPane; +import javax.swing.text.JTextComponent; import org.fest.swing.edt.GuiQuery; import org.fest.swing.exception.ComponentLookupException; import org.fest.swing.fixture.JComboBoxFixture; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.*; -import javax.swing.text.JTextComponent; -import java.awt.*; -import java.io.File; - -import static com.google.common.truth.Truth.assertThat; -import static org.fest.swing.edt.GuiActionRunner.execute; - // TODO(messick): Browse button for SDK; "Install SDK" button +@SuppressWarnings({"UnusedReturnValue", "unused"}) public class FlutterProjectStepFixture extends AbstractWizardStepFixture { protected FlutterProjectStepFixture(@NotNull W wizard, @NotNull JRootPane target) { super(FlutterProjectStepFixture.class, wizard, target); @@ -84,7 +86,7 @@ public File getLocationInFileSystem() { final TextFieldWithBrowseButton locationField = getLocationField(); return execute(new GuiQuery() { @Override - protected File executeInEDT() throws Throwable { + protected File executeInEDT() { String location = locationField.getText(); assertThat(location).isNotEmpty(); return new File(location); diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterSettingsStepFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterSettingsStepFixture.java index dcbcb63415..62dd84cc7b 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterSettingsStepFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/FlutterSettingsStepFixture.java @@ -5,20 +5,22 @@ */ package com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard; +import static com.google.common.truth.Truth.assertThat; +import static org.fest.swing.edt.GuiActionRunner.execute; + import com.android.tools.adtui.LabelWithEditButton; import com.android.tools.idea.tests.gui.framework.fixture.wizard.AbstractWizardFixture; import com.android.tools.idea.tests.gui.framework.fixture.wizard.AbstractWizardStepFixture; import io.flutter.FlutterBundle; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JRootPane; +import javax.swing.text.JTextComponent; import org.fest.swing.edt.GuiQuery; import org.fest.swing.fixture.JCheckBoxFixture; import org.jetbrains.annotations.NotNull; -import javax.swing.*; -import javax.swing.text.JTextComponent; - -import static com.google.common.truth.Truth.assertThat; -import static org.fest.swing.edt.GuiActionRunner.execute; - +@SuppressWarnings({"UnusedReturnValue", "unused"}) public class FlutterSettingsStepFixture extends AbstractWizardStepFixture { protected FlutterSettingsStepFixture(@NotNull W wizard, @NotNull JRootPane target) { @@ -56,7 +58,7 @@ public String getPackageName() { final LabelWithEditButton locationField = robot().finder().findByType(target(), LabelWithEditButton.class); return execute(new GuiQuery() { @Override - protected String executeInEDT() throws Throwable { + protected String executeInEDT() { String location = locationField.getText(); assertThat(location).isNotEmpty(); return location; diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterModuleWizardFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterModuleWizardFixture.java index f512518387..00aaaedb48 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterModuleWizardFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterModuleWizardFixture.java @@ -5,21 +5,21 @@ */ package com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard; +import static com.android.tools.idea.tests.gui.framework.GuiTests.findAndClickButton; + import com.android.tools.adtui.ASGallery; import com.android.tools.idea.tests.gui.framework.GuiTests; import com.android.tools.idea.tests.gui.framework.fixture.IdeaFrameFixture; import com.android.tools.idea.tests.gui.framework.fixture.wizard.AbstractWizardFixture; import com.android.tools.idea.tests.gui.framework.matcher.Matchers; import io.flutter.module.FlutterProjectType; +import javax.swing.JDialog; +import javax.swing.JRootPane; import org.fest.swing.core.Robot; import org.fest.swing.fixture.JListFixture; import org.fest.swing.timing.Wait; import org.jetbrains.annotations.NotNull; -import javax.swing.*; - -import static com.android.tools.idea.tests.gui.framework.GuiTests.findAndClickButton; - public class NewFlutterModuleWizardFixture extends AbstractWizardFixture { private NewFlutterModuleWizardFixture(@NotNull Robot robot, @NotNull JDialog target) { diff --git a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterProjectWizardFixture.java b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterProjectWizardFixture.java index bac4921000..093793b2f3 100644 --- a/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterProjectWizardFixture.java +++ b/flutter-studio/testSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/NewFlutterProjectWizardFixture.java @@ -5,6 +5,8 @@ */ package com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard; +import static com.google.common.collect.Lists.newArrayList; + import com.android.tools.adtui.ASGallery; import com.android.tools.idea.tests.gui.framework.GuiTests; import com.android.tools.idea.tests.gui.framework.fixture.wizard.AbstractWizardFixture; @@ -13,17 +15,16 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import io.flutter.module.FlutterProjectType; +import java.util.List; +import javax.swing.JDialog; +import javax.swing.JRootPane; import org.fest.swing.core.Robot; import org.fest.swing.fixture.JListFixture; import org.fest.swing.timing.Wait; import org.jetbrains.annotations.NotNull; -import javax.swing.*; -import java.util.List; - -import static com.google.common.collect.Lists.newArrayList; - // Adapted from com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard.NewProjectWizardFixture +@SuppressWarnings("UnusedReturnValue") public class NewFlutterProjectWizardFixture extends AbstractWizardFixture { private NewFlutterProjectWizardFixture(@NotNull Robot robot, @NotNull JDialog target) { diff --git a/flutter-studio/testSrc/io/flutter/GradleDependencyFetcherTest.java b/flutter-studio/testSrc/io/flutter/GradleDependencyFetcherTest.java index e17f9a9b4a..4b59c57396 100644 --- a/flutter-studio/testSrc/io/flutter/GradleDependencyFetcherTest.java +++ b/flutter-studio/testSrc/io/flutter/GradleDependencyFetcherTest.java @@ -5,6 +5,11 @@ */ package io.flutter; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + import com.intellij.mock.MockApplication; import com.intellij.mock.MockProject; import com.intellij.openapi.Disposable; @@ -13,13 +18,10 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; import io.flutter.android.GradleDependencyFetcher; -import org.junit.BeforeClass; -import org.junit.Test; - import java.util.List; import java.util.Map; - -import static org.junit.Assert.*; +import org.junit.BeforeClass; +import org.junit.Test; public class GradleDependencyFetcherTest { diff --git a/flutter-studio/testSrc/io/flutter/tests/gui/NewModuleTest.java b/flutter-studio/testSrc/io/flutter/tests/gui/NewModuleTest.java index 8b3bc879cb..2956d12ee0 100644 --- a/flutter-studio/testSrc/io/flutter/tests/gui/NewModuleTest.java +++ b/flutter-studio/testSrc/io/flutter/tests/gui/NewModuleTest.java @@ -5,58 +5,37 @@ */ package io.flutter.tests.gui; +import static com.google.common.truth.Truth.assertThat; + import com.android.tools.idea.tests.gui.framework.FlutterGuiTestRule; -import com.android.tools.idea.tests.gui.framework.GuiTestSuiteRunner; import com.android.tools.idea.tests.gui.framework.fixture.EditorFixture; import com.android.tools.idea.tests.gui.framework.fixture.FlutterFrameFixture; import com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard.FlutterProjectStepFixture; import com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard.FlutterSettingsStepFixture; import com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard.NewFlutterModuleWizardFixture; -import com.intellij.openapi.application.PathManager; import io.flutter.module.FlutterProjectType; -import io.flutter.tests.util.WizardUtils; +import java.io.IOException; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; -import org.junit.runners.model.InitializationError; -import org.junit.runners.model.RunnerBuilder; - -import java.io.IOException; - -import static com.google.common.truth.Truth.assertThat; @RunWith(NewModuleTest.GuiTestRemoteRunner.class) public class NewModuleTest { - /** - * This custom runner sets a custom path to the GUI tests. - * This needs to be done by the test runner because the test framework - * initializes the path before the test class is loaded. - */ - public static class GuiTestRemoteRunner extends com.intellij.testGuiFramework.framework.GuiTestRemoteRunner { - - public GuiTestRemoteRunner(Class suiteClass) { - super(suiteClass); - System.setProperty("gui.tests.root.dir.path", "somewhere"); - } - - } @Rule public final FlutterGuiTestRule myGuiTest = new FlutterGuiTestRule(); @Test - public void createNewAppModule() { - PathManager.getHomePath(); - WizardUtils.createNewApplication(myGuiTest); - FlutterFrameFixture ideFrame = myGuiTest.ideFrame(); + public void createNewAppModule() throws IOException { + FlutterFrameFixture ideFrame = myGuiTest.importSimpleApplication(); EditorFixture editor = ideFrame.getEditor(); editor.waitUntilErrorAnalysisFinishes(); NewFlutterModuleWizardFixture wizardFixture = ideFrame.openFromMenu(NewFlutterModuleWizardFixture::find, "File", "New", "New Module..."); - wizardFixture.chooseModuleType("Flutter Application").clickNext(); + wizardFixture.chooseModuleType("Flutter Package").clickNext(); NewFlutterModuleWizardFixture wizard = ideFrame.findNewModuleWizard(); - FlutterProjectStepFixture projectStep = wizard.getFlutterProjectStep(FlutterProjectType.APP); + FlutterProjectStepFixture projectStep = wizard.getFlutterProjectStep(FlutterProjectType.PACKAGE); assertThat(projectStep.isConfiguredForModules()).isTrue(); // Check error messages. @@ -73,22 +52,32 @@ public void createNewAppModule() { assertThat(projectStep.getErrorMessage()).contains("less than"); projectStep.enterProjectName("module"); - String path = projectStep.getSdkPath(); - projectStep.enterSdkPath(""); - // This does not work. The message comes back as " ". It does work in manual testing. - //assertThat(projectStep.getErrorMessage()).endsWith(("not given.")); - projectStep.enterSdkPath("x"); - assertThat(projectStep.getErrorMessage()).endsWith(("not exist.")); - projectStep.enterSdkPath("/tmp"); - assertThat(projectStep.getErrorMessage()).endsWith(("location.")); - projectStep.enterSdkPath(path); - wizard.clickNext(); - - FlutterSettingsStepFixture settingsStep = wizard.getFlutterSettingsStep(); - settingsStep.enterCompanyDomain("flutter.io"); + // TODO(messick) Fix SDK path tests + //String path = projectStep.getSdkPath(); + //projectStep.enterSdkPath(""); + //// This does not work. The message comes back as " ". It does work in manual testing. + ////assertThat(projectStep.getErrorMessage()).endsWith(("not given.")); + //projectStep.enterSdkPath("x"); + //assertThat(projectStep.getErrorMessage()).endsWith(("not exist.")); + //projectStep.enterSdkPath("/tmp"); + //assertThat(projectStep.getErrorMessage()).endsWith(("location.")); + //projectStep.enterSdkPath(path); wizard.clickFinish(); myGuiTest.waitForBackgroundTasks(); myGuiTest.ideFrame().waitForProjectSyncToFinish(); } + + /** + * This custom runner sets a custom path to the GUI tests. + * This needs to be done by the test runner because the test framework + * initializes the path before the test class is loaded. + */ + public static class GuiTestRemoteRunner extends com.intellij.testGuiFramework.framework.GuiTestRemoteRunner { + + public GuiTestRemoteRunner(Class suiteClass) { + super(suiteClass); + System.setProperty("gui.tests.root.dir.path", "somewhere"); + } + } } diff --git a/flutter-studio/testSrc/io/flutter/tests/gui/NewProjectTest.java b/flutter-studio/testSrc/io/flutter/tests/gui/NewProjectTest.java index edd5dc12f3..a9f30b92e8 100644 --- a/flutter-studio/testSrc/io/flutter/tests/gui/NewProjectTest.java +++ b/flutter-studio/testSrc/io/flutter/tests/gui/NewProjectTest.java @@ -5,6 +5,9 @@ */ package io.flutter.tests.gui; +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertEquals; + import com.android.tools.idea.tests.gui.framework.FlutterGuiTestRule; import com.android.tools.idea.tests.gui.framework.GuiTestSuiteRunner; import com.android.tools.idea.tests.gui.framework.fixture.EditorFixture; @@ -18,18 +21,15 @@ import org.junit.Test; import org.junit.runner.RunWith; -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertEquals; - /** * As long as the wizard is working properly the error checks * in FlutterProjectCreator will never be triggered. That leaves * quite a few lines untested. It currently has 79% coverage. - * + *

* The "Install SDK" button of FlutterProjectStep is not tested. * It has 86% coverage currently, and most of the untested code * is part of the installer implementation. - * + *

* If flakey tests are found try adjusting these settings: * Settings festSettings = myGuiTest.robot().settings(); * festSettings.delayBetweenEvents(50); // 30 diff --git a/flutter-studio/testSrc/io/flutter/tests/util/ProjectWrangler.java b/flutter-studio/testSrc/io/flutter/tests/util/ProjectWrangler.java new file mode 100644 index 0000000000..e7d3319da2 --- /dev/null +++ b/flutter-studio/testSrc/io/flutter/tests/util/ProjectWrangler.java @@ -0,0 +1,191 @@ +/* + * Copyright 2019 The Chromium Authors. All rights reserved. + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ +package io.flutter.tests.util; + +import static com.android.tools.idea.util.ToolWindows.activateProjectView; +import static com.intellij.ide.impl.ProjectUtil.focusProjectWindow; +import static com.intellij.openapi.fileChooser.impl.FileChooserUtil.setLastOpenedFile; +import static com.intellij.openapi.ui.Messages.showErrorDialog; +import static com.intellij.openapi.util.io.FileUtil.toCanonicalPath; +import static com.intellij.openapi.util.io.FileUtil.toSystemDependentName; +import static com.intellij.util.ExceptionUtil.rethrowUnchecked; + +import com.android.tools.idea.tests.gui.framework.GuiTests; +import com.intellij.openapi.application.ApplicationManager; +import com.intellij.openapi.application.PathManager; +import com.intellij.openapi.application.TransactionGuard; +import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.io.FileUtilRt; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.platform.PlatformProjectOpenProcessor; +import com.intellij.platform.templates.github.ZipUtil; +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.EnumSet; +import java.util.List; +import org.jdom.Document; +import org.jdom.Element; +import org.jdom.input.SAXBuilder; +import org.jdom.xpath.XPath; +import org.jetbrains.annotations.NotNull; + +/** + * ProjectWrangler encapsulates the project operations required by GUI tests. + * The testData directory must be identified as a test resource in the Project + * Structure dialog. + *

+ * Sample projects are found in $MODULE_NAME/testData/PROJECT_DIR + * During a test build everything in testData (but NOT testData itself) is + * copied to the working directory under out/test. When a sample project is + * opened or imported it is first copied to a temp directory, then opened. + *

+ * Opening a project uses it as-is. Importing a project first deletes IntelliJ + * meta-data, like .idea and *.iml. + */ +@SuppressWarnings("deprecation") +public class ProjectWrangler { + + // Name of the module that defines GUI tests + public static final String MODULE_NAME = "flutter-studio"; + + // Name of the directory under testData where test projects are hosted during testing + public static final String PROJECT_DIR = "flutter_projects"; + + private static final String SRC_ZIP_NAME = "src.zip"; + + @NotNull final private String myTestDirectory; + + public ProjectWrangler(@NotNull String dirName) { + myTestDirectory = dirName; + } + + public void openProject(@NotNull VirtualFile selectedFile) { + VirtualFile projectFolder = findProjectFolder(selectedFile); + try { + doOpenProject(projectFolder); + } + catch (Throwable e) { + if (ApplicationManager.getApplication().isUnitTestMode()) { + rethrowUnchecked(e); + } + showErrorDialog(e.getMessage(), "Open Project"); + getLogger().error(e); + } + } + + @NotNull + private Logger getLogger() { + return Logger.getInstance(getClass()); + } + + public File setUpProject(@NotNull String projectDirName, boolean isImport) throws IOException { + File projectPath = copyProjectBeforeOpening(projectDirName); + if (isImport) { + cleanUpProjectForImport(projectPath); + } + return projectPath; + } + + public File copyProjectBeforeOpening(@NotNull String projectDirName) throws IOException { + File masterProjectPath = getMasterProjectDirPath(projectDirName); + + File projectPath = getTestProjectDirPath(projectDirName); + if (projectPath.isDirectory()) { + FileUtilRt.delete(projectPath); + } + // If masterProjectPath contains a src.zip file, unzip the file to projectPath. + // Otherwise, copy the whole directory to projectPath. + File srcZip = new File(masterProjectPath, SRC_ZIP_NAME); + if (srcZip.exists() && srcZip.isFile()) { + ZipUtil.unzip(null, projectPath, srcZip, null, null, true); + } + else { + FileUtil.copyDir(masterProjectPath, projectPath); + } + return projectPath; + } + + @NotNull + private File getTestProjectDirPath(@NotNull String projectDirName) { + assert (myTestDirectory != null); + return new File(GuiTests.getProjectCreationDirPath(myTestDirectory), projectDirName); + } + + public void cleanUpProjectForImport(@NotNull File projectPath) { + File dotIdeaFolderPath = new File(projectPath, Project.DIRECTORY_STORE_FOLDER); + if (dotIdeaFolderPath.isDirectory()) { + File modulesXmlFilePath = new File(dotIdeaFolderPath, "modules.xml"); + if (modulesXmlFilePath.isFile()) { + SAXBuilder saxBuilder = new SAXBuilder(); + try { + Document document = saxBuilder.build(modulesXmlFilePath); + XPath xpath = XPath.newInstance("//*[@fileurl]"); + //noinspection unchecked + List modules = xpath.selectNodes(document); + int urlPrefixSize = "file://$PROJECT_DIR$/".length(); + for (Element module : modules) { + String fileUrl = module.getAttributeValue("fileurl"); + if (!StringUtil.isEmpty(fileUrl)) { + String relativePath = toSystemDependentName(fileUrl.substring(urlPrefixSize)); + File imlFilePath = new File(projectPath, relativePath); + if (imlFilePath.isFile()) { + FileUtilRt.delete(imlFilePath); + } + // It is likely that each module has a "build" folder. Delete it as well. + File buildFilePath = new File(imlFilePath.getParentFile(), "build"); + if (buildFilePath.isDirectory()) { + FileUtilRt.delete(buildFilePath); + } + } + } + } + catch (Throwable ignored) { + // if something goes wrong, just ignore. Most likely it won't affect project import in any way. + } + } + FileUtilRt.delete(dotIdeaFolderPath); + } + } + + @NotNull + private static File getMasterProjectDirPath(@NotNull String projectDirName) { + return new File(ProjectWrangler.getTestProjectsRootDirPath(), projectDirName); + } + + @NotNull + private static File getTestProjectsRootDirPath() { + // It is important that the testData directory be marked as a test resource so its content is copied to out/test dir + String testDataPath = PathManager.getHomePathFor(ProjectWrangler.class); + // "out/test" is defined by IntelliJ but we may want to change the module or root dir of the test projects. + testDataPath = Paths.get(testDataPath, "out", "test", MODULE_NAME).toString(); + testDataPath = toCanonicalPath(toSystemDependentName(testDataPath)); + return new File(testDataPath, PROJECT_DIR); + } + + @NotNull + private static VirtualFile findProjectFolder(@NotNull VirtualFile selectedFile) { + return selectedFile.isDirectory() ? selectedFile : selectedFile.getParent(); + } + + private static void afterProjectOpened(@NotNull VirtualFile projectFolder, @NotNull Project project) { + TransactionGuard.getInstance().submitTransactionLater(project, () -> { + setLastOpenedFile(project, projectFolder); + focusProjectWindow(project, false); + activateProjectView(project); + }); + } + + private static void doOpenProject(VirtualFile baseDir) { + // Open the project window. + EnumSet options = EnumSet.noneOf(PlatformProjectOpenProcessor.Option.class); + Project project = PlatformProjectOpenProcessor.doOpenProject(baseDir, null, -1, null, options); + afterProjectOpened(baseDir, project); + } +} diff --git a/flutter-studio/testSrc/io/flutter/tests/util/WizardUtils.java b/flutter-studio/testSrc/io/flutter/tests/util/WizardUtils.java index ba8dae7690..f273746d84 100644 --- a/flutter-studio/testSrc/io/flutter/tests/util/WizardUtils.java +++ b/flutter-studio/testSrc/io/flutter/tests/util/WizardUtils.java @@ -29,7 +29,7 @@ public static void createNewPlugin(@NotNull FlutterGuiTestRule guiTest) { public static void createNewProject(@NotNull FlutterGuiTestRule guiTest, @NotNull FlutterProjectType type, String name, String description, String domain, Boolean isKotlin, Boolean isSwift) { - String sdkPath = FlutterSdkUtil.locateSdkFromPath(); + String sdkPath = FlutterSdkUtil.locateSdkFromPath(); if (sdkPath == null) { // Fail fast if the Flutter SDK is not found. System.out.println("Ensure the 'flutter' tool is on your PATH. 'which flutter' is used to find the SDK"); From 36db0cc015b345466e77c59f203a20b7faf0a9a5 Mon Sep 17 00:00:00 2001 From: Phil Quitslund Date: Wed, 13 Feb 2019 09:36:29 -0800 Subject: [PATCH 08/98] read samples from remote / update local cache (#3188) * fetch remote sample index * update index to current stable --- .../flutter/samples/FlutterSampleManager.java | 51 ++++++++++++------- src/io/flutter/samples/index.json | 5 +- 2 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/io/flutter/samples/FlutterSampleManager.java b/src/io/flutter/samples/FlutterSampleManager.java index c6bf752aca..5526b9287d 100644 --- a/src/io/flutter/samples/FlutterSampleManager.java +++ b/src/io/flutter/samples/FlutterSampleManager.java @@ -39,6 +39,8 @@ public class FlutterSampleManager { + private static final String SNIPPETS_REMOTE_INDEX_URL = "https://docs.flutter.io/snippets/index.json"; + private static final Logger LOG = Logger.getInstance(FlutterSampleManager.class); private static List SAMPLES; @@ -51,27 +53,38 @@ public static List getSamples() { return SAMPLES; } - private static List loadSamples() { - final List samples = new ArrayList<>(); + private static JsonArray readSampleIndex(final URL sampleUrl) throws IOException, URISyntaxException { + final String contents = IOUtils.toString(sampleUrl.toURI(), "UTF-8"); + return new JsonParser().parse(contents).getAsJsonArray(); + } + + private static JsonArray readSampleIndex() { + // Try fetching snippets index remotely, and fall back to local cache. try { - // TODO(pq): replace w/ index read from repo (https://github.com/flutter/flutter/pull/25515). - //https://docs.flutter.io/snippets/index.json - - final URL url = FlutterSampleManager.class.getResource("index.json"); - final String contents = IOUtils.toString(url.toURI(), "UTF-8"); - final JsonArray jsonArray = new JsonParser().parse(contents).getAsJsonArray(); - for (JsonElement element : jsonArray) { - final JsonObject sample = element.getAsJsonObject(); - samples.add(new FlutterSample(sample.getAsJsonPrimitive("element").getAsString(), - sample.getAsJsonPrimitive("library").getAsString(), - sample.getAsJsonPrimitive("id").getAsString(), - sample.getAsJsonPrimitive("file").getAsString(), - sample.getAsJsonPrimitive("sourcePath").getAsString(), - sample.getAsJsonPrimitive("description").getAsString())); + return readSampleIndex(new URL(SNIPPETS_REMOTE_INDEX_URL)); + } + catch (URISyntaxException | IOException ignored) { + try { + return readSampleIndex(FlutterSampleManager.class.getResource("index.json")); + } + catch (URISyntaxException | IOException e) { + FlutterUtils.warn(LOG, e); } } - catch (URISyntaxException | IOException e) { - FlutterUtils.warn(LOG, e); + return new JsonArray(); + } + + private static List loadSamples() { + final List samples = new ArrayList<>(); + final JsonArray jsonArray = readSampleIndex(); + for (JsonElement element : jsonArray) { + final JsonObject sample = element.getAsJsonObject(); + samples.add(new FlutterSample(sample.getAsJsonPrimitive("element").getAsString(), + sample.getAsJsonPrimitive("library").getAsString(), + sample.getAsJsonPrimitive("id").getAsString(), + sample.getAsJsonPrimitive("file").getAsString(), + sample.getAsJsonPrimitive("sourcePath").getAsString(), + sample.getAsJsonPrimitive("description").getAsString())); } // Sort by display label. @@ -96,7 +109,7 @@ public static String createSampleProject(@NotNull FlutterSample sample, @NotNull final VirtualFile baseDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(dir); if (baseDir == null) { - return "unable to find project root (" + dir.getPath() +") on refresh"; + return "unable to find project root (" + dir.getPath() + ") on refresh"; } final OutputListener outputListener = new OutputListener() { diff --git a/src/io/flutter/samples/index.json b/src/io/flutter/samples/index.json index d9e636e9ae..adc97218f1 100644 --- a/src/io/flutter/samples/index.json +++ b/src/io/flutter/samples/index.json @@ -1,13 +1,13 @@ [ { "sourcePath": "lib/src/material/icon_button.dart", - "sourceLine": 69, + "sourceLine": 103, "package": "flutter", "library": "material", "element": "IconButton", "id": "material.IconButton", "file": "material.IconButton.dart", - "description": "This sample shows an `IconButton` that uses the Material icon \"volume_up\" to\nincrease the volume." + "description": "In this sample the icon button's background color is defined with an [Ink]\nwidget whose child is an [IconButton]. The icon button's filled background\nis a light shade of blue, it's a filled circle, and it's as big as the\nbutton is." }, { "sourcePath": "lib/src/material/card.dart", @@ -50,4 +50,3 @@ "description": "This example shows a [Scaffold] with an [AppBar], a [BottomAppBar] and a\n[FloatingActionButton]. The [body] is a [Text] placed in a [Center] in order\nto center the text within the [Scaffold] and the [FloatingActionButton] is\ncentered and docked within the [BottomAppBar] using\n[FloatingActionButtonLocation.centerDocked]. The [FloatingActionButton] is\nconnected to a callback that increments a counter." } ] - From 985d084ff742515dacedc6099954299ec57e1ec4 Mon Sep 17 00:00:00 2001 From: stevemessick Date: Wed, 13 Feb 2019 10:40:11 -0800 Subject: [PATCH 09/98] Build 33 (#3189) * Update build for 3.3.1 * cleanup * update changelog --- .travis.yml | 3 ++- CHANGELOG.md | 18 ++++++++++++++++++ product-matrix.json | 28 +++++++++++++++++++--------- resources/META-INF/plugin.xml | 19 +++++++++++++++++++ tool/plugin/lib/plugin.dart | 28 +++++++++++++++------------- tool/plugin/test/plugin_test.dart | 6 +++++- 6 files changed, 78 insertions(+), 24 deletions(-) diff --git a/.travis.yml b/.travis.yml index b367b696f6..81e178029f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -28,7 +28,8 @@ script: ./tool/travis.sh env: - DART_BOT=true - CHECK_BOT=true - - IDEA_VERSION=3.3 + - IDEA_VERSION=2018.2.5 + - IDEA_VERSION=3.3.1 - IDEA_VERSION=3.4 - IDEA_VERSION=2018.3 - IDEA_VERSION=2019.1 diff --git a/CHANGELOG.md b/CHANGELOG.md index 519fb2b9ce..2686b7147c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +## 33.0 +- update build for Android Studio 3.3.1 +- reorder console filters so links work +- more intelligently enable support for detaching from Flutter apps on exit +- change the icon used for paint baselines +- prevent bazel test run configurations from generating in a non-bazel workspace +- support 2019.1 eap +- mention 'Dart' in the plugin description +- correct the bazel output for debugging bazel tests +- simplify the bazel parameters we pass to Bazel Run configurations +- pin flutter error events in the log +- propagate node selections to inspector +- link support for log data entries +- fix category cell rendering +- add sample creation banner +- add sample apps to Android Studio New Project Wizard +- update log entry data badge + ## 32.0 - address an NPE in FlutterWidgetPerfManager.java - added overlay renderered for GC, snapshot and memory reset events diff --git a/product-matrix.json b/product-matrix.json index 2b9623875f..e4eb62e3e0 100644 --- a/product-matrix.json +++ b/product-matrix.json @@ -1,33 +1,43 @@ { "list": [ { - "comments": "AS 3.3 and IntelliJ 2018.2.5", + "comments": "IntelliJ 2018.2.5", "name": "IntelliJ", - "version": "3.3", + "version": "2018.2.5", "ideaProduct": "android-studio", "ideaVersion": "182.5199772", "dartPluginVersion": "182.5124", "sinceBuild": "182.5107.7", "untilBuild": "182.*" }, + { + "comments": "AS 3.3.1", + "name": "Android Studio", + "version": "3.3.1", + "ideaProduct": "android-studio", + "ideaVersion": "182.5264788", + "dartPluginVersion": "182.5215", + "sinceBuild": "182.5107.16", + "untilBuild": "182.*" + }, { "comments": "AS 3.4 beta", "name": "Android Studio", "version": "3.4", "ideaProduct": "android-studio", - "ideaVersion": "183.5217543", - "dartPluginVersion": "183.4886.3", + "ideaVersion": "183.5256591", + "dartPluginVersion": "183.5901", "sinceBuild": "183.0", - "untilBuild": "183.4886.37.34.*" + "untilBuild": "183.5153.38.34.*" }, { "comments": "IntelliJ 2018.3, AS 3.5 canary", - "name": "Android Studio", + "name": "IntelliJ", "version": "2018.3", "ideaProduct": "android-studio", - "ideaVersion": "183.5215047", - "dartPluginVersion": "183.4886.3", - "sinceBuild": "183.4886.37.35", + "ideaVersion": "183.5256920", + "dartPluginVersion": "183.5901", + "sinceBuild": "183.5153.38.34.*", "untilBuild": "183.*" }, { diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index 27c82cbca8..3e2c7cd5fe 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -29,6 +29,25 @@ 33.0

+
    +
  • update build for Android Studio 3.3.1
  • +
  • reorder console filters so links work
  • +
  • more intelligently enable support for detaching from Flutter apps on exit
  • +
  • change the icon used for paint baselines
  • +
  • prevent bazel test run configurations from generating in a non-bazel workspace
  • +
  • support 2019.1 eap
  • +
  • mention 'Dart' in the plugin description
  • +
  • correct the bazel output for debugging bazel tests
  • +
  • simplify the bazel parameters we pass to Bazel Run configurations
  • +
  • pin flutter error events in the log
  • +
  • propagate node selections to inspector
  • +
  • link support for log data entries
  • +
  • fix category cell rendering
  • +
  • add sample creation banner
  • +
  • add sample apps to Android Studio New Project Wizard
  • +
  • update log entry data badge
  • +

32.0