Files
libadalang/testsuite/tests/java_api/gpr_context/GPRContext.java
2025-09-19 11:42:47 +00:00

197 lines
6.0 KiB
Java

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import com.adacore.libadalang.Libadalang;
/**
* Test that the ProjectManager.createContext method work as expected.
*/
public class GPRContext {
private static void check(
String label,
String root_project,
String project,
Libadalang.EventHandler eventHandler,
boolean withTrivia,
int tabStop
) {
System.out.println("== " + label + " ==");
System.out.println("");
// Load the requested project and create the analysis context from it.
Libadalang.AnalysisContext ctx;
try (
Libadalang.ProjectOptions opts = new Libadalang.ProjectOptions();
) {
opts.addSwitch(Libadalang.ProjectOption.P, root_project);
try (
Libadalang.ProjectManager gpr =
new Libadalang.ProjectManager(opts, false);
) {
try {
ctx = gpr.createContext(
project,
eventHandler,
withTrivia,
tabStop
);
} catch (Libadalang.LangkitException e) {
if (
e.kind
!= Libadalang.ExceptionKind.UNSUPPORTED_VIEW_ERROR
)
throw new RuntimeException();
System.out.println(
"Unsupported_View_Error: " + e.getMessage()
);
System.out.println("");
return;
}
}
}
Libadalang.AnalysisUnit u = ctx.getUnitFromProvider(
Libadalang.Text.create("pkg"),
Libadalang.AnalysisUnitKind.UNIT_BODY
);
Libadalang.Diagnostic[] diagnostics = u.getDiagnostics();
if (diagnostics.length != 0)
{
for (Libadalang.Diagnostic d : diagnostics)
System.out.println(d.toString());
throw new RuntimeException();
}
// To show that With_Trivia / Tab_Stop are properly forwarded to the
// analysis context constructor and that the default charset is
// correctly determined, show the first token (or trivia).
Libadalang.Token t = u.getFirstToken();
System.out.print("pkg%b first token/trivia: ");
System.out.print("<Token Kind=" + t.kind.name + " Text=\"");
String text = t.getText();
for (int i = 0; i < text.length(); ++i) {
final char c = text.charAt(i);
if (c < ' ' || c > '~')
System.out.print(String.format("\\x%02x", (int) c));
else
System.out.print(c);
}
System.out.println("\">");
System.out.println("pkg%b root node: " + u.getRoot());
// To show that the unit provider works as expected, resolve the Pkg
// package spec from its body.
Libadalang.CompilationUnit cu =
(Libadalang.CompilationUnit) u.getRoot();
Libadalang.LibraryItem it = (Libadalang.LibraryItem) cu.fBody();
Libadalang.PackageBody pkg = (Libadalang.PackageBody) it.fItem();
Libadalang.AdaNode n = pkg.pPreviousPart(false);
System.out.println("pkg%b previous part: " + n);
// To show that configuration pragmas are properly detected from the
// project, print their list.
Libadalang.AdaNode[] pragmas = cu.pAllConfigPragmas();
for (Libadalang.AdaNode pragma : pragmas)
System.out.println("Config pragma: " + pragma);
System.out.println("");
}
static boolean triggered = false;
public static void main(String[] args) {
check("Simple: defaults", "simple/p.gpr", null, null, true, 8);
check("Simple: without trivia", "simple/p.gpr", null, null, false, 8);
check("Simple: tab stop = 4", "simple/p.gpr", null, null, true, 4);
check("UTF-8", "utf-8/p.gpr", null, null, true, 8);
check(
"Aggregate project (no specific view)",
"aggregate/agg.gpr",
null,
null,
true,
8
);
check(
"Aggregate project (specific view: p2)",
"aggregate/agg.gpr",
"p2",
null,
true,
8
);
Libadalang.EventHandler.UnitRequestedCallback unitRequestedCallback = (
Libadalang.AnalysisContext context,
String name,
Libadalang.AnalysisUnit from,
boolean found,
boolean isNotFoundError
) -> {
};
Libadalang.EventHandler.UnitParsedCallback unitParsedCallback = (
Libadalang.AnalysisContext context,
Libadalang.AnalysisUnit unit,
boolean reparsed
) -> {
if(!triggered) {
triggered = true;
System.out.println("Unit_Parsed_Callback invoked");
}
};
check(
"Simple: event handler",
"simple/p.gpr",
null,
Libadalang.EventHandler.create(
unitRequestedCallback,
unitParsedCallback
),
true,
8
);
check(
"Preprocessing (p1)",
"preprocessing/p1.gpr",
null,
null,
true,
8
);
check(
"Preprocessing (p2)",
"preprocessing/p2.gpr",
null,
null,
true,
8
);
check(
"Config pragmas (p1)",
"config_pragmas/p1.gpr",
null,
null,
true,
8
);
check(
"Config pragmas (p2)",
"config_pragmas/p2.gpr",
null,
null,
true,
8
);
System.out.println("Done.");
}
}