@Nullable private FrameworkSupportNode createNode( final FrameworkSupportInModuleProvider provider, final Map<String, FrameworkSupportNode> nodes, final Map<FrameworkGroup<?>, FrameworkGroupNode> groupNodes, List<FrameworkSupportNodeBase> roots, List<FrameworkSupportInModuleProvider> providers, Set<String> associated, Map<String, FrameworkSupportNodeBase> associatedNodes) { String id = provider.getFrameworkType().getId(); FrameworkSupportNode node = nodes.get(id); if (node != null || associatedNodes.containsKey(id)) { return node; } String underlyingTypeId = provider.getFrameworkType().getUnderlyingFrameworkTypeId(); FrameworkSupportNodeBase parentNode = null; final FrameworkGroup<?> group = provider.getFrameworkType().getParentGroup(); if (underlyingTypeId != null) { FrameworkSupportInModuleProvider parentProvider = FrameworkSupportUtil.findProvider(underlyingTypeId, providers); if (parentProvider == null) { LOG.info("Cannot find id = " + underlyingTypeId); return null; } parentNode = createNode( parentProvider, nodes, groupNodes, roots, providers, associated, associatedNodes); } else if (group != null) { parentNode = groupNodes.get(group); if (parentNode == null) { FrameworkGroupNode groupNode = new FrameworkGroupNode(group, null); if (associated.contains(groupNode.getId())) { associatedNodes.put(groupNode.getId(), groupNode); } else { groupNodes.put(group, groupNode); parentNode = groupNode; roots.add(groupNode); } } } node = new FrameworkSupportNode(provider, parentNode, myModel, this); if (associated.contains(id)) { associatedNodes.put(id, node); } else { nodes.put(id, node); if (parentNode == null) { roots.add(node); } } return node; }
public static AddSupportForSingleFrameworkDialogFixed createDialog( @NotNull Module module, @NotNull FrameworkSupportInModuleProvider provider) { VirtualFile[] roots = ModuleRootManager.getInstance(module).getContentRoots(); if (roots.length == 0) return null; List<FrameworkSupportInModuleProvider> providers = FrameworkSupportUtil.getProviders(module, DefaultFacetsProvider.INSTANCE); if (providers.isEmpty()) return null; final LibrariesContainer container = LibrariesContainerFactory.createContainer(module.getProject()); final IdeaModifiableModelsProvider modifiableModelsProvider = new IdeaModifiableModelsProvider(); return new AddSupportForSingleFrameworkDialogFixed( module, roots[0].getPath(), provider.getFrameworkType(), provider, container, modifiableModelsProvider); }