| #!/usr/bin/env python3 | |
| # Copyright (c) 2026, the R8 project authors. Please see the AUTHORS file | |
| # for details. All rights reserved. Use of this source code is governed by a | |
| # BSD-style license that can be found in the LICENSE file. | |
| import json | |
| import os | |
| import sys | |
| # Add the tools directory to python path to import defines and jdk | |
| TOOLS_DIR = os.path.abspath(os.path.dirname(__file__)) | |
| sys.path.insert(0, TOOLS_DIR) | |
| import defines | |
| import jdk | |
| def main(): | |
| vscode_dir = os.path.join(defines.REPO_ROOT, '.vscode') | |
| settings_path = os.path.join(vscode_dir, 'settings.json') | |
| # Resolve absolute paths | |
| try: | |
| jdk17_home = jdk.GetJdk17Home() | |
| except Exception as e: | |
| print('Error resolving JDK 17 home: %s' % e) | |
| # Fallback to manual resolution | |
| jdk17_root = os.path.join(defines.REPO_ROOT, 'third_party', 'openjdk', | |
| 'jdk-17') | |
| if defines.IsLinux(): | |
| jdk17_home = os.path.join(jdk17_root, 'linux') | |
| elif defines.IsOsX(): | |
| jdk17_home = os.path.join(jdk17_root, 'osx', 'Contents', 'Home') | |
| else: | |
| jdk17_home = os.path.join(jdk17_root, 'windows') | |
| gradle_home = os.path.join(defines.REPO_ROOT, 'third_party', 'gradle') | |
| settings = { | |
| "java.jdt.ls.java.home": | |
| jdk17_home, | |
| "java.jdt.ls.vmargs": | |
| "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx8G -Xms100m -Xlog:disable", | |
| "java.import.gradle.java.home": | |
| jdk17_home, | |
| "java.import.gradle.home": | |
| gradle_home, | |
| "java.import.gradle.wrapper.enabled": | |
| False, | |
| "gradle.java.home": | |
| jdk17_home, | |
| "gradle.home": | |
| gradle_home, | |
| "java.autobuild.enabled": | |
| False, | |
| "java.configuration.runtimes": [{ | |
| "name": "JavaSE-17", | |
| "path": jdk17_home, | |
| "default": True | |
| }] | |
| } | |
| if not os.path.exists(vscode_dir): | |
| os.makedirs(vscode_dir) | |
| # Write or update settings.json | |
| existing_settings = {} | |
| if os.path.exists(settings_path): | |
| try: | |
| with open(settings_path, 'r') as f: | |
| existing_settings = json.load(f) | |
| except Exception: | |
| # If file is invalid or empty, start fresh | |
| pass | |
| # Merge settings | |
| existing_settings.update(settings) | |
| with open(settings_path, 'w') as f: | |
| json.dump(existing_settings, f, indent=2) | |
| f.write('\n') | |
| print('Updated settings in %s.' % settings_path) | |
| return 0 | |
| if __name__ == '__main__': | |
| sys.exit(main()) |