use of com.intellij.openapi.roots.impl.libraries.LibraryEx in project intellij-plugins by JetBrains.
the class Flexmojos3Configurator method handleDependencies.
private TargetPlatform handleDependencies(final ModifiableFlexBuildConfiguration bc) {
bc.getDependencies().getModifiableEntries().clear();
boolean playerglobal = false;
boolean airglobal = false;
boolean mobilecomponents = false;
final ModifiableRootModel rootModel = myModelsProvider.getModifiableRootModel(myModule);
for (OrderEntry entry : rootModel.getOrderEntries()) {
final DependencyScope scope = entry instanceof ExportableOrderEntry ? ((ExportableOrderEntry) entry).getScope() : DependencyScope.COMPILE;
final boolean isExported = entry instanceof ExportableOrderEntry && ((ExportableOrderEntry) entry).isExported();
if (entry instanceof ModuleOrderEntry) {
rootModel.removeOrderEntry(entry);
final String dependencyModuleName = ((ModuleOrderEntry) entry).getModuleName();
final MavenProject dependencyMavenProject = findMavenProjectByModuleName(dependencyModuleName);
if (dependencyMavenProject == null) {
MavenLog.LOG.warn("Maven project not found, module dependency skipped: " + myModule.getName() + " on " + dependencyModuleName);
continue;
}
if (!ArrayUtil.contains(dependencyMavenProject.getPackaging(), FlexmojosImporter.SUPPORTED_PACKAGINGS)) {
MavenLog.LOG.info("Unexpected packaging (" + dependencyMavenProject.getPackaging() + "), module dependency skipped: " + myModule.getName() + " on " + dependencyModuleName);
continue;
}
final ModifiableDependencyEntry existingEntry = ContainerUtil.find(bc.getDependencies().getModifiableEntries(), entry1 -> (entry1 instanceof BuildConfigurationEntry) && ((BuildConfigurationEntry) entry1).getModuleName().equals(dependencyModuleName) && ((BuildConfigurationEntry) entry1).getBcName().equals(dependencyModuleName));
final LinkageType linkageType = "swc".equals(dependencyMavenProject.getPackaging()) ? FlexUtils.convertLinkageType(scope, isExported) : LinkageType.LoadInRuntime;
if (existingEntry != null) {
if (existingEntry.getDependencyType().getLinkageType() == LinkageType.Test) {
existingEntry.getDependencyType().setLinkageType(linkageType);
}
continue;
}
final ModifiableBuildConfigurationEntry bcEntry = myFlexEditor.createBcEntry(bc.getDependencies(), dependencyModuleName, dependencyModuleName);
bcEntry.getDependencyType().setLinkageType(linkageType);
bc.getDependencies().getModifiableEntries().add(0, bcEntry);
continue;
}
if (entry instanceof JdkOrderEntry) {
rootModel.removeOrderEntry(entry);
}
if (!(entry instanceof LibraryOrderEntry))
continue;
rootModel.removeOrderEntry(entry);
if (!LibraryTablesRegistrar.PROJECT_LEVEL.equals(((LibraryOrderEntry) entry).getLibraryLevel()))
continue;
final Library library = ((LibraryOrderEntry) entry).getLibrary();
if (library == null || !MavenRootModelAdapter.isMavenLibrary(library))
continue;
final String libraryName = library.getName();
if (libraryName.contains(":rb.swc:") || libraryName.contains(":resource-bundle:")) {
// fix rb.swc placeholders to real SWCs according to used locales
final Library.ModifiableModel libraryModifiableModel = myModelsProvider.getModifiableLibraryModel(library);
for (final String rbSwcPlaceholdersUrl : findRbSwcPlaceholderUrls(libraryModifiableModel)) {
final Collection<String> rootsToAdd = getRbSwcUrlsForCompiledLocales(rbSwcPlaceholdersUrl);
libraryModifiableModel.removeRoot(rbSwcPlaceholdersUrl, OrderRootType.CLASSES);
for (final String rootToAdd : rootsToAdd) {
if (!ArrayUtil.contains(rootToAdd, libraryModifiableModel.getUrls(OrderRootType.CLASSES))) {
libraryModifiableModel.addRoot(rootToAdd, OrderRootType.CLASSES);
}
}
// sources and docs could be updated as well, but currently they are always senseless, because they do not exist
}
}
if (libraryName.contains(":swc:") || libraryName.contains(":rb.swc:") || libraryName.contains(":resource-bundle:") || libraryName.contains(":ane:")) {
playerglobal |= libraryName.contains("playerglobal");
airglobal |= libraryName.contains("airglobal");
mobilecomponents |= libraryName.contains("mobilecomponents");
final boolean ane = libraryName.contains(":ane:") && !libraryName.contains(":swc:");
final LibraryKind kind = ((LibraryEx) library).getKind();
if (kind != FlexLibraryType.FLEX_LIBRARY) {
if (kind == null) {
final LibraryEx.ModifiableModelEx libraryModel = (LibraryEx.ModifiableModelEx) myModelsProvider.getModifiableLibraryModel(library);
libraryModel.setKind(FlexLibraryType.FLEX_LIBRARY);
}
}
final ModifiableDependencyEntry sharedLibraryEntry = myFlexEditor.createSharedLibraryEntry(bc.getDependencies(), ((LibraryOrderEntry) entry).getLibraryName(), ((LibraryOrderEntry) entry).getLibraryLevel());
final LinkageType linkageType = ane ? DependencyType.DEFAULT_LINKAGE : FlexUtils.convertLinkageType(scope, isExported);
sharedLibraryEntry.getDependencyType().setLinkageType(linkageType);
bc.getDependencies().getModifiableEntries().add(sharedLibraryEntry);
} else {
MavenLog.LOG.info("Non-swc dependency for flexmojos project '" + myModule.getName() + "': " + libraryName);
}
}
// todo better target platform detection if both airglobal and playerglobal present?
return mobilecomponents && airglobal ? TargetPlatform.Mobile : airglobal && !playerglobal ? TargetPlatform.Desktop : TargetPlatform.Web;
}
use of com.intellij.openapi.roots.impl.libraries.LibraryEx in project intellij-plugins by JetBrains.
the class DartFileListener method updatePackagesLibraryRoots.
@NotNull
public static Library updatePackagesLibraryRoots(@NotNull final Project project, @NotNull final DartLibInfo libInfo) {
final LibraryTable projectLibraryTable = ProjectLibraryTable.getInstance(project);
final Library existingLibrary = projectLibraryTable.getLibraryByName(DartPackagesLibraryType.DART_PACKAGES_LIBRARY_NAME);
final Library library = existingLibrary != null ? existingLibrary : WriteAction.compute(() -> {
final LibraryTableBase.ModifiableModel libTableModel = ProjectLibraryTable.getInstance(project).getModifiableModel();
final Library lib = libTableModel.createLibrary(DartPackagesLibraryType.DART_PACKAGES_LIBRARY_NAME, DartPackagesLibraryType.LIBRARY_KIND);
libTableModel.commit();
return lib;
});
final String[] existingUrls = library.getUrls(OrderRootType.CLASSES);
final Collection<String> libRootUrls = libInfo.getLibRootUrls();
if ((!libInfo.isProjectWithoutPubspec() && isBrokenPackageMap(((LibraryEx) library).getProperties())) || existingUrls.length != libRootUrls.size() || !libRootUrls.containsAll(Arrays.asList(existingUrls))) {
ApplicationManager.getApplication().runWriteAction(() -> {
final LibraryEx.ModifiableModelEx model = (LibraryEx.ModifiableModelEx) library.getModifiableModel();
for (String url : existingUrls) {
model.removeRoot(url, OrderRootType.CLASSES);
}
for (String url : libRootUrls) {
model.addRoot(url, OrderRootType.CLASSES);
}
final DartPackagesLibraryProperties libraryProperties = new DartPackagesLibraryProperties();
libraryProperties.setPackageNameToDirsMap(libInfo.getPackagesMap());
model.setProperties(libraryProperties);
model.commit();
});
}
return library;
}
use of com.intellij.openapi.roots.impl.libraries.LibraryEx in project intellij-plugins by JetBrains.
the class FlexmojosImporterTestBase method checkLibrariesOfFlexType.
private static void checkLibrariesOfFlexType(final Module module, final FlexBuildConfiguration bc) {
final List<LibraryOrderEntry> moduleLibEntries = ContainerUtil.filter(ModuleRootManager.getInstance(module).getOrderEntries(), new FilteringIterator.InstanceOf(LibraryOrderEntry.class));
final List<SharedLibraryEntry> bcLibEntries = ContainerUtil.filter(bc.getDependencies().getEntries(), new FilteringIterator.InstanceOf(SharedLibraryEntry.class));
assertTrue(bcLibEntries.size() > 0);
assertEquals(moduleLibEntries.size(), bcLibEntries.size());
for (SharedLibraryEntry entry : bcLibEntries) {
assertTrue(entry.getLibraryName().contains(":swc:") || entry.getLibraryName().contains(":rb.swc:") || entry.getLibraryName().contains(":resource-bundle:"));
assertEquals(LibraryTablesRegistrar.PROJECT_LEVEL, entry.getLibraryLevel());
final Library library = FlexProjectRootsUtil.findOrderEntry(module.getProject(), entry);
assertNotNull(library);
assertTrue(((LibraryEx) library).getKind() == FlexLibraryType.FLEX_LIBRARY);
checkContainsLibrary(moduleLibEntries, library);
}
}
use of com.intellij.openapi.roots.impl.libraries.LibraryEx in project intellij-plugins by JetBrains.
the class DependenciesConfigurable method resetTable.
private void resetTable(SdkEntry sdkEntry, boolean keepSelection) {
int[] selectedRows = keepSelection ? myTable.getSelectedRows() : new int[0];
DefaultMutableTreeNode root = myTable.getRoot();
root.removeAllChildren();
if (sdkEntry != null) {
Sdk flexSdk = FlexSdkUtils.findFlexOrFlexmojosSdk(sdkEntry.getName());
if (flexSdk != null) {
DefaultMutableTreeNode sdkNode = new DefaultMutableTreeNode(new SdkItem(flexSdk), true);
myTable.getRoot().insert(sdkNode, 0);
updateSdkEntries(sdkNode, flexSdk);
}
}
FlexBCConfigurator configurator = FlexBuildConfigurationsExtension.getInstance().getConfigurator();
for (DependencyEntry entry : myDependencies.getEntries()) {
MyTableItem item = null;
if (entry instanceof BuildConfigurationEntry) {
final BuildConfigurationEntry bcEntry = (BuildConfigurationEntry) entry;
Module module = bcEntry.findModule();
CompositeConfigurable configurable = module != null ? ContainerUtil.find(configurator.getBCConfigurables(module), configurable1 -> configurable1.getDisplayName().equals(bcEntry.getBcName())) : null;
if (configurable == null) {
item = new BCItem(bcEntry.getModuleName(), bcEntry.getBcName());
} else {
item = new BCItem(FlexBCConfigurable.unwrap(configurable));
}
((BCItem) item).dependencyType.copyFrom(entry.getDependencyType());
} else if (entry instanceof ModuleLibraryEntry) {
ModuleLibraryEntry moduleLibraryEntry = (ModuleLibraryEntry) entry;
item = new ModuleLibraryItem(moduleLibraryEntry.getLibraryId(), myConfigEditor.findLibraryOrderEntry(myDependencies, moduleLibraryEntry), myProject);
((ModuleLibraryItem) item).dependencyType.copyFrom(entry.getDependencyType());
} else if (entry instanceof SharedLibraryEntry) {
SharedLibraryEntry sharedLibraryEntry = (SharedLibraryEntry) entry;
LibrariesModifiableModel model = ProjectStructureConfigurable.getInstance(myProject).getContext().createModifiableModelProvider(sharedLibraryEntry.getLibraryLevel()).getModifiableModel();
LibraryEx library = (LibraryEx) model.getLibraryByName(sharedLibraryEntry.getLibraryName());
item = new SharedLibraryItem(sharedLibraryEntry.getLibraryName(), sharedLibraryEntry.getLibraryLevel(), library, myProject);
((SharedLibraryItem) item).dependencyType.copyFrom(entry.getDependencyType());
}
if (item != null) {
root.add(new DefaultMutableTreeNode(item, false));
}
}
myTable.refresh();
myTable.clearSelection();
for (int row : selectedRows) {
myTable.getSelectionModel().addSelectionInterval(row, row);
}
}
use of com.intellij.openapi.roots.impl.libraries.LibraryEx in project intellij-community by JetBrains.
the class ProjectSettingsService method getLibrarySettingsConfigurable.
@Nullable
private static Configurable getLibrarySettingsConfigurable(OrderEntry orderEntry) {
if (!(orderEntry instanceof LibraryOrderEntry))
return null;
LibraryOrderEntry libOrderEntry = (LibraryOrderEntry) orderEntry;
Library lib = libOrderEntry.getLibrary();
if (lib instanceof LibraryEx) {
Project project = libOrderEntry.getOwnerModule().getProject();
PersistentLibraryKind<?> libKind = ((LibraryEx) lib).getKind();
if (libKind != null) {
return LibrarySettingsProvider.getAdditionalSettingsConfigurable(project, libKind);
}
}
return null;
}
Aggregations