files) {
files.forEach(this::persistFile);
}
/**
- * Drains {@code completedFiles} as files arrive and dispatches them to
- * {@link #persistFilesBatch} in chunks of {@code batchSize}. Runs concurrently
- * with the analysis pipeline; call {@code analysisFinished.countDown()} once
- * all producers have finished to signal the final flush.
+ * Drains {@code completedFiles} as files arrive and dispatches them to {@link #persistFilesBatch}
+ * in chunks of {@code batchSize}. Runs concurrently with the analysis pipeline; call {@code
+ * analysisFinished.countDown()} once all producers have finished to signal the final flush.
*
- * Uses a single batch accumulator so each commit produces at most
- * {@code ceil(fileCount / batchSize)} batches. Concurrent sends are limited by
- * {@code maxConcurrentSends}.
+ *
Uses a single batch accumulator so each commit produces at most {@code ceil(fileCount /
+ * batchSize)} batches. Concurrent sends are limited by {@code maxConcurrentSends}.
*/
- default void persistFilesFromQueueInBatches(final BlockingQueue completedFiles,
- final CountDownLatch analysisFinished, final int batchSize) {
+ default void persistFilesFromQueueInBatches(
+ final BlockingQueue completedFiles,
+ final CountDownLatch analysisFinished,
+ final int batchSize) {
persistFilesFromQueueInBatches(completedFiles, analysisFinished, batchSize, 1);
}
/**
- * Like {@link #persistFilesFromQueueInBatches(BlockingQueue, CountDownLatch, int)}
- * but allows up to {@code maxConcurrentSends} gRPC batch sends in flight.
+ * Like {@link #persistFilesFromQueueInBatches(BlockingQueue, CountDownLatch, int)} but allows up
+ * to {@code maxConcurrentSends} gRPC batch sends in flight.
*/
- default void persistFilesFromQueueInBatches(final BlockingQueue completedFiles,
- final CountDownLatch analysisFinished, final int batchSize,
+ default void persistFilesFromQueueInBatches(
+ final BlockingQueue completedFiles,
+ final CountDownLatch analysisFinished,
+ final int batchSize,
final int maxConcurrentSends) {
final int effectiveBatchSize = Math.max(1, batchSize);
final int effectiveConcurrency = Math.max(1, maxConcurrentSends);
@@ -79,8 +84,8 @@ default void persistFilesFromQueueInBatches(final BlockingQueue comple
waitForPersistSendThreads(sendThreads);
}
- private void dispatchPersistBatch(final List batch, final Semaphore sendPermits,
- final List sendThreads) {
+ private void dispatchPersistBatch(
+ final List batch, final Semaphore sendPermits, final List sendThreads) {
if (batch.isEmpty()) {
return;
}
@@ -92,13 +97,16 @@ private void dispatchPersistBatch(final List batch, final Semaphore se
}
final List toSend = List.copyOf(batch);
batch.clear();
- sendThreads.add(Thread.ofVirtual().start(() -> {
- try {
- persistFilesBatch(toSend);
- } finally {
- sendPermits.release();
- }
- }));
+ sendThreads.add(
+ Thread.ofVirtual()
+ .start(
+ () -> {
+ try {
+ persistFilesBatch(toSend);
+ } finally {
+ sendPermits.release();
+ }
+ }));
}
private void waitForPersistSendThreads(final List sendThreads) {
@@ -116,27 +124,28 @@ private void waitForPersistSendThreads(final List sendThreads) {
}
/**
- * Persists files as they become available on the queue, while analysis is still
- * running. Uses {@link Runtime#availableProcessors()} minus one when
- * parallelism
- * is not positive.
+ * Persists files as they become available on the queue, while analysis is still running. Uses
+ * {@link Runtime#availableProcessors()} minus one when parallelism is not positive.
*/
- default void persistFilesFromQueue(final BlockingQueue completedFiles,
- final CountDownLatch analysisFinished) {
+ default void persistFilesFromQueue(
+ final BlockingQueue completedFiles, final CountDownLatch analysisFinished) {
final int parallelism = Math.max(1, Runtime.getRuntime().availableProcessors() - 1);
persistFilesFromQueue(completedFiles, analysisFinished, parallelism);
}
/**
- * Persists files as they become available on the queue, while analysis is still
- * running, using up to {@code parallelism} concurrent persist operations.
+ * Persists files as they become available on the queue, while analysis is still running, using up
+ * to {@code parallelism} concurrent persist operations.
*/
- default void persistFilesFromQueue(final BlockingQueue completedFiles,
- final CountDownLatch analysisFinished, final int parallelism) {
+ default void persistFilesFromQueue(
+ final BlockingQueue completedFiles,
+ final CountDownLatch analysisFinished,
+ final int parallelism) {
final int effectiveParallelism = Math.max(1, parallelism);
final Semaphore inFlightPermits = new Semaphore(effectiveParallelism);
try {
- while (analysisFinished.getCount() > 0 || !completedFiles.isEmpty()
+ while (analysisFinished.getCount() > 0
+ || !completedFiles.isEmpty()
|| inFlightPermits.availablePermits() < effectiveParallelism) {
inFlightPermits.acquire();
final FileData fileData;
@@ -151,32 +160,34 @@ default void persistFilesFromQueue(final BlockingQueue completedFiles,
inFlightPermits.release();
continue;
}
- Thread.ofVirtual().start(() -> {
- try {
- persistFile(fileData);
- } finally {
- inFlightPermits.release();
- }
- });
+ Thread.ofVirtual()
+ .start(
+ () -> {
+ try {
+ persistFile(fileData);
+ } finally {
+ inFlightPermits.release();
+ }
+ });
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
- default void relinkResourceEvents(String token, String repoName){}
+ default void relinkResourceEvents(String token, String repoName) {}
void persistCommit(final CommitData commitData);
void persistTrackableResourceEvent(final TrackableResourceEvent trackableResourceEvent);
- default void persistTrackableResourceEventBatch(final List trackableResourceEvents) {
+ default void persistTrackableResourceEventBatch(
+ final List trackableResourceEvents) {
for (final TrackableResourceEvent trackableResourceEvent : trackableResourceEvents) {
persistTrackableResourceEvent(trackableResourceEvent);
}
}
-
boolean isRemote();
boolean isInvalidCommitHash(final String hash);
diff --git a/src/main/java/net/explorviz/code/analysis/export/FileDataExportFilter.java b/src/main/java/net/explorviz/code/analysis/export/FileDataExportFilter.java
index 81b1ba6..4375dbf 100644
--- a/src/main/java/net/explorviz/code/analysis/export/FileDataExportFilter.java
+++ b/src/main/java/net/explorviz/code/analysis/export/FileDataExportFilter.java
@@ -2,25 +2,19 @@
import net.explorviz.code.proto.FileData;
-/**
- * Filters {@link FileData} before persistence based on export options.
- */
+/** Filters {@link FileData} before persistence based on export options. */
public final class FileDataExportFilter {
private FileDataExportFilter() {}
/**
- * Returns file data suitable for export. When data structures are excluded,
- * classes and functions (including nested parameters) are stripped while
- * file-level metadata and metrics are retained.
+ * Returns file data suitable for export. When data structures are excluded, classes and functions
+ * (including nested parameters) are stripped while file-level metadata and metrics are retained.
*/
public static FileData filter(final FileData fileData, final boolean includeDataStructures) {
if (includeDataStructures) {
return fileData;
}
- return fileData.toBuilder()
- .clearClasses()
- .clearFunctions()
- .build();
+ return fileData.toBuilder().clearClasses().clearFunctions().build();
}
}
diff --git a/src/main/java/net/explorviz/code/analysis/export/GrpcExporter.java b/src/main/java/net/explorviz/code/analysis/export/GrpcExporter.java
index 4f3159c..083a735 100644
--- a/src/main/java/net/explorviz/code/analysis/export/GrpcExporter.java
+++ b/src/main/java/net/explorviz/code/analysis/export/GrpcExporter.java
@@ -24,9 +24,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * Basic GRPC handler.
- */
+/** Basic GRPC handler. */
@ApplicationScoped
public final class GrpcExporter implements DataExporter {
@@ -34,8 +32,8 @@ public final class GrpcExporter implements DataExporter {
private static final String GRPC_CLIENT_NAME = "codeAnalysisGrpcClient";
- private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
- .withZone(ZoneId.of("UTC"));
+ private static final DateTimeFormatter FORMATTER =
+ DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.of("UTC"));
@GrpcClient(GRPC_CLIENT_NAME)
/* package */ FileDataServiceGrpc.FileDataServiceBlockingStub fileDataGrpcClient;
@@ -50,7 +48,8 @@ public final class GrpcExporter implements DataExporter {
/* package */ StateDataServiceGrpc.StateDataServiceBlockingStub stateDataGrpcClient;
@GrpcClient(GRPC_CLIENT_NAME)
- /* package */ TrackableResourceServiceGrpc.TrackableResourceServiceBlockingStub trackableResourceGrpcClient;
+ /* package */ TrackableResourceServiceGrpc.TrackableResourceServiceBlockingStub
+ trackableResourceGrpcClient;
@ConfigProperty(name = "explorviz.landscape.token")
/* default */ String landscapeTokenProperty;
@@ -65,9 +64,12 @@ public final class GrpcExporter implements DataExporter {
* @return the state of the remote database
*/
@Override
- public StateData getStateData(final String repositoryName, final String branchName,
+ public StateData getStateData(
+ final String repositoryName,
+ final String branchName,
final String token,
- final Map applicationPaths, final String repositoryUrl,
+ final Map applicationPaths,
+ final String repositoryUrl,
final boolean skipLatestCommitLookup) {
final StateDataRequest.Builder requestBuilder = StateDataRequest.newBuilder();
requestBuilder.setBranchName(branchName);
@@ -135,22 +137,26 @@ public void persistCommit(final CommitData commitData) {
@Override
public void persistTrackableResourceEvent(final TrackableResourceEvent trackableResourceEvent) {
- Instant instant = Instant.ofEpochSecond(trackableResourceEvent.getEventTimestamp().getSeconds(),
- trackableResourceEvent.getEventTimestamp().getNanos());
+ Instant instant =
+ Instant.ofEpochSecond(
+ trackableResourceEvent.getEventTimestamp().getSeconds(),
+ trackableResourceEvent.getEventTimestamp().getNanos());
LOGGER.info(
"Sending TrackableResourceEvent {} for {} #{} at timestamp {}",
trackableResourceEvent.getAnnotationType(),
trackableResourceEvent.getResourceType(),
trackableResourceEvent.getResourceId(),
- FORMATTER.format(instant)
- );
+ FORMATTER.format(instant));
try {
trackableResourceGrpcClient.persistTrackableResourceEvent(trackableResourceEvent);
} catch (final Exception e) {
- LOGGER.error("Failed to send trackable resource event {}: {}", trackableResourceEvent.getAnnotationId(),
+ LOGGER.error(
+ "Failed to send trackable resource event {}: {}",
+ trackableResourceEvent.getAnnotationId(),
e.getMessage());
- throw new RuntimeException("Failed to send trackable resource event for "
- + trackableResourceEvent.getAnnotationId(), e);
+ throw new RuntimeException(
+ "Failed to send trackable resource event for " + trackableResourceEvent.getAnnotationId(),
+ e);
}
}
@@ -162,10 +168,12 @@ public void persistTrackableResourceEventBatch(final List applicationPaths, final String repositoryUrl,
+ final Map applicationPaths,
+ final String repositoryUrl,
final boolean skipLatestCommitLookup) {
- LOGGER.atInfo()
+ LOGGER
+ .atInfo()
.addArgument(repositoryName)
.addArgument(branchName)
.addArgument(applicationPaths != null ? applicationPaths.keySet() : "[]")
@@ -81,10 +87,11 @@ public StateData getStateData(final String repositoryName, final String branchNa
final StateData stateData = StateData.newBuilder().build();
try {
- final StateDataRequest.Builder requestBuilder = StateDataRequest.newBuilder()
- .setRepositoryName(repositoryName)
- .setBranchName(branchName)
- .setLandscapeToken(token);
+ final StateDataRequest.Builder requestBuilder =
+ StateDataRequest.newBuilder()
+ .setRepositoryName(repositoryName)
+ .setBranchName(branchName)
+ .setLandscapeToken(token);
if (repositoryUrl != null && !repositoryUrl.isBlank()) {
requestBuilder.setRepositoryUrl(repositoryUrl);
}
@@ -114,12 +121,9 @@ public StateData getStateData(final String repositoryName, final String branchNa
Files.write(Paths.get(storageDirectory, stateFileName), resultJson.getBytes());
Files.write(Paths.get(storageDirectory, requestFileName), requestJson.getBytes());
- LOGGER.atInfo()
- .log("✅ Successfully exported state request and result");
+ LOGGER.atInfo().log("✅ Successfully exported state request and result");
} catch (IOException e) {
- LOGGER.atError()
- .addArgument(e.getMessage())
- .log("❌ Failed to export state data: {}");
+ LOGGER.atError().addArgument(e.getMessage()).log("❌ Failed to export state data: {}");
}
return stateData;
}
@@ -127,7 +131,8 @@ public StateData getStateData(final String repositoryName, final String branchNa
@Override
public void persistFile(final FileData fileData) {
try {
- LOGGER.atInfo()
+ LOGGER
+ .atInfo()
.addArgument(fileData.getFilePath())
.addArgument(fileData.getLanguage())
.log("📤 Exporting file data: {} (language: {})");
@@ -156,15 +161,14 @@ public void persistFile(final FileData fileData) {
Files.write(outputPath, json.getBytes());
- LOGGER.atInfo()
- .addArgument(fileName)
- .log("✅ Successfully exported file data to: {}");
- } catch (IOException e) { // NOPMD
- LOGGER.atError()
+ LOGGER.atInfo().addArgument(fileName).log("✅ Successfully exported file data to: {}");
+ } catch (IOException e) {
+ LOGGER
+ .atError()
.addArgument(fileData.getFilePath())
.addArgument(e.getMessage())
.log("❌ Failed to export file data for {}: {}");
- throw new RuntimeException(e); // NOPMD
+ throw new RuntimeException(e);
}
}
@@ -172,11 +176,11 @@ public void persistFile(final FileData fileData) {
public void persistCommit(final CommitData commitData) {
try {
final String json = unescapeHtml(JsonFormat.printer().print(commitData));
- final String fileName = "CommitReport_" + commitData.getCommitId() + "_" + commitCount
- + JSON_FILE_EXTENSION;
+ final String fileName =
+ "CommitReport_" + commitData.getCommitId() + "_" + commitCount + JSON_FILE_EXTENSION;
Files.write(Paths.get(storageDirectory, fileName), json.getBytes());
- } catch (IOException e) { // NOPMD
- throw new RuntimeException(e); // NOPMD
+ } catch (IOException e) {
+ throw new RuntimeException(e);
}
this.commitCount++;
}
@@ -185,10 +189,11 @@ public void persistCommit(final CommitData commitData) {
public void persistTrackableResourceEvent(final TrackableResourceEvent trackableResourceEvent) {
try {
final String json = unescapeHtml(JsonFormat.printer().print(trackableResourceEvent));
- final String fileName = "TrackableResourceEvent" + trackableResourceEvent.getResourceId() + JSON_FILE_EXTENSION;
+ final String fileName =
+ "TrackableResourceEvent" + trackableResourceEvent.getResourceId() + JSON_FILE_EXTENSION;
Files.write(Paths.get(storageDirectory, fileName), json.getBytes());
- } catch (IOException e) { // NOPMD
- throw new RuntimeException(e); // NOPMD
+ } catch (IOException e) {
+ throw new RuntimeException(e);
}
}
@@ -203,8 +208,8 @@ public boolean isInvalidCommitHash(final String hash) {
}
/**
- * Protobuf's JsonFormat uses Gson which HTML-escapes certain characters.
- * Since our JSON is written to files and not embedded in HTML, we undo this.
+ * Protobuf's JsonFormat uses Gson which HTML-escapes certain characters. Since our JSON is
+ * written to files and not embedded in HTML, we undo this.
*/
private static String unescapeHtml(final String json) {
return json.replace("\\u003c", "<")
diff --git a/src/main/java/net/explorviz/code/analysis/export/VoidExporter.java b/src/main/java/net/explorviz/code/analysis/export/VoidExporter.java
index 47105eb..ebccc6a 100644
--- a/src/main/java/net/explorviz/code/analysis/export/VoidExporter.java
+++ b/src/main/java/net/explorviz/code/analysis/export/VoidExporter.java
@@ -2,20 +2,20 @@
import java.util.Map;
import net.explorviz.code.proto.CommitData;
-import net.explorviz.code.proto.ContributorData;
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.StateData;
import net.explorviz.code.proto.TrackableResourceEvent;
-/**
- * Dummy to dump the data into void.
- */
+/** Dummy to dump the data into void. */
public class VoidExporter implements DataExporter {
@Override
- public StateData getStateData(final String repositoryName, final String branchName,
+ public StateData getStateData(
+ final String repositoryName,
+ final String branchName,
final String token,
- final Map applicationPaths, final String repositoryUrl,
+ final Map applicationPaths,
+ final String repositoryUrl,
final boolean skipLatestCommitLookup) {
return StateData.newBuilder().build();
}
diff --git a/src/main/java/net/explorviz/code/analysis/git/DirectoryFinder.java b/src/main/java/net/explorviz/code/analysis/git/DirectoryFinder.java
index 474712f..0d4c133 100644
--- a/src/main/java/net/explorviz/code/analysis/git/DirectoryFinder.java
+++ b/src/main/java/net/explorviz/code/analysis/git/DirectoryFinder.java
@@ -15,26 +15,22 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * Class to ease the finding of directories inside a local git Repository.
- */
+/** Class to ease the finding of directories inside a local git Repository. */
public final class DirectoryFinder {
private static final Logger LOGGER = LoggerFactory.getLogger(DirectoryFinder.class);
- private DirectoryFinder() {
- }
+ private DirectoryFinder() {}
/**
* Searches and return the relative path to the directory matching the search string.
*
* @param paths a list of search strings for the paths.
- * @param root the path the return should be relative to
+ * @param root the path the return should be relative to
* @return the directories matching the search strings
* @throws NotFoundException thrown if no directory matches the given search string
*/
- public static List getRelativeDirectory(final List paths,
- final String root)
+ public static List getRelativeDirectory(final List paths, final String root)
throws NotFoundException {
final List relativePaths = new ArrayList<>();
for (final String path : getDirectories(root, paths)) {
@@ -47,36 +43,44 @@ public static List getRelativeDirectory(final List paths,
* Searches and return the absolute path to the directory matching the search string.
*
* @param searchPaths a list of search strings for the paths.
- * @param root the root path to start the search from
+ * @param root the root path to start the search from
* @return the directories matching the search strings
* @throws MalformedPathException thrown if the search string is malformed and can not be used
- * @throws NotFoundException thrown if no directory matches the given search string
+ * @throws NotFoundException thrown if no directory matches the given search string
*/
public static List getDirectories(String root, List searchPaths)
throws NotFoundException {
- Set pathSet = new HashSet<>(); // Use a HashSet to avoid duplicates
+ Set pathSet = new HashSet<>(); // Use a HashSet to avoid duplicates
Path startPath = Paths.get(root);
try {
- Files.walkFileTree(startPath, new SimpleFileVisitor() {
- @Override
- public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
- throws IOException {
- for (String searchPath : searchPaths) {
- String glob = searchPath;
- if (!glob.startsWith("glob:") && !glob.startsWith("regex:")) {
- glob = "glob:" + glob;
- }
- java.nio.file.PathMatcher matcher = java.nio.file.FileSystems.getDefault().getPathMatcher(glob);
- if (matcher.matches(startPath.relativize(dir))) {
- pathSet.add(dir.toAbsolutePath().normalize()
- .toString()); // Normalize the path and add to the set
- LOGGER.atTrace().addArgument(dir).log("Directory matched glob and was added to set: {}");
+ Files.walkFileTree(
+ startPath,
+ new SimpleFileVisitor() {
+ @Override
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
+ throws IOException {
+ for (String searchPath : searchPaths) {
+ String glob = searchPath;
+ if (!glob.startsWith("glob:") && !glob.startsWith("regex:")) {
+ glob = "glob:" + glob;
+ }
+ java.nio.file.PathMatcher matcher =
+ java.nio.file.FileSystems.getDefault().getPathMatcher(glob);
+ if (matcher.matches(startPath.relativize(dir))) {
+ pathSet.add(
+ dir.toAbsolutePath()
+ .normalize()
+ .toString()); // Normalize the path and add to the set
+ LOGGER
+ .atTrace()
+ .addArgument(dir)
+ .log("Directory matched glob and was added to set: {}");
+ }
+ }
+ return FileVisitResult.CONTINUE;
}
- }
- return FileVisitResult.CONTINUE;
- }
- });
+ });
} catch (IOException e) {
throw new NotFoundException("Couldn't find path");
}
@@ -84,5 +88,3 @@ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
return new ArrayList<>(pathSet);
}
}
-
-
diff --git a/src/main/java/net/explorviz/code/analysis/git/GitMetricCollector.java b/src/main/java/net/explorviz/code/analysis/git/GitMetricCollector.java
index c2a2fa7..3d3a0db 100644
--- a/src/main/java/net/explorviz/code/analysis/git/GitMetricCollector.java
+++ b/src/main/java/net/explorviz/code/analysis/git/GitMetricCollector.java
@@ -8,24 +8,21 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * A simple collector for metrics based on git data.
- */
+/** A simple collector for metrics based on git data. */
public final class GitMetricCollector {
private static final Logger LOGGER = LoggerFactory.getLogger(GitMetricCollector.class);
- private GitMetricCollector() {
- }
+ private GitMetricCollector() {}
/**
* Adds git metrics that are valid for all files within a commit.
*
* @param fileDataHandler the fileDataHandler to add the metric to
- * @param commit the current commit
+ * @param commit the current commit
*/
- public static void addCommitGitMetrics(final AbstractFileDataHandler fileDataHandler,
- final RevCommit commit) {
+ public static void addCommitGitMetrics(
+ final AbstractFileDataHandler fileDataHandler, final RevCommit commit) {
addCommitGitMetrics(fileDataHandler, commit.getAuthorIdent().getEmailAddress());
}
@@ -33,10 +30,10 @@ public static void addCommitGitMetrics(final AbstractFileDataHandler fileDataHan
* Adds git metrics that are valid for all files within a commit.
*
* @param fileDataHandler the fileDataHandler to add the metric to
- * @param authorEmail the author email for the current commit
+ * @param authorEmail the author email for the current commit
*/
- public static void addCommitGitMetrics(final AbstractFileDataHandler fileDataHandler,
- final String authorEmail) {
+ public static void addCommitGitMetrics(
+ final AbstractFileDataHandler fileDataHandler, final String authorEmail) {
fileDataHandler.setAuthor(authorEmail);
}
@@ -44,14 +41,14 @@ public static void addCommitGitMetrics(final AbstractFileDataHandler fileDataHan
* Adds git metrics that are valid for a specific file.
*
* @param fileDataHandler the fileDataHandler to add the metric to
- * @param fileDescriptor the fileDescriptor holding the file data
+ * @param fileDescriptor the fileDescriptor holding the file data
*/
- public static void addFileGitMetrics(final AbstractFileDataHandler fileDataHandler,
- final FileDescriptor fileDescriptor) {
+ public static void addFileGitMetrics(
+ final AbstractFileDataHandler fileDataHandler, final FileDescriptor fileDescriptor) {
try {
- fileDataHandler.setModifications(fileDescriptor.modifiedLines, fileDescriptor.addedLines,
- fileDescriptor.removedLines);
- } catch (NullPointerException e) { // NOPMD
+ fileDataHandler.setModifications(
+ fileDescriptor.modifiedLines, fileDescriptor.addedLines, fileDescriptor.removedLines);
+ } catch (NullPointerException e) {
if (LOGGER.isWarnEnabled()) {
LOGGER.warn("Failed to add modifications");
}
@@ -59,7 +56,8 @@ public static void addFileGitMetrics(final AbstractFileDataHandler fileDataHandl
}
/**
- * Creates a ContributorData object based on the given commit, landscape token and repository name.
+ * Creates a ContributorData object based on the given commit, landscape token and repository
+ * name.
*
* @param commit the commit to extract contributor information from
* @param landscapeToken the landscape token to set in the ContributorData
@@ -67,19 +65,17 @@ public static void addFileGitMetrics(final AbstractFileDataHandler fileDataHandl
* @return a ContributorData object containing the contributor information
*/
public static ContributorData createContributorData(
- final RevCommit commit,
- final String landscapeToken,
- final String repositoryName
+ final RevCommit commit, final String landscapeToken, final String repositoryName) {
- ) {
String name = commit.getAuthorIdent().getName();
String email = commit.getAuthorIdent().getEmailAddress();
- Builder builder = ContributorData.newBuilder()
- .setGitUsername(name)
- .setEmail(email)
- .setLandscapeToken(landscapeToken)
- .setRepositoryName(repositoryName);
+ Builder builder =
+ ContributorData.newBuilder()
+ .setGitUsername(name)
+ .setEmail(email)
+ .setLandscapeToken(landscapeToken)
+ .setRepositoryName(repositoryName);
return builder.build();
}
diff --git a/src/main/java/net/explorviz/code/analysis/git/GitRepositoryHandler.java b/src/main/java/net/explorviz/code/analysis/git/GitRepositoryHandler.java
index 912f360..c4b3cf1 100644
--- a/src/main/java/net/explorviz/code/analysis/git/GitRepositoryHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/git/GitRepositoryHandler.java
@@ -1,4 +1,4 @@
-package net.explorviz.code.analysis.git; // NOPMD
+package net.explorviz.code.analysis.git;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
@@ -59,21 +59,18 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * Injectable helper class for jGit concerns.
- */
+/** Injectable helper class for jGit concerns. */
@ApplicationScoped
-public class GitRepositoryHandler { // NOPMD
+public class GitRepositoryHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(GitRepositoryHandler.class);
private static String repositoryPath;
@ConfigProperty(name = "explorviz.gitanalysis.remote.storage-path")
- /* default */ Optional repoLocalStoragePathProperty; // NOCS
+ /* default */ Optional repoLocalStoragePathProperty;
- @Inject
- /* default */ LocalRepositoryService localRepositoryService; // NOCS
+ @Inject /* default */ LocalRepositoryService localRepositoryService;
private Git git;
@@ -91,8 +88,8 @@ private static void ensureCommitTreeParsed(final Repository repository, final Re
}
}
- private static AbstractTreeIterator prepareTreeParser(final Repository repository,
- final RevCommit commit) throws IOException {
+ private static AbstractTreeIterator prepareTreeParser(
+ final Repository repository, final RevCommit commit) throws IOException {
ensureCommitTreeParsed(repository, commit);
final RevTree tree = commit.getTree();
final CanonicalTreeParser treeParser = new CanonicalTreeParser();
@@ -103,24 +100,24 @@ private static AbstractTreeIterator prepareTreeParser(final Repository repositor
}
/**
- * Converts a git ssh url to a https url and returns it as well as if the
- * conversion is usable. If the given url is
- * already in https format, it will be returned as-is and the flag is set to
- * true. If the given url is in ssh format,
- * it will be converted to https and returned and the flag is set to true. If it
- * is neither, a warning will be printed
- * the url will get returned but the flag is set to false.
+ * Converts a git ssh url to a https url and returns it as well as if the conversion is usable. If
+ * the given url is already in https format, it will be returned as-is and the flag is set to
+ * true. If the given url is in ssh format, it will be converted to https and returned and the
+ * flag is set to true. If it is neither, a warning will be printed the url will get returned but
+ * the flag is set to false.
*
* @param url the original git url
- * @return a Tuple containing a flag if the returned url should be used and the
- * url itself
+ * @return a Tuple containing a flag if the returned url should be used and the url itself
*/
public static Map.Entry convertSshToHttps(final String url) {
if (url.startsWith("git@")) {
final int colonIndex = url.indexOf(':');
if (colonIndex > "git@".length() && colonIndex < url.length() - 1) {
- final String convertedUrl = "https://" + url.substring("git@".length(), colonIndex) + "/"
- + url.substring(colonIndex + 1);
+ final String convertedUrl =
+ "https://"
+ + url.substring("git@".length(), colonIndex)
+ + "/"
+ + url.substring(colonIndex + 1);
if (LOGGER.isInfoEnabled()) {
LOGGER.info("SSH URL detected, converting to HTTPS: " + convertedUrl);
}
@@ -154,11 +151,10 @@ public static String getRemoteOriginUrl(final Repository repository) {
}
/**
- * Returns the string content for a file path that was modified in a commit for
- * a given repo.
+ * Returns the string content for a file path that was modified in a commit for a given repo.
*
* @param blobId The {@link ObjectId}.
- * @param repo The {@link Repository}.
+ * @param repo The {@link Repository}.
* @return The stringified file content.
* @throws IOException Thrown if JGit cannot open the Git repo.
*/
@@ -168,14 +164,13 @@ public static String getContent(final ObjectId blobId, final Repository repo) th
final byte[] bytes = objectLoader.getBytes();
return new String(bytes, StandardCharsets.UTF_8);
}
-
}
/**
* Returns the size in bytes of a git blob without checking out the commit.
*
* @param blobId The {@link ObjectId}.
- * @param repo The {@link Repository}.
+ * @param repo The {@link Repository}.
* @return The blob size in bytes.
* @throws IOException Thrown if JGit cannot read the blob.
*/
@@ -196,25 +191,27 @@ public static String convertRelativeToAbsolutePath(String relativePath) {
systemPath = systemPath.replace("\\build\\classes\\java\\main", "");
systemPath = systemPath.replace("/build/classes/java/main", "");
String absolutePath = Paths.get(systemPath, relativePath).toString();
- LOGGER.atInfo().addArgument(relativePath).addArgument(absolutePath)
+ LOGGER
+ .atInfo()
+ .addArgument(relativePath)
+ .addArgument(absolutePath)
.log("Converted relative path {} to absolute path {}");
return absolutePath;
}
/**
- * Tries to download the Git {@link Repository} based on a given Url to the
- * given.
+ * Tries to download the Git {@link Repository} based on a given Url to the given.
*
- * @param remoteRepositoryObject the {@link RemoteRepositoryObject} object
- * containing the path and url
+ * @param remoteRepositoryObject the {@link RemoteRepositoryObject} object containing the path and
+ * url
* @return returns an opened git repository
* @throws GitAPIException gets thrown if the git api encounters an error
*/
- private Repository downloadGitRepository(// NOCS NOPMD
- final RemoteRepositoryObject remoteRepositoryObject) throws GitAPIException, IOException {
+ private Repository downloadGitRepository(final RemoteRepositoryObject remoteRepositoryObject)
+ throws GitAPIException, IOException {
- final Map.Entry checkedRepositoryUrl = convertSshToHttps(
- remoteRepositoryObject.getUrl());
+ final Map.Entry checkedRepositoryUrl =
+ convertSshToHttps(remoteRepositoryObject.getUrl());
final String urlValue = checkedRepositoryUrl.getValue();
String repoName = "repository";
@@ -230,12 +227,10 @@ private Repository downloadGitRepository(// NOCS NOPMD
if (remoteRepositoryObject.getStoragePath().isBlank()) {
repoPath = Files.createTempDirectory("TemporaryRepository").toAbsolutePath().toString();
repoPath = Paths.get(repoPath, repoName).toString();
- LOGGER.atInfo().addArgument(repoPath)
- .log("No path given, repository will be cloned to: {}");
+ LOGGER.atInfo().addArgument(repoPath).log("No path given, repository will be cloned to: {}");
} else if (new File(repoPath).isAbsolute()) {
repoPath = Paths.get(repoPath, repoName).toString();
- LOGGER.atInfo().addArgument(repoPath)
- .log("Repository will be cloned to: {}");
+ LOGGER.atInfo().addArgument(repoPath).log("Repository will be cloned to: {}");
} else {
LOGGER.atInfo().log("Found local path for remote repository.");
repoPath = GitRepositoryHandler.convertRelativeToAbsolutePath(repoPath);
@@ -243,25 +238,30 @@ private Repository downloadGitRepository(// NOCS NOPMD
}
try {
- LOGGER.atInfo().addArgument(checkedRepositoryUrl.getValue())
+ LOGGER
+ .atInfo()
+ .addArgument(checkedRepositoryUrl.getValue())
.log("Cloning repository from: {}");
FileIO.cleanDirectory(repoPath);
- final String branchToClone = resolveBranchToClone(
- remoteRepositoryObject, checkedRepositoryUrl.getValue());
+ final String branchToClone =
+ resolveBranchToClone(remoteRepositoryObject, checkedRepositoryUrl.getValue());
- final var cloneCommand = Git.cloneRepository()
- .setURI(checkedRepositoryUrl.getValue())
- .setCredentialsProvider(remoteRepositoryObject.getCredentialsProvider())
- .setDirectory(new File(repoPath))
- .setCloneAllBranches(false)
- .setBranch(branchToClone != null ? branchToClone : Constants.HEAD);
+ final var cloneCommand =
+ Git.cloneRepository()
+ .setURI(checkedRepositoryUrl.getValue())
+ .setCredentialsProvider(remoteRepositoryObject.getCredentialsProvider())
+ .setDirectory(new File(repoPath))
+ .setCloneAllBranches(false)
+ .setBranch(branchToClone != null ? branchToClone : Constants.HEAD);
if (branchToClone != null) {
cloneCommand.setBranchesToClone(
Collections.singletonList(Constants.R_HEADS + branchToClone));
- LOGGER.atInfo().addArgument(branchToClone)
+ LOGGER
+ .atInfo()
+ .addArgument(branchToClone)
.log("Performing single-branch clone for branch: {}");
}
@@ -269,7 +269,8 @@ private Repository downloadGitRepository(// NOCS NOPMD
if (remoteRepositoryObject.getCloneDepth() != null
&& remoteRepositoryObject.getCloneDepth() > 0) {
cloneCommand.setDepth(remoteRepositoryObject.getCloneDepth());
- LOGGER.atInfo()
+ LOGGER
+ .atInfo()
.addArgument(remoteRepositoryObject.getCloneDepth())
.log("Performing shallow clone with depth: {}");
}
@@ -279,8 +280,8 @@ private Repository downloadGitRepository(// NOCS NOPMD
return this.git.getRepository();
} catch (TransportException te) {
if (!checkedRepositoryUrl.getKey()) {
- throw (MalformedURLException) new MalformedURLException(
- checkedRepositoryUrl.getValue()).initCause(te);
+ throw (MalformedURLException)
+ new MalformedURLException(checkedRepositoryUrl.getValue()).initCause(te);
}
if (LOGGER.isErrorEnabled()) {
@@ -291,7 +292,7 @@ private Repository downloadGitRepository(// NOCS NOPMD
} else if (te.getMessage().contains("not authorized")) {
LOGGER.error("Transport Exception thrown, credential are wrong");
} else {
- LOGGER.error("Transport Exception thrown: " + te.getMessage()); // NOPMD
+ LOGGER.error("Transport Exception thrown: " + te.getMessage());
}
}
throw te;
@@ -303,26 +304,31 @@ private Repository downloadGitRepository(// NOCS NOPMD
}
}
- private String resolveBranchToClone(final RemoteRepositoryObject remoteRepositoryObject,
- final String repositoryUrl) throws GitAPIException {
+ private String resolveBranchToClone(
+ final RemoteRepositoryObject remoteRepositoryObject, final String repositoryUrl)
+ throws GitAPIException {
final String configuredBranch = remoteRepositoryObject.getBranchName();
if (!configuredBranch.isBlank()) {
return configuredBranch;
}
- return resolveRemoteDefaultBranch(repositoryUrl,
- remoteRepositoryObject.getCredentialsProvider());
+ return resolveRemoteDefaultBranch(
+ repositoryUrl, remoteRepositoryObject.getCredentialsProvider());
}
- private String resolveRemoteDefaultBranch(final String repositoryUrl,
- final CredentialsProvider credentialsProvider) throws GitAPIException {
- final Collection[ refs = Git.lsRemoteRepository()
- .setRemote(repositoryUrl)
- .setCredentialsProvider(credentialsProvider)
- .call();
+ private String resolveRemoteDefaultBranch(
+ final String repositoryUrl, final CredentialsProvider credentialsProvider)
+ throws GitAPIException {
+ final Collection][ refs =
+ Git.lsRemoteRepository()
+ .setRemote(repositoryUrl)
+ .setCredentialsProvider(credentialsProvider)
+ .call();
for (final Ref ref : refs) {
if (Constants.HEAD.equals(ref.getName()) && ref.isSymbolic()) {
final String branchName = Repository.shortenRefName(ref.getTarget().getName());
- LOGGER.atInfo().addArgument(branchName)
+ LOGGER
+ .atInfo()
+ .addArgument(branchName)
.log("No branch configured, using remote default branch: {}");
return branchName;
}
@@ -356,9 +362,13 @@ private Repository openGitRepository(final String repositoryPath, final String b
try {
if ("true".equals(System.getenv("GITLAB_CI"))
|| this.git.getRepository().findRef("refs/heads/" + branchName) == null) {
- this.git.checkout().setName(branchName).setCreateBranch(true)
+ this.git
+ .checkout()
+ .setName(branchName)
+ .setCreateBranch(true)
.setUpstreamMode(CreateBranchCommand.SetupUpstreamMode.TRACK)
- .setStartPoint("origin/" + branchName).call();
+ .setStartPoint("origin/" + branchName)
+ .call();
} else {
this.git.checkout().setName(branchName).call();
}
@@ -374,23 +384,21 @@ private Repository openGitRepository(final String repositoryPath, final String b
}
/**
- * Returns a Git {@link Repository} object by opening the repository found at
- * {@code localRepositoryPath}. ]
- * If
- * {@code localRepositoryPath} is empty, the repository gets cloned based on
- * data defined in
+ * Returns a Git {@link Repository} object by opening the repository found at {@code
+ * localRepositoryPath}.
+ * If {@code localRepositoryPath} is empty, the repository gets cloned based on data defined in
* {@code remoteRepositoryObject} and the opened repository gets returned.
*
- * @param localRepositoryPath the system path of the local Repository
- * @param remoteRepositoryObject the {@link RemoteRepositoryObject} object
- * containing the path and url
+ * @param localRepositoryPath the system path of the local Repository
+ * @param remoteRepositoryObject the {@link RemoteRepositoryObject} object containing the path and
+ * url
* @return returns an opened Git {@link Repository}
- * @throws IOException gets thrown if the path is not accessible or does not
- * point to a folder
+ * @throws IOException gets thrown if the path is not accessible or does not point to a folder
* @throws GitAPIException gets thrown if the git api encounters an error
*/
- public Repository getGitRepository(final String localRepositoryPath,
- final RemoteRepositoryObject remoteRepositoryObject) throws IOException, GitAPIException {
+ public Repository getGitRepository(
+ final String localRepositoryPath, final RemoteRepositoryObject remoteRepositoryObject)
+ throws IOException, GitAPIException {
if (localRepositoryPath.isBlank()) {
LOGGER.atInfo().log("No local repository given, using remote");
@@ -398,7 +406,8 @@ public Repository getGitRepository(final String localRepositoryPath,
} else if (new File(localRepositoryPath).isAbsolute()) {
return this.openGitRepository(localRepositoryPath, remoteRepositoryObject.getBranchName());
} else {
- String absolutePath = localRepositoryService.resolveRelativeRepositoryPath(localRepositoryPath).toString();
+ String absolutePath =
+ localRepositoryService.resolveRelativeRepositoryPath(localRepositoryPath).toString();
return this.openGitRepository(absolutePath, remoteRepositoryObject.getBranchName());
}
}
@@ -406,28 +415,20 @@ public Repository getGitRepository(final String localRepositoryPath,
/**
* Returns a Git {@link Repository} object by using the parameters set in the
* application.properties.
- * The local
- * repository defined in {@code explorviz.gitanalysis.local.storage-path} will
- * be used.
+ * The local repository defined in {@code explorviz.gitanalysis.local.storage-path} will be used.
*
- * If {@code explorviz.gitanalysis.local.storage-path} is empty, the repository
- * defined in
- * {@code explorviz.gitanalysis.remote.url} will be cloned to the location
- * {@code explorviz.gitanalysis.remote.storage-path}.
- * If no storage path is given, a temporary directory will be
- * created.
- * The branch given in {@code explorviz.gitanalysis.branch} will be used if
- * present, otherwise the
+ * If {@code explorviz.gitanalysis.local.storage-path} is empty, the repository defined in {@code
+ * explorviz.gitanalysis.remote.url} will be cloned to the location {@code
+ * explorviz.gitanalysis.remote.storage-path}.
+ * If no storage path is given, a temporary directory will be created.
+ * The branch given in {@code explorviz.gitanalysis.branch} will be used if present, otherwise the
* default (remote) or current (local) will be used.
*
* @param config the analysis config
* @return an opened Git {@link Repository}
- * @throws PropertyNotDefinedException gets thrown if a needed property is not
- * present
- * @throws GitAPIException gets thrown if the git api encounters an
- * error
- * @throws IOException gets thrown if JGit cannot open the Git
- * repository.
+ * @throws PropertyNotDefinedException gets thrown if a needed property is not present
+ * @throws GitAPIException gets thrown if the git api encounters an error
+ * @throws IOException gets thrown if JGit cannot open the Git repository.
*/
public Repository getGitRepository(AnalysisConfig config)
throws PropertyNotDefinedException, GitAPIException, IOException {
@@ -439,36 +440,42 @@ public Repository getGitRepository(AnalysisConfig config)
if (config.gitUsername().isEmpty() || config.gitPassword().isEmpty()) {
credentialsProvider = CredentialsProvider.getDefault();
} else {
- credentialsProvider = new UsernamePasswordCredentialsProvider(
- config.gitUsername().get(),
- config.gitPassword().get());
+ credentialsProvider =
+ new UsernamePasswordCredentialsProvider(
+ config.gitUsername().get(), config.gitPassword().get());
}
- final Integer depth = config.commitAnalysisLimit().isPresent() ? config.commitAnalysisLimit().get() + 1 : null;
-
- return getGitRepository(config.repoPath().orElse(""),
- new RemoteRepositoryObject(config.repoRemoteUrl().orElse(""),
- repoLocalStoragePathProperty.orElse(""), credentialsProvider,
- config.branch().orElse(""), depth));
+ final Integer depth =
+ config.commitAnalysisLimit().isPresent() ? config.commitAnalysisLimit().get() + 1 : null;
+
+ return getGitRepository(
+ config.repoPath().orElse(""),
+ new RemoteRepositoryObject(
+ config.repoRemoteUrl().orElse(""),
+ repoLocalStoragePathProperty.orElse(""),
+ credentialsProvider,
+ config.branch().orElse(""),
+ depth));
}
/**
* Returns the changed filenames between two given commits.
*
- * @param repository the current repository
- * @param oldCommit the old commit, as a baseline for the difference
- * calculation
- * @param newCommit the new commit, gets checked against the old commit
- * @param pathRestrictions comma sep. list of search strings specifying the
- * folders to analyze
+ * @param repository the current repository
+ * @param oldCommit the old commit, as a baseline for the difference calculation
+ * @param newCommit the new commit, gets checked against the old commit
+ * @param pathRestrictions comma sep. list of search strings specifying the folders to analyze
* @return triple of FileDescriptor specifying modified, delete and added files
- * @throws GitAPIException thrown if git encounters an exception
- * @throws IOException thrown if files are not available
+ * @throws GitAPIException thrown if git encounters an exception
+ * @throws IOException thrown if files are not available
* @throws NotFoundException thrown if the restrictionPath was not found
*/
public Triple, List, List> listDiff(
- final Repository repository, final Optional oldCommit, final RevCommit newCommit,
- final String pathRestrictions) throws GitAPIException, IOException, NotFoundException {
+ final Repository repository,
+ final Optional oldCommit,
+ final RevCommit newCommit,
+ final String pathRestrictions)
+ throws GitAPIException, IOException, NotFoundException {
if (pathRestrictions == null || pathRestrictions.isEmpty()) {
return listDiff(repository, oldCommit, newCommit, new ArrayList<>());
}
@@ -479,17 +486,18 @@ public Triple, List, List>
* Returns the changed filenames between two given commits.
*
* @param repository the current repository
- * @param oldCommit the old commit, as a baseline for the difference
- * calculation
- * @param newCommit the new commit, gets checked against the old commit
+ * @param oldCommit the old commit, as a baseline for the difference calculation
+ * @param newCommit the new commit, gets checked against the old commit
* @return triple of FileDescriptor specifying modified, delete and added files
* @throws GitAPIException thrown if git encounters an exception
- * @throws IOException thrown if files are not available
+ * @throws IOException thrown if files are not available
*/
public Triple, List, List> listDiff(
- final Repository repository, // NOPMD
- final Optional oldCommit, final RevCommit newCommit,
- final List pathRestrictions) throws GitAPIException, IOException, NotFoundException {
+ final Repository repository,
+ final Optional oldCommit,
+ final RevCommit newCommit,
+ final List pathRestrictions)
+ throws GitAPIException, IOException, NotFoundException {
final List modifiedObjectIdList = new ArrayList<>();
final List deletedObjectIdList = new ArrayList<>();
List addedObjectIdList = new ArrayList<>();
@@ -499,10 +507,13 @@ public Triple, List, List>
if (oldCommit.isEmpty()) {
addedObjectIdList = listFilesInCommit(repository, newCommit, filter);
} else {
- final List diffs = this.git.diff()
- .setOldTree(prepareTreeParser(repository, oldCommit.get()))
- .setNewTree(prepareTreeParser(repository, newCommit)).setPathFilter(filter)
- .call();
+ final List diffs =
+ this.git
+ .diff()
+ .setOldTree(prepareTreeParser(repository, oldCommit.get()))
+ .setNewTree(prepareTreeParser(repository, newCommit))
+ .setPathFilter(filter)
+ .call();
try (DiffFormatter diffFormatter = new DiffFormatter(DisabledOutputStream.INSTANCE)) {
diffFormatter.setRepository(repository);
@@ -527,26 +538,30 @@ public Triple, List, List>
modifiedObjectIdList, deletedObjectIdList, addedObjectIdList);
}
- private void putInList(final DiffFormatter diffFormatter, final DiffEntry diff,
+ private void putInList(
+ final DiffFormatter diffFormatter,
+ final DiffEntry diff,
final List objectIdList)
throws IOException {
final FileHeader fileHeader = diffFormatter.toFileHeader(diff);
final Triple mods = countModifications(fileHeader.toEditList());
final String[] parts = diff.getNewPath().split("/");
objectIdList.add(
- new FileDescriptor(diff.getNewId().toObjectId(), parts[parts.length - 1], diff.getNewPath(),
- mods));
+ new FileDescriptor(
+ diff.getNewId().toObjectId(), parts[parts.length - 1], diff.getNewPath(), mods));
}
- private void putInList2(final DiffFormatter diffFormatter, final DiffEntry diff,
+ private void putInList2(
+ final DiffFormatter diffFormatter,
+ final DiffEntry diff,
final List objectIdList)
throws IOException {
final FileHeader fileHeader = diffFormatter.toFileHeader(diff);
final Triple mods = countModifications(fileHeader.toEditList());
final String[] parts = diff.getOldPath().split("/");
objectIdList.add(
- new FileDescriptor(diff.getOldId().toObjectId(), parts[parts.length - 1], diff.getOldPath(),
- mods));
+ new FileDescriptor(
+ diff.getOldId().toObjectId(), parts[parts.length - 1], diff.getOldPath(), mods));
}
private Triple countModifications(final EditList editList) {
@@ -570,70 +585,68 @@ private Triple countModifications(final EditList edit
/**
* Returns a list of all Java Files in the repository.
*
- * @param repository the current repository
- * @param commit the commit to get the list of files for
- * @param pathRestrictions a list of search strings specifying the folders to
- * analyze, if omitted, the entire
- * repository will be searched
- * @return returns a list of FileDescriptors of all java files within the
- * specified folders
- * @throws IOException thrown if files are not available
+ * @param repository the current repository
+ * @param commit the commit to get the list of files for
+ * @param pathRestrictions a list of search strings specifying the folders to analyze, if omitted,
+ * the entire repository will be searched
+ * @return returns a list of FileDescriptors of all java files within the specified folders
+ * @throws IOException thrown if files are not available
* @throws NotFoundException thrown if the restrictionPath was not found
*/
- public List listFilesInCommit(final Repository repository, // NOPMD
- final RevCommit commit, final List pathRestrictions)
+ public List listFilesInCommit(
+ final Repository repository, final RevCommit commit, final List pathRestrictions)
throws IOException, NotFoundException {
return listFilesInCommit(repository, commit, getSourceFileTreeFilter(pathRestrictions));
}
/**
- * Returns a list of all supported source files in the repository (Java,
- * TypeScript, JavaScript).
+ * Returns a list of all supported source files in the repository (Java, TypeScript, JavaScript).
*
- * @param repository the current repository
- * @param commit the commit to get the list of files for
- * @param pathRestrictions a comma separated list of search strings specifying
- * the folders to analyze, if omitted, the
- * entire repository will be searched
- * @return returns a list of FileDescriptors of all supported source files
- * within the specified folders
- * @throws IOException thrown if files are not available
+ * @param repository the current repository
+ * @param commit the commit to get the list of files for
+ * @param pathRestrictions a comma separated list of search strings specifying the folders to
+ * analyze, if omitted, the entire repository will be searched
+ * @return returns a list of FileDescriptors of all supported source files within the specified
+ * folders
+ * @throws IOException thrown if files are not available
* @throws NotFoundException thrown if the restrictionPath was not found
*/
- public List listFilesInCommit(final Repository repository, // NOPMD
- final RevCommit commit, final String pathRestrictions) throws IOException, NotFoundException {
- return listFilesInCommit(repository, commit,
- getSourceFileTreeFilter(Arrays.asList(pathRestrictions.split(","))));
+ public List listFilesInCommit(
+ final Repository repository, final RevCommit commit, final String pathRestrictions)
+ throws IOException, NotFoundException {
+ return listFilesInCommit(
+ repository, commit, getSourceFileTreeFilter(Arrays.asList(pathRestrictions.split(","))));
}
- private List listFilesInCommit(final Repository repository, // NOPMD
- final RevCommit commit, final TreeFilter filter) throws IOException {
+ private List listFilesInCommit(
+ final Repository repository, final RevCommit commit, final TreeFilter filter)
+ throws IOException {
ensureCommitTreeParsed(repository, commit);
final List objectIdList = new ArrayList<>();
- try (final TreeWalk treeWalk = new TreeWalk(repository)) { // NOPMD
+ try (final TreeWalk treeWalk = new TreeWalk(repository)) {
treeWalk.addTree(commit.getTree());
treeWalk.setRecursive(true);
treeWalk.setFilter(filter);
while (treeWalk.next()) {
- objectIdList.add(new FileDescriptor(treeWalk.getObjectId(0), treeWalk.getNameString(),
- treeWalk.getPathString()));
+ objectIdList.add(
+ new FileDescriptor(
+ treeWalk.getObjectId(0), treeWalk.getNameString(), treeWalk.getPathString()));
}
LOGGER.atDebug().addArgument(objectIdList.size()).log("Discovered {} files in commit tree");
}
return objectIdList;
-
}
private TreeFilter getSourceFileTreeFilter(final List pathRestrictions)
throws NotFoundException {
- if (pathRestrictions.isEmpty() || pathRestrictions.size() == 1 && pathRestrictions.get(0)
- .isBlank()) {
+ if (pathRestrictions.isEmpty()
+ || pathRestrictions.size() == 1 && pathRestrictions.get(0).isBlank()) {
LOGGER.atInfo().log("No path restrictions provided. Analyzing all files.");
return TreeFilter.ALL;
} else {
LOGGER.atInfo().addArgument(pathRestrictions).log("Applying path restrictions: {}");
- final List pathList = DirectoryFinder.getRelativeDirectory(pathRestrictions,
- getCurrentRepositoryPath());
+ final List pathList =
+ DirectoryFinder.getRelativeDirectory(pathRestrictions, getCurrentRepositoryPath());
final List newPathList = new ArrayList<>();
for (final String path : pathList) {
newPathList.add(path.replaceFirst("^\\\\|/", "").replaceAll("\\\\", "/"));
@@ -653,11 +666,10 @@ public boolean isUnreachableCommit(final Optional commitId, final String
}
/**
- * Checks if the given commit is unreachable by the given branch (is not part of
- * the branch).
+ * Checks if the given commit is unreachable by the given branch (is not part of the branch).
*
* @param commitId the full SHA-1 id of the commit
- * @param branch the branch name
+ * @param branch the branch name
* @return if the given commit is unreachable by the given branch
*/
public boolean isUnreachableCommit(final String commitId, final String branch) {
@@ -665,11 +677,10 @@ public boolean isUnreachableCommit(final String commitId, final String branch) {
}
/**
- * Checks if the given commit is reachable by the given branch (is part of the
- * branch).
+ * Checks if the given commit is reachable by the given branch (is part of the branch).
*
* @param commitId the full SHA-1 id of the commit
- * @param branch the branch name
+ * @param branch the branch name
* @return if the commit is reachable by the given branch
*/
public boolean isReachableCommit(final String commitId, final String branch) {
@@ -677,26 +688,28 @@ public boolean isReachableCommit(final String commitId, final String branch) {
return true;
}
try {
- final Map map = this.git.nameRev().addPrefix(branch)
- .add(ObjectId.fromString(commitId)).call();
+ final Map map =
+ this.git.nameRev().addPrefix(branch).add(ObjectId.fromString(commitId)).call();
if (!map.isEmpty()) {
return true;
}
} catch (GitAPIException | MissingObjectException e) {
- throw new RuntimeException(e); // NOPMD
+ throw new RuntimeException(e);
}
return false;
}
/**
- * Configures a {@link RevWalk} to traverse commits reachable from the branch tip and emit
- * them in topological order (oldest first), matching {@code git rev-list --reverse}.
+ * Configures a {@link RevWalk} to traverse commits reachable from the branch tip and emit them in
+ * topological order (oldest first), matching {@code git rev-list --reverse}.
*
* @param firstParentCommitsOnly when {@code true}, only follow first-parent links so merged
- * feature-branch commits are excluded
+ * feature-branch commits are excluded
*/
public void configureBranchRevWalk(
- final RevWalk revWalk, final Repository repository, final String branchRef,
+ final RevWalk revWalk,
+ final Repository repository,
+ final String branchRef,
final boolean firstParentCommitsOnly)
throws IOException {
revWalk.sort(RevSort.TOPO);
@@ -713,5 +726,4 @@ public void configureBranchRevWalk(
}
revWalk.markStart(revWalk.parseCommit(branchId));
}
-
}
diff --git a/src/main/java/net/explorviz/code/analysis/git/RepositoryFileUrlBuilder.java b/src/main/java/net/explorviz/code/analysis/git/RepositoryFileUrlBuilder.java
index fcc4e0e..4d1918b 100644
--- a/src/main/java/net/explorviz/code/analysis/git/RepositoryFileUrlBuilder.java
+++ b/src/main/java/net/explorviz/code/analysis/git/RepositoryFileUrlBuilder.java
@@ -2,9 +2,7 @@
import java.util.Optional;
-/**
- * Normalizes repository clone URLs for persistence in the landscape service.
- */
+/** Normalizes repository clone URLs for persistence in the landscape service. */
public final class RepositoryFileUrlBuilder {
private RepositoryFileUrlBuilder() {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/AbstractFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/AbstractFileDataHandler.java
index 4f76539..c4a88ed 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/AbstractFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/AbstractFileDataHandler.java
@@ -59,8 +59,8 @@ public String getMetricValue(final String metricName) {
: null;
}
- public void setModifications(final int modifiedLines, final int addedLines,
- final int deletedLines) {
+ public void setModifications(
+ final int modifiedLines, final int addedLines, final int deletedLines) {
builder.setModifiedLines(modifiedLines);
builder.setAddedLines(addedLines);
builder.setDeletedLines(deletedLines);
diff --git a/src/main/java/net/explorviz/code/analysis/handler/CFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/CFileDataHandler.java
index 33d6670..42026f6 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/CFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/CFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for C source files.
- */
+/** FileData handler for C source files. */
public class CFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/CSharpFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/CSharpFileDataHandler.java
index 809dbae..001fc1d 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/CSharpFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/CSharpFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for C# source files.
- */
+/** FileData handler for C# source files. */
public class CSharpFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/ClassDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/ClassDataHandler.java
index e858c4e..94a981f 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/ClassDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/ClassDataHandler.java
@@ -7,9 +7,7 @@
import net.explorviz.code.proto.ClassType;
import net.explorviz.code.proto.FieldData;
-/**
- * ClassData object holds data from analyzed classes.
- */
+/** ClassData object holds data from analyzed classes. */
public class ClassDataHandler implements ProtoBufConvertable {
private final ClassData.Builder builder;
@@ -17,9 +15,7 @@ public class ClassDataHandler implements ProtoBufConvertable {
private final Map methodDataMap;
private final Map innerClassDataMap;
- /**
- * Creates a blank ClassData object.
- */
+ /** Creates a blank ClassData object. */
public ClassDataHandler() {
this.builder = ClassData.newBuilder();
this.methodDataMap = new HashMap<>();
@@ -33,8 +29,8 @@ public void setName(final String name) {
/**
* Adds a methodData object.
*
- * @param name the method's simple name
- * @param fqn the method's fully qualified name
+ * @param name the method's simple name
+ * @param fqn the method's fully qualified name
* @param returnType the return type of the method
* @return the created methodData object
*/
@@ -57,7 +53,7 @@ public void setSuperClass(final String superClass) {
* Adds a constructor object.
*
* @param name the constructor's simple name
- * @param fqn the constructor's fully qualified name
+ * @param fqn the constructor's fully qualified name
* @return the created methodData object
*/
public MethodDataHandler addConstructor(final String name, final String fqn) {
@@ -65,8 +61,8 @@ public MethodDataHandler addConstructor(final String name, final String fqn) {
return methodDataMap.get(fqn);
}
- public void addField(final String fieldName, final String fieldType,
- final List modifiers) {
+ public void addField(
+ final String fieldName, final String fieldType, final List modifiers) {
this.builder.addFields(
FieldData.newBuilder().setName(fieldName).setType(fieldType).addAllModifiers(modifiers));
}
@@ -111,9 +107,7 @@ public boolean isAbstractClass() {
return this.builder.getType() == ClassType.ABSTRACT_CLASS;
}
- /**
- * Set the current ClassType as class if it wasn't set to anonymous class already.
- */
+ /** Set the current ClassType as class if it wasn't set to anonymous class already. */
public void setIsClass() {
if (this.builder.getType() != ClassType.ANONYMOUS_CLASS) {
this.builder.setType(ClassType.CLASS);
@@ -149,9 +143,10 @@ public boolean isStruct() {
}
/**
- * Adds a new metric entry to the ClassData, returns the old value of the metric if it existed, null otherwise.
+ * Adds a new metric entry to the ClassData, returns the old value of the metric if it existed,
+ * null otherwise.
*
- * @param metricName the name/identifier of the metric
+ * @param metricName the name/identifier of the metric
* @param metricValue the value of the metric
* @return the old value of the metric if it existed, null otherwise.
*/
@@ -214,14 +209,28 @@ public String toString() {
metricDataString.append(entry.getValue()).append('\n');
}
return "{ \n"
- + "type: " + this.builder.getType().toString() + "\n"
- + "modifier: " + this.builder.getModifiersList() + "\n"
- + "superClasses: " + this.builder.getSuperclassesList() + "\n"
- + "interfaces: " + this.builder.getImplementedInterfacesList() + "\n"
- + "fields: " + this.builder.getFieldsList() + "\n"
- + "innerClasses: " + this.innerClassDataMap.keySet() + "\n"
- + "functions: \n" + methodDataString + "\n"
- + metricDataString + "\n}";
+ + "type: "
+ + this.builder.getType().toString()
+ + "\n"
+ + "modifier: "
+ + this.builder.getModifiersList()
+ + "\n"
+ + "superClasses: "
+ + this.builder.getSuperclassesList()
+ + "\n"
+ + "interfaces: "
+ + this.builder.getImplementedInterfacesList()
+ + "\n"
+ + "fields: "
+ + this.builder.getFieldsList()
+ + "\n"
+ + "innerClasses: "
+ + this.innerClassDataMap.keySet()
+ + "\n"
+ + "functions: \n"
+ + methodDataString
+ + "\n"
+ + metricDataString
+ + "\n}";
}
-
}
diff --git a/src/main/java/net/explorviz/code/analysis/handler/CommitReportHandler.java b/src/main/java/net/explorviz/code/analysis/handler/CommitReportHandler.java
index ffffa28..87715e0 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/CommitReportHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/CommitReportHandler.java
@@ -9,11 +9,9 @@
import net.explorviz.code.proto.ContributorData;
import net.explorviz.code.proto.FileIdentifier;
-/**
- * The CommitReportHandler is used to create commit reports.
- */
+/** The CommitReportHandler is used to create commit reports. */
@ApplicationScoped
-public class CommitReportHandler { // NOPMD
+public class CommitReportHandler {
private final List addedFiles = new ArrayList<>();
private final List deletedFiles = new ArrayList<>();
@@ -23,8 +21,8 @@ public class CommitReportHandler { // NOPMD
private ContributorData.Builder contributorBuilder;
/**
- * Creates a blank handler, use
- * {@link CommitReportHandler#init(String, java.util.List, String)} to initialize it.
+ * Creates a blank handler, use {@link CommitReportHandler#init(String, java.util.List, String)}
+ * to initialize it.
*/
public CommitReportHandler() {
this.builder = CommitData.newBuilder();
@@ -32,8 +30,8 @@ public CommitReportHandler() {
}
/**
- * Clears the commitReportData from old data entries. Gets called in
- * {@link CommitReportHandler#init(String, java.util.List, String)} automatically.
+ * Clears the commitReportData from old data entries. Gets called in {@link
+ * CommitReportHandler#init(String, java.util.List, String)} automatically.
*/
public void clear() {
this.builder = CommitData.newBuilder();
@@ -47,9 +45,9 @@ public void clear() {
/**
* Initialize the current report handler.
*
- * @param commitId the id of the commit
+ * @param commitId the id of the commit
* @param parentCommitIds git parent commit ids (may be empty for root commits)
- * @param branchName the name of the branch
+ * @param branchName the name of the branch
*/
public void init(
final String commitId, final List parentCommitIds, final String branchName) {
@@ -119,9 +117,7 @@ public void setAnalysisFileCount(final int analysisFileCount) {
builder.setAnalysisFileCount(analysisFileCount);
}
- /**
- * Returns the commit data. * * @return commit data object
- */
+ /** Returns the commit data. * * @return commit data object */
public CommitData getCommitData() {
builder.addAllAddedFiles(addedFiles);
builder.addAllModifiedFiles(modifiedFiles);
diff --git a/src/main/java/net/explorviz/code/analysis/handler/CppFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/CppFileDataHandler.java
index 477d0f1..1ebea07 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/CppFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/CppFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for C++ files.
- */
+/** FileData handler for C++ files. */
public class CppFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
@@ -28,8 +26,12 @@ public CppFileDataHandler(final String fileName) {
this.classDataMap = new HashMap<>();
this.globalFunctionHandlers = new ArrayList<>();
this.rootClasses = new ArrayList<>();
- this.isCppFile = fileName.endsWith(".cpp") || fileName.endsWith(".cxx")
- || fileName.endsWith(".cc") || fileName.endsWith(".hpp") || fileName.endsWith(".hxx");
+ this.isCppFile =
+ fileName.endsWith(".cpp")
+ || fileName.endsWith(".cxx")
+ || fileName.endsWith(".cc")
+ || fileName.endsWith(".hpp")
+ || fileName.endsWith(".hxx");
}
public void enterNamespace(final String name) {
@@ -42,9 +44,7 @@ public void leaveNamespace() {
}
}
- /**
- * Returns the current namespace as a '::' separated string.
- */
+ /** Returns the current namespace as a '::' separated string. */
public String getCurrentNamespace() {
if (namespaceStack.isEmpty()) {
return "";
diff --git a/src/main/java/net/explorviz/code/analysis/handler/FallbackFileDataHandlerFactory.java b/src/main/java/net/explorviz/code/analysis/handler/FallbackFileDataHandlerFactory.java
index e4c120b..c4e6cb2 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/FallbackFileDataHandlerFactory.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/FallbackFileDataHandlerFactory.java
@@ -5,18 +5,14 @@
import net.explorviz.code.analysis.types.FileDescriptor;
import net.explorviz.code.proto.Language;
-/**
- * Creates file data handlers with basic metrics when full parsing is not possible.
- */
+/** Creates file data handlers with basic metrics when full parsing is not possible. */
public final class FallbackFileDataHandlerFactory {
private FallbackFileDataHandlerFactory() {}
- /**
- * Creates a fallback handler with the given language and basic metrics from file content.
- */
- public static TextFileDataHandler create(final FileDescriptor file, final String fileContent,
- final Language language) {
+ /** Creates a fallback handler with the given language and basic metrics from file content. */
+ public static TextFileDataHandler create(
+ final FileDescriptor file, final String fileContent, final Language language) {
final TextFileDataHandler handler = new TextFileDataHandler(file.reportedPath, language);
handler.setFileHash(file.objectId.getName());
if (fileContent != null) {
@@ -26,11 +22,11 @@ public static TextFileDataHandler create(final FileDescriptor file, final String
return handler;
}
- /**
- * Creates a fallback handler, inferring the language from the file name or path.
- */
+ /** Creates a fallback handler, inferring the language from the file name or path. */
public static TextFileDataHandler create(final FileDescriptor file, final String fileContent) {
- return create(file, fileContent,
+ return create(
+ file,
+ fileContent,
FileLanguageResolver.resolveFromFileName(file.fileName, file.reportedPath));
}
}
diff --git a/src/main/java/net/explorviz/code/analysis/handler/GoFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/GoFileDataHandler.java
index e60fef5..f9f35a7 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/GoFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/GoFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for Go source files.
- */
+/** FileData handler for Go source files. */
public class GoFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/JavaFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/JavaFileDataHandler.java
index 7a3fd42..29b76e1 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/JavaFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/JavaFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for Java files.
- */
+/** FileData handler for Java files. */
public class JavaFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
@@ -164,8 +162,15 @@ public String toString() {
mapData.append(entry.getKey()).append(": ");
mapData.append(entry.getValue()).append('\n');
}
- return "stats: methodCount=" + this.getMethodCount() + "\n" + "package: "
- + this.builder.getPackageName() + "\n" + "imports: " + this.builder.getImportNamesList()
- + "\n" + mapData;
+ return "stats: methodCount="
+ + this.getMethodCount()
+ + "\n"
+ + "package: "
+ + this.builder.getPackageName()
+ + "\n"
+ + "imports: "
+ + this.builder.getImportNamesList()
+ + "\n"
+ + mapData;
}
}
diff --git a/src/main/java/net/explorviz/code/analysis/handler/KotlinFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/KotlinFileDataHandler.java
index 2fbe545..498020b 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/KotlinFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/KotlinFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for Kotlin source files.
- */
+/** FileData handler for Kotlin source files. */
public class KotlinFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/MethodDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/MethodDataHandler.java
index 681676b..44e57d8 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/MethodDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/MethodDataHandler.java
@@ -7,9 +7,7 @@
import net.explorviz.code.proto.FunctionData;
import net.explorviz.code.proto.ParameterData;
-/**
- * FunctionData object holds data from analyzed function/method.
- */
+/** FunctionData object holds data from analyzed function/method. */
public class MethodDataHandler implements ProtoBufConvertable {
private final FunctionData.Builder builder;
@@ -17,7 +15,7 @@ public class MethodDataHandler implements ProtoBufConvertable {
/**
* Creates a new FunctionData object holding data describing the method.
*
- * @param name the name of the function
+ * @param name the name of the function
* @param returnType the return type of the method
*/
public MethodDataHandler(final String name, final String returnType) {
@@ -54,12 +52,12 @@ public void addAnnotation(final String annotation) {
/**
* Add a parameter to the method.
*
- * @param name name of the parameter
- * @param type type of the parameter
+ * @param name name of the parameter
+ * @param type type of the parameter
* @param modifiers modifiers of the parameter
*/
- public void addParameter(final String name, final String type,
- final NodeList modifiers) {
+ public void addParameter(
+ final String name, final String type, final NodeList modifiers) {
final ParameterData.Builder parameterBuilder = ParameterData.newBuilder();
parameterBuilder.setName(name);
parameterBuilder.setType(type);
@@ -72,8 +70,8 @@ public void addParameter(final String name, final String type,
/**
* Add a parameter to the method.
*
- * @param name name of the parameter
- * @param type type of the parameter
+ * @param name name of the parameter
+ * @param type type of the parameter
* @param modifiers modifiers of the parameter
*/
public void addParameter(final String name, final String type, final List modifiers) {
@@ -91,7 +89,7 @@ public void addOutgoingMethodCall(final String fqn) {
/**
* Adds a metric to the Method.
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
* @return the old metric value if it existed, null otherwise
*/
@@ -139,10 +137,18 @@ public String toString() {
metricDataString.append(entry.getKey()).append(": ");
metricDataString.append(entry.getValue()).append('\n');
}
- return " type: " + this.builder.getReturnType() + "\n" + " modifiers: "
- + this.builder.getModifiersList() + "\n" + " parameters: "
+ return " type: "
+ + this.builder.getReturnType()
+ + "\n"
+ + " modifiers: "
+ + this.builder.getModifiersList()
+ + "\n"
+ + " parameters: "
+ this.builder.getParametersList()
- + "\n" + " outgoing calls: " + this.builder.getOutgoingMethodCallsList() + "\n"
+ + "\n"
+ + " outgoing calls: "
+ + this.builder.getOutgoingMethodCallsList()
+ + "\n"
+ metricDataString;
}
}
diff --git a/src/main/java/net/explorviz/code/analysis/handler/MetricAppender.java b/src/main/java/net/explorviz/code/analysis/handler/MetricAppender.java
index 99c6e0b..39d510f 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/MetricAppender.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/MetricAppender.java
@@ -13,11 +13,11 @@
import net.explorviz.code.analysis.types.Verification;
/**
- * The MetricAppender is a helper Object to facilitate the adding of metric data to the internal FileData object. It
- * provides basic functionality to keep track of the class hierarchy and handles the adding of metrics to the right
- * objects.
+ * The MetricAppender is a helper Object to facilitate the adding of metric data to the internal
+ * FileData object. It provides basic functionality to keep track of the class hierarchy and handles
+ * the adding of metrics to the right objects.
*/
-public class MetricAppender { // NOPMD
+public class MetricAppender {
private static final String OBJECT_NOT_FOUND = "Object to add metric not found.";
private static final String UNKNOWN = "UNKNOWN";
@@ -41,7 +41,7 @@ public MetricAppender(final JavaFileDataHandler fileDataHandler) {
/**
* Sets the metric with metricName to metricValue. The metric is attached to the current file.
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
* @return returns the old value of the metric if the metric exists, otherwise null
*/
@@ -50,82 +50,84 @@ public String putFileMetric(final String metricName, final String metricValue) {
}
/**
- * Sets the metric with metricName to metricValue. The metric is attached to the current class set by
- * {@link #enterClass(ClassOrInterfaceDeclaration)}
+ * Sets the metric with metricName to metricValue. The metric is attached to the current class set
+ * by {@link #enterClass(ClassOrInterfaceDeclaration)}
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
* @return returns the old value of the metric if the metric exists, otherwise null
- * @throws NotFoundException gets thrown if the class object was not found and therefore the metric could not be
- * added
+ * @throws NotFoundException gets thrown if the class object was not found and therefore the
+ * metric could not be added
*/
public String putClassMetric(final String metricName, final String metricValue)
throws NotFoundException {
try {
final ClassDataHandler classDataHandler = fileData.getClassData(classStack.peek());
return classDataHandler.addMetric(metricName, metricValue);
- } catch (NullPointerException e) { // NOPMD
- final NotFoundException notFoundException = new NotFoundException(
- "Not inside class. Object to add metric not found.");
+ } catch (NullPointerException e) {
+ final NotFoundException notFoundException =
+ new NotFoundException("Not inside class. Object to add metric not found.");
notFoundException.addSuppressed(e);
- throw notFoundException; // NOPMD
+ throw notFoundException;
}
}
/**
* Sets the metric with metricName to metricValue. The metric is attached to the given class.
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
- * @param clazz the class object to add the metric to
+ * @param clazz the class object to add the metric to
* @return returns the old value of the metric if the metric exists, otherwise null
- * @throws NotFoundException gets thrown if the method object was not found and therefore the metric could not be
- * added
+ * @throws NotFoundException gets thrown if the method object was not found and therefore the
+ * metric could not be added
*/
- public String putClassMetric(final String metricName, final String metricValue,
- final ClassOrInterfaceDeclaration clazz) throws NotFoundException {
+ public String putClassMetric(
+ final String metricName, final String metricValue, final ClassOrInterfaceDeclaration clazz)
+ throws NotFoundException {
try {
- return fileData.getClassData(clazz.getFullyQualifiedName().orElse(UNKNOWN))
+ return fileData
+ .getClassData(clazz.getFullyQualifiedName().orElse(UNKNOWN))
.addMetric(metricName, metricValue);
- } catch (NullPointerException e) { // NOPMD
+ } catch (NullPointerException e) {
final NotFoundException notFoundException = new NotFoundException(OBJECT_NOT_FOUND);
notFoundException.addSuppressed(e);
- throw notFoundException; // NOPMD
+ throw notFoundException;
}
}
/**
- * Sets the metric with metricName to metricValue. The metric is attached to the class defined by classFqn.
+ * Sets the metric with metricName to metricValue. The metric is attached to the class defined by
+ * classFqn.
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
- * @param classFqn the fqn of the class
+ * @param classFqn the fqn of the class
* @return returns the old value of the metric if the metric exists, otherwise null
- * @throws NotFoundException gets thrown if the method object was not found and therefore the metric could not be
- * added
+ * @throws NotFoundException gets thrown if the method object was not found and therefore the
+ * metric could not be added
*/
- public String putClassMetric(final String metricName, final String metricValue,
- final String classFqn)
-
+ public String putClassMetric(
+ final String metricName, final String metricValue, final String classFqn)
throws NotFoundException {
try {
return fileData.getClassData(classFqn).addMetric(metricName, metricValue);
- } catch (NullPointerException e) { // NOPMD
+ } catch (NullPointerException e) {
final NotFoundException notFoundException = new NotFoundException(OBJECT_NOT_FOUND);
notFoundException.addSuppressed(e);
- throw notFoundException; // NOPMD
+ throw notFoundException;
}
}
/**
- * Sets the metric with metricName to metricValue. The metric is attached to the current method set by
- * {@link #enterMethod(MethodDeclaration)}
+ * Sets the metric with metricName to metricValue. The metric is attached to the current method
+ * set by {@link #enterMethod(MethodDeclaration)}
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
* @return returns the old value of the metric if the metric exists, otherwise null
- * @throws NotFoundException gets thrown if the method object was not found and therefore the metric could not be
- * added
+ * @throws NotFoundException gets thrown if the method object was not found and therefore the
+ * metric could not be added
*/
public String putMethodMetric(final String metricName, final String metricValue)
throws NotFoundException {
@@ -133,35 +135,41 @@ public String putMethodMetric(final String metricName, final String metricValue)
final ClassDataHandler classDataHandler = fileData.getClassData(classStack.peek());
final MethodDataHandler methodDataHandler = classDataHandler.getMethod(methodStack.peek());
return methodDataHandler.addMetric(metricName, metricValue);
- } catch (NullPointerException e) { // NOPMD
- final NotFoundException notFoundException = new NotFoundException(
- "Not inside class or method. Object to add metric not found.");
+ } catch (NullPointerException e) {
+ final NotFoundException notFoundException =
+ new NotFoundException("Not inside class or method. Object to add metric not found.");
notFoundException.addSuppressed(e);
- throw notFoundException; // NOPMD
+ throw notFoundException;
}
}
/**
- * Sets the metric with metricName to metricValue. The metric is attached to the given method. If the method's name
- * can't be resolved, null gets returned
+ * Sets the metric with metricName to metricValue. The metric is attached to the given method. If
+ * the method's name can't be resolved, null gets returned
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
- * @param method the method to add the metric to
+ * @param method the method to add the metric to
* @return returns the old value of the metric if the metric exists, otherwise null
- * @throws NotFoundException gets thrown if the method object was not found and therefore the metric could not be
- * added
+ * @throws NotFoundException gets thrown if the method object was not found and therefore the
+ * metric could not be added
*/
- public String putMethodMetric(final String metricName, final String metricValue,
- final MethodDeclaration method) throws NotFoundException {
+ public String putMethodMetric(
+ final String metricName, final String metricValue, final MethodDeclaration method)
+ throws NotFoundException {
if (method.getParentNode().isPresent()) {
final Node parent = method.getParentNode().get();
if (parent instanceof ClassOrInterfaceDeclaration) {
- final String fqn = ((ClassOrInterfaceDeclaration) parent).getFullyQualifiedName()
- .orElse(UNKNOWN);
- return fileData.getClassData(fqn).getMethod(
- fqn + "." + method.getNameAsString() + "#" + Verification.parameterHash(
- method.getParameters()))
+ final String fqn =
+ ((ClassOrInterfaceDeclaration) parent).getFullyQualifiedName().orElse(UNKNOWN);
+ return fileData
+ .getClassData(fqn)
+ .getMethod(
+ fqn
+ + "."
+ + method.getNameAsString()
+ + "#"
+ + Verification.parameterHash(method.getParameters()))
.addMetric(metricName, metricValue);
}
}
@@ -169,36 +177,41 @@ public String putMethodMetric(final String metricName, final String metricValue,
}
/**
- * Sets the metric with metricName to metricValue. The metric is attached to the method defined by classFqn and
- * methodFqn. Keep in mind to append the {@link Verification#parameterHash(NodeList)} to the methodFqn to
- * differentiate overloaded methods.
+ * Sets the metric with metricName to metricValue. The metric is attached to the method defined by
+ * classFqn and methodFqn. Keep in mind to append the {@link Verification#parameterHash(NodeList)}
+ * to the methodFqn to differentiate overloaded methods.
*
- * @param metricName the name of the metric
+ * @param metricName the name of the metric
* @param metricValue the value of the metric
- * @param classFqn the fqn of the method's class
- * @param methodFqn the fqn of the method
+ * @param classFqn the fqn of the method's class
+ * @param methodFqn the fqn of the method
* @return returns the old value of the metric if the metric exists, otherwise null
- * @throws NotFoundException gets thrown if the method object was not found and therefore the metric could not be
- * added
+ * @throws NotFoundException gets thrown if the method object was not found and therefore the
+ * metric could not be added
*/
- public String putMethodMetric(final String metricName, final String metricValue, // NOPMD
- final String classFqn, final String methodFqn)
+ public String putMethodMetric(
+ final String metricName,
+ final String metricValue,
+ final String classFqn,
+ final String methodFqn)
throws NotFoundException {
try {
- return fileData.getClassData(classFqn).getMethod(methodFqn)
+ return fileData
+ .getClassData(classFqn)
+ .getMethod(methodFqn)
.addMetric(metricName, metricValue);
- } catch (NullPointerException e) { // NOPMD
+ } catch (NullPointerException e) {
final NotFoundException notFoundException = new NotFoundException(OBJECT_NOT_FOUND);
notFoundException.addSuppressed(e);
- throw notFoundException; // NOPMD
+ throw notFoundException;
}
}
/**
- * Used to handle the tracking of the current class. Call with the current class to use the
- * {@link MetricAppender#getClass()} and {@link MetricAppender#getCurrentClassName()} anywhere later. Enables the
- * usability of {@link MetricAppender#putMethodMetric(String, String)} and
- * {@link MetricAppender#putClassMetric(String, String)}.
+ * Used to handle the tracking of the current class. Call with the current class to use the {@link
+ * MetricAppender#getClass()} and {@link MetricAppender#getCurrentClassName()} anywhere later.
+ * Enables the usability of {@link MetricAppender#putMethodMetric(String, String)} and {@link
+ * MetricAppender#putClassMetric(String, String)}.
*
* @param clazz the class to enter
*/
@@ -210,9 +223,7 @@ public void enterClass(final EnumDeclaration clazz) {
this.classStack.push(clazz.getFullyQualifiedName().orElse(UNKNOWN));
}
- /**
- * Leaves a class.
- */
+ /** Leaves a class. */
public void leaveClass() {
this.classStack.pop();
}
@@ -221,7 +232,7 @@ public void leaveClass() {
* Used to signal the entering of an anonymous class.
*
* @param anonymousClassName the name used to identify the anonymous class.
- * @param parentFqn the parent fqn, e.g the fqn of the method the anonymous class is in
+ * @param parentFqn the parent fqn, e.g the fqn of the method the anonymous class is in
*/
public void enterAnonymousClass(final String anonymousClassName, final String parentFqn) {
String fqn = parentFqn + "." + anonymousClassName;
@@ -231,9 +242,7 @@ public void enterAnonymousClass(final String anonymousClassName, final String pa
this.classStack.push(fqn);
}
- /**
- * Leaves an anonymous class.
- */
+ /** Leaves an anonymous class. */
public void leaveAnonymousClass() {
this.classStack.pop();
}
@@ -244,35 +253,40 @@ public String getCurrentClassName() {
/**
* Used to handle the tracking of the current method. Call with the current method to use the
- * {@link MetricAppender#getCurrentMethodName()} anywhere later. Enables the usability of
- * {@link MetricAppender#putMethodMetric(String, String)}.
+ * {@link MetricAppender#getCurrentMethodName()} anywhere later. Enables the usability of {@link
+ * MetricAppender#putMethodMetric(String, String)}.
*
* @param method the method to enter
*/
public void enterMethod(final MethodDeclaration method) {
methodStack.push(
- getCurrentClassName() + "." + method.getNameAsString() + "#" + Verification.parameterHash(
- method.getParameters()));
+ getCurrentClassName()
+ + "."
+ + method.getNameAsString()
+ + "#"
+ + Verification.parameterHash(method.getParameters()));
}
/**
* Used to handle the tracking of the current method. Call with the current constructor to use the
- * {@link MetricAppender#getCurrentMethodName()} anywhere later. Enables the usability of
- * {@link MetricAppender#putMethodMetric(String, String)}.
+ * {@link MetricAppender#getCurrentMethodName()} anywhere later. Enables the usability of {@link
+ * MetricAppender#putMethodMetric(String, String)}.
*
* @param constructor the constructor to enter
*/
public void enterMethod(final ConstructorDeclaration constructor) {
methodStack.push(
- getCurrentClassName() + "." + constructor.getNameAsString() + "#"
- + Verification.parameterHash(
- constructor.getParameters()));
+ getCurrentClassName()
+ + "."
+ + constructor.getNameAsString()
+ + "#"
+ + Verification.parameterHash(constructor.getParameters()));
}
/**
- * Used to handle the tracking of the current method. Call with the methodFqn to use the
- * {@link MetricAppender#getCurrentMethodName()} anywhere later. Enables the usability of
- * {@link MetricAppender#putMethodMetric(String, String)}.
+ * Used to handle the tracking of the current method. Call with the methodFqn to use the {@link
+ * MetricAppender#getCurrentMethodName()} anywhere later. Enables the usability of {@link
+ * MetricAppender#putMethodMetric(String, String)}.
*
* @param methodFqn the methodFqn, the user needs to make sure the fqn is correct
*/
@@ -280,9 +294,7 @@ public void enterMethod(final String methodFqn) {
methodStack.push(methodFqn);
}
- /**
- * Leaves a method.
- */
+ /** Leaves a method. */
public void leaveMethod() {
methodStack.pop();
}
@@ -292,8 +304,8 @@ public String getCurrentMethodName() {
}
/**
- * Gets the wrapped {@link JavaFileDataHandler}. Keep in mind that some functionality of the fileDataHandler is only
- * avaible during the initial collection of data, use with caution.
+ * Gets the wrapped {@link JavaFileDataHandler}. Keep in mind that some functionality of the
+ * fileDataHandler is only avaible during the initial collection of data, use with caution.
*
* @return the wrapped FileDataHanlder
*/
diff --git a/src/main/java/net/explorviz/code/analysis/handler/ParameterDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/ParameterDataHandler.java
index 7df6382..2bcd854 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/ParameterDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/ParameterDataHandler.java
@@ -3,9 +3,7 @@
import java.util.List;
import net.explorviz.code.proto.ParameterData;
-/**
- * A handler to easily access and maintain the ParameterData object.
- */
+/** A handler to easily access and maintain the ParameterData object. */
public class ParameterDataHandler implements ProtoBufConvertable {
private final ParameterData.Builder builder;
diff --git a/src/main/java/net/explorviz/code/analysis/handler/PhpFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/PhpFileDataHandler.java
index 977a93b..864c8af 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/PhpFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/PhpFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for PHP source files.
- */
+/** FileData handler for PHP source files. */
public class PhpFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/ProtoBufConvertable.java b/src/main/java/net/explorviz/code/analysis/handler/ProtoBufConvertable.java
index 2f60614..8244174 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/ProtoBufConvertable.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/ProtoBufConvertable.java
@@ -10,5 +10,4 @@
public interface ProtoBufConvertable {
T getProtoBufObject();
-
}
diff --git a/src/main/java/net/explorviz/code/analysis/handler/PythonFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/PythonFileDataHandler.java
index 19bfe0a..24a6b8b 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/PythonFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/PythonFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * File data handler specifically for Python files.
- */
+/** File data handler specifically for Python files. */
public class PythonFileDataHandler extends AbstractFileDataHandler {
private final Stack classStack = new Stack<>();
diff --git a/src/main/java/net/explorviz/code/analysis/handler/RustFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/RustFileDataHandler.java
index 30f0185..3fa00ab 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/RustFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/RustFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for Rust source files.
- */
+/** FileData handler for Rust source files. */
public class RustFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/SwiftFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/SwiftFileDataHandler.java
index 88fd349..461effe 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/SwiftFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/SwiftFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for Swift source files.
- */
+/** FileData handler for Swift source files. */
public class SwiftFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
diff --git a/src/main/java/net/explorviz/code/analysis/handler/TypeScriptFileDataHandler.java b/src/main/java/net/explorviz/code/analysis/handler/TypeScriptFileDataHandler.java
index f518cfc..98ac218 100644
--- a/src/main/java/net/explorviz/code/analysis/handler/TypeScriptFileDataHandler.java
+++ b/src/main/java/net/explorviz/code/analysis/handler/TypeScriptFileDataHandler.java
@@ -8,9 +8,7 @@
import net.explorviz.code.proto.FileData;
import net.explorviz.code.proto.Language;
-/**
- * FileData handler for TypeScript and JavaScript files.
- */
+/** FileData handler for TypeScript and JavaScript files. */
public class TypeScriptFileDataHandler extends AbstractFileDataHandler
implements ProtoBufConvertable {
@@ -84,9 +82,7 @@ public String getCurrentModulePath() {
return modulePath.toString();
}
- /**
- * Builds a fully qualified name for a top-level or nested type, method, or function.
- */
+ /** Builds a fully qualified name for a top-level or nested type, method, or function. */
public String buildFqn(final String name) {
final String parentClassFqn = getCurrentClassFqnOrNull();
if (parentClassFqn != null) {
@@ -100,8 +96,9 @@ public String buildFqn(final String name) {
}
public String buildMethodFqn(final String methodName, final List parameterTypes) {
- return buildFqn(methodName) + "#" + net.explorviz.code.analysis.types.Verification.parameterHash(
- parameterTypes);
+ return buildFqn(methodName)
+ + "#"
+ + net.explorviz.code.analysis.types.Verification.parameterHash(parameterTypes);
}
public void enterClass(final String name, final String fqn) {
@@ -184,9 +181,10 @@ public FileData getProtoBufObject() {
builder.addFunctions(handler.getProtoBufObject());
}
- final Language language = fileName.endsWith(".ts") || fileName.endsWith(".tsx")
- ? Language.TYPESCRIPT
- : Language.JAVASCRIPT;
+ final Language language =
+ fileName.endsWith(".ts") || fileName.endsWith(".tsx")
+ ? Language.TYPESCRIPT
+ : Language.JAVASCRIPT;
builder.setLanguage(language);
return builder.build();
@@ -197,7 +195,8 @@ public String toString() {
final int INITIAL_STRING_CAPACITY = 500;
final StringBuilder result = new StringBuilder(INITIAL_STRING_CAPACITY);
- result.append("Language: ")
+ result
+ .append("Language: ")
.append(fileName.endsWith(".ts") ? "TypeScript" : "JavaScript")
.append("\n");
result.append("Package/Module: ").append(builder.getPackageName()).append("\n");
diff --git a/src/main/java/net/explorviz/code/analysis/listener/CFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/CFileDataListener.java
index 4fe9453..6de9847 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/CFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/CFileDataListener.java
@@ -10,9 +10,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR listener for extracting file data from C source code.
- */
+/** ANTLR listener for extracting file data from C source code. */
public class CFileDataListener extends CParserBaseListener implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(CFileDataListener.class);
@@ -22,8 +20,7 @@ public class CFileDataListener extends CParserBaseListener implements CommonFile
private int functionCount = 0;
private int variableCount = 0;
- public CFileDataListener(final CFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public CFileDataListener(final CFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -34,9 +31,7 @@ public void enterTranslationUnit(final CParser.TranslationUnitContext ctx) {
// populateLexerMetrics() before the walk (also covers parse-tree failures).
}
- /**
- * Populates file-level metrics from lexer tokens when a full parse tree is unavailable.
- */
+ /** Populates file-level metrics from lexer tokens when a full parse tree is unavailable. */
public void populateLexerMetrics() {
final int sloc = getSlocIncludingPreprocessor();
final int cloc = getCloc();
@@ -45,7 +40,8 @@ public void populateLexerMetrics() {
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
extractIncludes();
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -77,7 +73,8 @@ private int getSlocIncludingPreprocessor() {
}
final String trimmed = text.trim();
- if (trimmed.startsWith("#include") || trimmed.startsWith("#define")
+ if (trimmed.startsWith("#include")
+ || trimmed.startsWith("#define")
|| trimmed.startsWith("#if")) {
codeLines.add(token.getLine());
}
@@ -203,11 +200,16 @@ public void enterFunctionDefinition(final CParser.FunctionDefinitionContext ctx)
final String currentClassName = getSimpleName(fileDataHandler.getCurrentClassFqnOrNull());
final MethodDataHandler methodData;
if (functionName.equals(currentClassName)) {
- methodData = classData.addConstructor(functionName,
- functionName + "#" + extractParameterTypes(ctx.declarator()).hashCode());
+ methodData =
+ classData.addConstructor(
+ functionName,
+ functionName + "#" + extractParameterTypes(ctx.declarator()).hashCode());
} else {
- methodData = classData.addMethod(functionName,
- functionName + "#" + extractParameterTypes(ctx.declarator()).hashCode(), returnType);
+ methodData =
+ classData.addMethod(
+ functionName,
+ functionName + "#" + extractParameterTypes(ctx.declarator()).hashCode(),
+ returnType);
}
addFunctionParameters(methodData, ctx.declarator());
if (ctx.start != null && ctx.stop != null) {
@@ -239,8 +241,8 @@ public void enterMemberDeclaration(final CParser.MemberDeclarationContext ctx) {
}
final String fieldType = extractTypeFromSpecifierQualifierList(ctx.specifierQualifierList());
- for (final CParser.MemberDeclaratorContext memberDecl : ctx.memberDeclaratorList()
- .memberDeclarator()) {
+ for (final CParser.MemberDeclaratorContext memberDecl :
+ ctx.memberDeclaratorList().memberDeclarator()) {
if (memberDecl.declarator() != null) {
final String fieldName = extractDeclaratorName(memberDecl.declarator());
if (fieldName != null && !fieldName.contains("(")) {
@@ -344,8 +346,12 @@ private void appendTypeText(final StringBuilder typeBuilder, final String text)
}
private void appendStorageOrQualifier(final StringBuilder typeBuilder, final String text) {
- if ("static".equals(text) || "extern".equals(text) || "inline".equals(text)
- || "typedef".equals(text) || "const".equals(text) || "volatile".equals(text)) {
+ if ("static".equals(text)
+ || "extern".equals(text)
+ || "inline".equals(text)
+ || "typedef".equals(text)
+ || "const".equals(text)
+ || "volatile".equals(text)) {
return;
}
appendTypeText(typeBuilder, text);
@@ -355,8 +361,8 @@ private List extractParameterTypes(final CParser.DeclaratorContext ctx)
final List paramTypes = new ArrayList<>();
final CParser.ParameterTypeListContext params = findParameterTypeList(ctx);
if (params != null && params.parameterList() != null) {
- for (final CParser.ParameterDeclarationContext param : params.parameterList()
- .parameterDeclaration()) {
+ for (final CParser.ParameterDeclarationContext param :
+ params.parameterList().parameterDeclaration()) {
String type = "unknown";
if (param.declarationSpecifiers() != null) {
type = extractTypeFromDeclarationSpecifiers(param.declarationSpecifiers());
@@ -367,7 +373,8 @@ private List extractParameterTypes(final CParser.DeclaratorContext ctx)
return paramTypes;
}
- private CParser.ParameterTypeListContext findParameterTypeList(final CParser.DeclaratorContext ctx) {
+ private CParser.ParameterTypeListContext findParameterTypeList(
+ final CParser.DeclaratorContext ctx) {
if (ctx.directDeclarator() != null) {
return findParameterTypeListInDirect(ctx.directDeclarator());
}
@@ -385,18 +392,19 @@ private CParser.ParameterTypeListContext findParameterTypeListInDirect(
return null;
}
- private void addFunctionParameters(final MethodDataHandler methodData,
- final CParser.DeclaratorContext ctx) {
+ private void addFunctionParameters(
+ final MethodDataHandler methodData, final CParser.DeclaratorContext ctx) {
final CParser.ParameterTypeListContext params = findParameterTypeList(ctx);
if (params == null || params.parameterList() == null) {
return;
}
- for (final CParser.ParameterDeclarationContext param : params.parameterList()
- .parameterDeclaration()) {
- String paramType = param.declarationSpecifiers() != null
- ? extractTypeFromDeclarationSpecifiers(param.declarationSpecifiers())
- : "unknown";
+ for (final CParser.ParameterDeclarationContext param :
+ params.parameterList().parameterDeclaration()) {
+ String paramType =
+ param.declarationSpecifiers() != null
+ ? extractTypeFromDeclarationSpecifiers(param.declarationSpecifiers())
+ : "unknown";
String paramName = "";
if (param.declarator() != null) {
paramName = extractDeclaratorName(param.declarator());
diff --git a/src/main/java/net/explorviz/code/analysis/listener/CSharpFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/CSharpFileDataListener.java
index 0fb4afa..3ed6416 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/CSharpFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/CSharpFileDataListener.java
@@ -12,10 +12,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR listener for extracting file data from C# source code.
- */
-public class CSharpFileDataListener extends CSharpParserBaseListener implements CommonFileDataListener {
+/** ANTLR listener for extracting file data from C# source code. */
+public class CSharpFileDataListener extends CSharpParserBaseListener
+ implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpFileDataListener.class);
@@ -24,8 +23,8 @@ public class CSharpFileDataListener extends CSharpParserBaseListener implements
private int functionCount = 0;
private int variableCount = 0;
- public CSharpFileDataListener(final CSharpFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public CSharpFileDataListener(
+ final CSharpFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -38,7 +37,8 @@ public void enterCompilation_unit(final CSharpParser.Compilation_unitContext ctx
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -105,8 +105,8 @@ public void enterClass_declaration(final CSharpParser.Class_declarationContext c
}
}
- private void addClassBaseRelations(final ClassDataHandler classData,
- final CSharpParser.Class_baseContext classBase) {
+ private void addClassBaseRelations(
+ final ClassDataHandler classData, final CSharpParser.Class_baseContext classBase) {
if (classBase == null) {
return;
}
@@ -116,16 +116,23 @@ private void addClassBaseRelations(final ClassDataHandler classData,
}
if (classBase.interface_type_list() != null) {
- for (final CSharpParser.Interface_typeContext interfaceType : classBase.interface_type_list()
- .interface_type()) {
+ for (final CSharpParser.Interface_typeContext interfaceType :
+ classBase.interface_type_list().interface_type()) {
classData.addImplementedInterface(interfaceType.getText());
}
}
}
- private void addFormattedSuperClass(final ClassDataHandler classData, final String superClassFqn) {
- classData.setSuperClass(getClassPathFromFqn(superClassFqn, ".cs", fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(superClassFqn));
+ private void addFormattedSuperClass(
+ final ClassDataHandler classData, final String superClassFqn) {
+ classData.setSuperClass(
+ getClassPathFromFqn(
+ superClassFqn,
+ ".cs",
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(superClassFqn));
}
@Override
@@ -151,9 +158,10 @@ public void enterStruct_declaration(final CSharpParser.Struct_declarationContext
classData.addMetric(SLOC, String.valueOf(getSloc(ctx, tokens)));
classData.addMetric(LINE_COUNT, String.valueOf(calculateLoc(ctx)));
- if (ctx.struct_interfaces() != null && ctx.struct_interfaces().interface_type_list() != null) {
- for (final CSharpParser.Interface_typeContext interfaceType : ctx.struct_interfaces()
- .interface_type_list().interface_type()) {
+ if (ctx.struct_interfaces() != null
+ && ctx.struct_interfaces().interface_type_list() != null) {
+ for (final CSharpParser.Interface_typeContext interfaceType :
+ ctx.struct_interfaces().interface_type_list().interface_type()) {
classData.addImplementedInterface(interfaceType.getText());
}
}
@@ -235,8 +243,8 @@ public void enterField_declaration(final CSharpParser.Field_declarationContext c
}
final String fieldType = ctx.type_().getText();
- for (final CSharpParser.Variable_declaratorContext variableDecl : ctx.variable_declarators()
- .variable_declarator()) {
+ for (final CSharpParser.Variable_declaratorContext variableDecl :
+ ctx.variable_declarators().variable_declarator()) {
if (variableDecl.identifier() != null) {
classData.addField(variableDecl.identifier().getText(), fieldType, new ArrayList<>());
}
@@ -256,7 +264,8 @@ public void enterMethod_declaration(final CSharpParser.Method_declarationContext
}
final String returnType = extractReturnType(ctx);
- final MethodDataHandler methodData = createMethodHandler(methodName, returnType, ctx.method_header());
+ final MethodDataHandler methodData =
+ createMethodHandler(methodName, returnType, ctx.method_header());
if (methodData == null) {
return;
}
@@ -281,8 +290,10 @@ public void enterConstructor_declaration(final CSharpParser.Constructor_declarat
return;
}
- final MethodDataHandler methodData = classData.addConstructor(constructorName,
- constructorName + "#" + extractParameterTypes(ctx.constructor_declarator()).hashCode());
+ final MethodDataHandler methodData =
+ classData.addConstructor(
+ constructorName,
+ constructorName + "#" + extractParameterTypes(ctx.constructor_declarator()).hashCode());
addParameters(methodData, ctx.constructor_declarator().parameter_list());
if (ctx.start != null && ctx.stop != null) {
@@ -340,15 +351,18 @@ public void enterVariable_declarator(final CSharpParser.Variable_declaratorConte
}
}
- private MethodDataHandler createMethodHandler(final String methodName, final String returnType,
+ private MethodDataHandler createMethodHandler(
+ final String methodName,
+ final String returnType,
final CSharpParser.Method_headerContext header) {
if (fileDataHandler.isInClassContext()) {
final ClassDataHandler classData = fileDataHandler.getCurrentClassData();
if (classData == null) {
return null;
}
- final MethodDataHandler methodData = classData.addMethod(methodName,
- methodName + "#" + extractParameterTypes(header).hashCode(), returnType);
+ final MethodDataHandler methodData =
+ classData.addMethod(
+ methodName, methodName + "#" + extractParameterTypes(header).hashCode(), returnType);
addParameters(methodData, header.parameter_list());
return methodData;
}
@@ -382,18 +396,20 @@ private List extractParameterTypes(final CSharpParser.Method_headerConte
return extractParameterTypes(header.parameter_list());
}
- private List extractParameterTypes(final CSharpParser.Constructor_declaratorContext declarator) {
+ private List extractParameterTypes(
+ final CSharpParser.Constructor_declaratorContext declarator) {
return extractParameterTypes(declarator.parameter_list());
}
- private List extractParameterTypes(final CSharpParser.Parameter_listContext parameterList) {
+ private List extractParameterTypes(
+ final CSharpParser.Parameter_listContext parameterList) {
final List paramTypes = new ArrayList<>();
if (parameterList == null || parameterList.fixed_parameters() == null) {
return paramTypes;
}
- for (final CSharpParser.Fixed_parameterContext param : parameterList.fixed_parameters()
- .fixed_parameter()) {
+ for (final CSharpParser.Fixed_parameterContext param :
+ parameterList.fixed_parameters().fixed_parameter()) {
if (param.type_() != null) {
paramTypes.add(param.type_().getText());
}
@@ -401,14 +417,14 @@ private List extractParameterTypes(final CSharpParser.Parameter_listCont
return paramTypes;
}
- private void addParameters(final MethodDataHandler methodData,
- final CSharpParser.Parameter_listContext parameterList) {
+ private void addParameters(
+ final MethodDataHandler methodData, final CSharpParser.Parameter_listContext parameterList) {
if (parameterList == null || parameterList.fixed_parameters() == null) {
return;
}
- for (final CSharpParser.Fixed_parameterContext param : parameterList.fixed_parameters()
- .fixed_parameter()) {
+ for (final CSharpParser.Fixed_parameterContext param :
+ parameterList.fixed_parameters().fixed_parameter()) {
final String paramType = param.type_() != null ? param.type_().getText() : "unknown";
String paramName = "";
if (param.identifier() != null) {
diff --git a/src/main/java/net/explorviz/code/analysis/listener/CommonFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/CommonFileDataListener.java
index 436b9a4..7b8d593 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/CommonFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/CommonFileDataListener.java
@@ -4,9 +4,7 @@
import org.antlr.v4.runtime.ParserRuleContext;
import org.antlr.v4.runtime.Token;
-/**
- * Common methods for file data listeners.
- */
+/** Common methods for file data listeners. */
public interface CommonFileDataListener {
String FILE_SIZE = "size";
String SLOC = "sloc";
@@ -69,11 +67,12 @@ default int getSloc(final org.antlr.v4.runtime.CommonTokenStream tokens) {
* Calculates the Source Lines of Code (SLOC) for a specific context by counting unique lines that
* contain tokens on the default channel (channel 0) within the range of the context.
*
- * @param ctx The parser rule context
+ * @param ctx The parser rule context
* @param tokens The token stream
* @return The number of lines containing code tokens within the context's range
*/
- default int getSloc(final ParserRuleContext ctx, final org.antlr.v4.runtime.CommonTokenStream tokens) {
+ default int getSloc(
+ final ParserRuleContext ctx, final org.antlr.v4.runtime.CommonTokenStream tokens) {
if (ctx == null || ctx.start == null || ctx.stop == null || tokens == null) {
return 0;
}
@@ -102,8 +101,11 @@ default int getSloc(final ParserRuleContext ctx, final org.antlr.v4.runtime.Comm
return codeLines.size();
}
- default String getClassPathFromFqn(final String fqn, final String fileExtension,
- final String currentFilePath, final String currentPackage) {
+ default String getClassPathFromFqn(
+ final String fqn,
+ final String fileExtension,
+ final String currentFilePath,
+ final String currentPackage) {
if (fqn == null || fqn.isEmpty()) {
return "unknown/file";
}
diff --git a/src/main/java/net/explorviz/code/analysis/listener/CppFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/CppFileDataListener.java
index 9073c7e..10c4aee 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/CppFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/CppFileDataListener.java
@@ -11,10 +11,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR Listener for extracting file data from C/C++ source code using the
- * CPP14 grammar.
- */
+/** ANTLR Listener for extracting file data from C/C++ source code using the CPP14 grammar. */
public class CppFileDataListener extends CPP14ParserBaseListener implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(CppFileDataListener.class);
@@ -24,8 +21,8 @@ public class CppFileDataListener extends CPP14ParserBaseListener implements Comm
private int functionCount = 0;
private int variableCount = 0;
- public CppFileDataListener(final CppFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public CppFileDataListener(
+ final CppFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -42,7 +39,8 @@ public void enterTranslationUnit(final CPP14Parser.TranslationUnitContext ctx) {
// Extract #include directives
extractIncludes();
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -55,10 +53,7 @@ public void exitTranslationUnit(final CPP14Parser.TranslationUnitContext ctx) {
addImportAndClassCountMetrics(fileDataHandler);
}
- /**
- * Scans (hidden-channel) tokens for #include directives and adds them as
- * imports.
- */
+ /** Scans (hidden-channel) tokens for #include directives and adds them as imports. */
private void extractIncludes() {
if (tokens == null) {
return;
@@ -80,9 +75,7 @@ private void extractIncludes() {
if (!includeName.isEmpty()) {
fileDataHandler.addImport(includeName);
- LOGGER.atTrace()
- .addArgument(includeName)
- .log("Include: {}");
+ LOGGER.atTrace().addArgument(includeName).log("Include: {}");
}
}
}
@@ -109,9 +102,7 @@ public void enterNamespaceDefinition(final CPP14Parser.NamespaceDefinitionContex
// Use the namespace as the package name
fileDataHandler.setPackageName(fileDataHandler.getCurrentNamespace());
- LOGGER.atTrace()
- .addArgument(namespaceName)
- .log("Namespace: {}");
+ LOGGER.atTrace().addArgument(namespaceName).log("Namespace: {}");
}
}
@@ -178,7 +169,8 @@ public void enterClassSpecifier(final CPP14Parser.ClassSpecifierContext ctx) {
extractBaseClasses(classHead.baseClause());
}
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(isStruct ? "Struct" : "Class")
.addArgument(className)
.addArgument(fqn)
@@ -188,7 +180,8 @@ public void enterClassSpecifier(final CPP14Parser.ClassSpecifierContext ctx) {
@Override
public void exitClassSpecifier(final CPP14Parser.ClassSpecifierContext ctx) {
- if (ctx.classHead() != null && ctx.classHead().classHeadName() != null
+ if (ctx.classHead() != null
+ && ctx.classHead().classHeadName() != null
&& ctx.classHead().classHeadName().className() != null) {
fileDataHandler.leaveClass();
}
@@ -216,9 +209,7 @@ public void enterEnumSpecifier(final CPP14Parser.EnumSpecifierContext ctx) {
classData.addMetric(LINE_COUNT, String.valueOf(calculateLoc(ctx)));
}
- LOGGER.atTrace()
- .addArgument(enumName)
- .log("Enum: {}");
+ LOGGER.atTrace().addArgument(enumName).log("Enum: {}");
}
}
@@ -276,9 +267,8 @@ public void enterFunctionDefinition(final CPP14Parser.FunctionDefinitionContext
if (classData != null) {
// Check if it is a constructor (name matches class name)
final String currentClassFqn = fileDataHandler.getCurrentClassFqnOrNull();
- final String currentClassName = currentClassFqn != null
- ? getSimpleName(currentClassFqn)
- : null;
+ final String currentClassName =
+ currentClassFqn != null ? getSimpleName(currentClassFqn) : null;
final MethodDataHandler methodData;
if (functionName.equals(currentClassName)) {
@@ -306,9 +296,7 @@ public void enterFunctionDefinition(final CPP14Parser.FunctionDefinitionContext
methodData.addMetric(SLOC, String.valueOf(getSloc(ctx, tokens)));
methodData.addMetric(LINE_COUNT, String.valueOf(functionLoc));
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Class method: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Class method: {}");
}
} else {
// Global function (or namespace-level function)
@@ -328,9 +316,7 @@ public void enterFunctionDefinition(final CPP14Parser.FunctionDefinitionContext
addFunctionParameters(methodHandler, ctx.declarator());
- LOGGER.atTrace()
- .addArgument(qualifiedName)
- .log("Out-of-class method definition: {}");
+ LOGGER.atTrace().addArgument(qualifiedName).log("Out-of-class method definition: {}");
} else {
final var methodHandler = fileDataHandler.addGlobalFunction(functionName, returnType);
@@ -342,9 +328,7 @@ public void enterFunctionDefinition(final CPP14Parser.FunctionDefinitionContext
addFunctionParameters(methodHandler, ctx.declarator());
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Global function: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Global function: {}");
}
}
}
@@ -371,8 +355,8 @@ public void enterMemberDeclaration(final CPP14Parser.MemberDeclarationContext ct
final String declaredType = extractTypeFromDeclSpecifierSeq(ctx.declSpecifierSeq());
- for (final CPP14Parser.MemberDeclaratorContext memberDecl : ctx.memberDeclaratorList()
- .memberDeclarator()) {
+ for (final CPP14Parser.MemberDeclaratorContext memberDecl :
+ ctx.memberDeclaratorList().memberDeclarator()) {
if (memberDecl.declarator() == null) {
continue;
}
@@ -391,8 +375,8 @@ public void enterMemberDeclaration(final CPP14Parser.MemberDeclarationContext ct
if (ctx.declSpecifierSeq().getText().contains("virtual")) {
modifiers.add("virtual");
}
- if (memberDecl.pureSpecifier() != null || (memberDecl.getText() != null
- && memberDecl.getText().contains("=0"))) {
+ if (memberDecl.pureSpecifier() != null
+ || (memberDecl.getText() != null && memberDecl.getText().contains("=0"))) {
modifiers.add("pure");
}
for (final String modifier : modifiers) {
@@ -419,9 +403,7 @@ public void enterAccessSpecifier(final CPP14Parser.AccessSpecifierContext ctx) {
final var classData = fileDataHandler.getCurrentClassData();
if (classData != null) {
final String accessModifier = ctx.getText();
- LOGGER.atTrace()
- .addArgument(accessModifier)
- .log("Access specifier: {}");
+ LOGGER.atTrace().addArgument(accessModifier).log("Access specifier: {}");
}
}
@@ -461,8 +443,8 @@ private void extractBaseClasses(final CPP14Parser.BaseClauseContext baseClause)
return;
}
- for (final CPP14Parser.BaseSpecifierContext baseSpec : baseClause.baseSpecifierList()
- .baseSpecifier()) {
+ for (final CPP14Parser.BaseSpecifierContext baseSpec :
+ baseClause.baseSpecifierList().baseSpecifier()) {
if (baseSpec.baseTypeSpecifier() != null
&& baseSpec.baseTypeSpecifier().classOrDeclType() != null) {
final String baseClassName = baseSpec.baseTypeSpecifier().classOrDeclType().getText();
@@ -471,9 +453,7 @@ private void extractBaseClasses(final CPP14Parser.BaseClauseContext baseClause)
}
}
- /**
- * Extract the function name from a declarator, handling nested declarators.
- */
+ /** Extract the function name from a declarator, handling nested declarators. */
private String extractFunctionName(final CPP14Parser.DeclaratorContext ctx) {
if (ctx.pointerDeclarator() != null) {
return extractFunctionNameFromPointerDeclarator(ctx.pointerDeclarator());
@@ -534,12 +514,13 @@ private String extractIdExpressionName(final CPP14Parser.IdExpressionContext ctx
}
/**
- * Extract the fully qualified function name (including class prefix for
- * out-of-class definitions).
+ * Extract the fully qualified function name (including class prefix for out-of-class
+ * definitions).
*/
private String extractQualifiedFunctionName(final CPP14Parser.DeclaratorContext ctx) {
if (ctx.pointerDeclarator() != null && ctx.pointerDeclarator().noPointerDeclarator() != null) {
- final CPP14Parser.NoPointerDeclaratorContext noPtr = ctx.pointerDeclarator().noPointerDeclarator();
+ final CPP14Parser.NoPointerDeclaratorContext noPtr =
+ ctx.pointerDeclarator().noPointerDeclarator();
if (noPtr.declaratorId() != null && noPtr.declaratorId().idExpression() != null) {
return noPtr.declaratorId().idExpression().getText();
}
@@ -550,8 +531,7 @@ private String extractQualifiedFunctionName(final CPP14Parser.DeclaratorContext
return null;
}
- private String extractQualifiedFromNoPointer(
- final CPP14Parser.NoPointerDeclaratorContext ctx) {
+ private String extractQualifiedFromNoPointer(final CPP14Parser.NoPointerDeclaratorContext ctx) {
if (ctx.declaratorId() != null && ctx.declaratorId().idExpression() != null) {
return ctx.declaratorId().idExpression().getText();
}
@@ -561,9 +541,7 @@ private String extractQualifiedFromNoPointer(
return null;
}
- /**
- * Extract a simple declarator name for fields.
- */
+ /** Extract a simple declarator name for fields. */
private String extractDeclaratorName(final CPP14Parser.DeclaratorContext ctx) {
if (ctx.pointerDeclarator() != null) {
return extractDeclaratorNameFromPointer(ctx.pointerDeclarator());
@@ -574,8 +552,7 @@ private String extractDeclaratorName(final CPP14Parser.DeclaratorContext ctx) {
return null;
}
- private String extractDeclaratorNameFromPointer(
- final CPP14Parser.PointerDeclaratorContext ctx) {
+ private String extractDeclaratorNameFromPointer(final CPP14Parser.PointerDeclaratorContext ctx) {
if (ctx.noPointerDeclarator() != null) {
return extractNameFromNoPointerDeclarator(ctx.noPointerDeclarator());
}
@@ -583,11 +560,10 @@ private String extractDeclaratorNameFromPointer(
}
/**
- * Extract the type from a declSpecifierSeq context, skipping cv-qualifiers
- * (const, volatile) and non-type specifiers.
+ * Extract the type from a declSpecifierSeq context, skipping cv-qualifiers (const, volatile) and
+ * non-type specifiers.
*/
- private String extractTypeFromDeclSpecifierSeq(
- final CPP14Parser.DeclSpecifierSeqContext ctx) {
+ private String extractTypeFromDeclSpecifierSeq(final CPP14Parser.DeclSpecifierSeqContext ctx) {
if (ctx == null) {
return "void";
}
@@ -607,11 +583,17 @@ private String extractTypeFromDeclSpecifierSeq(
} else {
final String text = declSpec.getText();
// Skip storage class specifiers and function specifiers for type name
- if (!"static".equals(text) && !"extern".equals(text) && !"inline".equals(text)
- && !"virtual".equals(text) && !"explicit".equals(text)
- && !"friend".equals(text) && !"typedef".equals(text)
- && !"constexpr".equals(text) && !"mutable".equals(text)
- && !"register".equals(text) && !"thread_local".equals(text)) {
+ if (!"static".equals(text)
+ && !"extern".equals(text)
+ && !"inline".equals(text)
+ && !"virtual".equals(text)
+ && !"explicit".equals(text)
+ && !"friend".equals(text)
+ && !"typedef".equals(text)
+ && !"constexpr".equals(text)
+ && !"mutable".equals(text)
+ && !"register".equals(text)
+ && !"thread_local".equals(text)) {
if (typeBuilder.length() > 0) {
typeBuilder.append(" ");
}
@@ -625,8 +607,8 @@ private String extractTypeFromDeclSpecifierSeq(
}
/**
- * Extract the actual data type from a typeSpecifier, filtering out
- * cv-qualifiers (const, volatile).
+ * Extract the actual data type from a typeSpecifier, filtering out cv-qualifiers (const,
+ * volatile).
*/
private String extractActualType(final CPP14Parser.TypeSpecifierContext typeSpec) {
// typeSpecifier -> trailingTypeSpecifier | classSpecifier | enumSpecifier
@@ -647,18 +629,16 @@ private String extractActualType(final CPP14Parser.TypeSpecifierContext typeSpec
return typeSpec.getText();
}
- /**
- * Extract parameter types from a declarator's parameter list.
- */
+ /** Extract parameter types from a declarator's parameter list. */
private List extractParameterTypes(final CPP14Parser.DeclaratorContext ctx) {
final List paramTypes = new ArrayList<>();
final CPP14Parser.ParametersAndQualifiersContext params = findParametersAndQualifiers(ctx);
- if (params != null && params.parameterDeclarationClause() != null
+ if (params != null
+ && params.parameterDeclarationClause() != null
&& params.parameterDeclarationClause().parameterDeclarationList() != null) {
- for (final CPP14Parser.ParameterDeclarationContext param : params.parameterDeclarationClause()
- .parameterDeclarationList()
- .parameterDeclaration()) {
+ for (final CPP14Parser.ParameterDeclarationContext param :
+ params.parameterDeclarationClause().parameterDeclarationList().parameterDeclaration()) {
if (param.declSpecifierSeq() != null) {
String type = extractTypeFromDeclSpecifierSeq(param.declSpecifierSeq());
type += extractPointerSuffix(param);
@@ -670,9 +650,7 @@ private List extractParameterTypes(final CPP14Parser.DeclaratorContext c
return paramTypes;
}
- /**
- * Find the parametersAndQualifiers context within a declarator.
- */
+ /** Find the parametersAndQualifiers context within a declarator. */
private CPP14Parser.ParametersAndQualifiersContext findParametersAndQualifiers(
final CPP14Parser.DeclaratorContext ctx) {
if (ctx.pointerDeclarator() != null) {
@@ -698,14 +676,12 @@ private CPP14Parser.ParametersAndQualifiersContext findParamsInNoPointerDeclarat
return null;
}
- /**
- * Add function modifiers (virtual, static, inline, etc.) to the method handler.
- */
- private void addFunctionModifiers(final MethodDataHandler methodData,
- final CPP14Parser.FunctionDefinitionContext ctx) {
+ /** Add function modifiers (virtual, static, inline, etc.) to the method handler. */
+ private void addFunctionModifiers(
+ final MethodDataHandler methodData, final CPP14Parser.FunctionDefinitionContext ctx) {
if (ctx.declSpecifierSeq() != null) {
- for (final CPP14Parser.DeclSpecifierContext declSpec : ctx.declSpecifierSeq()
- .declSpecifier()) {
+ for (final CPP14Parser.DeclSpecifierContext declSpec :
+ ctx.declSpecifierSeq().declSpecifier()) {
if (declSpec.functionSpecifier() != null) {
methodData.addModifier(declSpec.functionSpecifier().getText());
} else if (declSpec.storageClassSpecifier() != null) {
@@ -716,28 +692,27 @@ private void addFunctionModifiers(final MethodDataHandler methodData,
// Check for virtual specifiers (override, final)
if (ctx.virtualSpecifierSeq() != null) {
- for (final CPP14Parser.VirtualSpecifierContext virtSpec : ctx.virtualSpecifierSeq()
- .virtualSpecifier()) {
+ for (final CPP14Parser.VirtualSpecifierContext virtSpec :
+ ctx.virtualSpecifierSeq().virtualSpecifier()) {
methodData.addModifier(virtSpec.getText());
}
}
}
- /**
- * Add function parameters to the method handler.
- */
- private void addFunctionParameters(final MethodDataHandler methodData,
- final CPP14Parser.DeclaratorContext ctx) {
+ /** Add function parameters to the method handler. */
+ private void addFunctionParameters(
+ final MethodDataHandler methodData, final CPP14Parser.DeclaratorContext ctx) {
final CPP14Parser.ParametersAndQualifiersContext params = findParametersAndQualifiers(ctx);
- if (params != null && params.parameterDeclarationClause() != null
+ if (params != null
+ && params.parameterDeclarationClause() != null
&& params.parameterDeclarationClause().parameterDeclarationList() != null) {
- for (final CPP14Parser.ParameterDeclarationContext param : params.parameterDeclarationClause()
- .parameterDeclarationList()
- .parameterDeclaration()) {
- String paramType = param.declSpecifierSeq() != null
- ? extractTypeFromDeclSpecifierSeq(param.declSpecifierSeq())
- : "unknown";
+ for (final CPP14Parser.ParameterDeclarationContext param :
+ params.parameterDeclarationClause().parameterDeclarationList().parameterDeclaration()) {
+ String paramType =
+ param.declSpecifierSeq() != null
+ ? extractTypeFromDeclSpecifierSeq(param.declSpecifierSeq())
+ : "unknown";
paramType += extractPointerSuffix(param);
paramType += extractArraySuffix(param);
String paramName = "";
@@ -753,15 +728,15 @@ private void addFunctionParameters(final MethodDataHandler methodData,
}
}
- /**
- * Extract const and volatile modifiers from a parameter declaration.
- */
- private List extractParameterModifiers(final CPP14Parser.ParameterDeclarationContext param) {
+ /** Extract const and volatile modifiers from a parameter declaration. */
+ private List extractParameterModifiers(
+ final CPP14Parser.ParameterDeclarationContext param) {
final List modifiers = new ArrayList<>();
// Check declSpecifierSeq for const/volatile
if (param.declSpecifierSeq() != null) {
- for (final CPP14Parser.DeclSpecifierContext declSpec : param.declSpecifierSeq().declSpecifier()) {
+ for (final CPP14Parser.DeclSpecifierContext declSpec :
+ param.declSpecifierSeq().declSpecifier()) {
if (declSpec.typeSpecifier() != null) {
if (declSpec.typeSpecifier().trailingTypeSpecifier() != null) {
final var trailing = declSpec.typeSpecifier().trailingTypeSpecifier();
@@ -779,7 +754,8 @@ private List extractParameterModifiers(final CPP14Parser.ParameterDeclar
if (ptrDecl.pointerOperator() != null) {
for (final CPP14Parser.PointerOperatorContext ptrOp : ptrDecl.pointerOperator()) {
if (ptrOp.cvQualifierSeq() != null && ptrOp.cvQualifierSeq().cvQualifier() != null) {
- for (final CPP14Parser.CvQualifierContext cvQual : ptrOp.cvQualifierSeq().cvQualifier()) {
+ for (final CPP14Parser.CvQualifierContext cvQual :
+ ptrOp.cvQualifierSeq().cvQualifier()) {
modifiers.add(cvQual.getText());
}
}
@@ -791,8 +767,8 @@ private List extractParameterModifiers(final CPP14Parser.ParameterDeclar
}
/**
- * Check if a parameter declaration contains array brackets (e.g. int arr[])
- * and return "[]" if so, otherwise empty string.
+ * Check if a parameter declaration contains array brackets (e.g. int arr[]) and return "[]" if
+ * so, otherwise empty string.
*/
private String extractArraySuffix(final CPP14Parser.ParameterDeclarationContext param) {
// Check the declarator for array brackets: noPointerDeclarator [ ]
@@ -810,8 +786,8 @@ private String extractArraySuffix(final CPP14Parser.ParameterDeclarationContext
}
/**
- * Check if a parameter declaration contains pointer operators (e.g. int *p)
- * and return the pointer suffix ("*", "&", "&&") if so.
+ * Check if a parameter declaration contains pointer operators (e.g. int *p) and return the
+ * pointer suffix ("*", "&", "&&") if so.
*/
private String extractPointerSuffix(final CPP14Parser.ParameterDeclarationContext param) {
if (param.declarator() != null && param.declarator().pointerDeclarator() != null) {
@@ -833,9 +809,7 @@ private String extractPointerSuffix(final CPP14Parser.ParameterDeclarationContex
return "";
}
- /**
- * Check if a declarator contains array brackets (LeftBracket / RightBracket).
- */
+ /** Check if a declarator contains array brackets (LeftBracket / RightBracket). */
private boolean hasArrayBrackets(final CPP14Parser.DeclaratorContext ctx) {
if (ctx.pointerDeclarator() != null && ctx.pointerDeclarator().noPointerDeclarator() != null) {
return hasArrayBracketsInNoPointer(ctx.pointerDeclarator().noPointerDeclarator());
@@ -846,8 +820,7 @@ private boolean hasArrayBrackets(final CPP14Parser.DeclaratorContext ctx) {
return false;
}
- private boolean hasArrayBracketsInNoPointer(
- final CPP14Parser.NoPointerDeclaratorContext ctx) {
+ private boolean hasArrayBracketsInNoPointer(final CPP14Parser.NoPointerDeclaratorContext ctx) {
// noPointerDeclarator: ... | noPointerDeclarator LeftBracket ... RightBracket
if (ctx.LeftBracket() != null) {
return true;
@@ -858,9 +831,7 @@ private boolean hasArrayBracketsInNoPointer(
return false;
}
- /**
- * Get comment lines of code by counting tokens on the hidden channel.
- */
+ /** Get comment lines of code by counting tokens on the hidden channel. */
@Override
public void enterSimpleDeclaration(final CPP14Parser.SimpleDeclarationContext ctx) {
if (ctx.initDeclaratorList() != null) {
diff --git a/src/main/java/net/explorviz/code/analysis/listener/GoFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/GoFileDataListener.java
index 1553ddf..91c9f3e 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/GoFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/GoFileDataListener.java
@@ -11,9 +11,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR listener for extracting file data from Go source code.
- */
+/** ANTLR listener for extracting file data from Go source code. */
public class GoFileDataListener extends GoParserBaseListener implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(GoFileDataListener.class);
@@ -23,8 +21,8 @@ public class GoFileDataListener extends GoParserBaseListener implements CommonFi
private int functionCount = 0;
private int variableCount = 0;
- public GoFileDataListener(final GoFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public GoFileDataListener(
+ final GoFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -37,7 +35,8 @@ public void enterSourceFile(final GoParser.SourceFileContext ctx) {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -140,7 +139,8 @@ public void enterFunctionDecl(final GoParser.FunctionDeclContext ctx) {
methodHandler.addMetric(SLOC, String.valueOf(getSloc(ctx, tokens)));
methodHandler.addMetric(LINE_COUNT, String.valueOf(calculateLoc(ctx)));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(functionName)
.addArgument(paramTypes.size())
.log("Function: {} ({} params)");
@@ -159,7 +159,8 @@ public void enterMethodDecl(final GoParser.MethodDeclContext ctx) {
final ClassDataHandler classData = fileDataHandler.getClassData(fqn);
if (classData == null) {
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(methodName)
.addArgument(receiverType)
.log("Method {} on unknown type {}");
@@ -216,8 +217,8 @@ private List extractParameterTypes(final GoParser.SignatureContext signa
return paramTypes;
}
- private void addSignatureParameters(final MethodDataHandler methodData,
- final GoParser.SignatureContext signature) {
+ private void addSignatureParameters(
+ final MethodDataHandler methodData, final GoParser.SignatureContext signature) {
if (signature.parameters() == null) {
return;
}
diff --git a/src/main/java/net/explorviz/code/analysis/listener/JavaFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/JavaFileDataListener.java
index 24990ea..ac9b150 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/JavaFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/JavaFileDataListener.java
@@ -14,9 +14,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR Listener-based implementation for extracting file data from Java source code.
- */
+/** ANTLR Listener-based implementation for extracting file data from Java source code. */
public class JavaFileDataListener extends JavaParserBaseListener implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(JavaFileDataListener.class);
@@ -30,7 +28,8 @@ public class JavaFileDataListener extends JavaParserBaseListener implements Comm
private int functionCount = 0;
private int variableCount = 0;
- public JavaFileDataListener(final JavaFileDataHandler fileDataHandler,
+ public JavaFileDataListener(
+ final JavaFileDataHandler fileDataHandler,
final boolean wildcardImportProperty,
final org.antlr.v4.runtime.CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
@@ -48,7 +47,8 @@ public void enterCompilationUnit(final JavaParser.CompilationUnitContext ctx) {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -108,14 +108,23 @@ public void enterClassDeclaration(final JavaParser.ClassDeclarationContext ctx)
if (ctx.typeType() != null) {
final String superClassFqn = resolveTypeName(ctx.typeType().getText());
- fileDataHandler.getCurrentClassData()
- .setSuperClass(getClassPathFromFqn(superClassFqn, ".java", fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(superClassFqn));
+ fileDataHandler
+ .getCurrentClassData()
+ .setSuperClass(
+ getClassPathFromFqn(
+ superClassFqn,
+ ".java",
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(superClassFqn));
}
if (ctx.IMPLEMENTS() != null && !ctx.typeList().isEmpty()) {
for (final JavaParser.TypeTypeContext typeCtx : ctx.typeList(0).typeType()) {
- fileDataHandler.getCurrentClassData().addImplementedInterface(resolveTypeName(typeCtx.getText()));
+ fileDataHandler
+ .getCurrentClassData()
+ .addImplementedInterface(resolveTypeName(typeCtx.getText()));
}
}
}
@@ -139,7 +148,9 @@ public void enterInterfaceDeclaration(final JavaParser.InterfaceDeclarationConte
if (ctx.EXTENDS() != null && !ctx.typeList().isEmpty()) {
for (final JavaParser.TypeTypeContext typeCtx : ctx.typeList(0).typeType()) {
- fileDataHandler.getCurrentClassData().addImplementedInterface(resolveTypeName(typeCtx.getText()));
+ fileDataHandler
+ .getCurrentClassData()
+ .addImplementedInterface(resolveTypeName(typeCtx.getText()));
}
}
}
@@ -186,20 +197,22 @@ public void enterRecordDeclaration(final JavaParser.RecordDeclarationContext ctx
if (ctx.IMPLEMENTS() != null && ctx.typeList() != null) {
for (final JavaParser.TypeTypeContext typeCtx : ctx.typeList().typeType()) {
- fileDataHandler.getCurrentClassData()
+ fileDataHandler
+ .getCurrentClassData()
.addImplementedInterface(resolveTypeName(typeCtx.getText()));
}
}
if (ctx.recordHeader() != null && ctx.recordHeader().recordComponentList() != null) {
- for (final JavaParser.RecordComponentContext component : ctx.recordHeader()
- .recordComponentList().recordComponent()) {
+ for (final JavaParser.RecordComponentContext component :
+ ctx.recordHeader().recordComponentList().recordComponent()) {
if (component.identifier() == null || component.typeType() == null) {
continue;
}
final String fieldName = component.identifier().getText();
final String fieldType = resolveTypeName(component.typeType().getText());
- fileDataHandler.getCurrentClassData()
+ fileDataHandler
+ .getCurrentClassData()
.addField(fieldName, fieldType, List.of("private", "final"));
variableCount++;
}
@@ -219,12 +232,13 @@ public void enterCompactConstructorDeclaration(
}
final String constructorName = ctx.identifier().getText();
- final String constructorFqn = fileDataHandler.getCurrentClassFqn() + "." + constructorName + "#";
+ final String constructorFqn =
+ fileDataHandler.getCurrentClassFqn() + "." + constructorName + "#";
fileDataHandler.enterMethod(constructorFqn);
functionCount++;
- final MethodDataHandler constructor = fileDataHandler.getCurrentClassData()
- .addConstructor(constructorName, constructorFqn);
+ final MethodDataHandler constructor =
+ fileDataHandler.getCurrentClassData().addConstructor(constructorName, constructorFqn);
if (ctx.modifier() != null) {
for (final JavaParser.ModifierContext modCtx : ctx.modifier()) {
final String modText = modCtx.getText();
@@ -268,8 +282,7 @@ public void enterAnnotationTypeDeclaration(
}
@Override
- public void exitAnnotationTypeDeclaration(
- final JavaParser.AnnotationTypeDeclarationContext ctx) {
+ public void exitAnnotationTypeDeclaration(final JavaParser.AnnotationTypeDeclarationContext ctx) {
fileDataHandler.leaveClass();
}
@@ -291,8 +304,8 @@ public void enterAnnotationMethodRest(final JavaParser.AnnotationMethodRestConte
returnType = resolveTypeName(elementRest.typeType().getText());
}
- final MethodDataHandler methodData = fileDataHandler.getCurrentClassData()
- .addMethod(methodName, methodFqn, returnType);
+ final MethodDataHandler methodData =
+ fileDataHandler.getCurrentClassData().addMethod(methodName, methodFqn, returnType);
if (ctx.start != null && ctx.stop != null) {
methodData.setLines(ctx.start.getLine(), ctx.stop.getLine());
}
@@ -334,7 +347,8 @@ public void enterEnumConstant(final JavaParser.EnumConstantContext ctx) {
@Override
public void enterFieldDeclaration(final JavaParser.FieldDeclarationContext ctx) {
- if (ctx.variableDeclarators() == null || ctx.typeType() == null
+ if (ctx.variableDeclarators() == null
+ || ctx.typeType() == null
|| !fileDataHandler.isInClassContext()) {
return;
}
@@ -342,7 +356,8 @@ public void enterFieldDeclaration(final JavaParser.FieldDeclarationContext ctx)
final String fieldType = resolveTypeName(ctx.typeType().getText());
final List modifiers = extractMemberModifiers(ctx);
- for (final JavaParser.VariableDeclaratorContext varCtx : ctx.variableDeclarators().variableDeclarator()) {
+ for (final JavaParser.VariableDeclaratorContext varCtx :
+ ctx.variableDeclarators().variableDeclarator()) {
final String fieldName = varCtx.variableDeclaratorId().identifier().getText();
final String fieldFqn = fileDataHandler.getCurrentClassFqn() + "." + fieldName;
fileDataHandler.enterMethod(fieldFqn);
@@ -354,7 +369,8 @@ public void enterFieldDeclaration(final JavaParser.FieldDeclarationContext ctx)
@Override
public void enterMethodDeclaration(final JavaParser.MethodDeclarationContext ctx) {
- if (ctx.identifier() == null || ctx.formalParameters() == null
+ if (ctx.identifier() == null
+ || ctx.formalParameters() == null
|| !fileDataHandler.isInClassContext()) {
return;
}
@@ -362,8 +378,8 @@ public void enterMethodDeclaration(final JavaParser.MethodDeclarationContext ctx
final String methodName = ctx.identifier().getText();
final List parameterTypes = extractParameterTypes(ctx.formalParameters());
final String parameterHash = Verification.parameterHash(parameterTypes);
- final String methodFqn = fileDataHandler.getCurrentClassFqn() + "." + methodName
- + "#" + parameterHash;
+ final String methodFqn =
+ fileDataHandler.getCurrentClassFqn() + "." + methodName + "#" + parameterHash;
fileDataHandler.enterMethod(methodFqn);
functionCount++;
@@ -373,8 +389,8 @@ public void enterMethodDeclaration(final JavaParser.MethodDeclarationContext ctx
returnType = resolveTypeName(ctx.typeTypeOrVoid().getText());
}
- final MethodDataHandler methodData = fileDataHandler.getCurrentClassData()
- .addMethod(methodName, methodFqn, returnType);
+ final MethodDataHandler methodData =
+ fileDataHandler.getCurrentClassData().addMethod(methodName, methodFqn, returnType);
for (final String modifier : extractMemberModifiers(ctx)) {
methodData.addModifier(modifier);
@@ -402,7 +418,8 @@ public void enterInterfaceMethodDeclaration(
return;
}
- final JavaParser.InterfaceCommonBodyDeclarationContext body = ctx.interfaceCommonBodyDeclaration();
+ final JavaParser.InterfaceCommonBodyDeclarationContext body =
+ ctx.interfaceCommonBodyDeclaration();
if (body.identifier() == null || body.formalParameters() == null) {
return;
}
@@ -410,8 +427,8 @@ public void enterInterfaceMethodDeclaration(
final String methodName = body.identifier().getText();
final List parameterTypes = extractParameterTypes(body.formalParameters());
final String parameterHash = Verification.parameterHash(parameterTypes);
- final String methodFqn = fileDataHandler.getCurrentClassFqn() + "." + methodName
- + "#" + parameterHash;
+ final String methodFqn =
+ fileDataHandler.getCurrentClassFqn() + "." + methodName + "#" + parameterHash;
fileDataHandler.enterMethod(methodFqn);
functionCount++;
@@ -421,8 +438,8 @@ public void enterInterfaceMethodDeclaration(
returnType = resolveTypeName(body.typeTypeOrVoid().getText());
}
- final MethodDataHandler methodData = fileDataHandler.getCurrentClassData()
- .addMethod(methodName, methodFqn, returnType);
+ final MethodDataHandler methodData =
+ fileDataHandler.getCurrentClassData().addMethod(methodName, methodFqn, returnType);
for (final String modifier : extractInterfaceMethodModifiers(ctx)) {
methodData.addModifier(modifier);
@@ -446,7 +463,8 @@ public void exitInterfaceMethodDeclaration(
@Override
public void enterConstructorDeclaration(final JavaParser.ConstructorDeclarationContext ctx) {
- if (ctx.identifier() == null || ctx.formalParameters() == null
+ if (ctx.identifier() == null
+ || ctx.formalParameters() == null
|| !fileDataHandler.isInClassContext()) {
return;
}
@@ -454,14 +472,14 @@ public void enterConstructorDeclaration(final JavaParser.ConstructorDeclarationC
final String constructorName = ctx.identifier().getText();
final List parameterTypes = extractParameterTypes(ctx.formalParameters());
final String parameterHash = Verification.parameterHash(parameterTypes);
- final String constructorFqn = fileDataHandler.getCurrentClassFqn() + "." + constructorName
- + "#" + parameterHash;
+ final String constructorFqn =
+ fileDataHandler.getCurrentClassFqn() + "." + constructorName + "#" + parameterHash;
fileDataHandler.enterMethod(constructorFqn);
functionCount++;
- final MethodDataHandler constructor = fileDataHandler.getCurrentClassData()
- .addConstructor(constructorName, constructorFqn);
+ final MethodDataHandler constructor =
+ fileDataHandler.getCurrentClassData().addConstructor(constructorName, constructorFqn);
for (final String modifier : extractMemberModifiers(ctx)) {
constructor.addModifier(modifier);
@@ -511,7 +529,8 @@ private List extends ParserRuleContext> getTypeModifiers(final ParserRuleConte
}
if (parent instanceof JavaParser.MemberDeclarationContext) {
final ParseTree grandParent = parent.getParent();
- if (grandParent instanceof JavaParser.ClassBodyDeclarationContext classBodyDeclarationContext) {
+ if (grandParent
+ instanceof JavaParser.ClassBodyDeclarationContext classBodyDeclarationContext) {
return classBodyDeclarationContext.modifier();
}
}
@@ -537,14 +556,15 @@ private List extends ParserRuleContext> getMemberModifiers(final ParserRuleCon
if (parent instanceof JavaParser.ClassBodyDeclarationContext classBodyDeclarationContext) {
return classBodyDeclarationContext.modifier();
}
- if (parent instanceof JavaParser.InterfaceBodyDeclarationContext interfaceBodyDeclarationContext) {
+ if (parent
+ instanceof JavaParser.InterfaceBodyDeclarationContext interfaceBodyDeclarationContext) {
return interfaceBodyDeclarationContext.modifier();
}
return List.of();
}
- private boolean hasModifier(final List extends ParserRuleContext> modifiers,
- final String modifier) {
+ private boolean hasModifier(
+ final List extends ParserRuleContext> modifiers, final String modifier) {
if (modifiers == null) {
return false;
}
@@ -595,8 +615,8 @@ private List extractParameterTypes(final JavaParser.FormalParametersCont
return parameterTypes;
}
- private void addParameters(final MethodDataHandler methodData,
- final JavaParser.FormalParametersContext ctx) {
+ private void addParameters(
+ final MethodDataHandler methodData, final JavaParser.FormalParametersContext ctx) {
if (ctx == null) {
return;
}
@@ -672,10 +692,26 @@ private String resolveTypeName(final String typeName) {
return wildcardImport + "." + baseType + genericsPart + arraySuffix;
}
- final List javaLangTypes = Arrays.asList(
- "String", "Integer", "Long", "Double", "Float", "Boolean", "Character",
- "Byte", "Short", "Object", "Class", "System", "Math", "Thread",
- "Runnable", "Exception", "RuntimeException", "Error");
+ final List javaLangTypes =
+ Arrays.asList(
+ "String",
+ "Integer",
+ "Long",
+ "Double",
+ "Float",
+ "Boolean",
+ "Character",
+ "Byte",
+ "Short",
+ "Object",
+ "Class",
+ "System",
+ "Math",
+ "Thread",
+ "Runnable",
+ "Exception",
+ "RuntimeException",
+ "Error");
if (javaLangTypes.contains(baseType)) {
return "java.lang." + baseType + genericsPart + arraySuffix;
}
@@ -698,8 +734,9 @@ public void enterLocalVariableDeclaration(final JavaParser.LocalVariableDeclarat
}
private boolean isPrimitiveType(final String type) {
- return Arrays.asList("byte", "short", "int", "long", "float", "double",
- "boolean", "char", "void").contains(type);
+ return Arrays.asList(
+ "byte", "short", "int", "long", "float", "double", "boolean", "char", "void")
+ .contains(type);
}
private int getCloc(final ParserRuleContext ctx) {
diff --git a/src/main/java/net/explorviz/code/analysis/listener/KotlinFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/KotlinFileDataListener.java
index d844bfc..20953b4 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/KotlinFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/KotlinFileDataListener.java
@@ -11,10 +11,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR listener for extracting file data from Kotlin source code.
- */
-public class KotlinFileDataListener extends KotlinParserBaseListener implements CommonFileDataListener {
+/** ANTLR listener for extracting file data from Kotlin source code. */
+public class KotlinFileDataListener extends KotlinParserBaseListener
+ implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(KotlinFileDataListener.class);
@@ -24,8 +23,8 @@ public class KotlinFileDataListener extends KotlinParserBaseListener implements
private int variableCount = 0;
private int functionDepth = 0;
- public KotlinFileDataListener(final KotlinFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public KotlinFileDataListener(
+ final KotlinFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -57,7 +56,8 @@ private void addFileMetrics() {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -118,8 +118,8 @@ public void enterClassDeclaration(final KotlinParser.ClassDeclarationContext ctx
addDelegationRelations(classData, ctx);
}
- private void addDelegationRelations(final ClassDataHandler classData,
- final KotlinParser.ClassDeclarationContext ctx) {
+ private void addDelegationRelations(
+ final ClassDataHandler classData, final KotlinParser.ClassDeclarationContext ctx) {
if (ctx.delegationSpecifiers() == null) {
return;
}
@@ -153,9 +153,16 @@ private String extractDelegationType(final KotlinParser.DelegationSpecifierConte
return null;
}
- private void addFormattedSuperClass(final ClassDataHandler classData, final String superClassFqn) {
- classData.setSuperClass(getClassPathFromFqn(superClassFqn, ".kt", fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(superClassFqn));
+ private void addFormattedSuperClass(
+ final ClassDataHandler classData, final String superClassFqn) {
+ classData.setSuperClass(
+ getClassPathFromFqn(
+ superClassFqn,
+ ".kt",
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(superClassFqn));
}
@Override
@@ -184,8 +191,8 @@ public void enterObjectDeclaration(final KotlinParser.ObjectDeclarationContext c
}
}
- private void addObjectDelegationRelations(final ClassDataHandler classData,
- final KotlinParser.ObjectDeclarationContext ctx) {
+ private void addObjectDelegationRelations(
+ final ClassDataHandler classData, final KotlinParser.ObjectDeclarationContext ctx) {
if (ctx.delegationSpecifiers() == null) {
return;
}
@@ -216,9 +223,8 @@ public void exitObjectDeclaration(final KotlinParser.ObjectDeclarationContext ct
@Override
public void enterCompanionObject(final KotlinParser.CompanionObjectContext ctx) {
- final String companionName = ctx.simpleIdentifier() != null
- ? ctx.simpleIdentifier().getText()
- : "Companion";
+ final String companionName =
+ ctx.simpleIdentifier() != null ? ctx.simpleIdentifier().getText() : "Companion";
final String fqn = fileDataHandler.buildFqn(companionName);
fileDataHandler.enterClass(companionName, fqn);
@@ -255,14 +261,15 @@ public void enterPropertyDeclaration(final KotlinParser.PropertyDeclarationConte
}
if (ctx.multiVariableDeclaration() != null) {
- for (final KotlinParser.VariableDeclarationContext variableDecl : ctx.multiVariableDeclaration()
- .variableDeclaration()) {
+ for (final KotlinParser.VariableDeclarationContext variableDecl :
+ ctx.multiVariableDeclaration().variableDeclaration()) {
countVariableDeclaration(variableDecl);
}
}
}
- private void countVariableDeclaration(final KotlinParser.VariableDeclarationContext variableDecl) {
+ private void countVariableDeclaration(
+ final KotlinParser.VariableDeclarationContext variableDecl) {
if (variableDecl.simpleIdentifier() != null) {
variableCount++;
}
@@ -279,13 +286,14 @@ private void addPropertyField(final KotlinParser.PropertyDeclarationContext ctx)
return;
}
- final String fieldType = ctx.type() != null
- ? ctx.type().getText()
- : ctx.variableDeclaration().type() != null
- ? ctx.variableDeclaration().type().getText()
- : "unknown";
- classData.addField(ctx.variableDeclaration().simpleIdentifier().getText(), fieldType,
- new ArrayList<>());
+ final String fieldType =
+ ctx.type() != null
+ ? ctx.type().getText()
+ : ctx.variableDeclaration().type() != null
+ ? ctx.variableDeclaration().type().getText()
+ : "unknown";
+ classData.addField(
+ ctx.variableDeclaration().simpleIdentifier().getText(), fieldType, new ArrayList<>());
}
@Override
@@ -345,8 +353,9 @@ public void enterSecondaryConstructor(final KotlinParser.SecondaryConstructorCon
}
final String className = classData.getProtoBufObject().getName();
- final MethodDataHandler methodData = classData.addConstructor(className,
- className + "#" + extractParameterTypes(ctx).hashCode());
+ final MethodDataHandler methodData =
+ classData.addConstructor(
+ className, className + "#" + extractParameterTypes(ctx).hashCode());
addParameters(methodData, ctx.functionValueParameters());
if (ctx.start != null && ctx.stop != null) {
@@ -370,15 +379,18 @@ private String extractFunctionName(final KotlinParser.FunctionDeclarationContext
return null;
}
- private MethodDataHandler createMethodHandler(final String methodName, final String returnType,
+ private MethodDataHandler createMethodHandler(
+ final String methodName,
+ final String returnType,
final KotlinParser.FunctionDeclarationContext ctx) {
if (fileDataHandler.isInClassContext()) {
final ClassDataHandler classData = fileDataHandler.getCurrentClassData();
if (classData == null) {
return null;
}
- final MethodDataHandler methodData = classData.addMethod(methodName,
- methodName + "#" + extractParameterTypes(ctx).hashCode(), returnType);
+ final MethodDataHandler methodData =
+ classData.addMethod(
+ methodName, methodName + "#" + extractParameterTypes(ctx).hashCode(), returnType);
addParameters(methodData, ctx.functionValueParameters());
return methodData;
}
@@ -403,7 +415,8 @@ private List extractParameterTypes(
return paramTypes;
}
- for (final KotlinParser.FunctionValueParameterContext param : parameters.functionValueParameter()) {
+ for (final KotlinParser.FunctionValueParameterContext param :
+ parameters.functionValueParameter()) {
if (param.parameter() != null && param.parameter().type() != null) {
paramTypes.add(param.parameter().type().getText());
}
@@ -411,23 +424,25 @@ private List extractParameterTypes(
return paramTypes;
}
- private void addParameters(final MethodDataHandler methodData,
+ private void addParameters(
+ final MethodDataHandler methodData,
final KotlinParser.FunctionValueParametersContext parameters) {
if (parameters == null) {
return;
}
- for (final KotlinParser.FunctionValueParameterContext param : parameters.functionValueParameter()) {
+ for (final KotlinParser.FunctionValueParameterContext param :
+ parameters.functionValueParameter()) {
if (param.parameter() == null) {
continue;
}
- final String paramType = param.parameter().type() != null
- ? param.parameter().type().getText()
- : "unknown";
- final String paramName = param.parameter().simpleIdentifier() != null
- ? param.parameter().simpleIdentifier().getText()
- : "";
+ final String paramType =
+ param.parameter().type() != null ? param.parameter().type().getText() : "unknown";
+ final String paramName =
+ param.parameter().simpleIdentifier() != null
+ ? param.parameter().simpleIdentifier().getText()
+ : "";
methodData.addParameter(paramName, paramType, new ArrayList<>());
}
}
diff --git a/src/main/java/net/explorviz/code/analysis/listener/PhpFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/PhpFileDataListener.java
index c68a335..034cff4 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/PhpFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/PhpFileDataListener.java
@@ -12,9 +12,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR listener for extracting file data from PHP source code.
- */
+/** ANTLR listener for extracting file data from PHP source code. */
public class PhpFileDataListener extends PhpParserBaseListener implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(PhpFileDataListener.class);
@@ -24,8 +22,8 @@ public class PhpFileDataListener extends PhpParserBaseListener implements Common
private int functionCount = 0;
private int variableCount = 0;
- public PhpFileDataListener(final PhpFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public PhpFileDataListener(
+ final PhpFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -38,7 +36,8 @@ public void enterHtmlDocument(final PhpParser.HtmlDocumentContext ctx) {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -78,8 +77,8 @@ public void enterUseDeclaration(final PhpParser.UseDeclarationContext ctx) {
return;
}
- for (final PhpParser.UseDeclarationContentContext useContent : ctx.useDeclarationContentList()
- .useDeclarationContent()) {
+ for (final PhpParser.UseDeclarationContentContext useContent :
+ ctx.useDeclarationContentList().useDeclarationContent()) {
if (useContent.namespaceNameList() != null) {
fileDataHandler.addImport(normalizeNamespace(useContent.namespaceNameList().getText()));
}
@@ -118,27 +117,34 @@ public void enterClassDeclaration(final PhpParser.ClassDeclarationContext ctx) {
}
}
- private void addInterfaceExtends(final ClassDataHandler classData,
- final PhpParser.InterfaceListContext interfaceList) {
+ private void addInterfaceExtends(
+ final ClassDataHandler classData, final PhpParser.InterfaceListContext interfaceList) {
if (interfaceList == null) {
return;
}
- for (final PhpParser.QualifiedStaticTypeRefContext typeRef : interfaceList
- .qualifiedStaticTypeRef()) {
+ for (final PhpParser.QualifiedStaticTypeRefContext typeRef :
+ interfaceList.qualifiedStaticTypeRef()) {
classData.addImplementedInterface(normalizeNamespace(typeRef.getText()));
}
}
- private void addInterfaceImplements(final ClassDataHandler classData,
- final PhpParser.InterfaceListContext interfaceList) {
+ private void addInterfaceImplements(
+ final ClassDataHandler classData, final PhpParser.InterfaceListContext interfaceList) {
addInterfaceExtends(classData, interfaceList);
}
- private void addFormattedSuperClass(final ClassDataHandler classData, final String superClassFqn) {
+ private void addFormattedSuperClass(
+ final ClassDataHandler classData, final String superClassFqn) {
final String normalizedFqn = normalizeNamespace(superClassFqn);
- classData.setSuperClass(getClassPathFromFqn(normalizedFqn, ".php", fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(normalizedFqn));
+ classData.setSuperClass(
+ getClassPathFromFqn(
+ normalizedFqn,
+ ".php",
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(normalizedFqn));
}
@Override
@@ -263,8 +269,8 @@ private void addPropertyFields(final PhpParser.ClassStatementContext ctx) {
final String fieldType = ctx.typeHint() != null ? ctx.typeHint().getText() : "mixed";
for (final PhpParser.VariableInitializerContext variable : ctx.variableInitializer()) {
if (variable.VarName() != null) {
- classData.addField(stripVariableName(variable.VarName().getText()), fieldType,
- new ArrayList<>());
+ classData.addField(
+ stripVariableName(variable.VarName().getText()), fieldType, new ArrayList<>());
}
}
}
@@ -283,7 +289,9 @@ public void enterGlobalConstantDeclaration(final PhpParser.GlobalConstantDeclara
}
}
- private MethodDataHandler createMethodHandler(final String methodName, final String returnType,
+ private MethodDataHandler createMethodHandler(
+ final String methodName,
+ final String returnType,
final PhpParser.FunctionDeclarationContext ctx) {
if (fileDataHandler.isInClassContext()) {
return createClassMethodFromParameters(methodName, returnType, ctx.formalParameterList());
@@ -294,20 +302,25 @@ private MethodDataHandler createMethodHandler(final String methodName, final Str
return methodData;
}
- private MethodDataHandler createClassMethodHandler(final String methodName,
- final String returnType, final PhpParser.ClassStatementContext ctx) {
+ private MethodDataHandler createClassMethodHandler(
+ final String methodName, final String returnType, final PhpParser.ClassStatementContext ctx) {
return createClassMethodFromParameters(methodName, returnType, ctx.formalParameterList());
}
- private MethodDataHandler createClassMethodFromParameters(final String methodName,
- final String returnType, final PhpParser.FormalParameterListContext parameterList) {
+ private MethodDataHandler createClassMethodFromParameters(
+ final String methodName,
+ final String returnType,
+ final PhpParser.FormalParameterListContext parameterList) {
final ClassDataHandler classData = fileDataHandler.getCurrentClassData();
if (classData == null) {
return null;
}
- final MethodDataHandler methodData = classData.addMethod(methodName,
- methodName + "#" + extractParameterTypes(parameterList).hashCode(), returnType);
+ final MethodDataHandler methodData =
+ classData.addMethod(
+ methodName,
+ methodName + "#" + extractParameterTypes(parameterList).hashCode(),
+ returnType);
addParameters(methodData, parameterList);
return methodData;
}
@@ -326,7 +339,8 @@ private String extractReturnType(final PhpParser.ReturnTypeDeclContext returnTyp
return returnTypeDecl.typeHint().getText();
}
- private List extractParameterTypes(final PhpParser.FormalParameterListContext parameterList) {
+ private List extractParameterTypes(
+ final PhpParser.FormalParameterListContext parameterList) {
final List paramTypes = new ArrayList<>();
if (parameterList == null) {
return paramTypes;
@@ -340,7 +354,8 @@ private List extractParameterTypes(final PhpParser.FormalParameterListCo
return paramTypes;
}
- private void addParameters(final MethodDataHandler methodData,
+ private void addParameters(
+ final MethodDataHandler methodData,
final PhpParser.FormalParameterListContext parameterList) {
if (parameterList == null) {
return;
diff --git a/src/main/java/net/explorviz/code/analysis/listener/PythonFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/PythonFileDataListener.java
index af3a344..3f88e8a 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/PythonFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/PythonFileDataListener.java
@@ -9,10 +9,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR Listener for extracting file data from Python source code.
- */
-public class PythonFileDataListener extends PythonParserBaseListener implements CommonFileDataListener {
+/** ANTLR Listener for extracting file data from Python source code. */
+public class PythonFileDataListener extends PythonParserBaseListener
+ implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(PythonFileDataListener.class);
@@ -21,8 +20,8 @@ public class PythonFileDataListener extends PythonParserBaseListener implements
private int functionCount = 0;
private int variableCount = 0;
- public PythonFileDataListener(final PythonFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public PythonFileDataListener(
+ final PythonFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -36,7 +35,8 @@ public void enterFile_input(final PythonParser.File_inputContext ctx) {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -55,9 +55,7 @@ public void enterImport_stmt(final PythonParser.Import_stmtContext ctx) {
if (ctx.getText() != null) {
final String importText = ctx.getText();
fileDataHandler.addImport(importText);
- LOGGER.atTrace()
- .addArgument(importText)
- .log("Import: {}");
+ LOGGER.atTrace().addArgument(importText).log("Import: {}");
}
}
@@ -70,9 +68,7 @@ public void enterClassdef(final PythonParser.ClassdefContext ctx) {
fileDataHandler.enterClass(className, classFqn);
- LOGGER.atTrace()
- .addArgument(className)
- .log("Class: {}");
+ LOGGER.atTrace().addArgument(className).log("Class: {}");
// Calculate class SLOC and LOC
final int classLoc = calculateLoc(ctx);
@@ -84,11 +80,19 @@ public void enterClassdef(final PythonParser.ClassdefContext ctx) {
// Extract superclasses
if (ctx.arglist() != null) {
for (final PythonParser.ArgumentContext argCtx : ctx.arglist().argument()) {
- if (argCtx.ASSIGN() == null && argCtx.comp_for() == null && argCtx.POWER() == null
+ if (argCtx.ASSIGN() == null
+ && argCtx.comp_for() == null
+ && argCtx.POWER() == null
&& argCtx.STAR() == null) {
final String superClassFqn = argCtx.getText();
- classData.setSuperClass(getClassPathFromFqn(superClassFqn, ".py", fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(superClassFqn));
+ classData.setSuperClass(
+ getClassPathFromFqn(
+ superClassFqn,
+ ".py",
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(superClassFqn));
}
}
}
@@ -117,12 +121,12 @@ public void enterFuncdef(final PythonParser.FuncdefContext ctx) {
// Function inside a class - treat as a method
final String functionFqn = functionName + "#1"; // TODO: Add proper parameter hashing
- final var methodData = fileDataHandler.getCurrentClassData()
- .addMethod(functionName, functionFqn, "None"); // Python default return is None
+ final var methodData =
+ fileDataHandler
+ .getCurrentClassData()
+ .addMethod(functionName, functionFqn, "None"); // Python default return is None
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Method: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Method: {}");
// Calculate function SLOC and LOC
final int functionLoc = calculateLoc(ctx);
@@ -138,10 +142,10 @@ public void enterFuncdef(final PythonParser.FuncdefContext ctx) {
}
} else {
// Global function
- final var funcBuilder = fileDataHandler.addGlobalFunction(
- functionName,
- "None" // TODO: Extract actual return type from type hints
- );
+ final var funcBuilder =
+ fileDataHandler.addGlobalFunction(
+ functionName, "None" // TODO: Extract actual return type from type hints
+ );
if (ctx.ASYNC() != null) {
funcBuilder.addModifier("async");
@@ -191,9 +195,7 @@ public void enterFuncdef(final PythonParser.FuncdefContext ctx) {
funcBuilder.addMetric(SLOC, String.valueOf(getSloc(ctx, tokens)));
funcBuilder.addMetric(LINE_COUNT, String.valueOf(functionLoc));
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Global function: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Global function: {}");
}
}
diff --git a/src/main/java/net/explorviz/code/analysis/listener/RustFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/RustFileDataListener.java
index d19c802..f6d8a04 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/RustFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/RustFileDataListener.java
@@ -11,9 +11,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR listener for extracting file data from Rust source code.
- */
+/** ANTLR listener for extracting file data from Rust source code. */
public class RustFileDataListener extends RustParserBaseListener implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(RustFileDataListener.class);
@@ -24,8 +22,8 @@ public class RustFileDataListener extends RustParserBaseListener implements Comm
private int variableCount = 0;
private String currentImplType;
- public RustFileDataListener(final RustFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public RustFileDataListener(
+ final RustFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -38,7 +36,8 @@ public void enterCrate(final RustParser.CrateContext ctx) {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -289,14 +288,17 @@ public void enterStaticItem(final RustParser.StaticItemContext ctx) {
}
}
- private MethodDataHandler createFunctionHandler(final String functionName, final String returnType,
- final RustParser.Function_Context ctx) {
+ private MethodDataHandler createFunctionHandler(
+ final String functionName, final String returnType, final RustParser.Function_Context ctx) {
if (currentImplType != null) {
final ClassDataHandler classData =
fileDataHandler.getClassData(fileDataHandler.buildFqn(currentImplType));
if (classData != null) {
- final MethodDataHandler methodData = classData.addMethod(functionName,
- functionName + "#" + extractParameterTypes(ctx).hashCode(), returnType);
+ final MethodDataHandler methodData =
+ classData.addMethod(
+ functionName,
+ functionName + "#" + extractParameterTypes(ctx).hashCode(),
+ returnType);
addFunctionParameters(methodData, ctx);
return methodData;
}
@@ -305,14 +307,18 @@ private MethodDataHandler createFunctionHandler(final String functionName, final
if (fileDataHandler.isInClassContext()) {
final ClassDataHandler classData = fileDataHandler.getCurrentClassData();
if (classData != null) {
- final MethodDataHandler methodData = classData.addMethod(functionName,
- functionName + "#" + extractParameterTypes(ctx).hashCode(), returnType);
+ final MethodDataHandler methodData =
+ classData.addMethod(
+ functionName,
+ functionName + "#" + extractParameterTypes(ctx).hashCode(),
+ returnType);
addFunctionParameters(methodData, ctx);
return methodData;
}
}
- final MethodDataHandler methodData = fileDataHandler.addGlobalFunction(functionName, returnType);
+ final MethodDataHandler methodData =
+ fileDataHandler.addGlobalFunction(functionName, returnType);
addFunctionParameters(methodData, ctx);
return methodData;
}
@@ -341,8 +347,8 @@ private List extractParameterTypes(final RustParser.Function_Context ctx
return paramTypes;
}
- private void addFunctionParameters(final MethodDataHandler methodData,
- final RustParser.Function_Context ctx) {
+ private void addFunctionParameters(
+ final MethodDataHandler methodData, final RustParser.Function_Context ctx) {
if (ctx.functionParameters() == null) {
return;
}
diff --git a/src/main/java/net/explorviz/code/analysis/listener/SwiftFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/SwiftFileDataListener.java
index af607f7..9a00ebc 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/SwiftFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/SwiftFileDataListener.java
@@ -11,10 +11,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR listener for extracting file data from Swift source code.
- */
-public class SwiftFileDataListener extends Swift5ParserBaseListener implements CommonFileDataListener {
+/** ANTLR listener for extracting file data from Swift source code. */
+public class SwiftFileDataListener extends Swift5ParserBaseListener
+ implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(SwiftFileDataListener.class);
@@ -23,8 +22,8 @@ public class SwiftFileDataListener extends Swift5ParserBaseListener implements C
private int functionCount = 0;
private int variableCount = 0;
- public SwiftFileDataListener(final SwiftFileDataHandler fileDataHandler,
- final CommonTokenStream tokens) {
+ public SwiftFileDataListener(
+ final SwiftFileDataHandler fileDataHandler, final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.tokens = tokens;
}
@@ -37,7 +36,8 @@ public void enterTop_level(final Swift5Parser.Top_levelContext ctx) {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -64,8 +64,8 @@ public void enterClass_declaration(final Swift5Parser.Class_declarationContext c
}
enterType(ctx.class_name().identifier().getText(), ctx, false, false);
- addInheritanceRelations(fileDataHandler.getCurrentClassData(), ctx.type_inheritance_clause(),
- false);
+ addInheritanceRelations(
+ fileDataHandler.getCurrentClassData(), ctx.type_inheritance_clause(), false);
}
@Override
@@ -82,8 +82,8 @@ public void enterStruct_declaration(final Swift5Parser.Struct_declarationContext
}
enterType(ctx.struct_name().identifier().getText(), ctx, true, false);
- addInheritanceRelations(fileDataHandler.getCurrentClassData(), ctx.type_inheritance_clause(),
- true);
+ addInheritanceRelations(
+ fileDataHandler.getCurrentClassData(), ctx.type_inheritance_clause(), true);
}
@Override
@@ -100,8 +100,8 @@ public void enterProtocol_declaration(final Swift5Parser.Protocol_declarationCon
}
enterType(ctx.protocol_name().identifier().getText(), ctx, false, true);
- addInheritanceRelations(fileDataHandler.getCurrentClassData(), ctx.type_inheritance_clause(),
- true);
+ addInheritanceRelations(
+ fileDataHandler.getCurrentClassData(), ctx.type_inheritance_clause(), true);
}
@Override
@@ -153,8 +153,11 @@ public void exitRaw_value_style_enum(final Swift5Parser.Raw_value_style_enumCont
}
}
- private void enterType(final String typeName, final org.antlr.v4.runtime.ParserRuleContext ctx,
- final boolean isStruct, final boolean isInterface) {
+ private void enterType(
+ final String typeName,
+ final org.antlr.v4.runtime.ParserRuleContext ctx,
+ final boolean isStruct,
+ final boolean isInterface) {
final String fqn = fileDataHandler.buildFqn(typeName);
fileDataHandler.enterClass(typeName, fqn);
@@ -175,7 +178,8 @@ private void enterType(final String typeName, final org.antlr.v4.runtime.ParserR
classData.addMetric(LINE_COUNT, String.valueOf(calculateLoc(ctx)));
}
- private void addInheritanceRelations(final ClassDataHandler classData,
+ private void addInheritanceRelations(
+ final ClassDataHandler classData,
final Swift5Parser.Type_inheritance_clauseContext inheritance,
final boolean treatAllAsInterfaces) {
if (classData == null || inheritance == null || inheritance.type_inheritance_list() == null) {
@@ -195,9 +199,16 @@ private void addInheritanceRelations(final ClassDataHandler classData,
}
}
- private void addFormattedSuperClass(final ClassDataHandler classData, final String superClassFqn) {
- classData.setSuperClass(getClassPathFromFqn(superClassFqn, ".swift", fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(superClassFqn));
+ private void addFormattedSuperClass(
+ final ClassDataHandler classData, final String superClassFqn) {
+ classData.setSuperClass(
+ getClassPathFromFqn(
+ superClassFqn,
+ ".swift",
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(superClassFqn));
}
@Override
@@ -206,7 +217,8 @@ public void enterUnion_style_enum_case(final Swift5Parser.Union_style_enum_caseC
}
@Override
- public void enterRaw_value_style_enum_case(final Swift5Parser.Raw_value_style_enum_caseContext ctx) {
+ public void enterRaw_value_style_enum_case(
+ final Swift5Parser.Raw_value_style_enum_caseContext ctx) {
addEnumCase(ctx.enum_case_name());
}
@@ -229,8 +241,8 @@ public void enterVariable_declaration(final Swift5Parser.Variable_declarationCon
addPropertyField(ctx.variable_name().identifier().getText(), ctx.type_annotation());
}
} else if (ctx.pattern_initializer_list() != null) {
- for (final Swift5Parser.Pattern_initializerContext patternInit : ctx.pattern_initializer_list()
- .pattern_initializer()) {
+ for (final Swift5Parser.Pattern_initializerContext patternInit :
+ ctx.pattern_initializer_list().pattern_initializer()) {
countPattern(patternInit.pattern());
if (fileDataHandler.isInClassContext()) {
addFieldFromPattern(patternInit.pattern(), null);
@@ -245,8 +257,8 @@ public void enterConstant_declaration(final Swift5Parser.Constant_declarationCon
return;
}
- for (final Swift5Parser.Pattern_initializerContext patternInit : ctx.pattern_initializer_list()
- .pattern_initializer()) {
+ for (final Swift5Parser.Pattern_initializerContext patternInit :
+ ctx.pattern_initializer_list().pattern_initializer()) {
countPattern(patternInit.pattern());
if (fileDataHandler.isInClassContext()) {
addFieldFromPattern(patternInit.pattern(), null);
@@ -264,30 +276,34 @@ private void countPattern(final Swift5Parser.PatternContext pattern) {
return;
}
- if (pattern.tuple_pattern() != null && pattern.tuple_pattern().tuple_pattern_element_list() != null) {
- for (final Swift5Parser.Tuple_pattern_elementContext element : pattern.tuple_pattern()
- .tuple_pattern_element_list().tuple_pattern_element()) {
+ if (pattern.tuple_pattern() != null
+ && pattern.tuple_pattern().tuple_pattern_element_list() != null) {
+ for (final Swift5Parser.Tuple_pattern_elementContext element :
+ pattern.tuple_pattern().tuple_pattern_element_list().tuple_pattern_element()) {
countPattern(element.pattern());
}
}
}
- private void addPropertyField(final String fieldName,
- final Swift5Parser.Type_annotationContext typeAnnotation) {
+ private void addPropertyField(
+ final String fieldName, final Swift5Parser.Type_annotationContext typeAnnotation) {
final ClassDataHandler classData = fileDataHandler.getCurrentClassData();
if (classData == null) {
return;
}
- final String fieldType = typeAnnotation != null && typeAnnotation.type() != null
- ? typeAnnotation.type().getText()
- : "unknown";
+ final String fieldType =
+ typeAnnotation != null && typeAnnotation.type() != null
+ ? typeAnnotation.type().getText()
+ : "unknown";
classData.addField(fieldName, fieldType, new ArrayList<>());
}
- private void addFieldFromPattern(final Swift5Parser.PatternContext pattern,
+ private void addFieldFromPattern(
+ final Swift5Parser.PatternContext pattern,
final Swift5Parser.Type_annotationContext typeAnnotation) {
- if (pattern == null || pattern.identifier_pattern() == null
+ if (pattern == null
+ || pattern.identifier_pattern() == null
|| pattern.identifier_pattern().identifier() == null) {
return;
}
@@ -327,8 +343,9 @@ public void enterInitializer_declaration(final Swift5Parser.Initializer_declarat
}
final String className = classData.getProtoBufObject().getName();
- final MethodDataHandler methodData = classData.addConstructor(className,
- className + "#" + extractParameterTypes(ctx.parameter_clause()).hashCode());
+ final MethodDataHandler methodData =
+ classData.addConstructor(
+ className, className + "#" + extractParameterTypes(ctx.parameter_clause()).hashCode());
addParameters(methodData, ctx.parameter_clause());
if (ctx.start != null && ctx.stop != null) {
@@ -356,24 +373,30 @@ private String extractFunctionName(final Swift5Parser.Function_declarationContex
}
private String extractReturnType(final Swift5Parser.Function_declarationContext ctx) {
- if (ctx.function_signature() != null && ctx.function_signature().function_result() != null
+ if (ctx.function_signature() != null
+ && ctx.function_signature().function_result() != null
&& ctx.function_signature().function_result().type() != null) {
return ctx.function_signature().function_result().type().getText();
}
return "Void";
}
- private MethodDataHandler createMethodHandler(final String methodName, final String returnType,
+ private MethodDataHandler createMethodHandler(
+ final String methodName,
+ final String returnType,
final Swift5Parser.Function_declarationContext ctx) {
if (fileDataHandler.isInClassContext()) {
final ClassDataHandler classData = fileDataHandler.getCurrentClassData();
if (classData == null) {
return null;
}
- final MethodDataHandler methodData = classData.addMethod(methodName,
- methodName + "#" + extractParameterTypes(ctx.function_signature().parameter_clause())
- .hashCode(),
- returnType);
+ final MethodDataHandler methodData =
+ classData.addMethod(
+ methodName,
+ methodName
+ + "#"
+ + extractParameterTypes(ctx.function_signature().parameter_clause()).hashCode(),
+ returnType);
addParameters(methodData, ctx.function_signature().parameter_clause());
return methodData;
}
@@ -385,7 +408,8 @@ private MethodDataHandler createMethodHandler(final String methodName, final Str
return methodData;
}
- private List extractParameterTypes(final Swift5Parser.Parameter_clauseContext parameters) {
+ private List extractParameterTypes(
+ final Swift5Parser.Parameter_clauseContext parameters) {
final List paramTypes = new ArrayList<>();
if (parameters == null || parameters.parameter_list() == null) {
return paramTypes;
@@ -399,18 +423,20 @@ private List extractParameterTypes(final Swift5Parser.Parameter_clauseCo
return paramTypes;
}
- private void addParameters(final MethodDataHandler methodData,
- final Swift5Parser.Parameter_clauseContext parameters) {
+ private void addParameters(
+ final MethodDataHandler methodData, final Swift5Parser.Parameter_clauseContext parameters) {
if (parameters == null || parameters.parameter_list() == null) {
return;
}
for (final Swift5Parser.ParameterContext param : parameters.parameter_list().parameter()) {
- final String paramType = param.type_annotation() != null && param.type_annotation().type() != null
- ? param.type_annotation().type().getText()
- : "unknown";
+ final String paramType =
+ param.type_annotation() != null && param.type_annotation().type() != null
+ ? param.type_annotation().type().getText()
+ : "unknown";
String paramName = "";
- if (param.local_parameter_name() != null && param.local_parameter_name().identifier() != null) {
+ if (param.local_parameter_name() != null
+ && param.local_parameter_name().identifier() != null) {
paramName = param.local_parameter_name().identifier().getText();
}
methodData.addParameter(paramName, paramType, new ArrayList<>());
diff --git a/src/main/java/net/explorviz/code/analysis/listener/TypeScriptFileDataListener.java b/src/main/java/net/explorviz/code/analysis/listener/TypeScriptFileDataListener.java
index d8ecfc0..97e668e 100644
--- a/src/main/java/net/explorviz/code/analysis/listener/TypeScriptFileDataListener.java
+++ b/src/main/java/net/explorviz/code/analysis/listener/TypeScriptFileDataListener.java
@@ -11,11 +11,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR Listener for extracting file data from TypeScript/JavaScript source
- * code.
- */
-public class TypeScriptFileDataListener extends TypeScriptParserBaseListener implements CommonFileDataListener {
+/** ANTLR Listener for extracting file data from TypeScript/JavaScript source code. */
+public class TypeScriptFileDataListener extends TypeScriptParserBaseListener
+ implements CommonFileDataListener {
private static final Logger LOGGER = LoggerFactory.getLogger(TypeScriptFileDataListener.class);
private static final String DEFAULT_RETURN_TYPE = "void";
@@ -27,8 +25,10 @@ public class TypeScriptFileDataListener extends TypeScriptParserBaseListener imp
private int functionCount = 0;
private int variableCount = 0;
- public TypeScriptFileDataListener(final TypeScriptFileDataHandler fileDataHandler,
- final String fileExtension, final CommonTokenStream tokens) {
+ public TypeScriptFileDataListener(
+ final TypeScriptFileDataHandler fileDataHandler,
+ final String fileExtension,
+ final CommonTokenStream tokens) {
this.fileDataHandler = fileDataHandler;
this.fileExtension = fileExtension;
this.tokens = tokens;
@@ -42,7 +42,8 @@ public void enterProgram(final TypeScriptParser.ProgramContext ctx) {
fileDataHandler.addMetric(SLOC, String.valueOf(sloc));
fileDataHandler.addMetric(CLOC, String.valueOf(cloc));
- LOGGER.atTrace()
+ LOGGER
+ .atTrace()
.addArgument(fileDataHandler.getFileName())
.addArgument(sloc)
.log("{} - SLOC: {}");
@@ -60,9 +61,7 @@ public void enterImportStatement(final TypeScriptParser.ImportStatementContext c
if (ctx.getText() != null) {
final String importText = ctx.getText();
fileDataHandler.addImport(importText);
- LOGGER.atTrace()
- .addArgument(importText)
- .log("Import: {}");
+ LOGGER.atTrace().addArgument(importText).log("Import: {}");
}
}
@@ -71,9 +70,7 @@ public void enterNamespaceDeclaration(final TypeScriptParser.NamespaceDeclaratio
if (ctx.namespaceName() != null) {
final String namespaceName = ctx.namespaceName().getText();
fileDataHandler.enterNamespace(namespaceName);
- LOGGER.atTrace()
- .addArgument(namespaceName)
- .log("Namespace: {}");
+ LOGGER.atTrace().addArgument(namespaceName).log("Namespace: {}");
}
}
@@ -90,9 +87,7 @@ public void enterClassDeclaration(final TypeScriptParser.ClassDeclarationContext
fileDataHandler.enterClass(className, fqn);
- LOGGER.atTrace()
- .addArgument(className)
- .log("Class: {}");
+ LOGGER.atTrace().addArgument(className).log("Class: {}");
final int classLoc = calculateLoc(ctx);
final var classData = fileDataHandler.getCurrentClassData();
@@ -107,15 +102,23 @@ public void enterClassDeclaration(final TypeScriptParser.ClassDeclarationContext
classData.addMetric(LINE_COUNT, String.valueOf(classLoc));
if (ctx.classHeritage() != null && ctx.classHeritage().classExtendsClause() != null) {
- final String superClassFqn = ctx.classHeritage().classExtendsClause().typeReference().getText();
- classData.setSuperClass(getClassPathFromFqn(superClassFqn, fileExtension, fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(superClassFqn));
+ final String superClassFqn =
+ ctx.classHeritage().classExtendsClause().typeReference().getText();
+ classData.setSuperClass(
+ getClassPathFromFqn(
+ superClassFqn,
+ fileExtension,
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(superClassFqn));
}
- if (ctx.classHeritage() != null && ctx.classHeritage().implementsClause() != null
+ if (ctx.classHeritage() != null
+ && ctx.classHeritage().implementsClause() != null
&& ctx.classHeritage().implementsClause().classOrInterfaceTypeList() != null) {
- for (final TypeScriptParser.TypeReferenceContext typeRef : ctx.classHeritage()
- .implementsClause().classOrInterfaceTypeList().typeReference()) {
+ for (final TypeScriptParser.TypeReferenceContext typeRef :
+ ctx.classHeritage().implementsClause().classOrInterfaceTypeList().typeReference()) {
classData.addImplementedInterface(typeRef.getText());
}
}
@@ -144,19 +147,22 @@ public void enterInterfaceDeclaration(final TypeScriptParser.InterfaceDeclaratio
classData.addMetric(LINE_COUNT, String.valueOf(interfaceLoc));
if (ctx.interfaceExtendsClause() != null) {
- for (final TypeScriptParser.TypeReferenceContext typeRef : ctx.interfaceExtendsClause()
- .classOrInterfaceTypeList().typeReference()) {
+ for (final TypeScriptParser.TypeReferenceContext typeRef :
+ ctx.interfaceExtendsClause().classOrInterfaceTypeList().typeReference()) {
final String superClassFqn = typeRef.getText();
classData.addImplementedInterface(
- getClassPathFromFqn(superClassFqn, fileExtension, fileDataHandler.getFileName(),
- fileDataHandler.getPackageName()) + "::" + getClassNameFromFqn(superClassFqn));
+ getClassPathFromFqn(
+ superClassFqn,
+ fileExtension,
+ fileDataHandler.getFileName(),
+ fileDataHandler.getPackageName())
+ + "::"
+ + getClassNameFromFqn(superClassFqn));
}
}
}
- LOGGER.atTrace()
- .addArgument(interfaceName)
- .log("Interface: {}");
+ LOGGER.atTrace().addArgument(interfaceName).log("Interface: {}");
}
}
@@ -179,9 +185,10 @@ public void enterPropertyDeclarationExpression(
}
final String fieldName = ctx.classElementName().getText();
- final String fieldType = ctx.typeAnnotation() != null && ctx.typeAnnotation().type_() != null
- ? ctx.typeAnnotation().type_().getText()
- : UNTYPED_PARAMETER;
+ final String fieldType =
+ ctx.typeAnnotation() != null && ctx.typeAnnotation().type_() != null
+ ? ctx.typeAnnotation().type_().getText()
+ : UNTYPED_PARAMETER;
final List modifiers = new ArrayList<>();
if (ctx.propertyMemberBase() != null) {
@@ -199,9 +206,7 @@ public void enterPropertyDeclarationExpression(
classData.addField(fieldName, fieldType, modifiers);
variableCount++;
- LOGGER.atTrace()
- .addArgument(fieldName)
- .log("Class field: {}");
+ LOGGER.atTrace().addArgument(fieldName).log("Class field: {}");
}
@Override
@@ -224,9 +229,7 @@ public void enterEnumDeclaration(final TypeScriptParser.EnumDeclarationContext c
classData.addMetric(LINE_COUNT, String.valueOf(calculateLoc(ctx)));
}
- LOGGER.atTrace()
- .addArgument(enumName)
- .log("Enum: {}");
+ LOGGER.atTrace().addArgument(enumName).log("Enum: {}");
}
@Override
@@ -280,7 +283,8 @@ public void enterMethodDeclarationExpression(
functionCount++;
final String methodName = ctx.classElementName().getText();
final List parameters = extractParameters(ctx.callSignature());
- final String methodFqn = fileDataHandler.buildMethodFqn(methodName, extractParameterTypes(parameters));
+ final String methodFqn =
+ fileDataHandler.buildMethodFqn(methodName, extractParameterTypes(parameters));
final String returnType = extractReturnType(ctx.callSignature());
final boolean async = isAsync(ctx.propertyMemberBase());
@@ -289,9 +293,7 @@ public void enterMethodDeclarationExpression(
final MethodDataHandler methodData = classData.addMethod(methodName, methodFqn, returnType);
populateMethod(methodData, ctx, parameters, async);
- LOGGER.atTrace()
- .addArgument(methodName)
- .log("Class method: {}");
+ LOGGER.atTrace().addArgument(methodName).log("Class method: {}");
}
}
@@ -306,12 +308,12 @@ public void enterConstructorDeclaration(
final var classData = fileDataHandler.getCurrentClassData();
if (classData != null) {
final List parameters = extractParameters(ctx.formalParameterList());
- final String constructorFqn = fileDataHandler.buildMethodFqn("constructor", extractParameterTypes(parameters));
+ final String constructorFqn =
+ fileDataHandler.buildMethodFqn("constructor", extractParameterTypes(parameters));
final MethodDataHandler methodData = classData.addConstructor("constructor", constructorFqn);
populateMethod(methodData, ctx, parameters, false);
- LOGGER.atTrace()
- .log("Constructor detected");
+ LOGGER.atTrace().log("Constructor detected");
}
}
@@ -328,21 +330,19 @@ public void enterFunctionDeclaration(final TypeScriptParser.FunctionDeclarationC
final boolean async = ctx.Async() != null;
if (fileDataHandler.isInClassContext()) {
- final String functionFqn = fileDataHandler.buildMethodFqn(functionName, extractParameterTypes(parameters));
- final var methodData = fileDataHandler.getCurrentClassData()
- .addMethod(functionName, functionFqn, returnType);
+ final String functionFqn =
+ fileDataHandler.buildMethodFqn(functionName, extractParameterTypes(parameters));
+ final var methodData =
+ fileDataHandler.getCurrentClassData().addMethod(functionName, functionFqn, returnType);
populateMethod(methodData, ctx, parameters, async);
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Function inside class: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Function inside class: {}");
} else {
- final MethodDataHandler methodHandler = fileDataHandler.addGlobalFunction(functionName, returnType);
+ final MethodDataHandler methodHandler =
+ fileDataHandler.addGlobalFunction(functionName, returnType);
populateMethod(methodHandler, ctx, parameters, async);
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Global function: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Global function: {}");
}
}
@@ -366,21 +366,19 @@ public void enterArrowFunctionDeclaration(
final boolean async = ctx.Async() != null;
if (fileDataHandler.isInClassContext()) {
- final String functionFqn = fileDataHandler.buildMethodFqn(functionName, extractParameterTypes(parameters));
- final var methodData = fileDataHandler.getCurrentClassData()
- .addMethod(functionName, functionFqn, returnType);
+ final String functionFqn =
+ fileDataHandler.buildMethodFqn(functionName, extractParameterTypes(parameters));
+ final var methodData =
+ fileDataHandler.getCurrentClassData().addMethod(functionName, functionFqn, returnType);
populateMethod(methodData, ctx, parameters, async);
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Arrow function inside class: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Arrow function inside class: {}");
} else {
- final MethodDataHandler methodHandler = fileDataHandler.addGlobalFunction(functionName, returnType);
+ final MethodDataHandler methodHandler =
+ fileDataHandler.addGlobalFunction(functionName, returnType);
populateMethod(methodHandler, ctx, parameters, async);
- LOGGER.atTrace()
- .addArgument(functionName)
- .log("Global arrow function: {}");
+ LOGGER.atTrace().addArgument(functionName).log("Global arrow function: {}");
}
}
@@ -389,8 +387,11 @@ public void enterVariableDeclaration(final TypeScriptParser.VariableDeclarationC
variableCount++;
}
- private void populateMethod(final MethodDataHandler methodData, final ParserRuleContext ctx,
- final List parameters, final boolean async) {
+ private void populateMethod(
+ final MethodDataHandler methodData,
+ final ParserRuleContext ctx,
+ final List parameters,
+ final boolean async) {
for (final ParameterInfo parameter : parameters) {
methodData.addParameter(parameter.name(), parameter.type(), List.of());
}
@@ -405,7 +406,8 @@ private void populateMethod(final MethodDataHandler methodData, final ParserRule
methodData.addMetric(LINE_COUNT, String.valueOf(methodLoc));
}
- private List extractParameters(final TypeScriptParser.CallSignatureContext callSignature) {
+ private List extractParameters(
+ final TypeScriptParser.CallSignatureContext callSignature) {
if (callSignature == null || callSignature.parameterList() == null) {
return List.of();
}
@@ -421,7 +423,8 @@ private List extractParameters(
return extractParameters(arrowParameters.formalParameterList());
}
if (arrowParameters.propertyName() != null) {
- return List.of(new ParameterInfo(arrowParameters.propertyName().getText(), UNTYPED_PARAMETER));
+ return List.of(
+ new ParameterInfo(arrowParameters.propertyName().getText(), UNTYPED_PARAMETER));
}
return List.of();
}
@@ -433,21 +436,28 @@ private List extractParameters(
return parameters;
}
- for (final TypeScriptParser.FormalParameterArgContext arg : formalParameterList.formalParameterArg()) {
- parameters.add(new ParameterInfo(extractAssignableName(arg.assignable()),
- extractTypeFromAnnotation(arg.typeAnnotation())));
+ for (final TypeScriptParser.FormalParameterArgContext arg :
+ formalParameterList.formalParameterArg()) {
+ parameters.add(
+ new ParameterInfo(
+ extractAssignableName(arg.assignable()),
+ extractTypeFromAnnotation(arg.typeAnnotation())));
}
if (formalParameterList.lastFormalParameterArg() != null) {
- final TypeScriptParser.LastFormalParameterArgContext restArg = formalParameterList.lastFormalParameterArg();
- final String restName = restArg.identifier() != null ? restArg.identifier().getText() : "rest";
- parameters.add(new ParameterInfo(restName, extractTypeFromAnnotation(restArg.typeAnnotation(), "...")));
+ final TypeScriptParser.LastFormalParameterArgContext restArg =
+ formalParameterList.lastFormalParameterArg();
+ final String restName =
+ restArg.identifier() != null ? restArg.identifier().getText() : "rest";
+ parameters.add(
+ new ParameterInfo(restName, extractTypeFromAnnotation(restArg.typeAnnotation(), "...")));
}
return parameters;
}
- private List extractParameters(final TypeScriptParser.ParameterListContext parameterList) {
+ private List extractParameters(
+ final TypeScriptParser.ParameterListContext parameterList) {
final List parameters = new ArrayList<>();
if (parameterList == null) {
return parameters;
@@ -455,7 +465,8 @@ private List extractParameters(final TypeScriptParser.ParameterLi
if (parameterList.restParameter() != null) {
final TypeScriptParser.RestParameterContext rest = parameterList.restParameter();
- parameters.add(new ParameterInfo("rest", extractTypeFromAnnotation(rest.typeAnnotation(), "...")));
+ parameters.add(
+ new ParameterInfo("rest", extractTypeFromAnnotation(rest.typeAnnotation(), "...")));
return parameters;
}
@@ -472,14 +483,17 @@ private List extractParameters(final TypeScriptParser.ParameterLi
private ParameterInfo extractRequiredParameter(
final TypeScriptParser.RequiredParameterContext requiredParameter) {
- return new ParameterInfo(extractIdentifierOrPatternName(requiredParameter.identifierOrPattern()),
+ return new ParameterInfo(
+ extractIdentifierOrPatternName(requiredParameter.identifierOrPattern()),
extractTypeFromAnnotation(requiredParameter.typeAnnotation()));
}
private ParameterInfo extractOptionalParameter(
final TypeScriptParser.OptionalParameterContext optionalParameter) {
- final TypeScriptParser.IdentifierOrPatternContext pattern = optionalParameter.identifierOrPattern();
- return new ParameterInfo(extractIdentifierOrPatternName(pattern),
+ final TypeScriptParser.IdentifierOrPatternContext pattern =
+ optionalParameter.identifierOrPattern();
+ return new ParameterInfo(
+ extractIdentifierOrPatternName(pattern),
extractTypeFromAnnotation(optionalParameter.typeAnnotation()));
}
@@ -501,12 +515,13 @@ private String extractReturnType(final TypeScriptParser.TypeAnnotationContext ty
return normalizeTypeName(typeAnnotation.type_().getText());
}
- private String extractTypeFromAnnotation(final TypeScriptParser.TypeAnnotationContext typeAnnotation) {
+ private String extractTypeFromAnnotation(
+ final TypeScriptParser.TypeAnnotationContext typeAnnotation) {
return extractTypeFromAnnotation(typeAnnotation, UNTYPED_PARAMETER);
}
- private String extractTypeFromAnnotation(final TypeScriptParser.TypeAnnotationContext typeAnnotation,
- final String defaultType) {
+ private String extractTypeFromAnnotation(
+ final TypeScriptParser.TypeAnnotationContext typeAnnotation, final String defaultType) {
if (typeAnnotation == null || typeAnnotation.type_() == null) {
return defaultType;
}
@@ -555,9 +570,7 @@ private boolean isAsync(final TypeScriptParser.PropertyMemberBaseContext propert
return propertyMemberBase != null && propertyMemberBase.Async() != null;
}
- /**
- * Extract the name of an arrow function from its parent context.
- */
+ /** Extract the name of an arrow function from its parent context. */
private String extractArrowFunctionName(
final TypeScriptParser.ArrowFunctionDeclarationContext ctx) {
ParserRuleContext parent = ctx.getParent();
@@ -569,7 +582,8 @@ private String extractArrowFunctionName(
return variableDeclaration.identifierOrKeyWord().getText();
}
}
- if (parent instanceof TypeScriptParser.PropertyDeclarationExpressionContext propertyDeclaration) {
+ if (parent
+ instanceof TypeScriptParser.PropertyDeclarationExpressionContext propertyDeclaration) {
if (propertyDeclaration.classElementName() != null) {
return propertyDeclaration.classElementName().getText();
}
@@ -592,8 +606,8 @@ private String extractArrowFunctionName(
}
/**
- * Get comment lines of code by counting tokens on the hidden channel. ANTLR
- * places comments on a hidden channel, so we need to extract them from there.
+ * Get comment lines of code by counting tokens on the hidden channel. ANTLR places comments on a
+ * hidden channel, so we need to extract them from there.
*/
private int getCloc(final ParserRuleContext ctx) {
if (ctx == null || tokens == null) {
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrCParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrCParserService.java
index 4e9f181..d2a2eac 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrCParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrCParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing C source code.
- */
+/** ANTLR-based parser service for analyzing C source code. */
@ApplicationScoped
public class AntlrCParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrCParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public CFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public CFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing C file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent, fileName);
@@ -55,8 +52,8 @@ public CFileDataHandler parseFile(final String pathToFile, final String fileHash
}
}
- private CFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private CFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final CLexer lexer = new CLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
@@ -71,8 +68,14 @@ private CFileDataHandler parse(final CharStream charStream, final String fileNam
ParseTree compilationUnit = null;
try {
- compilationUnit = AntlrParserUtils.parseTwoStage(parser, tokens, LOGGER, fileName,
- parseSettings.parseTimeoutMs(), parser::compilationUnit);
+ compilationUnit =
+ AntlrParserUtils.parseTwoStage(
+ parser,
+ tokens,
+ LOGGER,
+ fileName,
+ parseSettings.parseTimeoutMs(),
+ parser::compilationUnit);
} catch (Exception e) {
LOGGER.warn("Could not build parse tree for {}: {}", fileName, e.getMessage());
}
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrCSharpParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrCSharpParserService.java
index 8c0093e..756f100 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrCSharpParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrCSharpParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing C# source code.
- */
+/** ANTLR-based parser service for analyzing C# source code. */
@ApplicationScoped
public class AntlrCSharpParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrCSharpParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public CSharpFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public CSharpFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing C# file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent, fileName);
@@ -55,15 +52,16 @@ public CSharpFileDataHandler parseFile(final String pathToFile, final String fil
}
}
- private CSharpFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private CSharpFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final CSharpLexer lexer = new CSharpLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final CSharpParser parser = new CSharpParser(tokens);
- final ParseTree prog = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::prog);
+ final ParseTree prog =
+ AntlrParserUtils.parseTwoStage(
+ parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::prog);
final CSharpFileDataHandler fileDataHandler = new CSharpFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrCppParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrCppParserService.java
index 9125ff3..98d7cd6 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrCppParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrCppParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing C/C++ source code.
- */
+/** ANTLR-based parser service for analyzing C/C++ source code. */
@ApplicationScoped
public class AntlrCppParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrCppParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public CppFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public CppFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing C/C++ file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent);
@@ -55,16 +52,21 @@ public CppFileDataHandler parseFile(final String pathToFile, final String fileHa
}
}
- private CppFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private CppFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final CPP14Lexer lexer = new CPP14Lexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final CPP14Parser parser = new CPP14Parser(tokens);
- final ParseTree translationUnit = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(),
- parser::translationUnit);
+ final ParseTree translationUnit =
+ AntlrParserUtils.parseTwoStage(
+ parser,
+ tokens,
+ LOGGER,
+ fileName,
+ parseSettings.parseTimeoutMs(),
+ parser::translationUnit);
final CppFileDataHandler fileDataHandler = new CppFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrGoParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrGoParserService.java
index d8c93b5..ff12b38 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrGoParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrGoParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing Go source code.
- */
+/** ANTLR-based parser service for analyzing Go source code. */
@ApplicationScoped
public class AntlrGoParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrGoParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public GoFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public GoFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing Go file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent, fileName);
@@ -55,15 +52,16 @@ public GoFileDataHandler parseFile(final String pathToFile, final String fileHas
}
}
- private GoFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private GoFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final GoLexer lexer = new GoLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final GoParser parser = new GoParser(tokens);
- final ParseTree sourceFile = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::sourceFile);
+ final ParseTree sourceFile =
+ AntlrParserUtils.parseTwoStage(
+ parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::sourceFile);
final GoFileDataHandler fileDataHandler = new GoFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrKotlinParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrKotlinParserService.java
index 6d2bde5..b0bbe4f 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrKotlinParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrKotlinParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing Kotlin source code.
- */
+/** ANTLR-based parser service for analyzing Kotlin source code. */
@ApplicationScoped
public class AntlrKotlinParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrKotlinParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public KotlinFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public KotlinFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing Kotlin file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent, fileName);
@@ -55,17 +52,22 @@ public KotlinFileDataHandler parseFile(final String pathToFile, final String fil
}
}
- private KotlinFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private KotlinFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final KotlinLexer lexer = new KotlinLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final KotlinParser parser = new KotlinParser(tokens);
final boolean isScript = fileName.toLowerCase().endsWith(".kts");
- final ParseTree tree = AntlrParserUtils.parseTwoStage(parser, tokens, LOGGER, fileName,
- parseSettings.parseTimeoutMs(),
- () -> isScript ? parser.script() : parser.kotlinFile());
+ final ParseTree tree =
+ AntlrParserUtils.parseTwoStage(
+ parser,
+ tokens,
+ LOGGER,
+ fileName,
+ parseSettings.parseTimeoutMs(),
+ () -> isScript ? parser.script() : parser.kotlinFile());
final KotlinFileDataHandler fileDataHandler = new KotlinFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrParseSettings.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrParseSettings.java
index 0016dcc..c17c3bc 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrParseSettings.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrParseSettings.java
@@ -3,13 +3,12 @@
import jakarta.enterprise.context.ApplicationScoped;
import org.eclipse.microprofile.config.inject.ConfigProperty;
-/**
- * Shared ANTLR parse wall-clock budget for all language parser services.
- */
+/** Shared ANTLR parse wall-clock budget for all language parser services. */
@ApplicationScoped
public class AntlrParseSettings {
- @ConfigProperty(name = "explorviz.gitanalysis.parse-timeout-ms",
+ @ConfigProperty(
+ name = "explorviz.gitanalysis.parse-timeout-ms",
defaultValue = "" + AntlrParserUtils.DEFAULT_PARSE_TIMEOUT_MS)
/* default */ long parseTimeoutMs = AntlrParserUtils.DEFAULT_PARSE_TIMEOUT_MS;
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrParserService.java
index bb2b410..befcab4 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrParserService.java
@@ -17,22 +17,19 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing Java source code.
- */
+/** ANTLR-based parser service for analyzing Java source code. */
@ApplicationScoped
public class AntlrParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
@ConfigProperty(name = "explorviz.gitanalysis.assume-unresolved-types-from-wildcard-imports")
- /* default */ boolean wildcardImportProperty; // NOCS
+ /* default */ boolean wildcardImportProperty;
- public JavaFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public JavaFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent);
@@ -59,22 +56,27 @@ public JavaFileDataHandler parseFile(final String pathToFile, final String fileH
}
}
- private JavaFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private JavaFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final JavaLexer lexer = new JavaLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final JavaParser parser = new JavaParser(tokens);
- final ParseTree compilationUnit = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(),
- parser::compilationUnit);
+ final ParseTree compilationUnit =
+ AntlrParserUtils.parseTwoStage(
+ parser,
+ tokens,
+ LOGGER,
+ fileName,
+ parseSettings.parseTimeoutMs(),
+ parser::compilationUnit);
final JavaFileDataHandler fileDataHandler = new JavaFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
- final JavaFileDataListener listener = new JavaFileDataListener(fileDataHandler,
- wildcardImportProperty, tokens);
+ final JavaFileDataListener listener =
+ new JavaFileDataListener(fileDataHandler, wildcardImportProperty, tokens);
final ParseTreeWalker walker = new ParseTreeWalker();
walker.walk(listener, compilationUnit);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrParserUtils.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrParserUtils.java
index 382269d..219e3f0 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrParserUtils.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrParserUtils.java
@@ -35,8 +35,8 @@
*
* Optional parse timeout: callers may pass {@code parseTimeoutMs} so the entire SLL → LL
* → lenient sequence cannot hang indefinitely. Large or ambiguous JS files (vendored libraries,
- * bundles) can stall in SLL alone; the timeout covers that stage as well. On timeout a
- * {@link ParseCancellationException} is thrown so callers can fall back to metrics-only analysis.
+ * bundles) can stall in SLL alone; the timeout covers that stage as well. On timeout a {@link
+ * ParseCancellationException} is thrown so callers can fall back to metrics-only analysis.
*
*
The timeout is enforced by a {@link DeadlineTokenStream} that checks a wall-clock deadline on
* every lookahead/{@code consume}. ANTLR prediction does not respond to {@link Thread#interrupt()},
@@ -60,14 +60,13 @@ public final class AntlrParserUtils {
* @deprecated use {@link #DEFAULT_PARSE_TIMEOUT_MS}; kept for binary compatibility with callers
* that timed only the LL stage.
*/
- @Deprecated
- public static final long DEFAULT_LL_TIMEOUT_MS = DEFAULT_PARSE_TIMEOUT_MS;
+ @Deprecated public static final long DEFAULT_LL_TIMEOUT_MS = DEFAULT_PARSE_TIMEOUT_MS;
private AntlrParserUtils() {}
/**
- * Removes the default {@code ConsoleErrorListener} from the lexer so that lexer errors
- * are not printed to {@code stderr}.
+ * Removes the default {@code ConsoleErrorListener} from the lexer so that lexer errors are not
+ * printed to {@code stderr}.
*/
public static void configureLexer(final Lexer lexer) {
lexer.removeErrorListeners();
@@ -75,21 +74,25 @@ public static void configureLexer(final Lexer lexer) {
/**
* Parses using SLL prediction first; retries with full LL only if SLL cannot resolve an
- * ambiguity. The LL stage uses a {@link ThresholdBailErrorStrategy} and routes syntax errors
- * to SLF4J instead of the console.
+ * ambiguity. The LL stage uses a {@link ThresholdBailErrorStrategy} and routes syntax errors to
+ * SLF4J instead of the console.
*
- * @param the parse-tree context type returned by the entry-point rule
- * @param parser the configured parser (tokens already consumed)
- * @param tokens the token stream, rewound when falling back to LL
- * @param logger the caller's SLF4J logger
- * @param fileName source file name, included in warning messages
- * @param parseCall supplier that invokes the grammar's entry-point rule (e.g.
- * {@code parser::compilationUnit})
+ * @param the parse-tree context type returned by the entry-point rule
+ * @param parser the configured parser (tokens already consumed)
+ * @param tokens the token stream, rewound when falling back to LL
+ * @param logger the caller's SLF4J logger
+ * @param fileName source file name, included in warning messages
+ * @param parseCall supplier that invokes the grammar's entry-point rule (e.g. {@code
+ * parser::compilationUnit})
* @return the root parse-tree node
* @throws ParseCancellationException if the error threshold is exceeded during LL recovery
*/
- public static T parseTwoStage(final Parser parser, final CommonTokenStream tokens,
- final Logger logger, final String fileName, final Supplier parseCall) {
+ public static T parseTwoStage(
+ final Parser parser,
+ final CommonTokenStream tokens,
+ final Logger logger,
+ final String fileName,
+ final Supplier parseCall) {
return parseTwoStage(parser, tokens, logger, fileName, null, 0L, parseCall);
}
@@ -99,8 +102,12 @@ public static T parseTwoStage(final Parser parser, final CommonTokenStream t
* value {@code <= 0} means no timeout. On timeout a {@link ParseCancellationException} is thrown
* so callers can fall back to metrics-only analysis.
*/
- public static T parseTwoStage(final Parser parser, final CommonTokenStream tokens,
- final Logger logger, final String fileName, final long parseTimeoutMs,
+ public static T parseTwoStage(
+ final Parser parser,
+ final CommonTokenStream tokens,
+ final Logger logger,
+ final String fileName,
+ final long parseTimeoutMs,
final Supplier parseCall) {
return parseTwoStage(parser, tokens, logger, fileName, null, parseTimeoutMs, parseCall);
}
@@ -109,21 +116,29 @@ public static T parseTwoStage(final Parser parser, final CommonTokenStream t
* Same as {@link #parseTwoStage(Parser, CommonTokenStream, Logger, String, Supplier)} but also
* records syntax-error messages in {@code syntaxErrors} (for tests and diagnostics).
*/
- static T parseTwoStage(final Parser parser, final CommonTokenStream tokens,
- final Logger logger, final String fileName, final List syntaxErrors,
+ static T parseTwoStage(
+ final Parser parser,
+ final CommonTokenStream tokens,
+ final Logger logger,
+ final String fileName,
+ final List syntaxErrors,
final Supplier parseCall) {
return parseTwoStage(parser, tokens, logger, fileName, syntaxErrors, 0L, parseCall);
}
- static T parseTwoStage(final Parser parser, final CommonTokenStream tokens,
- final Logger logger, final String fileName, final List syntaxErrors,
- final long parseTimeoutMs, final Supplier parseCall) {
+ static T parseTwoStage(
+ final Parser parser,
+ final CommonTokenStream tokens,
+ final Logger logger,
+ final String fileName,
+ final List syntaxErrors,
+ final long parseTimeoutMs,
+ final Supplier parseCall) {
if (parseTimeoutMs <= 0L) {
return parseTwoStageUnbounded(parser, tokens, logger, fileName, syntaxErrors, parseCall);
}
- final long deadlineNanos =
- System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(parseTimeoutMs);
+ final long deadlineNanos = System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(parseTimeoutMs);
final TokenStream previous = parser.getInputStream();
final DeadlineTokenStream deadlineStream =
new DeadlineTokenStream(tokens, deadlineNanos, parseTimeoutMs, fileName);
@@ -140,8 +155,12 @@ static T parseTwoStage(final Parser parser, final CommonTokenStream tokens,
}
}
- private static T parseTwoStageUnbounded(final Parser parser, final CommonTokenStream tokens,
- final Logger logger, final String fileName, final List syntaxErrors,
+ private static T parseTwoStageUnbounded(
+ final Parser parser,
+ final CommonTokenStream tokens,
+ final Logger logger,
+ final String fileName,
+ final List syntaxErrors,
final Supplier parseCall) {
// Stage 1: SLL — fast, works for the vast majority of valid source files.
@@ -181,16 +200,24 @@ private static boolean isDeadlineTimeout(final ParseCancellationException e) {
}
/**
- * Parses with full LL prediction and default error recovery, returning the best-effort parse
- * tree even when the source contains unexpanded macros or other non-standard constructs.
+ * Parses with full LL prediction and default error recovery, returning the best-effort parse tree
+ * even when the source contains unexpanded macros or other non-standard constructs.
*/
- public static T parseLenient(final Parser parser, final CommonTokenStream tokens,
- final Logger logger, final String fileName, final Supplier parseCall) {
+ public static T parseLenient(
+ final Parser parser,
+ final CommonTokenStream tokens,
+ final Logger logger,
+ final String fileName,
+ final Supplier parseCall) {
return parseLenient(parser, tokens, logger, fileName, null, parseCall);
}
- static T parseLenient(final Parser parser, final CommonTokenStream tokens,
- final Logger logger, final String fileName, final List syntaxErrors,
+ static T parseLenient(
+ final Parser parser,
+ final CommonTokenStream tokens,
+ final Logger logger,
+ final String fileName,
+ final List syntaxErrors,
final Supplier parseCall) {
tokens.seek(0);
parser.reset();
@@ -205,8 +232,8 @@ static T parseLenient(final Parser parser, final CommonTokenStream tokens,
/**
* Behaves like {@link DefaultErrorStrategy} (attempts single-token insertion/deletion recovery)
- * but throws {@link ParseCancellationException} after {@code maxErrors} recovery attempts.
- * This prevents the parser from spending minutes on a file the grammar cannot handle.
+ * but throws {@link ParseCancellationException} after {@code maxErrors} recovery attempts. This
+ * prevents the parser from spending minutes on a file the grammar cannot handle.
*/
static final class ThresholdBailErrorStrategy extends DefaultErrorStrategy {
@@ -248,16 +275,20 @@ static final class LoggingErrorListener extends BaseErrorListener {
this(logger, fileName, null);
}
- LoggingErrorListener(final Logger logger, final String fileName,
- final List syntaxErrors) {
+ LoggingErrorListener(
+ final Logger logger, final String fileName, final List syntaxErrors) {
this.logger = logger;
this.fileName = fileName;
this.syntaxErrors = syntaxErrors;
}
@Override
- public void syntaxError(final Recognizer, ?> recognizer, final Object offendingSymbol,
- final int line, final int charPositionInLine, final String msg,
+ public void syntaxError(
+ final Recognizer, ?> recognizer,
+ final Object offendingSymbol,
+ final int line,
+ final int charPositionInLine,
+ final String msg,
final RecognitionException e) {
final String formatted =
"Parse error in %s at %d:%d — %s".formatted(fileName, line, charPositionInLine, msg);
@@ -271,9 +302,9 @@ public void syntaxError(final Recognizer, ?> recognizer, final Object offendin
/**
* Token stream decorator that aborts the parse once a wall-clock deadline is exceeded.
*
- * Extends {@link CommonTokenStream} (rather than only implementing {@link TokenStream}) because
- * several language-specific parser bases cast {@code _input} to {@code CommonTokenStream} /
- * {@code BufferedTokenStream} for semantic predicates.
+ *
Extends {@link CommonTokenStream} (rather than only implementing {@link TokenStream})
+ * because several language-specific parser bases cast {@code _input} to {@code CommonTokenStream}
+ * / {@code BufferedTokenStream} for semantic predicates.
*
*
ANTLR adaptive prediction calls {@link #LT(int)} / {@link #LA(int)} millions of times during
* catastrophic backtracking, so checking the deadline there stops the parse on the same thread
@@ -287,8 +318,11 @@ static final class DeadlineTokenStream extends CommonTokenStream {
private final String fileName;
private volatile boolean timedOut;
- DeadlineTokenStream(final CommonTokenStream input, final long deadlineNanos,
- final long timeoutMs, final String fileName) {
+ DeadlineTokenStream(
+ final CommonTokenStream input,
+ final long deadlineNanos,
+ final long timeoutMs,
+ final String fileName) {
super(input.getTokenSource());
this.input = input;
this.deadlineNanos = deadlineNanos;
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrPhpParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrPhpParserService.java
index df06f4a..0fc9205 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrPhpParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrPhpParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing PHP source code.
- */
+/** ANTLR-based parser service for analyzing PHP source code. */
@ApplicationScoped
public class AntlrPhpParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrPhpParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public PhpFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public PhpFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing PHP file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent, fileName);
@@ -55,15 +52,16 @@ public PhpFileDataHandler parseFile(final String pathToFile, final String fileHa
}
}
- private PhpFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private PhpFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final PhpLexer lexer = new PhpLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final PhpParser parser = new PhpParser(tokens);
- final ParseTree document = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::htmlDocument);
+ final ParseTree document =
+ AntlrParserUtils.parseTwoStage(
+ parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::htmlDocument);
final PhpFileDataHandler fileDataHandler = new PhpFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrPythonParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrPythonParserService.java
index 96cf228..6a76907 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrPythonParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrPythonParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing Python source code.
- */
+/** ANTLR-based parser service for analyzing Python source code. */
@ApplicationScoped
public class AntlrPythonParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrPythonParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public PythonFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public PythonFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing Python file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent);
@@ -55,15 +52,16 @@ public PythonFileDataHandler parseFile(final String pathToFile, final String fil
}
}
- private PythonFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private PythonFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final PythonLexer lexer = new PythonLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final PythonParser parser = new PythonParser(tokens);
- final ParseTree fileInput = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::file_input);
+ final ParseTree fileInput =
+ AntlrParserUtils.parseTwoStage(
+ parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::file_input);
final PythonFileDataHandler fileDataHandler = new PythonFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrRustParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrRustParserService.java
index 3fea4fd..1b46a50 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrRustParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrRustParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing Rust source code.
- */
+/** ANTLR-based parser service for analyzing Rust source code. */
@ApplicationScoped
public class AntlrRustParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrRustParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public RustFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public RustFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing Rust file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent, fileName);
@@ -55,15 +52,16 @@ public RustFileDataHandler parseFile(final String pathToFile, final String fileH
}
}
- private RustFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private RustFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final RustLexer lexer = new RustLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final RustParser parser = new RustParser(tokens);
- final ParseTree crate = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::crate);
+ final ParseTree crate =
+ AntlrParserUtils.parseTwoStage(
+ parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::crate);
final RustFileDataHandler fileDataHandler = new RustFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrSwiftParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrSwiftParserService.java
index 97818e1..f7d1cf4 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrSwiftParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrSwiftParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing Swift source code.
- */
+/** ANTLR-based parser service for analyzing Swift source code. */
@ApplicationScoped
public class AntlrSwiftParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrSwiftParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public SwiftFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public SwiftFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing Swift file content for {}", fileName);
final CharStream charStream = CharStreams.fromString(fileContent, fileName);
@@ -55,15 +52,16 @@ public SwiftFileDataHandler parseFile(final String pathToFile, final String file
}
}
- private SwiftFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash) {
+ private SwiftFileDataHandler parse(
+ final CharStream charStream, final String fileName, final String fileHash) {
final Swift5Lexer lexer = new Swift5Lexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
final Swift5Parser parser = new Swift5Parser(tokens);
- final ParseTree topLevel = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::top_level);
+ final ParseTree topLevel =
+ AntlrParserUtils.parseTwoStage(
+ parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::top_level);
final SwiftFileDataHandler fileDataHandler = new SwiftFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/AntlrTypeScriptParserService.java b/src/main/java/net/explorviz/code/analysis/parser/AntlrTypeScriptParserService.java
index a5ebacb..47a00b8 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/AntlrTypeScriptParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/AntlrTypeScriptParserService.java
@@ -16,19 +16,16 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * ANTLR-based parser service for analyzing TypeScript/JavaScript source code.
- */
+/** ANTLR-based parser service for analyzing TypeScript/JavaScript source code. */
@ApplicationScoped
public class AntlrTypeScriptParserService {
public static final Logger LOGGER = LoggerFactory.getLogger(AntlrTypeScriptParserService.class);
- @Inject
- AntlrParseSettings parseSettings = new AntlrParseSettings();
+ @Inject AntlrParseSettings parseSettings = new AntlrParseSettings();
- public TypeScriptFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final String fileHash) {
+ public TypeScriptFileDataHandler parseFileContent(
+ final String fileContent, final String fileName, final String fileHash) {
try {
LOGGER.trace("Parsing TS/JS file content for {}", fileName);
final String normalizedContent = normalizeTsx(fileContent, fileName);
@@ -57,8 +54,11 @@ public TypeScriptFileDataHandler parseFile(final String pathToFile, final String
}
}
- private TypeScriptFileDataHandler parse(final CharStream charStream, final String fileName,
- final String fileHash, final String extension) {
+ private TypeScriptFileDataHandler parse(
+ final CharStream charStream,
+ final String fileName,
+ final String fileHash,
+ final String extension) {
final TypeScriptLexer lexer = new TypeScriptLexer(charStream);
AntlrParserUtils.configureLexer(lexer);
final CommonTokenStream tokens = new CommonTokenStream(lexer);
@@ -68,16 +68,15 @@ private TypeScriptFileDataHandler parse(final CharStream charStream, final Strin
final boolean javaScript = ".js".equals(extension) || ".jsx".equals(extension);
parser.setJavaScriptMode(javaScript);
- final ParseTree program = AntlrParserUtils.parseTwoStage(
- parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::program);
+ final ParseTree program =
+ AntlrParserUtils.parseTwoStage(
+ parser, tokens, LOGGER, fileName, parseSettings.parseTimeoutMs(), parser::program);
final TypeScriptFileDataHandler fileDataHandler = new TypeScriptFileDataHandler(fileName);
fileDataHandler.setFileHash(fileHash);
- final TypeScriptFileDataListener listener = new TypeScriptFileDataListener(
- fileDataHandler,
- extension,
- tokens);
+ final TypeScriptFileDataListener listener =
+ new TypeScriptFileDataListener(fileDataHandler, extension, tokens);
final ParseTreeWalker walker = new ParseTreeWalker();
walker.walk(listener, program);
diff --git a/src/main/java/net/explorviz/code/analysis/parser/JavaParserService.java b/src/main/java/net/explorviz/code/analysis/parser/JavaParserService.java
index f18aaf3..0d8b83c 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/JavaParserService.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/JavaParserService.java
@@ -27,9 +27,7 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-/**
- * Parser Object loads and parses .java files.
- */
+/** Parser Object loads and parses .java files. */
@ApplicationScoped
public class JavaParserService {
@@ -37,10 +35,10 @@ public class JavaParserService {
private static final String CRASHED_FILES_PATH = "/logs/crashedfiles/";
@ConfigProperty(name = "explorviz.gitanalysis.save-crashed_files")
- /* default */ boolean saveCrashedFilesProperty; // NOCS
+ /* default */ boolean saveCrashedFilesProperty;
@ConfigProperty(name = "explorviz.gitanalysis.assume-unresolved-types-from-wildcard-imports")
- /* default */ boolean wildcardImportProperty; // NOCS
+ /* default */ boolean wildcardImportProperty;
private List sourcePaths;
private JavaSymbolSolver javaSymbolSolver;
@@ -48,9 +46,8 @@ public class JavaParserService {
private ReflectionTypeSolver reflectionTypeSolver;
/**
- * Creates a new JavaParserService with only the reflectionTypeSolver, call
- * {@link JavaParserService#reset(List)} to
- * add JavaParserTypeSolvers and check in the given paths.
+ * Creates a new JavaParserService with only the reflectionTypeSolver, call {@link
+ * JavaParserService#reset(List)} to add JavaParserTypeSolvers and check in the given paths.
*/
public JavaParserService() {
combinedTypeSolver = new CombinedTypeSolver();
@@ -70,7 +67,7 @@ public JavaParserService(final List sourcePaths) {
reflectionTypeSolver = new ReflectionTypeSolver(false);
combinedTypeSolver.add(reflectionTypeSolver);
for (final String path : sourcePaths) {
- combinedTypeSolver.add(new JavaParserTypeSolver(Path.of(path))); // NOPMD
+ combinedTypeSolver.add(new JavaParserTypeSolver(Path.of(path)));
}
javaSymbolSolver = new JavaSymbolSolver(combinedTypeSolver);
}
@@ -84,7 +81,9 @@ public JavaParserService(final String sourcePath) {
this(Collections.singletonList(sourcePath));
}
- private JavaFileDataHandler parse(final CompilationUnit compilationUnit, final String fileName,
+ private JavaFileDataHandler parse(
+ final CompilationUnit compilationUnit,
+ final String fileName,
final boolean calculateMetrics) {
final JavaFileDataHandler data = new JavaFileDataHandler(fileName);
final FileDataVisitor fileDataVisitor;
@@ -97,16 +96,15 @@ private JavaFileDataHandler parse(final CompilationUnit compilationUnit, final S
}
/**
- * Resets the state of the JavaParserService, all cached values are cleared and
- * the parser can be reused for another
- * task.
+ * Resets the state of the JavaParserService, all cached values are cleared and the parser can be
+ * reused for another task.
*/
public void reset() {
combinedTypeSolver = new CombinedTypeSolver();
reflectionTypeSolver = new ReflectionTypeSolver(false);
combinedTypeSolver.add(reflectionTypeSolver);
for (final String path : this.sourcePaths) {
- combinedTypeSolver.add(new JavaParserTypeSolver(path)); // NOPMD
+ combinedTypeSolver.add(new JavaParserTypeSolver(path));
}
javaSymbolSolver = new JavaSymbolSolver(combinedTypeSolver);
}
@@ -121,9 +119,12 @@ public void reset(final List sourcePaths) {
reset();
}
- private JavaFileDataHandler parseAny(final String fileContent, final String fileName,
+ private JavaFileDataHandler parseAny(
+ final String fileContent,
+ final String fileName,
final Path path,
- final boolean calculateMetrics, final String fileHash)
+ final boolean calculateMetrics,
+ final String fileHash)
throws IOException {
// ToDo: Make this configurable
StaticJavaParser.getParserConfiguration().setLanguageLevel(LanguageLevel.JAVA_21);
@@ -162,7 +163,7 @@ private JavaFileDataHandler parseAny(final String fileContent, final String file
if (LOGGER.isErrorEnabled()) {
LOGGER.error("NoSuchMethodError in " + fileName + System.lineSeparator() + e.getMessage());
}
- } catch (Exception | Error e) { // NOPMD
+ } catch (Exception | Error e) {
if (LOGGER.isErrorEnabled()) {
LOGGER.error("Catched unknown exception in file " + fileName + System.lineSeparator() + e);
@@ -176,8 +177,11 @@ private JavaFileDataHandler parseAny(final String fileContent, final String file
*
* @param fileContent stringified java file
*/
- public JavaFileDataHandler parseFileContent(final String fileContent, final String fileName,
- final boolean calculateMetrics, final String fileHash) {
+ public JavaFileDataHandler parseFileContent(
+ final String fileContent,
+ final String fileName,
+ final boolean calculateMetrics,
+ final String fileHash) {
try {
return parseAny(fileContent, fileName, null, calculateMetrics, fileHash);
} catch (IOException e) {
@@ -192,18 +196,21 @@ public JavaFileDataHandler parseFileContent(final String fileContent, final Stri
*
* @throws IOException Gets thrown if the file is not reachable
*/
- public JavaFileDataHandler parseFile(final String pathToFile, final boolean calculateMetrics,
- final String fileHash) throws IOException {
+ public JavaFileDataHandler parseFile(
+ final String pathToFile, final boolean calculateMetrics, final String fileHash)
+ throws IOException {
final Path path = Path.of(pathToFile);
return parseAny("", path.getFileName().toString(), path, calculateMetrics, fileHash);
}
- private void calculateMetrics(final JavaFileDataHandler data, // NOPMD
- final CompilationUnit compilationUnit, final String fileName) {
+ private void calculateMetrics(
+ final JavaFileDataHandler data,
+ final CompilationUnit compilationUnit,
+ final String fileName) {
try {
final Pair pair = new Pair<>(new MetricAppender(data), new Object());
new CyclomaticComplexityVisitor().visit(compilationUnit, pair);
- } catch (Exception e) { // NOPMD
+ } catch (Exception e) {
// Catch everything and proceed, as these are only the metrics, the analysis has
// to continue
if (LOGGER.isErrorEnabled()) {
@@ -215,9 +222,9 @@ private void calculateMetrics(final JavaFileDataHandler data, // NOPMD
}
}
try {
- new NestedBlockDepthVisitor().visit(compilationUnit,
- new Pair<>(new MetricAppender(data), null));
- } catch (Exception e) { // NOPMD
+ new NestedBlockDepthVisitor()
+ .visit(compilationUnit, new Pair<>(new MetricAppender(data), null));
+ } catch (Exception e) {
// Catch everything and proceed, as these are only the metrics, the analysis has
// to continue
if (LOGGER.isErrorEnabled()) {
@@ -229,9 +236,9 @@ private void calculateMetrics(final JavaFileDataHandler data, // NOPMD
}
}
try {
- new LackOfCohesionMethodsVisitor().visit(compilationUnit,
- new Pair<>(new MetricAppender(data), null));
- } catch (Exception e) { // NOPMD
+ new LackOfCohesionMethodsVisitor()
+ .visit(compilationUnit, new Pair<>(new MetricAppender(data), null));
+ } catch (Exception e) {
// Catch everything and proceed, as these are only the metrics, the analysis has
// to continue
if (LOGGER.isErrorEnabled()) {
@@ -243,5 +250,4 @@ private void calculateMetrics(final JavaFileDataHandler data, // NOPMD
}
}
}
-
}
diff --git a/src/main/java/net/explorviz/code/analysis/parser/TsxJsxNormalizer.java b/src/main/java/net/explorviz/code/analysis/parser/TsxJsxNormalizer.java
index 3745a88..4672c68 100644
--- a/src/main/java/net/explorviz/code/analysis/parser/TsxJsxNormalizer.java
+++ b/src/main/java/net/explorviz/code/analysis/parser/TsxJsxNormalizer.java
@@ -1,15 +1,12 @@
package net.explorviz.code.analysis.parser;
/**
- * Replaces JSX elements in TSX source with {@code null} so the TypeScript
- * grammar can parse
- * files without expensive JSX disambiguation. Suffices for structural code
- * analysis.
+ * Replaces JSX elements in TSX source with {@code null} so the TypeScript grammar can parse files
+ * without expensive JSX disambiguation. Suffices for structural code analysis.
*/
public final class TsxJsxNormalizer {
- private TsxJsxNormalizer() {
- }
+ private TsxJsxNormalizer() {}
public static String replaceJsxWithNull(final String source) {
final StringBuilder out = new StringBuilder(source.length());
@@ -71,7 +68,9 @@ private static boolean hasJsxPredecessor(final String source, final int ltIndex)
}
if (index > 0) {
final String twoChars = source.substring(index - 1, index + 1);
- if ("=>".equals(twoChars) || "&&".equals(twoChars) || "||".equals(twoChars)
+ if ("=>".equals(twoChars)
+ || "&&".equals(twoChars)
+ || "||".equals(twoChars)
|| "??".equals(twoChars)) {
return true;
}
@@ -90,7 +89,9 @@ private static int skipJsxElement(final String source, final int start) {
index = skipTagName(source, index);
index = skipTypeArguments(source, index);
index = skipAttributes(source, index);
- if (index + 1 < source.length() && source.charAt(index) == '/' && source.charAt(index + 1) == '>') {
+ if (index + 1 < source.length()
+ && source.charAt(index) == '/'
+ && source.charAt(index + 1) == '>') {
return index + 2;
}
if (index < source.length() && source.charAt(index) == '>') {
@@ -259,7 +260,8 @@ private static int skipQuoted(final String source, final int start) {
return index;
}
- private static int skipBalanced(final String source, final int start, final char open, final char close) {
+ private static int skipBalanced(
+ final String source, final int start, final char open, final char close) {
int depth = 0;
int index = start;
while (index < source.length()) {
diff --git a/src/main/java/net/explorviz/code/analysis/service/AnalysisCancellationResult.java b/src/main/java/net/explorviz/code/analysis/service/AnalysisCancellationResult.java
index ba13ae7..b360830 100644
--- a/src/main/java/net/explorviz/code/analysis/service/AnalysisCancellationResult.java
+++ b/src/main/java/net/explorviz/code/analysis/service/AnalysisCancellationResult.java
@@ -1,8 +1,6 @@
package net.explorviz.code.analysis.service;
-/**
- * Result of requesting cancellation for an analysis job.
- */
+/** Result of requesting cancellation for an analysis job. */
public enum AnalysisCancellationResult {
/** Cancellation was accepted. */
CANCELLED,
diff --git a/src/main/java/net/explorviz/code/analysis/service/AnalysisConfig.java b/src/main/java/net/explorviz/code/analysis/service/AnalysisConfig.java
index 98530b3..25427f4 100644
--- a/src/main/java/net/explorviz/code/analysis/service/AnalysisConfig.java
+++ b/src/main/java/net/explorviz/code/analysis/service/AnalysisConfig.java
@@ -6,16 +6,19 @@
import java.util.Optional;
import java.util.stream.Collectors;
-/**
- * Configuration object for Git analysis operations.
- */
-public record AnalysisConfig(Optional