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

Commit

Permalink
Improved error message when lib module is incompatible
Browse files Browse the repository at this point in the history
  • Loading branch information
PaulKlint committed Jan 10, 2025
1 parent 8c10f65 commit e75ada6
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ ModuleStatus rascalTModelForLocs(
}
} catch rascalBinaryNeedsRecompilation(str txt): {
for(str mname <- topModuleNames){
ms.messages[mname] = { error("Binary module `<txt>` needs recompilation", |unknown:///|) };
ms.messages[mname] = { error(txt, |unknown:///|) };
}
}

Expand Down
19 changes: 11 additions & 8 deletions src/org/rascalmpl/core/library/lang/rascalcore/check/Import.rsc
Original file line number Diff line number Diff line change
Expand Up @@ -137,8 +137,8 @@ ModuleStatus getImportAndExtendGraph(str qualifiedModuleName, ModuleStatus ms){
throw "No bill-of-materials found for <qualifiedModuleName>";
}
if(!allImportsAndExtendsValid){ // Check that the source code of qualifiedModuleName is available
mloc = |unknown:///|(0,0,<0,0>,<0,0>);
try {
mloc = |unknown:///|(0,0,<0,0>,<0,0>);
try {
mloc = getRascalModuleLocation(qualifiedModuleName, pcfg);
} catch e: {
Expand All @@ -151,12 +151,13 @@ ModuleStatus getImportAndExtendGraph(str qualifiedModuleName, ModuleStatus ms){
}
if(mloc.extension != "rsc" || isModuleLocationInLibs(qualifiedModuleName, mloc, pcfg)) throw "No src or library module 1"; //There is only a tpl file available
} catch value _:{
<compatible, ms> = isCompatibleBinaryLibrary(tm, domain(localImportsAndExtends), ms);
if(!compatible){
msg = error("Binary module `qualifiedModuleName` needs recompilation", |unknown:///|);
<incompatible, ms> = isCompatibleBinaryLibrary(tm, domain(localImportsAndExtends), ms);
if(!isEmpty(incompatible)){
txt = "Recompilation or reconfiguration needed: binary module `<qualifiedModuleName>` uses incompatible modules <intercalateAnd(incompatible)>";
msg = error(txt, mloc);
tm.messages += [msg];
ms.messages[qualifiedModuleName] ? {} += { msg };
throw rascalBinaryNeedsRecompilation(qualifiedModuleName);
throw rascalBinaryNeedsRecompilation(txt);
} else {
allImportsAndExtendsValid = true;
if(ms.compilerConfig.verbose){
Expand Down Expand Up @@ -219,7 +220,7 @@ str getModuleFromLogical(loc l){
}

// Is what library module lib provides compatible with all uses in the modules libUsers?
tuple[bool, ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUsers, ModuleStatus ms){
tuple[list[str], ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUsers, ModuleStatus ms){

libName = lib.modelName;
set[loc] libProvides = domain(lib.logical2physical);
Expand All @@ -235,10 +236,12 @@ tuple[bool, ModuleStatus] isCompatibleBinaryLibrary(TModel lib, set[str] libUser

if(usersRequireFromLib <= libProvides){
//println("isCompatibleBinaryLibrary <libName>: satisfied");
return <true, ms>;
return <[], ms>;
} else {
//println("isCompatibleBinaryLibrary, <libName> unsatisfied: <usersRequireFromLib - libProvides>");
return <false, ms>;
unsatisfied = usersRequireFromLib - libProvides;
incompatibleModules = { split("/", u.path)[1] | u <- unsatisfied };
return <toList(incompatibleModules), ms>;
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ data PathConfig(

loc REPO = |file:///Users/paulklint/git/|;
loc RASCAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/rascal/0.40.17/rascal-0.40.17.jar!/|;
loc TYPEPAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.14.8-SNAPSHOT/typepal-0.14.8-SNAPSHOT.jar!/|;
loc TYPEPAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.14.8/typepal-0.14.8.jar!/|;
loc OUTDATED_TYPEPAL_JAR = |jar+file:///Users/paulklint/.m2/repository/org/rascalmpl/typepal/0.14.1/typepal-0.14.1.jar!/|;

// ---- PathConfigs for testing purposes --------------------------------------

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

public RascalCompilerConfig getVSCodeCompilerConfig(){
return rascalCompilerConfig(getVSCodePathConfig());
}

// ---- Outdated TypePal Usage -----------------------------------------------------------------

public PathConfig getOutdatedTPLPathConfig() {
return pathConfig(
srcs=[REPO + "rascal-core/src/org/rascalmpl/core/library"],
bin=REPO + "generated-sources/target/outdated-typepal/classes",
generatedSources = REPO + "generated-sources/target/outdated-typepal/generated-sources/src/main/java/",
generatedTestSources = REPO + "generated-sources/target/outdated-typepal/generated-sources/src/main/java/",
resources = REPO + "generated-sources/target/outdated-typepal/generated-resources/src/main/java/",
libs=[
RASCAL_JAR,
OUTDATED_TYPEPAL_JAR ]
);
}

public RascalCompilerConfig getOutdatedTPLCompilerConfig(PathConfig pcfg){
return rascalCompilerConfig(pcfg)[verbose = true][logWrittenFiles=true];
}

public RascalCompilerConfig getOutdatedTPLCompilerConfig(){
return rascalCompilerConfig(getOutdatedTPLPathConfig());
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
module lang::rascalcore::compile::Examples::Tst0

syntax A = "a";
import analysis::typepal::AType;

value X = #A;
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>));


0 comments on commit e75ada6

Please sign in to comment.