Skip to content

Commit 4240990

Browse files
authored
Merge pull request #122 from codellm-devkit/103-extend-parameterincallable-class-to-capture-line-and-column-offsets
Address Issue 103: Extend `ParameterInCallable` class to capture line and column offsets
2 parents 4b88b85 + 47d321b commit 4240990

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

src/main/java/com/ibm/cldk/SymbolTable.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,10 @@ private static ParameterInCallable processParameterDeclaration(Parameter paramDe
401401
parameter.setName(paramDecl.getName().toString());
402402
parameter.setAnnotations(paramDecl.getAnnotations().stream().map(a -> a.toString().strip()).collect(Collectors.toList()));
403403
parameter.setModifiers(paramDecl.getModifiers().stream().map(a -> a.toString().strip()).collect(Collectors.toList()));
404+
parameter.setStartLine(paramDecl.getRange().isPresent() ? paramDecl.getRange().get().begin.line : -1);
405+
parameter.setStartColumn(paramDecl.getRange().isPresent() ? paramDecl.getRange().get().begin.column : -1);
406+
parameter.setEndLine(paramDecl.getRange().isPresent() ? paramDecl.getRange().get().end.line : -1);
407+
parameter.setEndColumn(paramDecl.getRange().isPresent() ? paramDecl.getRange().get().end.column : -1);
404408
return parameter;
405409
}
406410

src/main/java/com/ibm/cldk/entities/ParameterInCallable.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,8 @@ public class ParameterInCallable {
1010
private String name;
1111
private List<String> annotations;
1212
private List<String> modifiers;
13+
private int startLine;
14+
private int endLine;
15+
private int startColumn;
16+
private int endColumn;
1317
}

src/test/java/com/ibm/cldk/CodeAnalyzerIntegrationTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -299,4 +299,37 @@ void symbolTableShouldHaveDefaultRecordComponents() throws IOException, Interrup
299299
}
300300
}
301301
}
302+
303+
@Test
304+
void parametersInCallableMustHaveStartAndEndLineAndColumns() throws IOException, InterruptedException {
305+
var runCodeAnalyzerOnCallGraphTest = container.execInContainer(
306+
"bash", "-c",
307+
String.format(
308+
"export JAVA_HOME=%s && java -jar /opt/jars/codeanalyzer-%s.jar --input=/test-applications/record-class-test --analysis-level=1",
309+
javaHomePath, codeanalyzerVersion
310+
)
311+
);
312+
313+
// Read the output JSON
314+
Gson gson = new Gson();
315+
JsonObject jsonObject = gson.fromJson(runCodeAnalyzerOnCallGraphTest.getStdout(), JsonObject.class);
316+
JsonObject symbolTable = jsonObject.getAsJsonObject("symbol_table");
317+
for (Map.Entry<String, JsonElement> element : symbolTable.entrySet()) {
318+
String key = element.getKey();
319+
if (!key.endsWith("App.java")) {
320+
continue;
321+
}
322+
JsonObject type = element.getValue().getAsJsonObject();
323+
if (type.has("type_declarations")) {
324+
JsonObject typeDeclarations = type.getAsJsonObject("type_declarations");
325+
JsonObject mainMethod = typeDeclarations.getAsJsonObject("org.example.App").getAsJsonObject("callable_declarations").getAsJsonObject("main(String[])");
326+
JsonArray parameters = mainMethod.getAsJsonArray("parameters");
327+
// There should be 1 parameter
328+
Assertions.assertEquals(1, parameters.size(), "Callable should have 1 parameter");
329+
JsonObject parameter = parameters.get(0).getAsJsonObject();
330+
// Start and end line and column should not be -1
331+
Assertions.assertTrue(parameter.get("start_line").getAsInt() == 7 && parameter.get("end_line").getAsInt() == 7 && parameter.get("start_column").getAsInt() == 29 && parameter.get("end_column").getAsInt() == 41, "Parameter should have start and end line and columns");
332+
}
333+
}
334+
}
302335
}

0 commit comments

Comments
 (0)