Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| f8ccb4d90c | |||
| b11f30ba44 | |||
| 77201829b7 |
Binary file not shown.
@@ -39,6 +39,7 @@ const vscode = __importStar(require("vscode"));
|
|||||||
const cp = __importStar(require("child_process"));
|
const cp = __importStar(require("child_process"));
|
||||||
const fs = __importStar(require("fs"));
|
const fs = __importStar(require("fs"));
|
||||||
const path = __importStar(require("path"));
|
const path = __importStar(require("path"));
|
||||||
|
const os = __importStar(require("os"));
|
||||||
const codelensProvider_1 = require("./codelensProvider");
|
const codelensProvider_1 = require("./codelensProvider");
|
||||||
function getConfig(key, def) { const v = vscode.workspace.getConfiguration().get(key); return v === undefined ? def : v; }
|
function getConfig(key, def) { const v = vscode.workspace.getConfiguration().get(key); return v === undefined ? def : v; }
|
||||||
function getWorkspaceFolderUri(docUri) { return docUri ? vscode.workspace.getWorkspaceFolder(docUri)?.uri : vscode.workspace.workspaceFolders?.[0]?.uri; }
|
function getWorkspaceFolderUri(docUri) { return docUri ? vscode.workspace.getWorkspaceFolder(docUri)?.uri : vscode.workspace.workspaceFolders?.[0]?.uri; }
|
||||||
@@ -46,6 +47,33 @@ function readPackageName(text) { return text.match(/^\s*package\s+([\w\.]+)\s*;/
|
|||||||
function fqcnFromDocument(doc) { const pkg = readPackageName(doc.getText()); const simple = path.basename(doc.fileName).replace(/\.java$/i, ""); return pkg ? `${pkg}.${simple}` : simple; }
|
function fqcnFromDocument(doc) { const pkg = readPackageName(doc.getText()); const simple = path.basename(doc.fileName).replace(/\.java$/i, ""); return pkg ? `${pkg}.${simple}` : simple; }
|
||||||
function execInTerminal(cmd, cwd, name = "Java Class Runner") { const t = vscode.window.terminals.find(tt => tt.name === name) || vscode.window.createTerminal({ name }); t.show(true); if (cwd)
|
function execInTerminal(cmd, cwd, name = "Java Class Runner") { const t = vscode.window.terminals.find(tt => tt.name === name) || vscode.window.createTerminal({ name }); t.show(true); if (cwd)
|
||||||
t.sendText(`cd "${cwd}"`); t.sendText(cmd); }
|
t.sendText(`cd "${cwd}"`); t.sendText(cmd); }
|
||||||
|
let homeDirectory;
|
||||||
|
let currentUser;
|
||||||
|
function untildify(pathWithTilde) {
|
||||||
|
if (homeDirectory === undefined) {
|
||||||
|
homeDirectory = os.homedir();
|
||||||
|
}
|
||||||
|
// Handle regular ~ expansion (current user)
|
||||||
|
if (homeDirectory && /^~(?=$|\/|\\)/.test(pathWithTilde)) {
|
||||||
|
return pathWithTilde.replace(/^~/, homeDirectory);
|
||||||
|
}
|
||||||
|
// Handle ~username expansion (only for current user)
|
||||||
|
const userMatch = pathWithTilde.match(/^~([^/\\]+)(.*)/);
|
||||||
|
if (userMatch) {
|
||||||
|
if (currentUser === undefined) {
|
||||||
|
currentUser = os.userInfo().username;
|
||||||
|
}
|
||||||
|
if (currentUser) {
|
||||||
|
const username = userMatch[1];
|
||||||
|
const rest = userMatch[2];
|
||||||
|
if (username === currentUser) {
|
||||||
|
return homeDirectory + rest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Return unchanged if no expansion occurred
|
||||||
|
return pathWithTilde;
|
||||||
|
}
|
||||||
async function ensureDir(p) {
|
async function ensureDir(p) {
|
||||||
await fs.promises.mkdir(p, { recursive: true });
|
await fs.promises.mkdir(p, { recursive: true });
|
||||||
}
|
}
|
||||||
@@ -62,21 +90,21 @@ async function compileJava(javaFile, outDir, classpath, ctxpath, wd) {
|
|||||||
}
|
}
|
||||||
vscode.window.showInformationMessage("Compiling with Java-TX");
|
vscode.window.showInformationMessage("Compiling with Java-TX");
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const stripOuterQuotes = (s) => s ? s.replace(/^\s*["']|["']\s*$/g, "") : s;
|
const config = vscode.workspace.getConfiguration("tx");
|
||||||
const jar = path.join(stripOuterQuotes(ctxpath), "JavaTXcompiler-0.1-jar-with-dependencies.jar");
|
let compiler = config.get("compilerLocation");
|
||||||
|
if (!compiler || compiler.trim() === "") {
|
||||||
|
vscode.window.showErrorMessage("Bitte konfiguriere den Pfad des Java-TX Compilers in den Einstellungen!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
compiler = path.resolve(untildify(compiler));
|
||||||
const args = [
|
const args = [
|
||||||
"-jar",
|
"-jar", compiler, javaFile,
|
||||||
stripOuterQuotes(jar),
|
"-cp", classpath,
|
||||||
stripOuterQuotes(javaFile), // <- KEINE Quotes in den Strings!
|
"-d", outDir,
|
||||||
"-cp",
|
|
||||||
stripOuterQuotes(classpath),
|
|
||||||
"-d",
|
|
||||||
stripOuterQuotes(outDir),
|
|
||||||
];
|
];
|
||||||
// Diagnose: hier siehst du sofort, ob noch Quotes drin sind
|
|
||||||
console.log("spawn args:", args.map(a => JSON.stringify(a)).join(" "));
|
console.log("spawn args:", args.map(a => JSON.stringify(a)).join(" "));
|
||||||
const proc = cp.spawn("java", args, {
|
const proc = cp.spawn("java", args, {
|
||||||
cwd: stripOuterQuotes(wd),
|
cwd: wd,
|
||||||
env: { ...process.env },
|
env: { ...process.env },
|
||||||
shell: false,
|
shell: false,
|
||||||
});
|
});
|
||||||
@@ -117,7 +145,7 @@ function activate(ctx) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
await compileJava(ed.document.fileName, outDir, `"${cpFolders.join(path.delimiter)}"`, ctx.extensionPath, wd);
|
await compileJava(ed.document.fileName, outDir, cpFolders.join(path.delimiter), ctx.extensionPath, wd);
|
||||||
}
|
}
|
||||||
catch (err) {
|
catch (err) {
|
||||||
vscode.window.showErrorMessage(`Kompilierung fehlgeschlagen: ${err?.message || String(err)}`);
|
vscode.window.showErrorMessage(`Kompilierung fehlgeschlagen: ${err?.message || String(err)}`);
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "java-tx-main-runner",
|
"name": "java-tx-main-runner",
|
||||||
"version": "0.0.4",
|
"version": "0.0.5",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "java-tx-main-runner",
|
"name": "java-tx-main-runner",
|
||||||
"version": "0.0.4",
|
"version": "0.0.5",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^20.11.0",
|
"@types/node": "^20.11.0",
|
||||||
"@types/vscode": "^1.85.0",
|
"@types/vscode": "^1.85.0",
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
"name": "java-tx-main-runner",
|
"name": "java-tx-main-runner",
|
||||||
"displayName": "Java-TX Main Runner",
|
"displayName": "Java-TX Main Runner",
|
||||||
"description": "Führt Java und Java-TX Main-Methoden aus und nutzt den /out Ordner als Classpath. Fügt einen 'Run' CodeLens über main(...) hinzu.",
|
"description": "Führt Java und Java-TX Main-Methoden aus und nutzt den /out Ordner als Classpath. Fügt einen 'Run' CodeLens über main(...) hinzu.",
|
||||||
"version": "0.0.4",
|
"version": "0.0.6",
|
||||||
"engines": {
|
"engines": {
|
||||||
"vscode": "^1.85.0"
|
"vscode": "^1.85.0"
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ import * as vscode from "vscode";
|
|||||||
import * as cp from "child_process";
|
import * as cp from "child_process";
|
||||||
import * as fs from "fs";
|
import * as fs from "fs";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
|
import * as os from "os";
|
||||||
import { JavaMainCodeLensProvider } from "./codelensProvider";
|
import { JavaMainCodeLensProvider } from "./codelensProvider";
|
||||||
|
|
||||||
function getConfig<T>(key: string, def: T): T { const v = vscode.workspace.getConfiguration().get<T>(key); return v===undefined?def:v; }
|
function getConfig<T>(key: string, def: T): T { const v = vscode.workspace.getConfiguration().get<T>(key); return v===undefined?def:v; }
|
||||||
@@ -10,11 +11,44 @@ function getWorkspaceFolderUri(docUri?: vscode.Uri): vscode.Uri | undefined { re
|
|||||||
function readPackageName(text: string): string | undefined { return text.match(/^\s*package\s+([\w\.]+)\s*;/m)?.[1]; }
|
function readPackageName(text: string): string | undefined { return text.match(/^\s*package\s+([\w\.]+)\s*;/m)?.[1]; }
|
||||||
function fqcnFromDocument(doc: vscode.TextDocument): string | undefined { const pkg = readPackageName(doc.getText()); const simple = path.basename(doc.fileName).replace(/\.java$/i,""); return pkg ? `${pkg}.${simple}` : simple; }
|
function fqcnFromDocument(doc: vscode.TextDocument): string | undefined { const pkg = readPackageName(doc.getText()); const simple = path.basename(doc.fileName).replace(/\.java$/i,""); return pkg ? `${pkg}.${simple}` : simple; }
|
||||||
function execInTerminal(cmd: string, cwd?: string, name="Java Class Runner") { const t = vscode.window.terminals.find(tt=>tt.name===name) || vscode.window.createTerminal({name}); t.show(true); if (cwd) t.sendText(`cd "${cwd}"`); t.sendText(cmd); }
|
function execInTerminal(cmd: string, cwd?: string, name="Java Class Runner") { const t = vscode.window.terminals.find(tt=>tt.name===name) || vscode.window.createTerminal({name}); t.show(true); if (cwd) t.sendText(`cd "${cwd}"`); t.sendText(cmd); }
|
||||||
|
|
||||||
|
let homeDirectory: string;
|
||||||
|
let currentUser: string;
|
||||||
|
|
||||||
|
function untildify(pathWithTilde: string) {
|
||||||
|
if (homeDirectory === undefined) {
|
||||||
|
homeDirectory = os.homedir();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle regular ~ expansion (current user)
|
||||||
|
if (homeDirectory && /^~(?=$|\/|\\)/.test(pathWithTilde)) {
|
||||||
|
return pathWithTilde.replace(/^~/, homeDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle ~username expansion (only for current user)
|
||||||
|
const userMatch = pathWithTilde.match(/^~([^/\\]+)(.*)/);
|
||||||
|
if (userMatch) {
|
||||||
|
if (currentUser === undefined) {
|
||||||
|
currentUser = os.userInfo().username;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentUser) {
|
||||||
|
const username = userMatch[1];
|
||||||
|
const rest = userMatch[2];
|
||||||
|
if (username === currentUser) {
|
||||||
|
return homeDirectory + rest;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return unchanged if no expansion occurred
|
||||||
|
return pathWithTilde;
|
||||||
|
}
|
||||||
|
|
||||||
async function ensureDir(p: string) {
|
async function ensureDir(p: string) {
|
||||||
await fs.promises.mkdir(p, { recursive: true });
|
await fs.promises.mkdir(p, { recursive: true });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async function compileJava(javaFile: string, outDir: string, classpath: string, ctxpath : string, wd: string): Promise<void> {
|
async function compileJava(javaFile: string, outDir: string, classpath: string, ctxpath : string, wd: string): Promise<void> {
|
||||||
await ensureDir(outDir);
|
await ensureDir(outDir);
|
||||||
if(javaFile.includes(".java")){
|
if(javaFile.includes(".java")){
|
||||||
@@ -29,25 +63,24 @@ async function compileJava(javaFile: string, outDir: string, classpath: string,
|
|||||||
vscode.window.showInformationMessage("Compiling with Java-TX")
|
vscode.window.showInformationMessage("Compiling with Java-TX")
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
const stripOuterQuotes = (s: string) =>
|
const config = vscode.workspace.getConfiguration("tx");
|
||||||
s ? s.replace(/^\s*["']|["']\s*$/g, "") : s;
|
let compiler = config.get<string>("compilerLocation");
|
||||||
|
if (!compiler || compiler.trim() === "") {
|
||||||
|
vscode.window.showErrorMessage("Bitte konfiguriere den Pfad des Java-TX Compilers in den Einstellungen!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
compiler = path.resolve(untildify(compiler));
|
||||||
|
|
||||||
const jar = path.join(stripOuterQuotes(ctxpath), "JavaTXcompiler-0.1-jar-with-dependencies.jar");
|
|
||||||
const args = [
|
const args = [
|
||||||
"-jar",
|
"-jar", compiler, javaFile,
|
||||||
stripOuterQuotes(jar),
|
"-cp", classpath,
|
||||||
stripOuterQuotes(javaFile), // <- KEINE Quotes in den Strings!
|
"-d", outDir,
|
||||||
"-cp",
|
|
||||||
stripOuterQuotes(classpath),
|
|
||||||
"-d",
|
|
||||||
stripOuterQuotes(outDir),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
// Diagnose: hier siehst du sofort, ob noch Quotes drin sind
|
|
||||||
console.log("spawn args:", args.map(a => JSON.stringify(a)).join(" "));
|
console.log("spawn args:", args.map(a => JSON.stringify(a)).join(" "));
|
||||||
|
|
||||||
const proc = cp.spawn("java", args, {
|
const proc = cp.spawn("java", args, {
|
||||||
cwd: stripOuterQuotes(wd),
|
cwd: wd,
|
||||||
env: { ...process.env },
|
env: { ...process.env },
|
||||||
shell: false,
|
shell: false,
|
||||||
});
|
});
|
||||||
@@ -98,7 +131,7 @@ export function activate(ctx: vscode.ExtensionContext) {
|
|||||||
if (!fqcn) { vscode.window.showErrorMessage("Konnte FQCN nicht bestimmen."); return; }
|
if (!fqcn) { vscode.window.showErrorMessage("Konnte FQCN nicht bestimmen."); return; }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
await compileJava(ed.document.fileName, outDir, `"${cpFolders.join(path.delimiter)}"`, ctx.extensionPath, wd); }
|
await compileJava(ed.document.fileName, outDir, cpFolders.join(path.delimiter), ctx.extensionPath, wd); }
|
||||||
|
|
||||||
catch (err:any) {
|
catch (err:any) {
|
||||||
vscode.window.showErrorMessage(`Kompilierung fehlgeschlagen: ${err?.message || String(err)}`);
|
vscode.window.showErrorMessage(`Kompilierung fehlgeschlagen: ${err?.message || String(err)}`);
|
||||||
|
|||||||
Reference in New Issue
Block a user