|
5 | 5 | */ |
6 | 6 | package io.flutter; |
7 | 7 |
|
8 | | -import com.android.tools.idea.IdeInfo; |
9 | 8 | import com.google.common.base.Charsets; |
10 | 9 | import com.intellij.ide.actions.ShowSettingsUtilImpl; |
11 | 10 | import com.intellij.ide.impl.ProjectUtil; |
12 | 11 | import com.intellij.ide.util.PropertiesComponent; |
| 12 | +import com.intellij.openapi.application.ApplicationInfo; |
13 | 13 | import com.intellij.openapi.diagnostic.Logger; |
14 | 14 | import com.intellij.openapi.extensions.PluginId; |
15 | 15 | import com.intellij.openapi.module.Module; |
|
47 | 47 |
|
48 | 48 | import java.io.IOException; |
49 | 49 | import java.io.InputStreamReader; |
| 50 | +import java.lang.reflect.InvocationTargetException; |
| 51 | +import java.lang.reflect.Method; |
50 | 52 | import java.nio.file.Paths; |
51 | 53 | import java.util.Map; |
52 | 54 | import java.util.Objects; |
@@ -89,7 +91,18 @@ public static boolean isDartFile(@NotNull VirtualFile file) { |
89 | 91 | } |
90 | 92 |
|
91 | 93 | public static boolean isAndroidStudio() { |
92 | | - return IdeInfo.getInstance().isAndroidStudio(); |
| 94 | + try { |
| 95 | + // The class is available if the IDE has the "Android" plugin installed or is Android Studio. |
| 96 | + final Class<?> ideInfoClass = Class.forName("com.android.tools.idea.IdeInfo"); |
| 97 | + final Method getInstance = ideInfoClass.getMethod("getInstance"); |
| 98 | + final Object instance = getInstance.invoke(null); |
| 99 | + final Method isAndroidStudio = ideInfoClass.getMethod("isAndroidStudio"); |
| 100 | + return (Boolean)isAndroidStudio.invoke(instance); |
| 101 | + } catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException ignored) { |
| 102 | + // Fall back to checking application name |
| 103 | + // e.g., "Android Studio Meerkat | 2024.3.1" |
| 104 | + return ApplicationInfo.getInstance().getFullApplicationName().startsWith("Android Studio"); |
| 105 | + } |
93 | 106 | } |
94 | 107 |
|
95 | 108 | /** |
@@ -416,7 +429,7 @@ protected void addImplicitResolvers() { |
416 | 429 | return null; |
417 | 430 | } |
418 | 431 | } |
419 | | - |
| 432 | + |
420 | 433 | @Nullable |
421 | 434 | private static VirtualFile getFlutterManagedAndroidDir(VirtualFile dir) { |
422 | 435 | final VirtualFile meta = dir.findChild(".metadata"); |
|
0 commit comments