void (JpsModule module, @Nullable Element rootModelComponent, @Nullable JpsSdkType<?> projectSdkType, @NotNull JpsPathMapper pathMapper) { if (rootModelComponent == null) return; for (Element contentElement : getChildren(rootModelComponent, CONTENT_TAG)) { final String url = getRequiredAttribute(contentElement, URL_ATTRIBUTE); module.getContentRootsList().addUrl(url); for (Element sourceElement : getChildren(contentElement, SOURCE_FOLDER_TAG)) { module.addSourceRoot(loadSourceRoot(sourceElement)); } for (Element excludeElement : getChildren(contentElement, EXCLUDE_FOLDER_TAG)) { module.getExcludeRootsList().addUrl(getRequiredAttribute(excludeElement, URL_ATTRIBUTE)); } for (Element excludePatternElement : getChildren(contentElement, EXCLUDE_PATTERN_TAG)) { module.addExcludePattern(url, getRequiredAttribute(excludePatternElement, EXCLUDE_PATTERN_ATTRIBUTE)); } } final JpsDependenciesList dependenciesList = module.getDependenciesList(); dependenciesList.clear(); final JpsElementFactory elementFactory = JpsElementFactory.getInstance(); UniqueNameGenerator nameGenerator = new UniqueNameGenerator(); boolean moduleSourceAdded = false; for (Element orderEntry : getChildren(rootModelComponent, ORDER_ENTRY_TAG)) { String type = orderEntry.getAttributeValue(TYPE_ATTRIBUTE); if (SOURCE_FOLDER_TYPE.equals(type)) { dependenciesList.addModuleSourceDependency(); moduleSourceAdded = true; } else if (JDK_TYPE.equals(type)) { String sdkName = getRequiredAttribute(orderEntry, JDK_NAME_ATTRIBUTE); String sdkTypeId = orderEntry.getAttributeValue(JDK_TYPE_ATTRIBUTE); final JpsSdkType<?> sdkType = JpsSdkTableSerializer.getSdkType(sdkTypeId); dependenciesList.addSdkDependency(sdkType); JpsSdkTableSerializer.setSdkReference(module.getSdkReferencesTable(), sdkName, sdkType); if (sdkType instanceof JpsJavaSdkTypeWrapper) { dependenciesList.addSdkDependency(JpsJavaSdkType.INSTANCE); } } else if (INHERITED_JDK_TYPE.equals(type)) { final JpsSdkType<?> sdkType = projectSdkType != null? projectSdkType : JpsJavaSdkType.INSTANCE; dependenciesList.addSdkDependency(sdkType); if (sdkType instanceof JpsJavaSdkTypeWrapper) { dependenciesList.addSdkDependency(JpsJavaSdkType.INSTANCE); } } else if (LIBRARY_TYPE.equals(type)) { String name = getRequiredAttribute(orderEntry, NAME_ATTRIBUTE); String level = getRequiredAttribute(orderEntry, LEVEL_ATTRIBUTE); JpsElementReference<? extends JpsCompositeElement> ref = JpsLibraryTableSerializer.createLibraryTableReference(level); final JpsLibraryDependency dependency = dependenciesList.addLibraryDependency(elementFactory.createLibraryReference(name, ref)); loadModuleDependencyProperties(dependency, orderEntry); } else if (MODULE_LIBRARY_TYPE.equals(type)) { final Element moduleLibraryElement = orderEntry.getChild(LIBRARY_TAG); if (moduleLibraryElement != null) { String name = moduleLibraryElement.getAttributeValue(NAME_ATTRIBUTE); if (name == null) { name = GENERATED_LIBRARY_NAME_PREFIX; } String uniqueName = nameGenerator.generateUniqueName(name); final JpsLibrary library = JpsLibraryTableSerializer.loadLibrary(moduleLibraryElement, uniqueName, pathMapper); module.addModuleLibrary(library); final JpsLibraryDependency dependency = dependenciesList.addLibraryDependency(library); loadModuleDependencyProperties(dependency, orderEntry); } } else if (MODULE_TYPE.equals(type)) { String name = getRequiredAttribute(orderEntry, MODULE_NAME_ATTRIBUTE); final JpsModuleDependency dependency = dependenciesList.addModuleDependency(elementFactory.createModuleReference(name)); loadModuleDependencyProperties(dependency, orderEntry); } } if (!moduleSourceAdded) { dependenciesList.addModuleSourceDependency(); } for (JpsModelSerializerExtension extension : JpsModelSerializerExtension.getExtensions()) { extension.loadRootModel(module, rootModelComponent); } }