public static void initDartSdkAndDartiumControls(
      final @Nullable Project project,
      final @NotNull TextFieldWithBrowseButton dartSdkPathComponent,
      final @NotNull JBLabel versionLabel,
      final @NotNull TextFieldWithBrowseButton dartiumPathComponent,
      final @NotNull Computable<Boolean> isResettingControlsComputable) {
    final TextComponentAccessor<JTextField> textComponentAccessor =
        new TextComponentAccessor<JTextField>() {
          @Override
          public String getText(final JTextField component) {
            return component.getText();
          }

          @Override
          public void setText(final JTextField component, @NotNull String text) {
            if (!text.isEmpty() && !isDartSdkHome(text)) {
              final String probablySdkPath = text + "/dart-sdk";
              if (isDartSdkHome(probablySdkPath)) {
                component.setText(FileUtilRt.toSystemDependentName(probablySdkPath));
                return;
              }
            }

            component.setText(FileUtilRt.toSystemDependentName(text));
          }
        };

    final ComponentWithBrowseButton.BrowseFolderActionListener<JTextField> browseFolderListener =
        new ComponentWithBrowseButton.BrowseFolderActionListener<JTextField>(
            "Select Dart SDK path",
            null,
            dartSdkPathComponent,
            project,
            FileChooserDescriptorFactory.createSingleFolderDescriptor(),
            textComponentAccessor);
    dartSdkPathComponent.addBrowseFolderListener(project, browseFolderListener);

    dartiumPathComponent.addBrowseFolderListener(
        "Select Dartium browser path",
        null,
        project,
        FileChooserDescriptorFactory.createSingleFileOrExecutableAppDescriptor());

    dartSdkPathComponent
        .getTextField()
        .getDocument()
        .addDocumentListener(
            new DocumentAdapter() {
              @Override
              protected void textChanged(final DocumentEvent e) {
                final String sdkHomePath = dartSdkPathComponent.getText().trim();
                versionLabel.setText(sdkHomePath.isEmpty() ? "" : getSdkVersion(sdkHomePath));

                if (!isResettingControlsComputable.compute() && isDartSdkHome(sdkHomePath)) {
                  final String dartiumPath = DartiumUtil.getDartiumPathForSdk(sdkHomePath);
                  if (dartiumPath != null) {
                    dartiumPathComponent.setText(FileUtilRt.toSystemDependentName(dartiumPath));
                  }
                }
              }
            });
  }