Unverified Commit 2243c42e authored by Lynn's avatar Lynn Committed by GitHub

Fix flutter doctor (pluginsPath) check for Mac (#50324)

parent 9e744c57
......@@ -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,18 +701,22 @@ 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,
......@@ -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);
......
<?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>
<?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>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment