Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/io/flutter/actions/DeviceSelectorAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@
import com.intellij.util.ModalityUiUtil;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import icons.FlutterIcons;
import io.flutter.FlutterBundle;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsData;
import io.flutter.logging.PluginLogger;
import io.flutter.run.FlutterDevice;
import io.flutter.run.daemon.DeviceService;
Expand Down
4 changes: 2 additions & 2 deletions src/io/flutter/actions/DeviceSelectorRefresherAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsData;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import io.flutter.run.daemon.DeviceService;
import io.flutter.utils.FlutterModuleUtils;
import org.jetbrains.annotations.NotNull;
Expand Down
6 changes: 3 additions & 3 deletions src/io/flutter/actions/FlutterGettingStartedAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,16 @@
import com.intellij.ide.browsers.BrowserLauncher;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAwareAction;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import io.flutter.FlutterConstants;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsData;
import org.jetbrains.annotations.NotNull;

public class FlutterGettingStartedAction extends DumbAwareAction {
@Override
public void actionPerformed(@NotNull final AnActionEvent e) {
Analytics.report(AnalyticsData.forAction(this, e));

BrowserLauncher.getInstance().browse(FlutterConstants.URL_GETTING_STARTED_IDE, null);
}
}
4 changes: 2 additions & 2 deletions src/io/flutter/actions/FlutterSdkAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import io.flutter.FlutterBundle;
import io.flutter.FlutterMessages;
import io.flutter.FlutterUtils;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsConstants;
import io.flutter.analytics.AnalyticsData;
import io.flutter.bazel.Workspace;
import io.flutter.pub.PubRoot;
import io.flutter.pub.PubRoots;
Expand Down
4 changes: 2 additions & 2 deletions src/io/flutter/actions/FlutterSubmitFeedback.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@
import com.intellij.ide.browsers.BrowserLauncher;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAwareAction;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsData;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import org.jetbrains.annotations.NotNull;

public class FlutterSubmitFeedback extends DumbAwareAction {
Expand Down
4 changes: 2 additions & 2 deletions src/io/flutter/actions/RefreshToolWindowAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.DumbAwareAction;
import com.intellij.openapi.project.Project;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import io.flutter.FlutterBundle;
import io.flutter.FlutterUtils;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsData;
import org.jetbrains.annotations.NotNull;

import java.util.Optional;
Expand Down
4 changes: 2 additions & 2 deletions src/io/flutter/actions/ReloadFlutterApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,12 @@
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import icons.FlutterIcons;
import io.flutter.FlutterBundle;
import io.flutter.FlutterConstants;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsConstants;
import io.flutter.analytics.AnalyticsData;
import io.flutter.run.FlutterReloadManager;
import io.flutter.run.daemon.FlutterApp;
import org.jetbrains.annotations.NotNull;
Expand Down
4 changes: 2 additions & 2 deletions src/io/flutter/actions/RestartFlutterApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,13 +12,13 @@
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.jetbrains.lang.dart.analytics.Analytics;
import com.jetbrains.lang.dart.analytics.AnalyticsData;
import icons.FlutterIcons;
import io.flutter.FlutterBundle;
import io.flutter.FlutterConstants;
import io.flutter.FlutterMessages;
import io.flutter.analytics.Analytics;
import io.flutter.analytics.AnalyticsConstants;
import io.flutter.analytics.AnalyticsData;
import io.flutter.bazel.WorkspaceCache;
import io.flutter.run.FlutterReloadManager;
import io.flutter.run.daemon.FlutterApp;
Expand Down
121 changes: 1 addition & 120 deletions src/io/flutter/analytics/Analytics.kt
Original file line number Diff line number Diff line change
Expand Up @@ -6,83 +6,7 @@

package io.flutter.analytics

import com.intellij.openapi.actionSystem.AnAction
import com.intellij.openapi.actionSystem.AnActionEvent
import io.flutter.actions.FlutterAppAction

object Analytics {
private val reporter = NoOpReporter

@JvmStatic
fun report(data: AnalyticsData) = data.reportTo(reporter)
}

abstract class AnalyticsReporter {
internal abstract fun process(data: AnalyticsData)
}

internal object PrintingReporter : AnalyticsReporter() {
override fun process(data: AnalyticsData) = println(data.data)
}

internal object NoOpReporter : AnalyticsReporter() {
override fun process(data: AnalyticsData) = Unit
}

abstract class AnalyticsData(type: String) {
val data = mutableMapOf<String, Any>()

init {
add(AnalyticsConstants.TYPE, type)
}

companion object {
@JvmStatic
fun forAction(action: AnAction, event: AnActionEvent): ActionData = ActionData(
event.actionManager.getId(action)
// `FlutterAppAction`s aren't registered so ask them directly.
?: (action as? FlutterAppAction)?.id,
event.place
)
}

fun <T> add(key: DataValue<T>, value: T) = key.addTo(this, value)

internal operator fun set(key: String, value: Boolean) {
data[key] = value
}

internal operator fun set(key: String, value: Int) {
data[key] = value
}

internal operator fun set(key: String, value: String) {
data[key] = value
}

open fun reportTo(reporter: AnalyticsReporter) = reporter.process(this)
}

/**
* Data describing an IntelliJ [com.intellij.openapi.actionSystem.AnAction] for analytics reporting.
*
* @param id The unique identifier of the action, typically defined in `plugin.xml`.
* @param place The UI location where the action was invoked (e.g., "MainMenu", "Toolbar").
* @see <a href="https://plugins.jetbrains.com/docs/intellij/basic-action-system.html">IntelliJ Action System</a>
*/
class ActionData(private val id: String?, private val place: String) : AnalyticsData("action") {

init {
id?.let { add(AnalyticsConstants.ID, it) }
add(AnalyticsConstants.PLACE, place)
}

override fun reportTo(reporter: AnalyticsReporter) {
// We only report if we have an id for the event.
if (id == null) return
super.reportTo(reporter)
}
}
import com.jetbrains.lang.dart.analytics.BooleanValue

/**
* Defines standard keys for analytics data properties.
Expand All @@ -97,12 +21,6 @@ object AnalyticsConstants {
@JvmField
val GOOGLE3 = BooleanValue("google3")

/**
* The unique identifier for an action or event.
*/
@JvmField
val ID = StringValue("id")

/**
* Indicates if the project is in a Bazel context.
*/
Expand All @@ -115,46 +33,9 @@ object AnalyticsConstants {
@JvmField
val MISSING_SDK = BooleanValue("missingSdk")

/**
* The UI location where an action was invoked, as provided by
* [com.intellij.openapi.actionSystem.PlaceProvider.getPlace] (for example, "MainMenu",
* "MainToolbar", "EditorPopup", "GoToAction", etc).
*/
@JvmField
val PLACE = StringValue("place")

/**
* Indicates if a restart is required for a hot reload request.
*/
@JvmField
val REQUIRES_RESTART = BooleanValue("requiresRestart")

/**
* The type of the analytics event (e.g., "action", ...).
*/
@JvmField
val TYPE = StringValue("type")
}


sealed class DataValue<T>(val name: String) {
abstract fun addTo(data: AnalyticsData, value: T);
}

class StringValue(name: String) : DataValue<String>(name) {
override fun addTo(data: AnalyticsData, value: String) {
data[name] = value
}
}

class IntValue(name: String) : DataValue<Int>(name) {
override fun addTo(data: AnalyticsData, value: Int) {
data[name] = value
}
}

class BooleanValue(name: String) : DataValue<Boolean>(name) {
override fun addTo(data: AnalyticsData, value: Boolean) {
data[name] = value
}
}
Loading
Loading