in src/daffodilDebugger/utils.ts [54:115]
export async function runDebugger(
rootPath: string,
daffodilDebugClasspath: Array<string>,
filePath: string,
serverPort: number,
dfdlDebugger: DFDLDebugger,
createTerminal: boolean = false
): Promise<vscode.Terminal> {
const dfdlVersion = daffodilVersion(filePath)
const artifact = daffodilArtifact(dfdlVersion)
const scriptPath = path.join(
rootPath,
`daffodil-debugger-${dfdlVersion}-${LIB_VERSION}`
)
// Locates the $JAVA_HOME, or if not defined, the highest version available.
const javaHome: IJavaHomeInfo | undefined = await new Promise(
(resolve, reject) => {
_locateJavaHome({ version: '>=1.8' }, (error, javaHomes) => {
console.log(`detected java homes: ${JSON.stringify(javaHomes)}`)
javaHomes
? resolve(
process.env.JAVA_HOME
? javaHomes.find(
(home, idx, obj) => home.path == process.env.JAVA_HOME
)
: latestJdk(javaHomes)
)
: undefined
})
}
)
const isAtLeastJdk17: boolean = parseFloat(javaHome?.version ?? '0') >= 17
console.log(
`choosing java home at ${javaHome?.path}, version ${javaHome?.version}, is at least JDK 17: ${isAtLeastJdk17}`
)
// The backend's launch script honors $JAVA_HOME, but if not set it assumes java is available on the path.
const env = javaHome
? {
DAFFODIL_DEBUG_CLASSPATH: daffodilDebugClasspath.join(
osCheck(';', ':')
),
DAFFODIL_DEBUG_LOG_LEVEL: dfdlDebugger.logging.level,
DAFFODIL_DEBUG_LOG_FILE: dfdlDebugger.logging.file,
JAVA_HOME: javaHome?.path,
}
: {
DAFFODIL_DEBUG_CLASSPATH: daffodilDebugClasspath.join(
osCheck(';', ':')
),
DAFFODIL_DEBUG_LOG_LEVEL: dfdlDebugger.logging.level,
DAFFODIL_DEBUG_LOG_FILE: dfdlDebugger.logging.file,
}
return await runScript(
scriptPath,
artifact.scriptName,
createTerminal,
shellArgs(serverPort, isAtLeastJdk17),
env,
'daffodil'
)
}