|
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