From a21504f41fd5e4bd9ac873c452dbd0eddff2dc53 Mon Sep 17 00:00:00 2001 From: Sameer Kashyap Date: Fri, 5 Feb 2021 10:33:38 +0530 Subject: [PATCH 1/5] migrate to null safety --- .../shared_preferences_windows/CHANGELOG.md | 4 ++ .../lib/shared_preferences_windows.dart | 46 ++++++++++--------- .../shared_preferences_windows/pubspec.yaml | 16 +++---- .../test/shared_preferences_windows_test.dart | 25 +++++----- script/nnbd_plugins.sh | 1 + 5 files changed, 50 insertions(+), 42 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md index f6a199d52cb0..ec9eda789cff 100644 --- a/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md +++ b/packages/shared_preferences/shared_preferences_windows/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.0.3-nullsafety + +* Migrate to null-safety. + ## 0.0.2+2 * Relax 'ffi' version constraint. diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index dd9ab8a0c38f..6b00d72e342c 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -20,49 +20,51 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { /// File system used to store to disk. Exposed for testing only. @visibleForTesting - FileSystem fs = LocalFileSystem(); + FileSystem? fs = LocalFileSystem(); /// The path_provider_windows instance used to find the support directory. @visibleForTesting - PathProviderWindows pathProvider = PathProviderWindows(); + PathProviderWindows? pathProvider = PathProviderWindows(); /// Local copy of preferences - Map _cachedPreferences; + Map? _cachedPreferences; /// Cached file for storing preferences. - File _localDataFilePath; + File? _localDataFilePath; /// Gets the file where the preferences are stored. Future _getLocalDataFile() async { - if (_localDataFilePath == null) { - final directory = await pathProvider.getApplicationSupportPath(); - _localDataFilePath = - fs.file(path.join(directory, 'shared_preferences.json')); + if (_localDataFilePath != null) { + return _localDataFilePath!; } - return _localDataFilePath; + final directory = + await (pathProvider!.getApplicationSupportPath() as FutureOr); + return _localDataFilePath = + fs!.file(path.join(directory, 'shared_preferences.json')); } /// Gets the preferences from the stored file. Once read, the preferences are /// maintained in memory. Future> _readPreferences() async { - if (_cachedPreferences == null) { - _cachedPreferences = {}; - File localDataFile = await _getLocalDataFile(); - if (localDataFile.existsSync()) { - String stringMap = localDataFile.readAsStringSync(); - if (stringMap.isNotEmpty) { - _cachedPreferences = json.decode(stringMap) as Map; - } + if (_cachedPreferences != null) { + return (_cachedPreferences as Future>); + } + Map _cachedPrefs = {}; + File localDataFile = await (_getLocalDataFile()); + if (localDataFile.existsSync()) { + String stringMap = localDataFile.readAsStringSync(); + if (stringMap.isNotEmpty) { + _cachedPrefs = json.decode(stringMap).cast(); } } - return _cachedPreferences; + return _cachedPrefs; } /// Writes the cached preferences to disk. Returns [true] if the operation /// succeeded. Future _writePreferences(Map preferences) async { try { - File localDataFile = await _getLocalDataFile(); + File localDataFile = await (_getLocalDataFile()); if (!localDataFile.existsSync()) { localDataFile.createSync(recursive: true); } @@ -77,7 +79,7 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { @override Future clear() async { - var preferences = await _readPreferences(); + var preferences = await (_readPreferences()); preferences.clear(); return _writePreferences(preferences); } @@ -89,14 +91,14 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { @override Future remove(String key) async { - var preferences = await _readPreferences(); + var preferences = await (_readPreferences()); preferences.remove(key); return _writePreferences(preferences); } @override Future setValue(String valueType, String key, Object value) async { - var preferences = await _readPreferences(); + var preferences = await (_readPreferences()); preferences[key] = value; return _writePreferences(preferences); } diff --git a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml index 2970b3ff053e..7eee6121b3a8 100644 --- a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml @@ -1,7 +1,7 @@ name: shared_preferences_windows description: Windows implementation of shared_preferences homepage: https://github.com/flutter/plugins/tree/master/packages/shared_preferences/shared_preferences_windows -version: 0.0.2+2 +version: 0.0.3-nullsafety flutter: plugin: @@ -11,21 +11,21 @@ flutter: pluginClass: none environment: - sdk: ">=2.1.0 <3.0.0" + sdk: '>=2.12.0-0 <3.0.0' flutter: ">=1.12.8" dependencies: - shared_preferences_platform_interface: ^1.0.0 + shared_preferences_platform_interface: ^2.0.0-nullsafety flutter: sdk: flutter - ffi: ">=0.1.3 < 0.3.0" - file: ">=5.1.0 <7.0.0" + ffi: ^0.2.0-nullsafety.1 + file: ^6.0.0-nullsafety.4 meta: ^1.1.7 path: ^1.6.4 - path_provider_platform_interface: ^1.0.3 - path_provider_windows: ^0.0.2 + path_provider_platform_interface: ^2.0.0-nullsafety + path_provider_windows: ^0.1.0-nullsafety.1 dev_dependencies: flutter_test: sdk: flutter - pedantic: ^1.8.0 + pedantic: ^1.10.0-nullsafety.3 diff --git a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart index b0827ca3b36b..575585f1d033 100644 --- a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart @@ -10,8 +10,8 @@ import 'package:path_provider_windows/path_provider_windows.dart'; import 'package:shared_preferences_windows/shared_preferences_windows.dart'; void main() { - MemoryFileSystem fileSystem; - PathProviderWindows pathProvider; + MemoryFileSystem? fileSystem; + PathProviderWindows? pathProvider; setUp(() { fileSystem = MemoryFileSystem.test(); @@ -21,18 +21,19 @@ void main() { tearDown(() {}); Future _getFilePath() async { - final directory = await pathProvider.getApplicationSupportPath(); + final directory = + await (pathProvider!.getApplicationSupportPath() as Future); return path.join(directory, 'shared_preferences.json'); } _writeTestFile(String value) async { - fileSystem.file(await _getFilePath()) + fileSystem!.file(await _getFilePath()) ..createSync(recursive: true) ..writeAsStringSync(value); } Future _readTestFile() async { - return fileSystem.file(await _getFilePath()).readAsStringSync(); + return fileSystem!.file(await _getFilePath()).readAsStringSync(); } SharedPreferencesWindows _getPreferences() { @@ -46,7 +47,7 @@ void main() { await _writeTestFile('{"key1": "one", "key2": 2}'); var prefs = _getPreferences(); - var values = await prefs.getAll(); + var values = await (prefs.getAll()); expect(values, hasLength(2)); expect(values['key1'], 'one'); expect(values['key2'], 2); @@ -87,23 +88,23 @@ void main() { /// path it returns is a root path that does not actually exist on Windows. class FakePathProviderWindows extends PathProviderPlatform implements PathProviderWindows { - VersionInfoQuerier versionInfoQuerier; + late VersionInfoQuerier versionInfoQuerier; @override Future getApplicationSupportPath() async => r'C:\appsupport'; @override - Future getTemporaryPath() async => null; + Future getTemporaryPath() async => null; @override - Future getLibraryPath() async => null; + Future getLibraryPath() async => null; @override - Future getApplicationDocumentsPath() async => null; + Future getApplicationDocumentsPath() async => null; @override - Future getDownloadsPath() async => null; + Future getDownloadsPath() async => null; @override - Future getPath(String folderID) async => null; + Future getPath(String folderID) async => ''; } diff --git a/script/nnbd_plugins.sh b/script/nnbd_plugins.sh index 3d0676f8b1a5..b60bfec0440c 100644 --- a/script/nnbd_plugins.sh +++ b/script/nnbd_plugins.sh @@ -21,6 +21,7 @@ readonly NNBD_PLUGINS_LIST=( "url_launcher" "video_player" "webview_flutter" + "shared_preferences_windows" ) # This list contains the list of plugins that have *not* been From e7a56f032d744e76594266ae71683c74c33dc548 Mon Sep 17 00:00:00 2001 From: Sameer Kashyap Date: Fri, 5 Feb 2021 10:50:48 +0530 Subject: [PATCH 2/5] added formatting --- .../lib/shared_preferences_windows.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index 6b00d72e342c..84980db2269e 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -103,3 +103,4 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { return _writePreferences(preferences); } } + From 3c5f8346faafe114119657095f17d0afe430bae3 Mon Sep 17 00:00:00 2001 From: Sameer Kashyap Date: Sat, 6 Feb 2021 09:53:28 +0530 Subject: [PATCH 3/5] resolved issues --- .../lib/shared_preferences_windows.dart | 30 +++++++++---------- .../shared_preferences_windows/pubspec.yaml | 7 ++--- .../test/shared_preferences_windows_test.dart | 14 ++++----- script/nnbd_plugins.sh | 3 +- 4 files changed, 26 insertions(+), 28 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index 84980db2269e..1c3bfc1e6ffc 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -20,11 +20,11 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { /// File system used to store to disk. Exposed for testing only. @visibleForTesting - FileSystem? fs = LocalFileSystem(); + FileSystem fs = LocalFileSystem(); /// The path_provider_windows instance used to find the support directory. @visibleForTesting - PathProviderWindows? pathProvider = PathProviderWindows(); + PathProviderWindows pathProvider = PathProviderWindows(); /// Local copy of preferences Map? _cachedPreferences; @@ -38,33 +38,34 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { return _localDataFilePath!; } final directory = - await (pathProvider!.getApplicationSupportPath() as FutureOr); + await pathProvider.getApplicationSupportPath(); return _localDataFilePath = - fs!.file(path.join(directory, 'shared_preferences.json')); + fs.file(path.join(directory!, 'shared_preferences.json')); } /// Gets the preferences from the stored file. Once read, the preferences are /// maintained in memory. Future> _readPreferences() async { if (_cachedPreferences != null) { - return (_cachedPreferences as Future>); + return _cachedPreferences!; } - Map _cachedPrefs = {}; - File localDataFile = await (_getLocalDataFile()); + Map preferences = {}; + File localDataFile = await _getLocalDataFile(); if (localDataFile.existsSync()) { String stringMap = localDataFile.readAsStringSync(); if (stringMap.isNotEmpty) { - _cachedPrefs = json.decode(stringMap).cast(); + preferences = json.decode(stringMap).cast(); } } - return _cachedPrefs; + _cachedPreferences = preferences; + return preferences; } /// Writes the cached preferences to disk. Returns [true] if the operation /// succeeded. Future _writePreferences(Map preferences) async { try { - File localDataFile = await (_getLocalDataFile()); + File localDataFile = await _getLocalDataFile(); if (!localDataFile.existsSync()) { localDataFile.createSync(recursive: true); } @@ -79,7 +80,7 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { @override Future clear() async { - var preferences = await (_readPreferences()); + var preferences = await _readPreferences(); preferences.clear(); return _writePreferences(preferences); } @@ -91,16 +92,15 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { @override Future remove(String key) async { - var preferences = await (_readPreferences()); + var preferences = await _readPreferences(); preferences.remove(key); return _writePreferences(preferences); } @override Future setValue(String valueType, String key, Object value) async { - var preferences = await (_readPreferences()); + var preferences = await _readPreferences(); preferences[key] = value; return _writePreferences(preferences); } -} - +} \ No newline at end of file diff --git a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml index fa724ba941c6..b6959ba3d7ac 100644 --- a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml @@ -12,7 +12,7 @@ flutter: pluginClass: none environment: - sdk: '>=2.12.0-0 <3.0.0' + sdk: '>=2.12.0-259.8.beta <3.0.0' flutter: ">=1.12.8" dependencies: @@ -20,14 +20,13 @@ dependencies: flutter: sdk: flutter - ffi: ^0.2.0-nullsafety.1 file: ^6.0.0-nullsafety.4 meta: ^1.1.7 path: ^1.6.4 path_provider_platform_interface: ^2.0.0-nullsafety - path_provider_windows: ^0.1.0-nullsafety.1 + path_provider_windows: ^0.1.0-nullsafety.2 dev_dependencies: flutter_test: sdk: flutter - pedantic: ^1.10.0-nullsafety.3 + pedantic: ^1.10.0-nullsafety.3 \ No newline at end of file diff --git a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart index 575585f1d033..bdd7f41b3745 100644 --- a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart @@ -10,8 +10,8 @@ import 'package:path_provider_windows/path_provider_windows.dart'; import 'package:shared_preferences_windows/shared_preferences_windows.dart'; void main() { - MemoryFileSystem? fileSystem; - PathProviderWindows? pathProvider; + late MemoryFileSystem fileSystem; + late PathProviderWindows pathProvider; setUp(() { fileSystem = MemoryFileSystem.test(); @@ -22,18 +22,18 @@ void main() { Future _getFilePath() async { final directory = - await (pathProvider!.getApplicationSupportPath() as Future); - return path.join(directory, 'shared_preferences.json'); + await pathProvider.getApplicationSupportPath(); + return path.join(directory!, 'shared_preferences.json'); } _writeTestFile(String value) async { - fileSystem!.file(await _getFilePath()) + fileSystem.file(await _getFilePath()) ..createSync(recursive: true) ..writeAsStringSync(value); } Future _readTestFile() async { - return fileSystem!.file(await _getFilePath()).readAsStringSync(); + return fileSystem.file(await _getFilePath()).readAsStringSync(); } SharedPreferencesWindows _getPreferences() { @@ -91,7 +91,7 @@ class FakePathProviderWindows extends PathProviderPlatform late VersionInfoQuerier versionInfoQuerier; @override - Future getApplicationSupportPath() async => r'C:\appsupport'; + Future getApplicationSupportPath() async => r'C:\appsupport'; @override Future getTemporaryPath() async => null; diff --git a/script/nnbd_plugins.sh b/script/nnbd_plugins.sh index e30f845fc58c..761b3b269408 100644 --- a/script/nnbd_plugins.sh +++ b/script/nnbd_plugins.sh @@ -22,7 +22,6 @@ readonly NNBD_PLUGINS_LIST=( "url_launcher" "video_player" "webview_flutter" - "shared_preferences_windows" "image_picker" ) @@ -43,4 +42,4 @@ readonly NON_NNBD_PLUGINS_LIST=( ) export EXCLUDED_PLUGINS_FROM_STABLE=$(IFS=, ; echo "${NNBD_PLUGINS_LIST[*]}") -export EXCLUDED_PLUGINS_FROM_MASTER=$(IFS=, ; echo "${NON_NNBD_PLUGINS_LIST[*]}") +export EXCLUDED_PLUGINS_FROM_MASTER=$(IFS=, ; echo "${NON_NNBD_PLUGINS_LIST[*]}") \ No newline at end of file From 5728f0ed8f8a3380adbd804e33dbe880886e146f Mon Sep 17 00:00:00 2001 From: Sameer Kashyap Date: Sat, 6 Feb 2021 10:32:10 +0530 Subject: [PATCH 4/5] fixed fotmatting --- .../lib/shared_preferences_windows.dart | 5 ++--- .../test/shared_preferences_windows_test.dart | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index 1c3bfc1e6ffc..ebaf4c52ff48 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -37,8 +37,7 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { if (_localDataFilePath != null) { return _localDataFilePath!; } - final directory = - await pathProvider.getApplicationSupportPath(); + final directory = await pathProvider.getApplicationSupportPath(); return _localDataFilePath = fs.file(path.join(directory!, 'shared_preferences.json')); } @@ -103,4 +102,4 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { preferences[key] = value; return _writePreferences(preferences); } -} \ No newline at end of file +} diff --git a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart index bdd7f41b3745..63735fdb97c0 100644 --- a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart @@ -21,8 +21,7 @@ void main() { tearDown(() {}); Future _getFilePath() async { - final directory = - await pathProvider.getApplicationSupportPath(); + final directory = await pathProvider.getApplicationSupportPath(); return path.join(directory!, 'shared_preferences.json'); } From 9ee0b1d518ad9ad91162096f91811bf20a17d9a3 Mon Sep 17 00:00:00 2001 From: Stuart Morgan Date: Mon, 8 Feb 2021 08:55:10 -0500 Subject: [PATCH 5/5] More review fixes --- .../lib/shared_preferences_windows.dart | 17 ++++++++++++----- .../shared_preferences_windows/pubspec.yaml | 5 ++--- .../test/shared_preferences_windows_test.dart | 2 +- script/nnbd_plugins.sh | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart index ebaf4c52ff48..b2678c49782b 100644 --- a/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart +++ b/packages/shared_preferences/shared_preferences_windows/lib/shared_preferences_windows.dart @@ -33,13 +33,16 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { File? _localDataFilePath; /// Gets the file where the preferences are stored. - Future _getLocalDataFile() async { + Future _getLocalDataFile() async { if (_localDataFilePath != null) { return _localDataFilePath!; } final directory = await pathProvider.getApplicationSupportPath(); + if (directory == null) { + return null; + } return _localDataFilePath = - fs.file(path.join(directory!, 'shared_preferences.json')); + fs.file(path.join(directory, 'shared_preferences.json')); } /// Gets the preferences from the stored file. Once read, the preferences are @@ -49,8 +52,8 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { return _cachedPreferences!; } Map preferences = {}; - File localDataFile = await _getLocalDataFile(); - if (localDataFile.existsSync()) { + final File? localDataFile = await _getLocalDataFile(); + if (localDataFile != null && localDataFile.existsSync()) { String stringMap = localDataFile.readAsStringSync(); if (stringMap.isNotEmpty) { preferences = json.decode(stringMap).cast(); @@ -64,7 +67,11 @@ class SharedPreferencesWindows extends SharedPreferencesStorePlatform { /// succeeded. Future _writePreferences(Map preferences) async { try { - File localDataFile = await _getLocalDataFile(); + final File? localDataFile = await _getLocalDataFile(); + if (localDataFile == null) { + print("Unable to determine where to write preferences."); + return false; + } if (!localDataFile.existsSync()) { localDataFile.createSync(recursive: true); } diff --git a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml index b6959ba3d7ac..e2cf3d03f00d 100644 --- a/packages/shared_preferences/shared_preferences_windows/pubspec.yaml +++ b/packages/shared_preferences/shared_preferences_windows/pubspec.yaml @@ -12,14 +12,13 @@ flutter: pluginClass: none environment: - sdk: '>=2.12.0-259.8.beta <3.0.0' + sdk: '>=2.12.0-0 <3.0.0' flutter: ">=1.12.8" dependencies: shared_preferences_platform_interface: ^2.0.0-nullsafety flutter: sdk: flutter - file: ^6.0.0-nullsafety.4 meta: ^1.1.7 path: ^1.6.4 @@ -29,4 +28,4 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - pedantic: ^1.10.0-nullsafety.3 \ No newline at end of file + pedantic: ^1.10.0-nullsafety.3 diff --git a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart index 63735fdb97c0..785092f6fa16 100644 --- a/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart +++ b/packages/shared_preferences/shared_preferences_windows/test/shared_preferences_windows_test.dart @@ -46,7 +46,7 @@ void main() { await _writeTestFile('{"key1": "one", "key2": 2}'); var prefs = _getPreferences(); - var values = await (prefs.getAll()); + var values = await prefs.getAll(); expect(values, hasLength(2)); expect(values['key1'], 'one'); expect(values['key2'], 2); diff --git a/script/nnbd_plugins.sh b/script/nnbd_plugins.sh index 761b3b269408..742487ad7bfa 100644 --- a/script/nnbd_plugins.sh +++ b/script/nnbd_plugins.sh @@ -42,4 +42,4 @@ readonly NON_NNBD_PLUGINS_LIST=( ) export EXCLUDED_PLUGINS_FROM_STABLE=$(IFS=, ; echo "${NNBD_PLUGINS_LIST[*]}") -export EXCLUDED_PLUGINS_FROM_MASTER=$(IFS=, ; echo "${NON_NNBD_PLUGINS_LIST[*]}") \ No newline at end of file +export EXCLUDED_PLUGINS_FROM_MASTER=$(IFS=, ; echo "${NON_NNBD_PLUGINS_LIST[*]}")