Skip to content
This repository was archived by the owner on Mar 5, 2025. It is now read-only.

Commit e75ada6

Browse files
committed
Improved error message when lib module is incompatible
1 parent 8c10f65 commit e75ada6

File tree

4 files changed

+42
-13
lines changed

4 files changed

+42
-13
lines changed

src/org/rascalmpl/core/library/lang/rascalcore/check/Checker.rsc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ ModuleStatus rascalTModelForLocs(
352352
}
353353
} catch rascalBinaryNeedsRecompilation(str txt): {
354354
for(str mname <- topModuleNames){
355-
ms.messages[mname] = { error("Binary module `<txt>` needs recompilation", |unknown:///|) };
355+
ms.messages[mname] = { error(txt, |unknown:///|) };
356356
}
357357
}
358358

src/org/rascalmpl/core/library/lang/rascalcore/check/Import.rsc

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,8 @@ ModuleStatus getImportAndExtendGraph(str qualifiedModuleName, ModuleStatus ms){
137137
throw "No bill-of-materials found for <qualifiedModuleName>";
138138
}
139139
if(!allImportsAndExtendsValid){ // Check that the source code of qualifiedModuleName is available
140+
mloc = |unknown:///|(0,0,<0,0>,<0,0>);
140141
try {
141-
mloc = |unknown:///|(0,0,<0,0>,<0,0>);
142142
try {
143143
mloc = getRascalModuleLocation(qualifiedModuleName, pcfg);
144144
} catch e: {
@@ -151,12 +151,13 @@ ModuleStatus getImportAndExtendGraph(str qualifiedModuleName, ModuleStatus ms){
151151
}
152152
if(mloc.extension != "rsc" || isModuleLocationInLibs(qualifiedModuleName, mloc, pcfg)) throw "No src or library module 1"; //There is only a tpl file available
153153
} catch value _:{
154-
<compatible, ms> = isCompatibleBinaryLibrary(tm, domain(localImportsAndExtends), ms);
155-
if(!compatible){
156-
msg = error("Binary module `qualifiedModuleName` needs recompilation", |unknown:///|);
154+
<incompatible, ms> = isCompatibleBinaryLibrary(tm, domain(localImportsAndExtends), ms);
155+
if(!isEmpty(incompatible)){
156+
txt = "Recompilation or reconfiguration needed: binary module `<qualifiedModuleName>` uses incompatible modules <intercalateAnd(incompatible)>";
157+
msg = error(txt, mloc);
157158
tm.messages += [msg];
158159
ms.messages[qualifiedModuleName] ? {} += { msg };
159-
throw rascalBinaryNeedsRecompilation(qualifiedModuleName);
160+
throw rascalBinaryNeedsRecompilation(txt);
160161
} else {
161162
allImportsAndExtendsValid = true;
162163
if(ms.compilerConfig.verbose){
@@ -219,7 +220,7 @@ str getModuleFromLogical(loc l){
219220
}
220221
221222
// Is what library module lib provides compatible with all uses in the modules libUsers?
222-
tuple[bool, ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUsers, ModuleStatus ms){
223+
tuple[list[str], ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUsers, ModuleStatus ms){
223224
224225
libName = lib.modelName;
225226
set[loc] libProvides = domain(lib.logical2physical);
@@ -235,10 +236,12 @@ tuple[bool, ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUser
235236
236237
if(usersRequireFromLib <= libProvides){
237238
//println("isCompatibleBinaryLibrary <libName>: satisfied");
238-
return <true, ms>;
239+
return <[], ms>;
239240
} else {
240241
//println("isCompatibleBinaryLibrary, <libName> unsatisfied: <usersRequireFromLib - libProvides>");
241-
return <false, ms>;
242+
unsatisfied = usersRequireFromLib - libProvides;
243+
incompatibleModules = { split("/", u.path)[1] | u <- unsatisfied };
244+
return <toList(incompatibleModules), ms>;
242245
}
243246
}
244247

src/org/rascalmpl/core/library/lang/rascalcore/check/TestConfigs.rsc

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ data PathConfig(
1616

1717
loc REPO = |file:///Users/paulklint/git/|;
1818
loc RASCAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/rascal/0.40.17/rascal-0.40.17.jar!/|;
19-
loc TYPEPAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.14.8-SNAPSHOT/typepal-0.14.8-SNAPSHOT.jar!/|;
19+
loc TYPEPAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.14.8/typepal-0.14.8.jar!/|;
20+
loc OUTDATED_TYPEPAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.14.1/typepal-0.14.1.jar!/|;
21+
2022
// ---- PathConfigs for testing purposes --------------------------------------
2123

2224
private int npc = 0;
@@ -116,7 +118,6 @@ public RascalCompilerConfig getRascalCompilerConfig(){
116118
public PathConfig getRascalCorePathConfig() {
117119
return pathConfig(
118120
srcs = [ REPO + "rascal-core/src/org/rascalmpl/core/library" ],
119-
bin = |project://rascal-core/target/test-classes|,
120121
bin = REPO + "generated-sources/target/rascal-core/classes",
121122
generatedSources = REPO + "generated-sources/target/rascal-core/generated-sources/src/main/java/",
122123
generatedTestSources = REPO + "generated-sources/target/rascal-core/generated-sources/src/main/java/",
@@ -306,4 +307,27 @@ public RascalCompilerConfig getVSCodeCompilerConfig(PathConfig pcfg){
306307

307308
public RascalCompilerConfig getVSCodeCompilerConfig(){
308309
return rascalCompilerConfig(getVSCodePathConfig());
310+
}
311+
312+
// ---- Outdated TypePal Usage -----------------------------------------------------------------
313+
314+
public PathConfig getOutdatedTPLPathConfig() {
315+
return pathConfig(
316+
srcs=[REPO + "rascal-core/src/org/rascalmpl/core/library"],
317+
bin=REPO + "generated-sources/target/outdated-typepal/classes",
318+
generatedSources = REPO + "generated-sources/target/outdated-typepal/generated-sources/src/main/java/",
319+
generatedTestSources = REPO + "generated-sources/target/outdated-typepal/generated-sources/src/main/java/",
320+
resources = REPO + "generated-sources/target/outdated-typepal/generated-resources/src/main/java/",
321+
libs=[
322+
RASCAL_JAR,
323+
OUTDATED_TYPEPAL_JAR ]
324+
);
325+
}
326+
327+
public RascalCompilerConfig getOutdatedTPLCompilerConfig(PathConfig pcfg){
328+
return rascalCompilerConfig(pcfg)[verbose = true][logWrittenFiles=true];
329+
}
330+
331+
public RascalCompilerConfig getOutdatedTPLCompilerConfig(){
332+
return rascalCompilerConfig(getOutdatedTPLPathConfig());
309333
}
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
module lang::rascalcore::compile::Examples::Tst0
22

3-
syntax A = "a";
3+
import analysis::typepal::AType;
44

5-
value X = #A;
5+
value main() = tvar(|file:///Users/paulklint/git/rascal-core/src/org/rascalmpl/core/library/lang/rascalcore/compile/Examples/Tst0.rsc|(57,26,<3,7>,<3,33>));
6+
7+

0 commit comments

Comments
 (0)