Skip to content

Commit f6ffeb3

Browse files
woesseregon
authored andcommitted
[GR-52332] Use shaded JCodings and JOni library dependencies.
PullRequest: truffleruby/4162
2 parents 5096ddd + 82c1ccb commit f6ffeb3

34 files changed

+176
-122
lines changed

common.json

+8-8
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"Jsonnet files should not include this file directly but use ci/common.jsonnet instead."
55
],
66

7-
"mx_version": "7.11.0",
7+
"mx_version": "7.13.1",
88

99
"COMMENT.jdks": "When adding or removing JDKs keep in sync with JDKs in ci/common.jsonnet",
1010
"jdks": {
@@ -44,13 +44,13 @@
4444
"labsjdk-ee-21Debug": {"name": "labsjdk", "version": "ee-21.0.2+13-jvmci-23.1-b33-debug", "platformspecific": true },
4545
"labsjdk-ee-21-llvm": {"name": "labsjdk", "version": "ee-21.0.2+13-jvmci-23.1-b33-sulong", "platformspecific": true },
4646

47-
"oraclejdk-latest": {"name": "jpg-jdk", "version": "23", "build_id": "jdk-23+10", "platformspecific": true, "extrabundles": ["static-libs"]},
48-
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-23+10-jvmci-b01", "platformspecific": true },
49-
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-23+10-jvmci-b01-debug", "platformspecific": true },
50-
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-23+10-jvmci-b01-sulong", "platformspecific": true },
51-
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-23+10-jvmci-b01", "platformspecific": true },
52-
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-23+10-jvmci-b01-debug", "platformspecific": true },
53-
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-23+10-jvmci-b01-sulong", "platformspecific": true }
47+
"oraclejdk-latest": {"name": "jpg-jdk", "version": "23", "build_id": "jdk-23+11", "platformspecific": true, "extrabundles": ["static-libs"]},
48+
"labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-23+11-jvmci-b01", "platformspecific": true },
49+
"labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-23+11-jvmci-b01-debug", "platformspecific": true },
50+
"labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-23+11-jvmci-b01-sulong", "platformspecific": true },
51+
"labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-23+11-jvmci-b01", "platformspecific": true },
52+
"labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-23+11-jvmci-b01-debug", "platformspecific": true },
53+
"labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-23+11-jvmci-b01-sulong", "platformspecific": true }
5454
},
5555

5656
"eclipse": {

mx.truffleruby/mx_truffleruby.py

+6-3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
import mx_subst
2222
import mx_spotbugs
2323

24+
# re-export custom mx project classes, so they can be used from suite.py
25+
from mx_sdk_shaded import ShadedLibraryProject # pylint: disable=unused-import
26+
2427
# Fail early and clearly when trying to build with a too old JDK
2528
jdk = mx.get_jdk(mx.JavaCompliance('11+'), 'building TruffleRuby which requires JDK 11 or newer')
2629
if mx_sdk_vm.base_jdk_version() < 11:
@@ -289,9 +292,9 @@ def ruby_maven_deploy_public(args):
289292
'truffleruby:TRUFFLERUBY-SHARED',
290293
'truffleruby:TRUFFLERUBY-ANNOTATIONS',
291294
'sdk:JLINE3',
292-
# Libraries
293-
'truffleruby:JCODINGS',
294-
'truffleruby:JONI',
295+
# Library distributions
296+
'truffle:TRUFFLE_JCODINGS',
297+
'truffleruby:TRUFFLERUBY_JONI',
295298
],
296299
support_distributions=[
297300
'truffleruby:TRUFFLERUBY_GRAALVM_SUPPORT_PLATFORM_AGNOSTIC',

mx.truffleruby/suite.py

+71-21
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
{
2121
"name": "regex",
2222
"subdir": True,
23-
"version": "d6243acce05af06b17d63dddb2972e739141dc6d",
23+
"version": "3f39def1e63211bae1359722528902f979a8afcf",
2424
"urls": [
2525
{"url": "https://github.com/oracle/graal.git", "kind": "git"},
2626
{"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"},
@@ -29,7 +29,7 @@
2929
{
3030
"name": "sulong",
3131
"subdir": True,
32-
"version": "d6243acce05af06b17d63dddb2972e739141dc6d",
32+
"version": "3f39def1e63211bae1359722528902f979a8afcf",
3333
"urls": [
3434
{"url": "https://github.com/oracle/graal.git", "kind": "git"},
3535
{"url": "https://curio.ssw.jku.at/nexus/content/repositories/snapshots", "kind": "binary"},
@@ -69,18 +69,6 @@
6969

7070
# ------------- Libraries -------------
7171

72-
"JCODINGS": {
73-
"moduleName": "org.jruby.jcodings",
74-
"maven": {
75-
"groupId": "org.jruby.jcodings",
76-
"artifactId": "jcodings",
77-
"version": "1.0.58"
78-
},
79-
"digest": "sha512:625210aa07d1e08bf2f5fdc9da6c491a4e5a56e7db297cba1aa73636670ac1d62f3fd763716ef6ede862456b17169272ed9c8461d07100f95262163dc9c18ef8",
80-
"sourceDigest": "sha512:d0f883f658310f7ad091aea08df28f1f5fe12080d6cb266cd91aec7e34cda1d57736d32618e8632b329854367d6e4d5fc91b5eb8ac9b823b26113fae3f75f50c",
81-
"license": ["MIT"],
82-
},
83-
8472
"JONI": {
8573
"moduleName": "org.jruby.joni",
8674
"maven": {
@@ -273,9 +261,9 @@
273261
"sulong:SULONG_API",
274262
"sulong:SULONG_NFI",
275263
"sdk:JLINE3",
276-
# Libraries, keep in sync with TRUFFLERUBY.exclude and truffle_jars (in mx_truffleruby.py)
277-
"truffleruby:JCODINGS",
278-
"truffleruby:JONI",
264+
# Library distributions, keep in sync with truffle_jars in mx_truffleruby.py
265+
"truffle:TRUFFLE_JCODINGS",
266+
"truffleruby:TRUFFLERUBY_JONI",
279267
],
280268
"annotationProcessors": [
281269
"truffle:TRUFFLE_DSL_PROCESSOR",
@@ -424,6 +412,38 @@
424412
"BSD-simplified", # MRI
425413
],
426414
},
415+
416+
"org.graalvm.shadowed.org.joni": {
417+
# Shadowed JONI library (org.jruby.joni:joni)
418+
"dir": "src/shadowed/joni",
419+
"sourceDirs": ["java"],
420+
"javaCompliance": "17+",
421+
"spotbugsIgnoresGenerated": True,
422+
"dependencies": [
423+
"truffle:TRUFFLE_JCODINGS",
424+
],
425+
"shadedDependencies": [
426+
"truffleruby:JONI",
427+
],
428+
"class": "ShadedLibraryProject",
429+
"shade": {
430+
"packages": {
431+
"org.joni": "org.graalvm.shadowed.org.joni",
432+
"org.jcodings": "org.graalvm.shadowed.org.jcodings",
433+
},
434+
"exclude": [
435+
"META-INF/MANIFEST.MF",
436+
"META-INF/maven/org.jruby.joni/joni/*", # pom.xml, pom.properties
437+
"module-info.java",
438+
"org/joni/bench/*.java",
439+
],
440+
},
441+
"description": "JOni library shadowed for TruffleRuby.",
442+
# We need to force javac because the generated sources in this project produce warnings in JDT.
443+
"forceJavac": "true",
444+
"javac.lint.overrides": "none",
445+
"jacoco": "exclude",
446+
},
427447
},
428448

429449
"distributions": {
@@ -511,14 +531,13 @@
511531
"sulong:SULONG_API",
512532
"sulong:SULONG_NFI",
513533
"sdk:JLINE3",
534+
# Library distributions, keep in sync with truffle_jars in mx_truffleruby.py
535+
"truffle:TRUFFLE_JCODINGS",
536+
"truffleruby:TRUFFLERUBY_JONI",
514537
# runtime-only dependencies
515538
"truffle:TRUFFLE_NFI_LIBFFI",
516539
"sulong:SULONG_NATIVE",
517540
],
518-
"exclude": [ # Keep in sync with org.truffleruby dependencies and truffle_jars in mx_truffleruby.py
519-
"truffleruby:JCODINGS",
520-
"truffleruby:JONI",
521-
],
522541
"description": "Core module of Ruby on Truffle",
523542
"license": [
524543
"EPL-2.0", # JRuby (we're choosing EPL out of EPL,GPL,LGPL)
@@ -859,5 +878,36 @@
859878
},
860879
"noMavenJavadoc": True,
861880
},
881+
882+
"TRUFFLERUBY_JONI": {
883+
# JONI library shadowed for TruffleRuby.
884+
"moduleInfo": {
885+
"name": "org.graalvm.shadowed.joni",
886+
"requires": [
887+
"org.graalvm.shadowed.jcodings",
888+
],
889+
"exports": [
890+
"org.graalvm.shadowed.org.joni to org.graalvm.ruby",
891+
"org.graalvm.shadowed.org.joni.constants to org.graalvm.ruby",
892+
"org.graalvm.shadowed.org.joni.exception to org.graalvm.ruby",
893+
],
894+
},
895+
"javaCompliance": "17+",
896+
"dependencies": [
897+
"org.graalvm.shadowed.org.joni",
898+
],
899+
"distDependencies": [
900+
"truffle:TRUFFLE_JCODINGS",
901+
],
902+
"description": "JOni module shadowed for TruffleRuby.",
903+
"license": ["MIT"],
904+
"maven": {
905+
"groupId": "org.graalvm.shadowed",
906+
"artifactId": "joni",
907+
"tag": ["default", "public"],
908+
},
909+
"allowsJavadocWarnings": True,
910+
"compress": True,
911+
},
862912
},
863913
}

src/main/java/META-INF/native-image/org.graalvm.ruby/native-image.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
Args = -H:MaxRuntimeCompileMethods=5400 \
44
-H:+AddAllCharsets \
5-
--initialize-at-build-time=org.truffleruby,org.jcodings,org.joni,org.prism
5+
--initialize-at-build-time=org.truffleruby,org.graalvm.shadowed.org.joni,org.prism

src/main/java/org/truffleruby/cext/CExtNodes.java

+4-3
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,9 @@
2525
import com.oracle.truffle.api.strings.MutableTruffleString;
2626
import com.oracle.truffle.api.strings.TruffleString;
2727
import com.oracle.truffle.api.strings.TruffleString.ErrorHandling;
28-
import org.jcodings.Encoding;
29-
import org.jcodings.IntHolder;
28+
import org.graalvm.shadowed.org.jcodings.Config;
29+
import org.graalvm.shadowed.org.jcodings.Encoding;
30+
import org.graalvm.shadowed.org.jcodings.IntHolder;
3031
import org.truffleruby.Layouts;
3132
import org.truffleruby.RubyContext;
3233
import org.truffleruby.RubyLanguage;
@@ -1675,7 +1676,7 @@ public abstract static class RbTrMbcPutNode extends CoreMethodArrayArgumentsNode
16751676
Object rbTrEncMbcPut(RubyEncoding enc, int code,
16761677
@Cached TruffleString.FromByteArrayNode fromByteArrayNode) {
16771678
final Encoding encoding = enc.jcoding;
1678-
final byte buf[] = new byte[org.jcodings.Config.ENC_CODE_TO_MBC_MAXLEN];
1679+
final byte buf[] = new byte[Config.ENC_CODE_TO_MBC_MAXLEN];
16791680
final int resultLength = encoding.codeToMbc(code, buf, 0);
16801681
final byte result[] = new byte[resultLength];
16811682
if (resultLength > 0) {

src/main/java/org/truffleruby/core/CoreLibrary.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
import com.oracle.truffle.api.RootCallTarget;
2626
import com.oracle.truffle.api.exception.AbstractTruffleException;
27-
import org.jcodings.transcode.EConvFlags;
27+
import org.graalvm.shadowed.org.jcodings.transcode.EConvFlags;
2828
import org.truffleruby.RubyContext;
2929
import org.truffleruby.RubyLanguage;
3030
import org.truffleruby.annotations.CoreMethod;

src/main/java/org/truffleruby/core/encoding/EncodingConverterNodes.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@
2020
import com.oracle.truffle.api.profiles.InlinedBranchProfile;
2121
import com.oracle.truffle.api.strings.InternalByteArray;
2222
import com.oracle.truffle.api.strings.TruffleString;
23-
import org.jcodings.Encoding;
24-
import org.jcodings.Ptr;
25-
import org.jcodings.transcode.EConv;
26-
import org.jcodings.transcode.EConvFlags;
27-
import org.jcodings.transcode.EConvResult;
28-
import org.jcodings.transcode.Transcoder;
29-
import org.jcodings.transcode.TranscoderDB;
23+
import org.graalvm.shadowed.org.jcodings.Encoding;
24+
import org.graalvm.shadowed.org.jcodings.Ptr;
25+
import org.graalvm.shadowed.org.jcodings.transcode.EConv;
26+
import org.graalvm.shadowed.org.jcodings.transcode.EConvFlags;
27+
import org.graalvm.shadowed.org.jcodings.transcode.EConvResult;
28+
import org.graalvm.shadowed.org.jcodings.transcode.Transcoder;
29+
import org.graalvm.shadowed.org.jcodings.transcode.TranscoderDB;
3030
import org.truffleruby.annotations.CoreMethod;
3131
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
3232
import org.truffleruby.builtins.CoreMethodNode;

src/main/java/org/truffleruby/core/encoding/EncodingManager.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@
2424
import com.oracle.truffle.api.interop.InteropLibrary;
2525
import org.graalvm.nativeimage.ImageInfo;
2626
import org.graalvm.nativeimage.ProcessProperties;
27-
import org.jcodings.Encoding;
28-
import org.jcodings.EncodingDB;
27+
import org.graalvm.shadowed.org.jcodings.Encoding;
28+
import org.graalvm.shadowed.org.jcodings.EncodingDB;
2929
import org.truffleruby.RubyContext;
3030
import org.truffleruby.RubyLanguage;
3131
import org.truffleruby.annotations.SuppressFBWarnings;

src/main/java/org/truffleruby/core/encoding/EncodingNodes.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
2323
import com.oracle.truffle.api.strings.AbstractTruffleString;
2424
import com.oracle.truffle.api.strings.TruffleString;
25-
import org.jcodings.Config;
26-
import org.jcodings.EncodingDB;
25+
import org.graalvm.shadowed.org.jcodings.Config;
26+
import org.graalvm.shadowed.org.jcodings.EncodingDB;
2727
import org.truffleruby.annotations.CoreMethod;
2828
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
2929
import org.truffleruby.annotations.CoreModule;

src/main/java/org/truffleruby/core/encoding/Encodings.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,16 @@
1515
import com.oracle.truffle.api.CompilerDirectives;
1616
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
1717
import com.oracle.truffle.api.strings.TruffleString;
18-
import org.jcodings.Encoding;
19-
import org.jcodings.EncodingDB;
20-
import org.jcodings.specific.ASCIIEncoding;
21-
import org.jcodings.specific.ISO8859_1Encoding;
22-
import org.jcodings.specific.USASCIIEncoding;
23-
import org.jcodings.specific.UTF16BEEncoding;
24-
import org.jcodings.specific.UTF16LEEncoding;
25-
import org.jcodings.specific.UTF32BEEncoding;
26-
import org.jcodings.specific.UTF32LEEncoding;
27-
import org.jcodings.specific.UTF8Encoding;
18+
import org.graalvm.shadowed.org.jcodings.Encoding;
19+
import org.graalvm.shadowed.org.jcodings.EncodingDB;
20+
import org.graalvm.shadowed.org.jcodings.specific.ASCIIEncoding;
21+
import org.graalvm.shadowed.org.jcodings.specific.ISO8859_1Encoding;
22+
import org.graalvm.shadowed.org.jcodings.specific.USASCIIEncoding;
23+
import org.graalvm.shadowed.org.jcodings.specific.UTF16BEEncoding;
24+
import org.graalvm.shadowed.org.jcodings.specific.UTF16LEEncoding;
25+
import org.graalvm.shadowed.org.jcodings.specific.UTF32BEEncoding;
26+
import org.graalvm.shadowed.org.jcodings.specific.UTF32LEEncoding;
27+
import org.graalvm.shadowed.org.jcodings.specific.UTF8Encoding;
2828
import org.truffleruby.RubyLanguage;
2929
import org.truffleruby.core.string.FrozenStringLiterals;
3030
import org.truffleruby.core.string.ImmutableRubyString;

src/main/java/org/truffleruby/core/encoding/RubyEncoding.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@
1515
import com.oracle.truffle.api.library.ExportLibrary;
1616
import com.oracle.truffle.api.library.ExportMessage;
1717
import com.oracle.truffle.api.strings.TruffleString;
18-
import org.jcodings.Encoding;
19-
import org.jcodings.specific.ASCIIEncoding;
20-
import org.jcodings.specific.USASCIIEncoding;
18+
import org.graalvm.shadowed.org.jcodings.Encoding;
19+
import org.graalvm.shadowed.org.jcodings.specific.ASCIIEncoding;
20+
import org.graalvm.shadowed.org.jcodings.specific.USASCIIEncoding;
2121
import org.truffleruby.RubyContext;
2222
import org.truffleruby.core.kernel.KernelNodes;
2323
import org.truffleruby.core.klass.RubyClass;

src/main/java/org/truffleruby/core/encoding/RubyEncodingConverter.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
package org.truffleruby.core.encoding;
1111

1212
import com.oracle.truffle.api.object.Shape;
13-
import org.jcodings.transcode.EConv;
13+
import org.graalvm.shadowed.org.jcodings.transcode.EConv;
1414
import org.truffleruby.core.klass.RubyClass;
1515
import org.truffleruby.language.RubyDynamicObject;
1616

src/main/java/org/truffleruby/core/encoding/TStringUtils.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import com.oracle.truffle.api.nodes.Node;
1818
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
1919
import com.oracle.truffle.api.strings.AbstractTruffleString;
20-
import org.jcodings.Encoding;
20+
import org.graalvm.shadowed.org.jcodings.Encoding;
2121

2222
import com.oracle.truffle.api.strings.TruffleString;
2323
import org.truffleruby.core.array.ArrayUtils;

src/main/java/org/truffleruby/core/encoding/TranscodingManager.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@
3838
import java.util.Map;
3939
import java.util.Set;
4040

41-
import org.jcodings.transcode.TranscoderDB;
42-
import org.jcodings.unicode.UnicodeCodeRange;
43-
import org.jcodings.unicode.UnicodeEncoding;
44-
import org.jcodings.util.CaseInsensitiveBytesHash;
45-
import org.jcodings.util.Hash;
41+
import org.graalvm.shadowed.org.jcodings.transcode.TranscoderDB;
42+
import org.graalvm.shadowed.org.jcodings.unicode.UnicodeCodeRange;
43+
import org.graalvm.shadowed.org.jcodings.unicode.UnicodeEncoding;
44+
import org.graalvm.shadowed.org.jcodings.util.CaseInsensitiveBytesHash;
45+
import org.graalvm.shadowed.org.jcodings.util.Hash;
4646

4747
import com.oracle.truffle.api.TruffleOptions;
4848
import org.truffleruby.core.string.StringUtils;

src/main/java/org/truffleruby/core/regexp/ClassicRegexp.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,15 @@
4141

4242
import com.oracle.truffle.api.strings.AbstractTruffleString;
4343
import com.oracle.truffle.api.strings.TruffleStringBuilder;
44-
import org.jcodings.Encoding;
45-
import org.jcodings.specific.EUCJPEncoding;
46-
import org.jcodings.specific.SJISEncoding;
47-
import org.jcodings.specific.USASCIIEncoding;
48-
import org.jcodings.specific.UTF8Encoding;
49-
import org.joni.Option;
50-
import org.joni.Regex;
51-
import org.joni.Syntax;
52-
import org.joni.exception.JOniException;
44+
import org.graalvm.shadowed.org.jcodings.Encoding;
45+
import org.graalvm.shadowed.org.jcodings.specific.EUCJPEncoding;
46+
import org.graalvm.shadowed.org.jcodings.specific.SJISEncoding;
47+
import org.graalvm.shadowed.org.jcodings.specific.USASCIIEncoding;
48+
import org.graalvm.shadowed.org.jcodings.specific.UTF8Encoding;
49+
import org.graalvm.shadowed.org.joni.Option;
50+
import org.graalvm.shadowed.org.joni.Regex;
51+
import org.graalvm.shadowed.org.joni.Syntax;
52+
import org.graalvm.shadowed.org.joni.exception.JOniException;
5353
import org.truffleruby.RubyContext;
5454
import org.truffleruby.annotations.SuppressFBWarnings;
5555
import org.truffleruby.collections.ByteArrayBuilder;

src/main/java/org/truffleruby/core/regexp/EncodingCache.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import java.util.function.Function;
1515

1616
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
17-
import org.joni.Regex;
17+
import org.graalvm.shadowed.org.joni.Regex;
1818
import org.truffleruby.collections.ConcurrentOperations;
1919
import org.truffleruby.core.encoding.RubyEncoding;
2020

src/main/java/org/truffleruby/core/regexp/MatchDataNodes.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
import com.oracle.truffle.api.profiles.InlinedLoopConditionProfile;
2323
import com.oracle.truffle.api.strings.AbstractTruffleString;
2424
import com.oracle.truffle.api.strings.TruffleString;
25-
import org.joni.NameEntry;
26-
import org.joni.Regex;
27-
import org.joni.Region;
28-
import org.joni.exception.ValueException;
25+
import org.graalvm.shadowed.org.joni.NameEntry;
26+
import org.graalvm.shadowed.org.joni.Regex;
27+
import org.graalvm.shadowed.org.joni.Region;
28+
import org.graalvm.shadowed.org.joni.exception.ValueException;
2929
import org.truffleruby.annotations.CoreMethod;
3030
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
3131
import org.truffleruby.annotations.CoreModule;

0 commit comments

Comments
 (0)