diff --git a/license-report.md b/license-report.md
index 1e5d2392a5..74193d05bb 100644
--- a/license-report.md
+++ b/license-report.md
@@ -1,6 +1,6 @@
-# Dependencies of `io.spine:spine-base:1.5.4`
+# Dependencies of `io.spine:spine-base:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -330,12 +330,12 @@
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:12 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:53 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-errorprone-checks:1.5.4`
+# Dependencies of `io.spine.tools:spine-errorprone-checks:1.5.5`
## Runtime
1. **Group:** com.github.ben-manes.caffeine **Name:** caffeine **Version:** 2.7.0
@@ -777,12 +777,12 @@ This report was generated on **Mon Apr 06 12:01:12 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:13 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:54 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-javadoc-filter:1.5.4`
+# Dependencies of `io.spine.tools:spine-javadoc-filter:1.5.5`
## Runtime
1. **Group:** com.google.android **Name:** annotations **Version:** 4.1.1.4
@@ -1170,12 +1170,12 @@ This report was generated on **Mon Apr 06 12:01:13 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:14 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:55 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-javadoc-prettifier:1.5.4`
+# Dependencies of `io.spine.tools:spine-javadoc-prettifier:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -1537,12 +1537,12 @@ This report was generated on **Mon Apr 06 12:01:14 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:14 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:55 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-model-compiler:1.5.4`
+# Dependencies of `io.spine.tools:spine-model-compiler:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -1920,12 +1920,12 @@ This report was generated on **Mon Apr 06 12:01:14 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:15 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:56 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-mute-logging:1.5.4`
+# Dependencies of `io.spine.tools:spine-mute-logging:1.5.5`
## Runtime
1. **Group:** com.google.auto.value **Name:** auto-value-annotations **Version:** 1.6.3
@@ -2305,12 +2305,12 @@ This report was generated on **Mon Apr 06 12:01:15 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:15 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:57 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-plugin-base:1.5.4`
+# Dependencies of `io.spine.tools:spine-plugin-base:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -2672,12 +2672,12 @@ This report was generated on **Mon Apr 06 12:01:15 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:16 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:58 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-plugin-testlib:1.5.4`
+# Dependencies of `io.spine.tools:spine-plugin-testlib:1.5.5`
## Runtime
1. **Group:** com.google.auto.value **Name:** auto-value-annotations **Version:** 1.6.3
@@ -3097,12 +3097,12 @@ This report was generated on **Mon Apr 06 12:01:16 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:16 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:58 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-proto-dart-plugin:1.5.4`
+# Dependencies of `io.spine.tools:spine-proto-dart-plugin:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -3464,12 +3464,12 @@ This report was generated on **Mon Apr 06 12:01:16 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:17 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:20:59 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-proto-js-plugin:1.5.4`
+# Dependencies of `io.spine.tools:spine-proto-js-plugin:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -3831,12 +3831,12 @@ This report was generated on **Mon Apr 06 12:01:17 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:17 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:21:00 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-protoc-api:1.5.4`
+# Dependencies of `io.spine.tools:spine-protoc-api:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -4158,12 +4158,12 @@ This report was generated on **Mon Apr 06 12:01:17 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:18 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:21:00 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-protoc-plugin:1.5.4`
+# Dependencies of `io.spine.tools:spine-protoc-plugin:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -4493,12 +4493,12 @@ This report was generated on **Mon Apr 06 12:01:18 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:18 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:21:01 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine:spine-testlib:1.5.4`
+# Dependencies of `io.spine:spine-testlib:1.5.5`
## Runtime
1. **Group:** com.google.auto.value **Name:** auto-value-annotations **Version:** 1.6.3
@@ -4878,12 +4878,12 @@ This report was generated on **Mon Apr 06 12:01:18 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:18 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:21:01 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-tool-base:1.5.4`
+# Dependencies of `io.spine.tools:spine-tool-base:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -5213,12 +5213,12 @@ This report was generated on **Mon Apr 06 12:01:18 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:19 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
+This report was generated on **Wed Apr 08 17:21:02 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
-# Dependencies of `io.spine.tools:spine-validation-generator:1.5.4`
+# Dependencies of `io.spine.tools:spine-validation-generator:1.5.5`
## Runtime
1. **Group:** com.google.code.findbugs **Name:** jsr305 **Version:** 3.0.2
@@ -5548,4 +5548,4 @@ This report was generated on **Mon Apr 06 12:01:19 EEST 2020** using [Gradle-Lic
The dependencies distributed under several licenses, are used according their commercial-use-friendly license.
-This report was generated on **Mon Apr 06 12:01:19 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
\ No newline at end of file
+This report was generated on **Wed Apr 08 17:21:02 EEST 2020** using [Gradle-License-Report plugin](https://github.com/jk1/Gradle-License-Report) by Evgeny Naumenko, licensed under [Apache 2.0 License](https://github.com/jk1/Gradle-License-Report/blob/master/LICENSE).
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index a53084ee50..506ec3a047 100644
--- a/pom.xml
+++ b/pom.xml
@@ -12,7 +12,7 @@ all modules and does not describe the project structure per-subproject.
io.spinespine-base
-1.5.4
+1.5.52015
@@ -154,7 +154,7 @@ all modules and does not describe the project structure per-subproject.
io.spine.toolsspine-protoc-plugin
- 1.5.4
+ 1.5.5test
diff --git a/tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/DirectoryPattern.java b/tools/plugin-base/src/main/java/io/spine/tools/code/structure/DirectoryPattern.java
similarity index 96%
rename from tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/DirectoryPattern.java
rename to tools/plugin-base/src/main/java/io/spine/tools/code/structure/DirectoryPattern.java
index cbd124ae28..7843c56ce7 100644
--- a/tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/DirectoryPattern.java
+++ b/tools/plugin-base/src/main/java/io/spine/tools/code/structure/DirectoryPattern.java
@@ -18,12 +18,12 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package io.spine.js.generate.resolve;
+package io.spine.tools.code.structure;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
-import io.spine.code.fs.js.DirectoryReference;
-import io.spine.code.fs.js.FileReference;
+import io.spine.code.fs.DirectoryReference;
+import io.spine.code.fs.FileReference;
import java.util.List;
import java.util.Objects;
@@ -62,7 +62,6 @@ private DirectoryPattern(DirectoryReference directory, boolean includeNested) {
* the value of the pattern
* @return a new instance
*/
- @SuppressWarnings("ResultOfMethodCallIgnored" /* The result can be ignored. */)
public static DirectoryPattern of(String value) {
checkNotEmptyOrBlank(value);
boolean includeNested = value.endsWith(INCLUDE_NESTED_PATTERN_ENDING);
diff --git a/tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/ExternalModule.java b/tools/plugin-base/src/main/java/io/spine/tools/code/structure/ExternalModule.java
similarity index 87%
rename from tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/ExternalModule.java
rename to tools/plugin-base/src/main/java/io/spine/tools/code/structure/ExternalModule.java
index 40e1e94535..2ff2325d03 100644
--- a/tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/ExternalModule.java
+++ b/tools/plugin-base/src/main/java/io/spine/tools/code/structure/ExternalModule.java
@@ -18,12 +18,13 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package io.spine.js.generate.resolve;
+package io.spine.tools.code.structure;
import com.google.common.base.Joiner;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
-import io.spine.code.fs.js.DirectoryReference;
-import io.spine.code.fs.js.FileReference;
+import io.spine.code.fs.DirectoryReference;
+import io.spine.code.fs.FileReference;
import java.util.Collection;
import java.util.Objects;
@@ -34,9 +35,9 @@
import static io.spine.util.Preconditions2.checkNotEmptyOrBlank;
/**
- * An external JavaScript module used in a project.
+ * An external library module used in a project.
*
- *
External means that it is provided by an artifact repository like NPM.
+ *
An external module is typically provided by a package manager, such as NPM or Pub.
*/
public final class ExternalModule {
@@ -65,7 +66,7 @@ public ExternalModule(String name, Collection directories) {
* @throws IllegalStateException
* if the file is not provided by the module
*/
- FileReference fileInModule(FileReference fileReference) {
+ public FileReference fileInModule(FileReference fileReference) {
Optional matchingDirectory = matchingDirectory(fileReference);
checkState(matchingDirectory.isPresent());
DirectoryReference directory = matchingDirectory.get()
@@ -83,11 +84,18 @@ FileReference fileInModule(FileReference fileReference) {
* the file to check
* @return {@code true} if the module provides the file
*/
- boolean provides(FileReference fileReference) {
+ public boolean provides(FileReference fileReference) {
boolean result = matchingDirectory(fileReference).isPresent();
return result;
}
+ /**
+ * Obtains the name of the module.
+ */
+ public String name() {
+ return name;
+ }
+
private Optional matchingDirectory(FileReference fileReference) {
DirectoryReference directory = fileReference.directory();
for (DirectoryPattern pattern : directories) {
@@ -133,6 +141,13 @@ public static ExternalModule spineUsers() {
return new ExternalModule("spine-users", directories);
}
+ /**
+ * All the modules in {@link #spineWeb()} and {@link #spineUsers()}.
+ */
+ public static ImmutableList predefinedModules() {
+ return ImmutableList.of(spineWeb(), spineUsers());
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) {
diff --git a/tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/package-info.java b/tools/plugin-base/src/main/java/io/spine/tools/code/structure/package-info.java
similarity index 92%
rename from tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/package-info.java
rename to tools/plugin-base/src/main/java/io/spine/tools/code/structure/package-info.java
index 5810177a3d..e54cbf6162 100644
--- a/tools/proto-js-plugin/src/main/java/io/spine/js/generate/resolve/package-info.java
+++ b/tools/plugin-base/src/main/java/io/spine/tools/code/structure/package-info.java
@@ -19,11 +19,11 @@
*/
/**
- * The classes which resolve imports in generated code.
+ * Classes which work with source code directory structure.
*/
@CheckReturnValue
@ParametersAreNonnullByDefault
-package io.spine.js.generate.resolve;
+package io.spine.tools.code.structure;
import javax.annotation.CheckReturnValue;
import javax.annotation.ParametersAreNonnullByDefault;
diff --git a/tools/plugin-base/src/main/java/io/spine/tools/gradle/GradleTask.java b/tools/plugin-base/src/main/java/io/spine/tools/gradle/GradleTask.java
index 077f525b82..8c9a48da9a 100644
--- a/tools/plugin-base/src/main/java/io/spine/tools/gradle/GradleTask.java
+++ b/tools/plugin-base/src/main/java/io/spine/tools/gradle/GradleTask.java
@@ -296,7 +296,7 @@ private void dependTask(Task task, Project project) {
}
if (followingTask != null) {
TaskContainer existingTasks = project.getTasks();
- existingTasks.getByPath(followingTask.name())
+ existingTasks.getByName(followingTask.name())
.dependsOn(task);
}
if (previousTaskOfAllProjects != null) {
diff --git a/tools/plugin-base/src/main/java/io/spine/tools/gradle/ProtoDartTaskName.java b/tools/plugin-base/src/main/java/io/spine/tools/gradle/ProtoDartTaskName.java
index 4a70a34aa4..c63d29f5d3 100644
--- a/tools/plugin-base/src/main/java/io/spine/tools/gradle/ProtoDartTaskName.java
+++ b/tools/plugin-base/src/main/java/io/spine/tools/gradle/ProtoDartTaskName.java
@@ -58,5 +58,10 @@ public enum ProtoDartTaskName implements TaskName {
*
*
Works only with the {@code test} scope files.
*/
- copyTestGeneratedDart
+ copyTestGeneratedDart,
+
+ /**
+ * Rewrites the Dart source files generated from Protobuf with the resolved absolute imports.
+ */
+ resolveImports
}
diff --git a/tools/proto-js-plugin/src/test/java/io/spine/js/generate/resolve/DirectoryPatternTest.java b/tools/plugin-base/src/test/java/io/spine/tools/code/structure/DirectoryPatternTest.java
similarity index 98%
rename from tools/proto-js-plugin/src/test/java/io/spine/js/generate/resolve/DirectoryPatternTest.java
rename to tools/plugin-base/src/test/java/io/spine/tools/code/structure/DirectoryPatternTest.java
index e2ce73c3f5..32ac8328b0 100644
--- a/tools/proto-js-plugin/src/test/java/io/spine/js/generate/resolve/DirectoryPatternTest.java
+++ b/tools/plugin-base/src/test/java/io/spine/tools/code/structure/DirectoryPatternTest.java
@@ -18,11 +18,11 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package io.spine.js.generate.resolve;
+package io.spine.tools.code.structure;
import com.google.common.testing.EqualsTester;
import com.google.common.testing.NullPointerTester;
-import io.spine.code.fs.js.DirectoryReference;
+import io.spine.code.fs.DirectoryReference;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
diff --git a/tools/proto-js-plugin/src/test/java/io/spine/js/generate/resolve/ExternalModuleTest.java b/tools/plugin-base/src/test/java/io/spine/tools/code/structure/ExternalModuleTest.java
similarity index 90%
rename from tools/proto-js-plugin/src/test/java/io/spine/js/generate/resolve/ExternalModuleTest.java
rename to tools/plugin-base/src/test/java/io/spine/tools/code/structure/ExternalModuleTest.java
index ccacea3996..8320a32329 100644
--- a/tools/proto-js-plugin/src/test/java/io/spine/js/generate/resolve/ExternalModuleTest.java
+++ b/tools/plugin-base/src/test/java/io/spine/tools/code/structure/ExternalModuleTest.java
@@ -18,15 +18,17 @@
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
-package io.spine.js.generate.resolve;
+package io.spine.tools.code.structure;
import com.google.common.testing.EqualsTester;
-import io.spine.code.fs.js.FileReference;
+import io.spine.code.fs.FileReference;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
-import static io.spine.js.generate.resolve.given.Given.newModule;
+import java.util.List;
+
import static java.util.Collections.emptySet;
+import static java.util.Collections.singletonList;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -104,4 +106,10 @@ void acceptOnlyProvidedProto() {
() -> module.fileInModule(reference)
);
}
+
+ private static ExternalModule newModule(String moduleName, String directoryPattern) {
+ DirectoryPattern pattern = DirectoryPattern.of(directoryPattern);
+ List patterns = singletonList(pattern);
+ return new ExternalModule(moduleName, patterns);
+ }
}
diff --git a/tools/proto-dart-plugin/src/main/java/io/spine/generate/dart/Extension.java b/tools/proto-dart-plugin/src/main/java/io/spine/generate/dart/Extension.java
index 146695c1ca..74d8cf818f 100644
--- a/tools/proto-dart-plugin/src/main/java/io/spine/generate/dart/Extension.java
+++ b/tools/proto-dart-plugin/src/main/java/io/spine/generate/dart/Extension.java
@@ -20,7 +20,10 @@
package io.spine.generate.dart;
+import com.google.common.collect.ImmutableList;
import io.spine.code.fs.dart.DefaultDartProject;
+import io.spine.tools.code.structure.DirectoryPattern;
+import io.spine.tools.code.structure.ExternalModule;
import io.spine.tools.gradle.GradleExtension;
import org.gradle.api.Project;
import org.gradle.api.file.DirectoryProperty;
@@ -29,6 +32,12 @@
import java.io.File;
import java.nio.file.Path;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import static com.google.common.collect.Maps.newHashMap;
+import static java.util.stream.Collectors.toList;
/**
* DSL extension for configuring Protobuf-to-Dart compilation.
@@ -50,6 +59,39 @@ public final class Extension extends GradleExtension {
private final DirectoryProperty testDir;
private final DirectoryProperty mainGeneratedDir;
private final DirectoryProperty testGeneratedDir;
+
+ /**
+ * Names of Dart modules and directories they provide.
+ *
+ *
Information about modules is used to resolve imports in generated Protobuf files.
+ *
+ *
Import resolution only applies to Dart files generated from Protobuf. Such files must
+ * have one of extensions: {@code .pb.dart}, {@code .pbenum.dart}, {@code .pbserver.dart}, or
+ * {@code .pbjson.dart}. All other files are ignored.
+ *
+ *
An example of the definition:
+ *
{@code
+ * modules = [
+ * // The module provides `company/client` directory (not including subdirectories).
+ * // So, an import path like {@code ../company/client/file.pb.dart}
+ * // becomes {@code package:client/company/client/file.pb.dart}.
+ * 'client' : ['company/client'],
+ *
+ * // The module provides `company/server` directory (including subdirectories).
+ * // So, an import path like {@code ../company/server/nested/file.pb.dart}
+ * // becomes {@code package:server/company/server/nested/file.pb.dart}.
+ * 'server' : ['company/server/*'],
+ *
+ * // The module provides 'proto/company` directory.
+ * // So, an import pah like {@code ../company/file.pbenum.dart}
+ * // becomes {@code package:common_types/proto/company/file.pbenum.dart}.
+ * 'common_types' : ['proto/company']
+ * ]
+ * }