move files into modules

This commit is contained in:
2026-06-06 15:07:03 +02:00
parent 00161b294c
commit cc66b7517b
88 changed files with 1090 additions and 79 deletions

38
file_combine/build.gradle Normal file
View File

@@ -0,0 +1,38 @@
plugins {
id 'java'
}
group = 'click.kamil.file_combine'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
// deps for parsing java AST
implementation 'org.eclipse.jdt:org.eclipse.jdt.core:3.36.0'
compileOnly 'org.projectlombok:lombok:1.18.46'
annotationProcessor 'org.projectlombok:lombok:1.18.46'
testImplementation 'org.junit.jupiter:junit-jupiter-api:6.1.0'
testImplementation 'org.junit.jupiter:junit-jupiter-engine:6.1.0'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher:6.1.0'
}
tasks.named('test') {
useJUnitPlatform()
}

View File

@@ -0,0 +1,131 @@
package click.kamil.file_combine;
import click.kamil.file_combine.common.FileUtils;
import org.eclipse.jdt.core.dom.*;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
import org.eclipse.jface.text.Document;
import org.eclipse.text.edits.TextEdit;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.*;
public class JavaConcatenator {
public static void main(String[] args) throws IOException {
Path sourceDir = Path.of("./src/main/java/click/kamil/callgraphexporter/domain");
Path outputFile = Path.of("./Combined.java");
String targetPackage = "click.kamil";
List<Path> javaFiles = FileUtils.findFilesWithExtension(Set.of(sourceDir), ".java");
Set<String> uniqueImports = new TreeSet<>();
List<String> classBodies = new ArrayList<>();
for (Path javaFile : javaFiles) {
String source = Files.readString(javaFile);
FileParseResult result = parseAndTransform(source);
uniqueImports.addAll(result.imports);
classBodies.add(result.classBody);
}
StringBuilder combinedSource = new StringBuilder();
// Add package declaration
combinedSource.append("package ").append(targetPackage).append(";\n\n");
// Filter and append imports excluding any from com.example.*
for (String imp : uniqueImports) {
String normalizedImport = imp.replaceFirst("^import\\s+static\\s+", "")
.replaceFirst("^import\\s+", "")
.replaceFirst(";$", "");
if (!normalizedImport.startsWith(targetPackage)) {
combinedSource.append(imp).append("\n");
}
}
combinedSource.append("\n");
// Append all class bodies
for (String body : classBodies) {
combinedSource.append(body).append("\n");
}
Files.writeString(outputFile, combinedSource.toString());
System.out.println("Combined Java source written to: " + outputFile);
}
private static FileParseResult parseAndTransform(String source) {
ASTParser parser = ASTParser.newParser(AST.getJLSLatest());
parser.setSource(source.toCharArray());
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setResolveBindings(false);
CompilationUnit cu = (CompilationUnit) parser.createAST(null);
AST ast = cu.getAST();
ASTRewrite rewrite = ASTRewrite.create(ast);
// Collect imports as strings
List<String> imports = new ArrayList<>();
for (Object obj : cu.imports()) {
ImportDeclaration imp = (ImportDeclaration) obj;
imports.add(imp.toString().trim());
rewrite.remove(imp, null); // Remove from AST
}
// Remove package declaration
if (cu.getPackage() != null) {
rewrite.remove(cu.getPackage(), null);
}
// Remove 'public' from type declarations
cu.accept(new ASTVisitor() {
@Override
public boolean visit(TypeDeclaration node) {
removePublicModifier(node.modifiers(), rewrite);
return true;
}
@Override
public boolean visit(EnumDeclaration node) {
removePublicModifier(node.modifiers(), rewrite);
return true;
}
private void removePublicModifier(List<IExtendedModifier> modifiers, ASTRewrite rewrite) {
for (IExtendedModifier mod : new ArrayList<>(modifiers)) {
if (mod.isModifier()) {
Modifier m = (Modifier) mod;
if (m.isPublic()) {
rewrite.remove(m, null);
}
}
}
}
});
try {
Document document = new Document(source);
TextEdit edits = rewrite.rewriteAST(document, null);
edits.apply(document);
String transformedSource = document.get();
return new FileParseResult(imports, transformedSource);
} catch (Exception e) {
throw new RuntimeException("Failed to apply AST edits", e);
}
}
private static class FileParseResult {
List<String> imports;
String classBody;
public FileParseResult(List<String> imports, String classBody) {
this.imports = imports;
this.classBody = classBody;
}
}
}

View File

@@ -0,0 +1,26 @@
package click.kamil.file_combine.common;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class FileUtils {
public static List<Path> findFilesWithExtension(Set<Path> startDirs, String extension) throws RuntimeException {
try (Stream<Path> paths = startDirs.stream()
.flatMap(startDir -> {
try {
return Files.walk(startDir);
} catch (IOException e) {
throw new RuntimeException(e);
}
})) {
return paths
.filter(p -> Files.isRegularFile(p) && p.toString().endsWith(extension))
.collect(Collectors.toList());
}
}
}

View File

@@ -0,0 +1,11 @@
package click.kamil;
import org.junit.jupiter.api.Test;
class MyTest {
@Test
void contextLoads() {
}
}