Search in sources :

Example 86 with HashMap

use of com.intellij.util.containers.HashMap in project intellij-community by JetBrains.

the class JavaI18nUtil method isValidPropertyReference.

static boolean isValidPropertyReference(@NotNull Project project, @NotNull PsiExpression expression, @NotNull String key, @NotNull Ref<String> outResourceBundle) {
    final HashMap<String, Object> annotationAttributeValues = new HashMap<>();
    annotationAttributeValues.put(AnnotationUtil.PROPERTY_KEY_RESOURCE_BUNDLE_PARAMETER, null);
    if (mustBePropertyKey(expression, annotationAttributeValues)) {
        final Object resourceBundleName = annotationAttributeValues.get(AnnotationUtil.PROPERTY_KEY_RESOURCE_BUNDLE_PARAMETER);
        if (!(resourceBundleName instanceof PsiExpression)) {
            return false;
        }
        PsiExpression expr = (PsiExpression) resourceBundleName;
        final PsiConstantEvaluationHelper constantEvaluationHelper = JavaPsiFacade.getInstance(project).getConstantEvaluationHelper();
        Object value = constantEvaluationHelper.computeConstantExpression(expr);
        if (value == null) {
            if (expr instanceof PsiReferenceExpression) {
                final PsiElement resolve = ((PsiReferenceExpression) expr).resolve();
                if (resolve instanceof PsiField && ((PsiField) resolve).hasModifierProperty(PsiModifier.FINAL)) {
                    value = constantEvaluationHelper.computeConstantExpression(((PsiField) resolve).getInitializer());
                    if (value == null) {
                        return false;
                    }
                }
            }
            if (value == null) {
                final ResourceBundle resourceBundle = resolveResourceBundleByKey(key, project);
                if (resourceBundle == null) {
                    return false;
                }
                final PropertiesFile defaultPropertiesFile = resourceBundle.getDefaultPropertiesFile();
                final String bundleName = BundleNameEvaluator.DEFAULT.evaluateBundleName(defaultPropertiesFile.getContainingFile());
                if (bundleName == null) {
                    return false;
                }
                value = bundleName;
            }
        }
        String bundleName = value.toString();
        outResourceBundle.set(bundleName);
        return isPropertyRef(expression, key, bundleName);
    }
    return true;
}
Also used : HashMap(com.intellij.util.containers.HashMap) ResourceBundle(com.intellij.lang.properties.ResourceBundle) PropertiesFile(com.intellij.lang.properties.psi.PropertiesFile)

Example 87 with HashMap

use of com.intellij.util.containers.HashMap in project intellij-community by JetBrains.

the class PropertiesComponent method init.

public void init() {
    setLayout(new BorderLayout());
    myTable = new JBTable();
    myTextArea = new JTextArea(0, 0);
    myTextArea.setEditable(false);
    JScrollPane scrollPane = ScrollPaneFactory.createScrollPane(myTable);
    mySplitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, true, scrollPane, ScrollPaneFactory.createScrollPane(myTextArea));
    add(mySplitPane, BorderLayout.CENTER);
    add(createToolbar(), BorderLayout.WEST);
    final DefaultTableModel model = new DefaultTableModel(createTableModel(new HashMap<>()), new Object[] { "Name", "Value" }) {

        public boolean isCellEditable(final int row, final int column) {
            return false;
        }
    };
    myTable.setModel(model);
    myTable.setShowVerticalLines(true);
    myTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    myTable.getSelectionModel().addListSelectionListener(e -> {
        int index = myTable.getSelectedRow();
        if (index >= 0) {
            Object value = myTable.getValueAt(index, 1);
            if (value instanceof String) {
                myTextArea.setText(((String) value));
            } else {
                myTextArea.setText("");
            }
        } else {
            myTextArea.setText("");
        }
    });
    myPopupActionGroup = createPopup();
    PopupHandler.installPopupHandler(myTable, myPopupActionGroup, ActionPlaces.UNKNOWN, ActionManager.getInstance());
    PopupHandler.installPopupHandler(scrollPane, myPopupActionGroup, ActionPlaces.UNKNOWN, ActionManager.getInstance());
    final Shortcut[] shortcuts = KeymapManager.getInstance().getActiveKeymap().getShortcuts(IdeActions.ACTION_CLOSE_ACTIVE_TAB);
    myCloseAction.registerCustomShortcutSet(new CustomShortcutSet(shortcuts), this);
    myRefreshAction.registerCustomShortcutSet(CommonShortcuts.getRerun(), this);
}
Also used : HashMap(com.intellij.util.containers.HashMap) DefaultTableModel(javax.swing.table.DefaultTableModel) JBTable(com.intellij.ui.table.JBTable)

Example 88 with HashMap

use of com.intellij.util.containers.HashMap in project intellij-community by JetBrains.

the class LocalTerminalDirectRunner method createProcess.

@Override
protected PtyProcess createProcess(@Nullable String directory) throws ExecutionException {
    Map<String, String> envs = new HashMap<>(System.getenv());
    if (!SystemInfo.isWindows) {
        envs.put("TERM", "xterm-256color");
    }
    EncodingEnvironmentUtil.setLocaleEnvironmentIfMac(envs, myDefaultCharset);
    String[] command = getCommand(envs);
    for (LocalTerminalCustomizer customizer : LocalTerminalCustomizer.EP_NAME.getExtensions()) {
        try {
            command = customizer.customizeCommandAndEnvironment(myProject, command, envs);
            if (directory == null) {
                directory = customizer.getDefaultFolder(myProject);
            }
        } catch (Exception e) {
            LOG.error("Exception during customization of the terminal session", e);
        }
    }
    try {
        return PtyProcess.exec(command, envs, directory != null ? directory : TerminalProjectOptionsProvider.Companion.getInstance(myProject).getStartingDirectory());
    } catch (IOException e) {
        throw new ExecutionException(e);
    }
}
Also used : HashMap(com.intellij.util.containers.HashMap) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException) IOException(java.io.IOException) ExecutionException(java.util.concurrent.ExecutionException)

Example 89 with HashMap

use of com.intellij.util.containers.HashMap in project intellij-community by JetBrains.

the class EclipseImportBuilder method commit.

@Override
public List<Module> commit(final Project project, ModifiableModuleModel model, ModulesProvider modulesProvider, ModifiableArtifactModel artifactModel) {
    final Collection<String> unknownLibraries = new TreeSet<>();
    final Collection<String> unknownJdks = new TreeSet<>();
    final Set<String> refsToModules = new HashSet<>();
    final List<Module> result = new ArrayList<>();
    final Map<Module, Set<String>> module2NatureNames = new HashMap<>();
    try {
        final ModifiableModuleModel moduleModel = model != null ? model : ModuleManager.getInstance(project).getModifiableModel();
        final ModifiableRootModel[] rootModels = new ModifiableRootModel[getParameters().projectsToConvert.size()];
        final Set<File> files = new HashSet<>();
        final Set<String> moduleNames = new THashSet<>(getParameters().projectsToConvert.size());
        for (String path : getParameters().projectsToConvert) {
            String modulesDirectory = getParameters().converterOptions.commonModulesDirectory;
            if (modulesDirectory == null) {
                modulesDirectory = path;
            }
            final String moduleName = EclipseProjectFinder.findProjectName(path);
            moduleNames.add(moduleName);
            final File imlFile = new File(modulesDirectory + File.separator + moduleName + ModuleManagerImpl.IML_EXTENSION);
            if (imlFile.isFile()) {
                files.add(imlFile);
            }
            final File emlFile = new File(modulesDirectory + File.separator + moduleName + EclipseXml.IDEA_SETTINGS_POSTFIX);
            if (emlFile.isFile()) {
                files.add(emlFile);
            }
        }
        if (!files.isEmpty()) {
            final int resultCode = Messages.showYesNoCancelDialog(ApplicationNamesInfo.getInstance().getFullProductName() + " module files found:\n" + StringUtil.join(files, file -> file.getPath(), "\n") + ".\n Would you like to reuse them?", "Module Files Found", Messages.getQuestionIcon());
            if (resultCode != Messages.YES) {
                if (resultCode == Messages.NO) {
                    final LocalFileSystem localFileSystem = LocalFileSystem.getInstance();
                    for (File file : files) {
                        final VirtualFile virtualFile = localFileSystem.findFileByIoFile(file);
                        if (virtualFile != null) {
                            ApplicationManager.getApplication().runWriteAction(new ThrowableComputable<Void, IOException>() {

                                @Override
                                public Void compute() throws IOException {
                                    virtualFile.delete(this);
                                    return null;
                                }
                            });
                        } else {
                            FileUtil.delete(file);
                        }
                    }
                } else {
                    return result;
                }
            }
        }
        int idx = 0;
        for (String path : getParameters().projectsToConvert) {
            String modulesDirectory = getParameters().converterOptions.commonModulesDirectory;
            if (modulesDirectory == null) {
                modulesDirectory = path;
            }
            final Module module = moduleModel.newModule(modulesDirectory + "/" + EclipseProjectFinder.findProjectName(path) + ModuleManagerImpl.IML_EXTENSION, StdModuleTypes.JAVA.getId());
            result.add(module);
            final Set<String> natures = collectNatures(path);
            if (natures.size() > 0) {
                module2NatureNames.put(module, natures);
            }
            final ModifiableRootModel rootModel = ModuleRootManager.getInstance(module).getModifiableModel();
            rootModels[idx++] = rootModel;
            final File classpathFile = new File(path, EclipseXml.DOT_CLASSPATH_EXT);
            final EclipseClasspathReader classpathReader = new EclipseClasspathReader(path, project, getParameters().projectsToConvert, moduleNames);
            classpathReader.init(rootModel);
            if (classpathFile.exists()) {
                Element classpathElement = JDOMUtil.load(classpathFile);
                classpathReader.readClasspath(rootModel, unknownLibraries, unknownJdks, refsToModules, getParameters().converterOptions.testPattern, classpathElement);
            } else {
                EclipseClasspathReader.setOutputUrl(rootModel, path + "/bin");
            }
            ClasspathStorage.setStorageType(rootModel, getParameters().linkConverted ? JpsEclipseClasspathSerializer.CLASSPATH_STORAGE_ID : ClassPathStorageUtil.DEFAULT_STORAGE);
            if (model != null) {
                ApplicationManager.getApplication().runWriteAction(() -> rootModel.commit());
            }
        }
        if (model == null) {
            ApplicationManager.getApplication().runWriteAction(() -> ModifiableModelCommitter.multiCommit(rootModels, moduleModel));
        }
    } catch (Exception e) {
        LOG.error(e);
    }
    scheduleNaturesImporting(project, module2NatureNames);
    createEclipseLibrary(project, unknownLibraries, IdeaXml.ECLIPSE_LIBRARY);
    StringBuilder message = new StringBuilder();
    refsToModules.removeAll(getParameters().existingModuleNames);
    for (String path : getParameters().projectsToConvert) {
        final String projectName = EclipseProjectFinder.findProjectName(path);
        if (projectName != null) {
            refsToModules.remove(projectName);
            getParameters().existingModuleNames.add(projectName);
        }
    }
    if (!refsToModules.isEmpty()) {
        message.append("Unknown modules detected");
        for (String module : refsToModules) {
            message.append("\n").append(module);
        }
    }
    if (!unknownJdks.isEmpty()) {
        if (message.length() > 0) {
            message.append("\nand jdks");
        } else {
            message.append("Imported project refers to unknown jdks");
        }
        for (String unknownJdk : unknownJdks) {
            message.append("\n").append(unknownJdk);
        }
    }
    if (!unknownLibraries.isEmpty()) {
        final StringBuilder buf = new StringBuilder();
        buf.append("<html><body>");
        buf.append(EclipseBundle.message("eclipse.import.warning.undefinded.libraries"));
        for (String name : unknownLibraries) {
            buf.append("<br>").append(name);
        }
        if (model == null) {
            buf.append("<br><b>Please export Eclipse user libraries and import them now from resulted .userlibraries file</b>");
            buf.append("</body></html>");
            final FileChooserDescriptor descriptor = new FileChooserDescriptor(true, false, false, false, false, false) {

                @Override
                public boolean isFileSelectable(VirtualFile file) {
                    return super.isFileSelectable(file) && Comparing.strEqual(file.getExtension(), "userlibraries");
                }
            };
            descriptor.setDescription(buf.toString());
            descriptor.setTitle(getTitle());
            final VirtualFile selectedFile = FileChooser.chooseFile(descriptor, project, project.getBaseDir());
            if (selectedFile != null) {
                try {
                    EclipseUserLibrariesHelper.readProjectLibrariesContent(selectedFile, project, unknownLibraries);
                } catch (Exception e) {
                    LOG.error(e);
                }
            }
        }
    }
    if (message.length() > 0) {
        Messages.showErrorDialog(project, message.toString(), getTitle());
    }
    return result;
}
Also used : ClassPathStorageUtil(com.intellij.openapi.roots.impl.storage.ClassPathStorageUtil) VirtualFile(com.intellij.openapi.vfs.VirtualFile) HashMap(com.intellij.util.containers.HashMap) IdeaXml(org.jetbrains.idea.eclipse.IdeaXml) ClasspathStorage(com.intellij.openapi.roots.impl.storage.ClasspathStorage) THashSet(gnu.trove.THashSet) THashMap(gnu.trove.THashMap) EclipseClasspathReader(org.jetbrains.idea.eclipse.conversion.EclipseClasspathReader) EclipseIcons(icons.EclipseIcons) Library(com.intellij.openapi.roots.libraries.Library) ProjectImportBuilder(com.intellij.projectImport.ProjectImportBuilder) Task(com.intellij.openapi.progress.Task) JDOMException(org.jdom.JDOMException) EclipseUserLibrariesHelper(org.jetbrains.idea.eclipse.conversion.EclipseUserLibrariesHelper) ModifiableRootModel(com.intellij.openapi.roots.ModifiableRootModel) ApplicationNamesInfo(com.intellij.openapi.application.ApplicationNamesInfo) FileChooserDescriptor(com.intellij.openapi.fileChooser.FileChooserDescriptor) Messages(com.intellij.openapi.ui.Messages) ModuleManagerImpl(com.intellij.openapi.module.impl.ModuleManagerImpl) FileUtil(com.intellij.openapi.util.io.FileUtil) Logger(com.intellij.openapi.diagnostic.Logger) Module(com.intellij.openapi.module.Module) Notifications(com.intellij.notification.Notifications) ProgressManager(com.intellij.openapi.progress.ProgressManager) DumbService(com.intellij.openapi.project.DumbService) StdModuleTypes(com.intellij.openapi.module.StdModuleTypes) LibraryTablesRegistrar(com.intellij.openapi.roots.libraries.LibraryTablesRegistrar) ModifiableModelCommitter(com.intellij.openapi.roots.impl.ModifiableModelCommitter) ModifiableModuleModel(com.intellij.openapi.module.ModifiableModuleModel) LocalFileSystem(com.intellij.openapi.vfs.LocalFileSystem) NotificationType(com.intellij.notification.NotificationType) Notification(com.intellij.notification.Notification) ThrowableComputable(com.intellij.openapi.util.ThrowableComputable) Nullable(org.jetbrains.annotations.Nullable) ProgressIndicator(com.intellij.openapi.progress.ProgressIndicator) ModuleRootManager(com.intellij.openapi.roots.ModuleRootManager) ApplicationManager(com.intellij.openapi.application.ApplicationManager) ModulesProvider(com.intellij.openapi.roots.ui.configuration.ModulesProvider) NotNull(org.jetbrains.annotations.NotNull) Ref(com.intellij.openapi.util.Ref) java.util(java.util) ModuleManager(com.intellij.openapi.module.ModuleManager) Comparing(com.intellij.openapi.util.Comparing) StartupManager(com.intellij.openapi.startup.StartupManager) JDOMUtil(com.intellij.openapi.util.JDOMUtil) EclipseXml(org.jetbrains.idea.eclipse.EclipseXml) Project(com.intellij.openapi.project.Project) JpsEclipseClasspathSerializer(org.jetbrains.jps.eclipse.model.JpsEclipseClasspathSerializer) StringUtil(com.intellij.openapi.util.text.StringUtil) IOException(java.io.IOException) File(java.io.File) EclipseProjectFinder(org.jetbrains.idea.eclipse.EclipseProjectFinder) LibraryTable(com.intellij.openapi.roots.libraries.LibraryTable) ProjectMacrosUtil(com.intellij.openapi.project.impl.ProjectMacrosUtil) ModifiableArtifactModel(com.intellij.packaging.artifacts.ModifiableArtifactModel) Element(org.jdom.Element) FileChooser(com.intellij.openapi.fileChooser.FileChooser) EclipseBundle(org.jetbrains.idea.eclipse.EclipseBundle) javax.swing(javax.swing) VirtualFile(com.intellij.openapi.vfs.VirtualFile) THashSet(gnu.trove.THashSet) HashMap(com.intellij.util.containers.HashMap) THashMap(gnu.trove.THashMap) Element(org.jdom.Element) ModifiableRootModel(com.intellij.openapi.roots.ModifiableRootModel) EclipseClasspathReader(org.jetbrains.idea.eclipse.conversion.EclipseClasspathReader) THashSet(gnu.trove.THashSet) FileChooserDescriptor(com.intellij.openapi.fileChooser.FileChooserDescriptor) IOException(java.io.IOException) THashSet(gnu.trove.THashSet) JDOMException(org.jdom.JDOMException) IOException(java.io.IOException) ModifiableModuleModel(com.intellij.openapi.module.ModifiableModuleModel) LocalFileSystem(com.intellij.openapi.vfs.LocalFileSystem) Module(com.intellij.openapi.module.Module) VirtualFile(com.intellij.openapi.vfs.VirtualFile) File(java.io.File)

Example 90 with HashMap

use of com.intellij.util.containers.HashMap in project intellij-community by JetBrains.

the class JavaFxImportsOptimizer method processFile.

@NotNull
@Override
public Runnable processFile(final PsiFile file) {
    VirtualFile vFile = file.getVirtualFile();
    if (vFile instanceof VirtualFileWindow)
        vFile = ((VirtualFileWindow) vFile).getDelegate();
    final Project project = file.getProject();
    if (vFile == null || !ProjectRootManager.getInstance(project).getFileIndex().isInSourceContent(vFile)) {
        return EmptyRunnable.INSTANCE;
    }
    final List<Pair<String, Boolean>> names = new ArrayList<>();
    final Set<String> demandedForNested = new HashSet<>();
    collectNamesToImport(names, demandedForNested, (XmlFile) file);
    Collections.sort(names, (o1, o2) -> StringUtil.compare(o1.first, o2.first, true));
    final CodeStyleSettings settings = CodeStyleSettingsManager.getSettings(project);
    final List<Pair<String, Boolean>> sortedNames = ImportHelper.sortItemsAccordingToSettings(names, settings);
    final Map<String, Boolean> onDemand = new HashMap<>();
    ImportHelper.collectOnDemandImports(sortedNames, settings, onDemand);
    for (String s : demandedForNested) {
        onDemand.put(s, false);
    }
    final Set<String> imported = new HashSet<>();
    final List<String> imports = new ArrayList<>();
    for (Pair<String, Boolean> pair : sortedNames) {
        final String qName = pair.first;
        final String packageName = StringUtil.getPackageName(qName);
        if (imported.contains(packageName) || imported.contains(qName)) {
            continue;
        }
        if (onDemand.containsKey(packageName)) {
            imported.add(packageName);
            imports.add("<?import " + packageName + ".*?>");
        } else {
            imported.add(qName);
            imports.add("<?import " + qName + "?>");
        }
    }
    final PsiFileFactory factory = PsiFileFactory.getInstance(file.getProject());
    final XmlFile dummyFile = (XmlFile) factory.createFileFromText("_Dummy_.fxml", StdFileTypes.XML, StringUtil.join(imports, "\n"));
    final XmlDocument document = dummyFile.getDocument();
    final XmlProlog newImportList = document != null ? document.getProlog() : null;
    if (newImportList == null)
        return EmptyRunnable.getInstance();
    return () -> {
        final XmlDocument xmlDocument = ((XmlFile) file).getDocument();
        final XmlProlog prolog = xmlDocument != null ? xmlDocument.getProlog() : null;
        if (prolog != null) {
            final Collection<XmlProcessingInstruction> instructions = PsiTreeUtil.findChildrenOfType(prolog, XmlProcessingInstruction.class);
            for (final XmlProcessingInstruction instruction : instructions) {
                final ASTNode node = instruction.getNode();
                final ASTNode nameNode = node.findChildByType(XmlTokenType.XML_NAME);
                if (nameNode != null && nameNode.getText().equals("import")) {
                    instruction.delete();
                }
            }
            prolog.add(newImportList);
        } else {
            document.addBefore(newImportList, document.getRootTag());
        }
    };
}
Also used : VirtualFile(com.intellij.openapi.vfs.VirtualFile) HashMap(com.intellij.util.containers.HashMap) VirtualFileWindow(com.intellij.injected.editor.VirtualFileWindow) Project(com.intellij.openapi.project.Project) CodeStyleSettings(com.intellij.psi.codeStyle.CodeStyleSettings) ASTNode(com.intellij.lang.ASTNode) Pair(com.intellij.openapi.util.Pair) HashSet(com.intellij.util.containers.HashSet) NotNull(org.jetbrains.annotations.NotNull)

Aggregations

HashMap (com.intellij.util.containers.HashMap)118 NotNull (org.jetbrains.annotations.NotNull)23 VirtualFile (com.intellij.openapi.vfs.VirtualFile)22 File (java.io.File)22 Nullable (org.jetbrains.annotations.Nullable)18 Map (java.util.Map)17 Module (com.intellij.openapi.module.Module)15 Project (com.intellij.openapi.project.Project)15 ArrayList (java.util.ArrayList)14 PsiElement (com.intellij.psi.PsiElement)11 HashSet (com.intellij.util.containers.HashSet)10 List (java.util.List)9 IncorrectOperationException (com.intellij.util.IncorrectOperationException)8 IOException (java.io.IOException)8 Pair (com.intellij.openapi.util.Pair)6 GlobalSearchScope (com.intellij.psi.search.GlobalSearchScope)6 SearchScope (com.intellij.psi.search.SearchScope)6 Logger (com.intellij.openapi.diagnostic.Logger)5 PsiFile (com.intellij.psi.PsiFile)5 UsageInfo (com.intellij.usageView.UsageInfo)5