forked from firka/flutter
Fix flutter doctor (pluginsPath) check for Mac (#50324)
This commit is contained in:
@@ -4,6 +4,8 @@
|
||||
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:meta/meta.dart';
|
||||
|
||||
import 'android/android_studio_validator.dart';
|
||||
import 'android/android_workflow.dart';
|
||||
import 'artifacts.dart';
|
||||
@@ -699,19 +701,23 @@ abstract class IntelliJValidator extends DoctorValidator {
|
||||
Future<ValidationResult> validate() async {
|
||||
final List<ValidationMessage> messages = <ValidationMessage>[];
|
||||
|
||||
messages.add(ValidationMessage(userMessages.intellijLocation(installPath)));
|
||||
if (pluginsPath == null) {
|
||||
messages.add(ValidationMessage.error('Invalid IntelliJ version number.'));
|
||||
} else {
|
||||
messages.add(ValidationMessage(userMessages.intellijLocation(installPath)));
|
||||
|
||||
final IntelliJPlugins plugins = IntelliJPlugins(pluginsPath);
|
||||
plugins.validatePackage(messages, <String>['flutter-intellij', 'flutter-intellij.jar'],
|
||||
'Flutter', minVersion: IntelliJPlugins.kMinFlutterPluginVersion);
|
||||
plugins.validatePackage(messages, <String>['Dart'], 'Dart');
|
||||
final IntelliJPlugins plugins = IntelliJPlugins(pluginsPath);
|
||||
plugins.validatePackage(messages, <String>['flutter-intellij', 'flutter-intellij.jar'],
|
||||
'Flutter', minVersion: IntelliJPlugins.kMinFlutterPluginVersion);
|
||||
plugins.validatePackage(messages, <String>['Dart'], 'Dart');
|
||||
|
||||
if (_hasIssues(messages)) {
|
||||
messages.add(ValidationMessage(userMessages.intellijPluginInfo));
|
||||
if (_hasIssues(messages)) {
|
||||
messages.add(ValidationMessage(userMessages.intellijPluginInfo));
|
||||
}
|
||||
|
||||
_validateIntelliJVersion(messages, kMinIdeaVersion);
|
||||
}
|
||||
|
||||
_validateIntelliJVersion(messages, kMinIdeaVersion);
|
||||
|
||||
return ValidationResult(
|
||||
_hasIssues(messages) ? ValidationType.partial : ValidationType.installed,
|
||||
messages,
|
||||
@@ -847,31 +853,53 @@ class IntelliJValidatorOnMac extends IntelliJValidator {
|
||||
return validators;
|
||||
}
|
||||
|
||||
@visibleForTesting
|
||||
String get plistFile {
|
||||
_plistFile ??= globals.fs.path.join(installPath, 'Contents', 'Info.plist');
|
||||
return _plistFile;
|
||||
}
|
||||
String _plistFile;
|
||||
|
||||
@override
|
||||
String get version {
|
||||
if (_version == null) {
|
||||
final String plistFile = globals.fs.path.join(installPath, 'Contents', 'Info.plist');
|
||||
_version = PlistParser.instance.getValueFromFile(
|
||||
_version ??= PlistParser.instance.getValueFromFile(
|
||||
plistFile,
|
||||
PlistParser.kCFBundleShortVersionStringKey,
|
||||
) ?? 'unknown';
|
||||
}
|
||||
return _version;
|
||||
}
|
||||
String _version;
|
||||
|
||||
@override
|
||||
String get pluginsPath {
|
||||
if (_pluginsPath != null) {
|
||||
return _pluginsPath;
|
||||
}
|
||||
|
||||
final String altLocation = PlistParser.instance.getValueFromFile(plistFile, 'JetBrainsToolboxApp');
|
||||
|
||||
if (altLocation != null) {
|
||||
_pluginsPath = altLocation + '.plugins';
|
||||
return _pluginsPath;
|
||||
}
|
||||
|
||||
final List<String> split = version.split('.');
|
||||
|
||||
if (split.length < 2) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final String major = split[0];
|
||||
final String minor = split[1];
|
||||
return globals.fs.path.join(
|
||||
_pluginsPath = globals.fs.path.join(
|
||||
globals.fsUtils.homeDirPath,
|
||||
'Library',
|
||||
'Application Support',
|
||||
'$id$major.$minor',
|
||||
);
|
||||
return _pluginsPath;
|
||||
}
|
||||
String _pluginsPath;
|
||||
}
|
||||
|
||||
class DeviceValidator extends DoctorValidator {
|
||||
|
||||
@@ -13,6 +13,7 @@ import 'package:flutter_tools/src/base/user_messages.dart';
|
||||
import 'package:flutter_tools/src/doctor.dart';
|
||||
import 'package:flutter_tools/src/features.dart';
|
||||
import 'package:flutter_tools/src/globals.dart' as globals;
|
||||
import 'package:flutter_tools/src/ios/plist_parser.dart';
|
||||
import 'package:flutter_tools/src/proxy_validator.dart';
|
||||
import 'package:flutter_tools/src/reporting/reporting.dart';
|
||||
import 'package:flutter_tools/src/vscode/vscode.dart';
|
||||
@@ -67,6 +68,19 @@ void main() {
|
||||
expect(message.message, contains('recommended minimum version'));
|
||||
}, overrides: noColorTerminalOverride);
|
||||
|
||||
testUsingContext('intellij plugins path checking on mac', () async {
|
||||
final String pathViaToolbox = globals.fs.path.join('test', 'data', 'intellij', 'mac_via_toolbox');
|
||||
final String pathNotViaToolbox = globals.fs.path.join('test', 'data', 'intellij', 'mac_not_via_toolbox');
|
||||
|
||||
final IntelliJValidatorOnMac validatorViaToolbox = IntelliJValidatorOnMac('Test', 'Test', pathViaToolbox);
|
||||
expect(validatorViaToolbox.plistFile, 'test/data/intellij/mac_via_toolbox/Contents/Info.plist');
|
||||
|
||||
final IntelliJValidatorOnMac validatorNotViaToolbox = IntelliJValidatorOnMac('Test', 'Test', pathNotViaToolbox);
|
||||
expect(validatorNotViaToolbox.plistFile, 'test/data/intellij/mac_not_via_toolbox/Contents/Info.plist');
|
||||
}, overrides: <Type, Generator>{
|
||||
PlistParser: () => const PlistParser(),
|
||||
});
|
||||
|
||||
testUsingContext('vs code validator when both installed', () async {
|
||||
final ValidationResult result = await VsCodeValidatorTestTargets.installedWithExtension.validate();
|
||||
expect(result.type, ValidationType.installed);
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE plist PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>jetbrains-toolbox-launcher</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string/>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright (c) JetBrains s.r.o.</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSUIElement</key>
|
||||
<false/>
|
||||
<key>LSUIElement</key>
|
||||
<true/>
|
||||
<key>CFBundleName</key>
|
||||
<string>IntelliJ IDEA Ultimate 2019.3.3</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.jetbrains.apps.activator.linkapp.pcom.jetbrains.apps.activator__ntelli_ltimate_2019_3_3</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2019.3.3</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string>2019.3.3</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2019.3.3</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>icon.icns</string>
|
||||
</dict>
|
||||
</plist>
|
||||
@@ -0,0 +1,40 @@
|
||||
<?xml version='1.0' encoding='UTF-8'?>
|
||||
<!DOCTYPE plist PUBLIC '-//Apple Computer//DTD PLIST 1.0//EN' 'http://www.apple.com/DTDs/PropertyList-1.0.dtd'>
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>jetbrains-toolbox-launcher</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string/>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>NSHumanReadableCopyright</key>
|
||||
<string>Copyright (c) JetBrains s.r.o.</string>
|
||||
<key>NSHighResolutionCapable</key>
|
||||
<true/>
|
||||
<key>NSUIElement</key>
|
||||
<false/>
|
||||
<key>LSUIElement</key>
|
||||
<true/>
|
||||
<key>CFBundleName</key>
|
||||
<string>IntelliJ IDEA Ultimate 2019.3.3</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>com.jetbrains.apps.activator.linkapp.pcom.jetbrains.apps.activator__ntelli_ltimate_2019_3_3</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>2019.3.3</string>
|
||||
<key>CFBundleLongVersionString</key>
|
||||
<string>2019.3.3</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>2019.3.3</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>icon.icns</string>
|
||||
<key>JetBrainsToolboxApp</key>
|
||||
<string>/Users/lynn/Library/Application Support/JetBrains/Toolbox/apps/IDEA-U/ch-0/193.6494.35/IntelliJ IDEA.app</string>
|
||||
</dict>
|
||||
</plist>
|
||||
Reference in New Issue
Block a user