diff --git a/ci.jsonnet b/ci.jsonnet index f8922295..c0dbabc7 100644 --- a/ci.jsonnet +++ b/ci.jsonnet @@ -220,7 +220,7 @@ local with(platform, java_release, timelimit="15:00") = { specVersion: "3", # Overlay - overlay: "ac39d70172b1327e73fde446dad6341727340376", + overlay: "6def1af6dac47b0c2b7ebf7cbbde821ef8f4b41d", # For use by overlay versions:: versions, diff --git a/ci/common.jsonnet b/ci/common.jsonnet index 43f9f366..d804edc5 100644 --- a/ci/common.jsonnet +++ b/ci/common.jsonnet @@ -68,7 +68,9 @@ local common_json = import "../common.json"; local _oraclejdk = common_json.jdks["oraclejdk-latest"]; local _ov = "ee-%s+%s" % [_oraclejdk.version, _oraclejdk.build_id]; local _lv = _labsjdk.version; - assert std.startsWith(_lv, _ov) : "update oraclejdk-latest to match labsjdk-ee-latest: %s+%s vs %s" % [_oraclejdk.version, _oraclejdk.build_id, _labsjdk.version]; + # Skip the check if we are not using a labsjdk. This can happen on JDK integration branches. + local no_labsjdk = _labsjdk.name != "labsjdk"; + assert no_labsjdk || std.startsWith(_lv, _ov) : "update oraclejdk-latest to match labsjdk-ee-latest: %s+%s vs %s" % [_oraclejdk.version, _oraclejdk.build_id, _labsjdk.version]; true, # The raw jdk data, the same as common_json.jdks + { jdk_version:: } diff --git a/common.json b/common.json index f241a0f5..ac12c51f 100644 --- a/common.json +++ b/common.json @@ -4,7 +4,7 @@ "Jsonnet files should not include this file directly but use ci/common.jsonnet instead." ], - "mx_version": "7.2.2", + "mx_version": "7.3.2", "COMMENT.jdks": "When adding or removing JDKs keep in sync with JDKs in ci/common.jsonnet", "jdks": { @@ -42,13 +42,13 @@ "labsjdk-ee-21Debug": {"name": "labsjdk", "version": "ee-21.0.1+11-jvmci-23.1-b22-debug", "platformspecific": true }, "labsjdk-ee-21-llvm": {"name": "labsjdk", "version": "ee-21.0.1+11-jvmci-23.1-b22-sulong", "platformspecific": true }, - "oraclejdk-latest": {"name": "jpg-jdk", "version": "22", "build_id": "24", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]}, - "labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-22+24-jvmci-b01", "platformspecific": true }, - "labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-22+24-jvmci-b01-debug", "platformspecific": true }, - "labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-22+24-jvmci-b01-sulong", "platformspecific": true }, - "labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-22+24-jvmci-b01", "platformspecific": true }, - "labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-22+24-jvmci-b01-debug", "platformspecific": true }, - "labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-22+24-jvmci-b01-sulong", "platformspecific": true } + "oraclejdk-latest": {"name": "jpg-jdk", "version": "22", "build_id": "25", "release": true, "platformspecific": true, "extrabundles": ["static-libs"]}, + "labsjdk-ce-latest": {"name": "labsjdk", "version": "ce-22+25-jvmci-b01", "platformspecific": true }, + "labsjdk-ce-latestDebug": {"name": "labsjdk", "version": "ce-22+25-jvmci-b01-debug", "platformspecific": true }, + "labsjdk-ce-latest-llvm": {"name": "labsjdk", "version": "ce-22+25-jvmci-b01-sulong", "platformspecific": true }, + "labsjdk-ee-latest": {"name": "labsjdk", "version": "ee-22+25-jvmci-b01", "platformspecific": true }, + "labsjdk-ee-latestDebug": {"name": "labsjdk", "version": "ee-22+25-jvmci-b01-debug", "platformspecific": true }, + "labsjdk-ee-latest-llvm": {"name": "labsjdk", "version": "ee-22+25-jvmci-b01-sulong", "platformspecific": true } }, "eclipse": { diff --git a/docs/IDE.md b/docs/IDE.md index 9489f558..ba83cafe 100644 --- a/docs/IDE.md +++ b/docs/IDE.md @@ -6,8 +6,6 @@ Download and install the latest IntelliJ IDEA Community Edition: [https://www.je Change the IntelliJ maximum memory to 2 GB or more. As per the [instructions](https://www.jetbrains.com/idea/help/increasing-memory-heap.html#d1366197e127), from the main menu choose **Help | Edit Custom VM Options** and modify the **-Xmx** and **-Xms** options. -Enable parallel builds in **Preferences > Build, Execution, Deployment > Compiler > Compile independent modules in parallel**. - Open IntelliJ and go to **Preferences > Plugins > Browse Repositories**. Install the following plugins: * [Eclipse Code Formatter](https://plugins.jetbrains.com/plugin/6546): formats code according to Eclipse @@ -33,6 +31,14 @@ Recommended _Format on Save_ configuration (**IntelliJ IDEA > Preferences > Tool 2. Check "Optimize imports" (Files:Java) 3. Check "Run code cleanup". This removes unused imports. +At the moment, points 1 and 2 can be automatically configured by passing `--on-save-actions` to `mx intellijinit`. + +Use `MX_INTELLIJINIT_DEFAULTS` environment variable to set default options and flags for the `mx intellijinit` command. +The value is split using spaces as delimiter and prepended to the arguments passed on the command line. + +Use `mx intellijinit --help` to view all the options and flags that allow further customization +of the IntelliJ projects generation. + #### Making IntelliJ Feel Similar to Eclipse (Optional) Set IntelliJ to use the Eclipse compiler by going to *IntelliJ IDEA > Preferences > Build, Execution, Deployment > Java Compiler* diff --git a/src/mx/_impl/mx.py b/src/mx/_impl/mx.py index aac4f097..35eff00b 100755 --- a/src/mx/_impl/mx.py +++ b/src/mx/_impl/mx.py @@ -19250,7 +19250,7 @@ def alarm_handler(signum, frame): abort(1, killsig=signal.SIGINT) # The version must be updated for every PR (checked in CI) and the comment should reflect the PR's issue -version = VersionSpec("7.3.2") # GR-50202 Make unittest configs accessible outside of mx_unittest +version = VersionSpec("7.3.3") # Minor improvements in mx intellijinit: option for max java compliance, etc. _mx_start_datetime = datetime.utcnow() _last_timestamp = _mx_start_datetime diff --git a/src/mx/_impl/mx_ide_intellij.py b/src/mx/_impl/mx_ide_intellij.py index 118544be..9ff85da9 100644 --- a/src/mx/_impl/mx_ide_intellij.py +++ b/src/mx/_impl/mx_ide_intellij.py @@ -39,6 +39,7 @@ from argparse import ArgumentParser, REMAINDER from os.path import join, basename, dirname, exists, isdir, realpath from io import StringIO +from dataclasses import dataclass from . import mx from . import mx_ideconfig @@ -53,22 +54,41 @@ intellij_ruby_sdk_type = 'RUBY_SDK' +@dataclass +class IntellijConfig: + python_projects: bool = True + external_projects: bool = True + java_modules: bool = True + native_projects: bool = False + max_java_compliance: int = 21 + import_inner_classes: bool = False + on_save_actions: bool = False + refresh_only: bool = False + do_fsck_projects: bool = True + args: ... = None + + @mx.command('mx', 'intellijinit') def intellijinit_cli(args): """(re)generate Intellij project configurations""" parser = ArgumentParser(prog='mx ideinit') - parser.add_argument('--no-python-projects', action='store_false', dest='pythonProjects', help='Do not generate projects for the mx python projects.') - parser.add_argument('--no-external-projects', action='store_false', dest='externalProjects', help='Do not generate external projects.') - parser.add_argument('--no-java-projects', '--mx-python-modules-only', action='store_false', dest='javaModules', help='Do not generate projects for the java projects.') - parser.add_argument('--native-projects', action='store_true', dest='nativeProjects', help='Generate native projects.') - parser.add_argument('remainder', nargs=REMAINDER, metavar='...') - args = parser.parse_args(args) - intellijinit(args.remainder, mx_python_modules=args.pythonProjects, java_modules=args.javaModules, - generate_external_projects=args.externalProjects, native_projects=args.nativeProjects) - - -def intellijinit(args, refreshOnly=False, doFsckProjects=True, mx_python_modules=True, java_modules=True, - generate_external_projects=True, native_projects=False): + parser.add_argument('--no-python-projects', action='store_false', dest='python_projects', help='Do not generate projects for the mx python projects.') + parser.add_argument('--no-external-projects', action='store_false', dest='external_projects', help='Do not generate external projects.') + parser.add_argument('--no-java-projects', '--mx-python-modules-only', action='store_false', dest='java_modules', help='Do not generate projects for the java projects.') + parser.add_argument('--native-projects', action='store_true', dest='native_projects', help='Generate native projects.') + parser.add_argument('--max-java-compliance', dest='max_java_compliance', type=int, default=16, help='Cap the Java compliance at this value. IntelliJ requires an acceptance of a legal notice for beta Java specifications.') + parser.add_argument('--import-inner-classes', action='store_true', dest='import_inner_classes', help='Configure auto-import to insert inner class imports.') + parser.add_argument('--on-save-actions', action='store_true', dest='on_save_actions', help='Generate On Save Actions: checkstyle format and optimize imports.') + parser.add_argument('args', nargs=REMAINDER, metavar='...') + + extra_args = os.environ.get('MX_INTELLIJINIT_DEFAULTS', '').strip().split(' ') + if extra_args: + mx.log("Applying extra arguments from MX_INTELLIJINIT_DEFAULTS environment variable") + config = parser.parse_args(extra_args + args, namespace=IntellijConfig()) + intellijinit(config) + + +def intellijinit(config: IntellijConfig): # In a multiple suite context, the .idea directory in each suite # has to be complete and contain information that is repeated # in dependent suites. @@ -78,18 +98,17 @@ def intellijinit(args, refreshOnly=False, doFsckProjects=True, mx_python_modules suites = mx.suites(True) - if mx_python_modules and mx._mx_suite not in suites: + if config.python_projects and mx._mx_suite not in suites: suites.append(mx._mx_suite) for suite in suites: - _intellij_suite(args, suite, declared_modules, referenced_modules, sdks, refreshOnly, mx_python_modules, - generate_external_projects, java_modules and not suite.isBinarySuite(), suite != mx.primary_suite(), - generate_native_projects=native_projects) + config.java_modules = config.java_modules and not suite.isBinarySuite() + _intellij_suite(suite, declared_modules, referenced_modules, sdks, suite != mx.primary_suite(), config) if len(referenced_modules - declared_modules) != 0: mx.abort(f'Some referenced modules are missing from modules.xml: {referenced_modules - declared_modules}') - if mx_python_modules: + if config.python_projects: # Module for the MX source code module_src = mx.XMLDoc() module_src.open('module', attributes={'type': 'PYTHON_MODULE', 'version': '4'}) @@ -120,7 +139,7 @@ def intellijinit(args, refreshOnly=False, doFsckProjects=True, mx_python_modules module_tests.close('module') mx.update_file(join(mx._mx_suite.dir, 'tests', 'mx_tests.iml'), module_tests.xml(indent=' ', newl='\n')) - if doFsckProjects and not refreshOnly: + if config.do_fsck_projects and not config.refresh_only: mx_ideconfig.fsckprojects([]) def intellij_read_sdks(): @@ -265,8 +284,7 @@ def _gen_name(n=None): return file_name -def _intellij_suite(args, s, declared_modules, referenced_modules, sdks, refreshOnly=False, mx_python_modules=False, - generate_external_projects=True, java_modules=True, module_files_only=False, generate_native_projects=False): +def _intellij_suite(s, declared_modules, referenced_modules, sdks, module_files_only: bool, config: IntellijConfig): libraries = set() jdk_libraries = set() @@ -303,8 +321,8 @@ def _intellij_exclude_if_exists(xml, p, name, output=False): def _complianceToIntellijLanguageLevel(compliance): # they changed the name format starting with JDK_10 if compliance.value >= 10: - # latest Idea 2021.2 requires the acceptance of a legal notice for beta Java specification to enable support for JDK17. Clamp at JDK16. - return 'JDK_' + str(min(compliance.value, 16)) + # latest Idea 2021.2 requires the acceptance of a legal notice for beta Java specification to enable support for JDK17. Clamp at JDK16 by default + return 'JDK_' + str(min(compliance.value, config.max_java_compliance)) return 'JDK_1_' + str(compliance.value) def _intellij_external_project(externalProjects, sdks, host): @@ -429,14 +447,14 @@ def create_intellij_module(resource_path, module_type): create_intellij_module(resource_search_path, "ci") create_intellij_module(resource_search_path, "docs") - if generate_external_projects: + if config.external_projects: for p in s.projects_recursive() + mx._mx_suite.projects_recursive(): _intellij_external_project(getattr(p, 'externalProjects', None), sdks, p) max_checkstyle_version = None compilerXml = None - if java_modules: + if config.java_modules: if not module_files_only: compilerXml = mx.XMLDoc() compilerXml.open('project', attributes={'version': '4'}) @@ -500,7 +518,7 @@ def should_process_dep(dep, edge): def process_dep(dep, edge): if dep is proj: return - if dep.isLibrary() or dep.isJARDistribution() or dep.isMavenProject(): + if dep.isLibrary() or dep.isJARDistribution() or dep.isMavenProject() or dep.isLayoutDirDistribution(): libraries.add(dep) moduleXml.element('orderEntry', attributes={'type': 'library', 'name': dep.name, 'level': 'project'}) elif dep.isJavaProject(): @@ -526,12 +544,14 @@ def process_dep(dep, edge): moduleXml.close('component') + additional_options_override = {} + if compilerXml and jdk.javaCompliance >= '9': moduleDeps = p.get_concealed_imported_packages(jdk=jdk) + args = [] if moduleDeps: exports = sorted([(m, pkgs) for m, pkgs in moduleDeps.items() if dependencies_project_packages.isdisjoint(pkgs)]) if exports: - args = [] exported_modules = set() for m, pkgs in exports: args += [f'--add-exports={m}/{pkg}=ALL-UNNAMED' for pkg in pkgs] @@ -543,11 +563,31 @@ def process_dep(dep, edge): extra_modules = module_graph - default_module_graph if extra_modules: args.append('--add-modules=' + ','.join((m.name for m in extra_modules))) - if not additionalOptionsOverrides: - additionalOptionsOverrides = True - compilerXml.open('component', {'name': 'JavacSettings'}) - compilerXml.open('option', {'name': 'ADDITIONAL_OPTIONS_OVERRIDE'}) - compilerXml.element('module', {'name': p.name, 'options': ' '.join(args)}) + + if 'jdk.incubator.vector' in getattr(p, 'requires', []): + args.append('--add-modules=jdk.incubator.vector') + + if args: + additional_options_override[p.name] = args + + if compilerXml: + jni_gen_dir = p.jni_gen_dir() + if jni_gen_dir: + javac_options = additional_options_override.setdefault(p.name, []) + javac_options.append('-h ' + jni_gen_dir) + + if getattr(p, "javaPreviewNeeded", None): + javac_options = additional_options_override.setdefault(p.name, []) + javac_options.append('--enable-preview') + + if additional_options_override: + if not additionalOptionsOverrides: + additionalOptionsOverrides = True + compilerXml.open('component', {'name': 'JavacSettings'}) + compilerXml.open('option', {'name': 'ADDITIONAL_OPTIONS_OVERRIDE'}) + for module_name, javac_options in additional_options_override.items(): + if javac_options: + compilerXml.element('module', {'name': module_name, 'options': ' '.join(javac_options)}) # Checkstyle csConfig, checkstyleVersion, checkstyleProj = p.get_checkstyle_config() @@ -575,7 +615,7 @@ def process_dep(dep, edge): compilerXml.close('option') compilerXml.close('component') - if mx_python_modules: + if config.python_projects: def _python_module(suite): """ @@ -638,10 +678,10 @@ def _with_suite(suite, suite_name): moduleFilePath = "$PROJECT_DIR$/" + os.path.relpath(mx_tests_module_file, project_dir) modulesXml.element('module', attributes={'fileurl': 'file://' + moduleFilePath, 'filepath': moduleFilePath}) - if generate_native_projects: + if config.native_projects: _intellij_native_projects(s, module_files_only, declared_modules, modulesXml) - if generate_external_projects: + if config.external_projects: _intellij_external_project(s.suiteDict.get('externalProjects', None), sdks, s) if not module_files_only: @@ -651,7 +691,7 @@ def _with_suite(suite, suite_name): moduleXmlFile = join(ideaProjectDirectory, 'modules.xml') mx.update_file(moduleXmlFile, modulesXml.xml(indent=' ', newl='\n')) - if java_modules and not module_files_only: + if config.java_modules and not module_files_only: unique_library_file_names = set() librariesDirectory = mx.ensure_dir_exists(join(ideaProjectDirectory, 'libraries')) @@ -662,10 +702,11 @@ def make_library(name, path, source_path, suite_dir): libraryXml.open('component', attributes={'name': 'libraryTable'}) libraryXml.open('library', attributes={'name': name}) - libraryXml.open('CLASSES') - pathX = mx.relpath_or_absolute(path, suite_dir, prefix='$PROJECT_DIR$') - libraryXml.element('root', attributes={'url': 'jar://' + pathX + '!/'}) - libraryXml.close('CLASSES') + if path: + libraryXml.open('CLASSES') + pathX = mx.relpath_or_absolute(path, suite_dir, prefix='$PROJECT_DIR$') + libraryXml.element('root', attributes={'url': 'jar://' + pathX + '!/'}) + libraryXml.close('CLASSES') libraryXml.element('JAVADOC') if source_path: libraryXml.open('SOURCES') @@ -685,6 +726,7 @@ def make_library(name, path, source_path, suite_dir): # Setup the libraries that were used above for library in libraries: + path = None source_path = None if library.isLibrary(): path = library.get_path(True) @@ -697,6 +739,11 @@ def make_library(name, path, source_path, suite_dir): path = library.path # don't report the source path since the source already exists in the project # and IntelliJ sometimes picks the source zip instead of the real source file + elif library.isLayoutDirDistribution(): + # IntelliJ is somehow unhappy about directory being used as "classes", so we use + # it as "sources". This library is artificial anyway and is only used to express + # dependencies + source_path = library.classpath_repr() elif library.isClasspathDependency(): path = library.classpath_repr() else: @@ -717,6 +764,7 @@ def make_library(name, path, source_path, suite_dir): compilerXml.open('component', attributes={'name': 'CompilerConfiguration'}) compilerXml.element('option', attributes={'name': "DEFAULT_COMPILER", 'value': 'Javac'}) + compilerXml.element('option', attributes={'name': "BUILD_PROCESS_HEAP_SIZE", 'value': '2500'}) # using the --release option with javac interferes with using --add-modules which is required for some projects compilerXml.element('option', attributes={'name': "USE_RELEASE_OPTION", 'value': 'false'}) compilerXml.element('resourceExtensions') @@ -760,7 +808,7 @@ def processApDep(dep, edge): miscXml = mx.XMLDoc() miscXml.open('project', attributes={'version' : '4'}) - if java_modules: + if config.java_modules: mainJdk = mx.get_jdk() miscXml.open('component', attributes={'name' : 'ProjectRootManager', 'version': '2', 'languageLevel': _complianceToIntellijLanguageLevel(mainJdk.javaCompliance), 'project-jdk-name': intellij_get_java_sdk_name(sdks, mainJdk), 'project-jdk-type': intellij_java_sdk_type}) miscXml.element('output', attributes={'url' : 'file://$PROJECT_DIR$/' + os.path.relpath(s.get_output_root(), s.dir)}) @@ -792,7 +840,7 @@ def processApDep(dep, edge): mx.ensure_dir_exists(join(ideaProjectDirectory, 'runConfigurations')) mx.update_file(runConfigFile, runConfig.xml(indent=' ', newl='\n')) - if java_modules: + if config.java_modules: # Eclipse formatter config corePrefsSources = s.eclipse_settings_sources().get('org.eclipse.jdt.core.prefs') uiPrefsSources = s.eclipse_settings_sources().get('org.eclipse.jdt.ui.prefs') @@ -848,7 +896,7 @@ def processApDep(dep, edge): miscFile = join(ideaProjectDirectory, 'eclipseCodeFormatter.xml') mx.update_file(miscFile, miscXml.xml(indent=' ', newl='\n')) - if java_modules: + if config.java_modules: # Write codestyle settings mx.ensure_dir_exists(join(ideaProjectDirectory, 'codeStyles')) @@ -866,6 +914,8 @@ def processApDep(dep, edge): codeStyleProjectXml.open('code_scheme', attributes={'name': 'Project', 'version': '173'}) codeStyleProjectXml.open('JavaCodeStyleSettings') # We cannot entirely disable wildcards import, but we can set the threshold to an insane number. + if config.import_inner_classes: + codeStyleProjectXml.element('option', attributes={'name': 'INSERT_INNER_CLASS_IMPORTS', 'value': 'true'}) codeStyleProjectXml.element('option', attributes={'name': 'CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND', 'value': '65536'}) codeStyleProjectXml.element('option', attributes={'name': 'NAMES_COUNT_TO_USE_IMPORT_ON_DEMAND', 'value': '65536'}) codeStyleProjectXml.close('JavaCodeStyleSettings') @@ -902,6 +952,46 @@ def processApDep(dep, edge): checkstyleFile = join(ideaProjectDirectory, 'checkstyle-idea.xml') mx.update_file(checkstyleFile, checkstyleXml.xml(indent=' ', newl='\n')) + # If it doesn't already exist: write basic workspace.xml with Save actions and build in parallel option + workspace_path = join(ideaProjectDirectory, 'workspace.xml') + if exists(workspace_path): + if config.on_save_actions: + mx.warn("File workspace.xml already exists. The flag `--on-save-actions` is ignored. " + "Run `mx ideclean` and re-run `mx intellijinit` to get workspace.xml regenerated, " + "but note that it will remove any customizations you may have in workspace.xml!") + else: + workspaceXml = mx.XMLDoc() + workspaceXml.open('project', attributes={'version': '4'}) + + if config.on_save_actions: + workspaceXml.open('component', attributes={'name': 'FormatOnSaveOptions'}) + workspaceXml.element('option', attributes={'name': 'myFormatOnlyChangedLines', 'value': 'false'}) + workspaceXml.element('option', attributes={'name': 'myRunOnSave', 'value': 'true'}) + workspaceXml.element('option', attributes={'name': 'myAllFileTypesSelected', 'value': 'false'}) + workspaceXml.open('option', attributes={'name': 'mySelectedFileTypes'}) + workspaceXml.open('set') + workspaceXml.element('option', attributes={'value': 'JAVA'}) + workspaceXml.close('set') + workspaceXml.close('option') + workspaceXml.close('component') + + workspaceXml.open('component', attributes={'name': 'OptimizeOnSaveOptions'}) + workspaceXml.element('option', attributes={'name': 'myRunOnSave', 'value': 'true'}) + workspaceXml.element('option', attributes={'name': 'myAllFileTypesSelected', 'value': 'false'}) + workspaceXml.open('option', attributes={'name': 'mySelectedFileTypes'}) + workspaceXml.open('set') + workspaceXml.element('option', attributes={'value': 'JAVA'}) + workspaceXml.close('set') + workspaceXml.close('option') + workspaceXml.close('component') + + workspaceXml.open('component', attributes={'name': 'CompilerWorkspaceConfiguration'}) + workspaceXml.element('option', attributes={'name': 'PARALLEL_COMPILATION', 'value': 'true'}) + workspaceXml.close('component') + + workspaceXml.close('project') + mx.update_file(workspace_path, workspaceXml.xml(indent=' ', newl='\n')) + # mx integration def antTargetName(dist): return 'archive_' + dist.name @@ -983,7 +1073,7 @@ def intellij_scm_name(vc_kind): vcsXml.open('project', attributes={'version': '4'}) vcsXml.open('component', attributes={'name': 'VcsDirectoryMappings'}) - suites_for_vcs = mx.suites() + ([mx._mx_suite] if mx_python_modules else []) + suites_for_vcs = mx.suites() + ([mx._mx_suite] if config.python_projects else []) sourceSuitesWithVCS = [vc_suite for vc_suite in suites_for_vcs if vc_suite.isSourceSuite() and vc_suite.vc is not None] uniqueSuitesVCS = {(vc_suite.vc_dir, vc_suite.vc.kind) for vc_suite in sourceSuitesWithVCS} for vcs_dir, kind in uniqueSuitesVCS: diff --git a/src/mx/_impl/mx_ideconfig.py b/src/mx/_impl/mx_ideconfig.py index 70a71f0a..757532f0 100644 --- a/src/mx/_impl/mx_ideconfig.py +++ b/src/mx/_impl/mx_ideconfig.py @@ -160,7 +160,7 @@ def ideinit(args, refreshOnly=False, buildProcessorJars=True): if all_ides or mx_ide == 'netbeans': mx_ide_netbeans.netbeansinit(args.remainder, refreshOnly=refreshOnly, buildProcessorJars=buildProcessorJars, doFsckProjects=False) if all_ides or mx_ide == 'intellij': - mx_ide_intellij.intellijinit(args.remainder, refreshOnly=refreshOnly, doFsckProjects=False, mx_python_modules=args.pythonProjects) + mx_ide_intellij.intellijinit(mx_ide_intellij.IntellijConfig(args=args.remainder, refresh_only=refreshOnly, do_fsck_projects=False, python_projects=args.pythonProjects)) if not refreshOnly: fsckprojects([])