diff --git a/topics/reference_guide/frameworks_and_external_apis/external_system_integration.md b/topics/reference_guide/frameworks_and_external_apis/external_system_integration.md
index 85a8dcb72..11f805a59 100644
--- a/topics/reference_guide/frameworks_and_external_apis/external_system_integration.md
+++ b/topics/reference_guide/frameworks_and_external_apis/external_system_integration.md
@@ -1,21 +1,21 @@
-
+
# External System Integration
Overview and introduction to implementing an External System (e.g., Maven, Gradle, sbt) support.
-This page provides a high-level overview of the *External System* sub-system.
+This page provides a high-level overview of the *External System* subsystem.
There are multiple project management systems ([Apache Maven](https://maven.apache.org/), [Gradle](https://www.gradle.org/), [sbt](https://www.scala-sbt.org/), etc.) and IntelliJ Platform provides a mechanism to support them in IDEs.
Most of the project management systems provide a similar set of facilities from the integration point of view:
* build a project from external system config (pom.xml, build.gradle.kts, etc.)
* provide a list of available tasks
-* allow to execute a particular task
+* allow executing a particular task
* and more
That means that we can separate external system-specific logic and general IDE processing.
-The *External System* sub-system provides a simple API for wrapping external system elements and extensible IDE-specific processing logic.
+The *External System* subsystem provides an API for wrapping external system elements and extensible IDE-specific processing logic.
## Project Management
@@ -59,7 +59,7 @@ DataNode -- child3
```
The `DataNode` class is just a holder for the target data (a data type is defined by the `Key`).
-Multiple `DataNode` objects might be organized in directed graph where every edge identifies parent-child relation.
+Multiple `DataNode` objects might be organized in a directed graph where every edge identifies parent-child relation.
For example, a simple one-module project might look as below:
@@ -94,12 +94,12 @@ The IDE provides a set of built-in `Key` and `ExternalEntityData` classes but an
Processing project data built on an external system config basis can be performed with [`ProjectDataService`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/service/project/manage/ProjectDataService.java).
It is a strategy which knows how to manage particular `ExternalEntityData`.
-For example, when we want to import a project from an external model, we can start with the top level `DataNode` which references project info and then import its data using corresponding service.
+For example, when we want to import a project from an external model, we can start with the top level `DataNode` which references project info and then import its data using the corresponding service.
-Custom services can be registered via [`com.intellij.externalProjectDataService`](https://jb.gg/ipe?extensions=com.intellij.externalProjectDataService) extension point.
+Custom services can be registered via the [`com.intellij.externalProjectDataService`](https://jb.gg/ipe?extensions=com.intellij.externalProjectDataService) extension point.
The good thing is that we can separate project parsing and management here.
-That means that a set of `DataNode`, `Key` and `ProjectDataServices` can be introduced for particular technology and then every external system integration can build corresponding data if necessary using it.
+That means that a set of `DataNode`, `Key` and `ProjectDataServices` can be introduced for a particular technology and then every external system integration can build corresponding data if necessary using it.
### Importing from External Model
@@ -108,7 +108,7 @@ The IntelliJ Platform provides an API for importing projects from external model
* [`ProjectImportBuilder`](%gh-ic%/java/idea-ui/src/com/intellij/projectImport/ProjectImportBuilder.java)
* [`ProjectImportProvider`](%gh-ic%/java/idea-ui/src/com/intellij/projectImport/ProjectImportProvider.java)
-There are two classes built on the *template method* pattern which simplify implementation:
+There are two classes built on the *template method* pattern that simplify implementation:
* [`AbstractExternalProjectImportBuilder`](%gh-ic%/java/idea-ui/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportBuilder.java)
* [`AbstractExternalProjectImportProvider`](%gh-ic%/java/idea-ui/src/com/intellij/openapi/externalSystem/service/project/wizard/AbstractExternalProjectImportProvider.java)
@@ -124,14 +124,14 @@ Example of the project import provider and builder for Gradle:
## Auto-Import
-It's possible to configure external system integration to automatically refresh project structure when external project's config files are modified.
+It's possible to configure external system integration to automatically refresh the project structure when external project's config files are modified.
> From 2020.1, auto-import cannot be disabled by a user.
>
### Auto-Import for `ExternalSystemManager` Implementation
-Describe project's settings files to track by having external system [`ExternalSystemManager`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemManager.java) implement [`ExternalSystemAutoImportAware`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemAutoImportAware.java).
+Describe the project's settings files to track by having external system [`ExternalSystemManager`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemManager.java) implement [`ExternalSystemAutoImportAware`](%gh-ic%/platform/external-system-api/src/com/intellij/openapi/externalSystem/ExternalSystemAutoImportAware.java).
> The `ExternalSystemAutoImportAware.getAffectedExternalProjectPath()` method is called quite often, that's why it's expected to return control as soon as possible.
> Helper `CachingExternalSystemAutoImportAware` class might be used for caching, i.e. `ExternalSystemManager` which implements `ExternalSystemAutoImportAware` can have a field like `new CachingExternalSystemAutoImportAware(new MyExternalSystemAutoImportAware())` and delegate `ExternalSystemAutoImportAware.getAffectedExternalProjectPath()` calls to it.
@@ -141,7 +141,7 @@ Describe project's settings files to track by having external system [`ExternalS
### Auto-Import for Standalone External Systems
Some external systems don't have `ExternalSystemManager` (e.g., Maven), but they also can use auto-import core to track changes in settings files.
-For this, implement `ExternalSystemProjectAware` interface that describes settings files for tracking and an action to reload the project model.
+For this, implement `ExternalSystemProjectAware` that describes settings files for tracking and an action to reload the project model.
Then register the instance with `ExternalSystemProjectTracker` to start tracking.
> Multiple `ExternalSystemProjectAware` instances can correspond to a single external system.
@@ -175,7 +175,7 @@ It's recommended to extend from [`AbstractExternalProjectSettingsControl`](%gh-i
* [`GradleProjectSettingsControl`](%gh-ic%/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java) handling the selected Gradle project settings in Settings | Build, Execution, Deployment | Build Tools | Gradle
A similar approach is used for providing settings in importing external project UI.
-Implementation is expected to extend [`AbstractImportFromExternalSystemControl`](%gh-ic%/java/idea-ui/src/com/intellij/openapi/externalSystem/service/settings/AbstractImportFromExternalSystemControl.java) and instead of linked external projects list it contains target external project path control.
+Implementation is expected to extend [`AbstractImportFromExternalSystemControl`](%gh-ic%/java/idea-ui/src/com/intellij/openapi/externalSystem/service/settings/AbstractImportFromExternalSystemControl.java) and instead of the linked external projects list it contains target external project path control.
## Testing