Search in sources :

Example 1 with NotNullComputable

use of com.intellij.openapi.util.NotNullComputable in project intellij-community by JetBrains.

the class GroovyResolverProcessor method execute.

@Override
public boolean execute(@NotNull PsiElement element, @NotNull ResolveState state) {
    if (!(element instanceof PsiNamedElement))
        return true;
    final PsiNamedElement namedElement = (PsiNamedElement) element;
    final PsiElement resolveContext = state.get(ClassHint.RESOLVE_CONTEXT);
    final GroovyResolveKind kind = computeKindAndCheckName(namedElement, resolveContext);
    if (!myAcceptableKinds.contains(kind))
        return true;
    if (kind == GroovyResolveKind.METHOD && myStopExecutingMethods) {
        return true;
    } else if (kind != GroovyResolveKind.PROPERTY && kind != GroovyResolveKind.METHOD) {
        if (!myCandidates.get(kind).isEmpty())
            return true;
    }
    final GroovyResolveResultImpl candidate;
    {
        final PsiSubstitutor substitutor = getSubstitutor(state);
        final SpreadState spreadState = state.get(SpreadState.SPREAD_STATE);
        final boolean isAccessible = isAccessible(myRef, namedElement);
        final boolean isStaticsOK = isStaticsOK(myRef, namedElement, resolveContext, false);
        if (kind == GroovyResolveKind.METHOD || kind == GroovyResolveKind.PROPERTY) {
            final PsiMethod method = (PsiMethod) namedElement;
            final boolean isApplicable = kind == GroovyResolveKind.PROPERTY && !myIsLValue || isApplicable(myArgumentTypes.getValue(), method, substitutor, myRef, true);
            final NotNullComputable<PsiSubstitutor> substitutorComputer;
            if (kind == GroovyResolveKind.METHOD) {
                substitutorComputer = () -> myMethodSubstitutorComputer.getValue().obtainSubstitutor(substitutor, method, resolveContext);
            } else {
                substitutorComputer = () -> myPropertySubstitutorComputer.getValue().obtainSubstitutor(substitutor, method, resolveContext);
            }
            candidate = new GroovyMethodResult(method, resolveContext, spreadState, substitutor, substitutorComputer, kind == GroovyResolveKind.PROPERTY, isAccessible, isStaticsOK, isApplicable);
        } else {
            candidate = new GroovyResolveResultImpl(namedElement, resolveContext, spreadState, substitutor, isAccessible, isStaticsOK, false, true);
        }
    }
    (candidate.isValidResult() ? myCandidates : myInapplicableCandidates).putValue(kind, candidate);
    if (candidate.isValidResult() && kind == GroovyResolveKind.VARIABLE) {
        myStopExecutingMethods = true;
    }
    return true;
}
Also used : NotNullComputable(com.intellij.openapi.util.NotNullComputable) GroovyMethodResult(org.jetbrains.plugins.groovy.lang.psi.impl.GroovyMethodResult) GroovyResolveResultImpl(org.jetbrains.plugins.groovy.lang.psi.impl.GroovyResolveResultImpl) SpreadState(org.jetbrains.plugins.groovy.lang.psi.api.SpreadState)

Example 2 with NotNullComputable

use of com.intellij.openapi.util.NotNullComputable in project intellij-community by JetBrains.

the class LibraryOptionsPanel method showSettingsPanel.

private void showSettingsPanel(CustomLibraryDescription libraryDescription, NotNullComputable<String> pathProvider, FrameworkLibraryVersionFilter versionFilter, boolean showDoNotCreateOption, final List<? extends FrameworkLibraryVersion> versions) {
    //todo[nik] create mySettings only in apply() method
    mySettings = new LibraryCompositionSettings(libraryDescription, pathProvider, versionFilter, versions);
    Disposer.register(this, mySettings);
    List<Library> libraries = calculateSuitableLibraries();
    myButtonEnumModel = RadioButtonEnumModel.bindEnum(Choice.class, myButtonGroup);
    myButtonEnumModel.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            updateState();
            onVersionChanged(getPresentableVersion());
        }
    });
    myDoNotCreateRadioButton.setVisible(showDoNotCreateOption);
    myLibraryComboBoxModel = new SortedComboBoxModel<>((o1, o2) -> {
        final String name1 = o1.getName();
        final String name2 = o2.getName();
        return -StringUtil.notNullize(name1).compareToIgnoreCase(StringUtil.notNullize(name2));
    });
    for (Library library : libraries) {
        ExistingLibraryEditor libraryEditor = myLibrariesContainer.getLibraryEditor(library);
        if (libraryEditor == null) {
            libraryEditor = mySettings.getOrCreateEditor(library);
        }
        myLibraryComboBoxModel.add(libraryEditor);
    }
    myExistingLibraryComboBox.setModel(myLibraryComboBoxModel);
    if (libraries.isEmpty()) {
        myLibraryComboBoxModel.add(null);
    }
    myExistingLibraryComboBox.setSelectedIndex(0);
    myExistingLibraryComboBox.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent e) {
            if (e.getStateChange() == ItemEvent.SELECTED && e.getItem() != null) {
                myButtonEnumModel.setSelected(Choice.USE_LIBRARY);
            }
            updateState();
            onVersionChanged(getPresentableVersion());
        }
    });
    myExistingLibraryComboBox.setRenderer(new ColoredListCellRenderer<LibraryEditor>(myExistingLibraryComboBox) {

        @Override
        protected void customizeCellRenderer(@NotNull JList<? extends LibraryEditor> list, LibraryEditor value, int index, boolean selected, boolean hasFocus) {
            if (value == null) {
                append("[No library selected]");
            } else if (value instanceof ExistingLibraryEditor) {
                final Library library = ((ExistingLibraryEditor) value).getLibrary();
                final boolean invalid = !((LibraryEx) library).getInvalidRootUrls(OrderRootType.CLASSES).isEmpty();
                OrderEntryAppearanceService.getInstance().forLibrary(getProject(), library, invalid).customize(this);
            } else if (value instanceof NewLibraryEditor) {
                setIcon(PlatformIcons.LIBRARY_ICON);
                final String name = value.getName();
                append(name != null ? name : "<unnamed>");
            }
        }
    });
    boolean canDownload = mySettings.getDownloadSettings() != null;
    boolean canUseFromProvider = myLibraryProvider != null;
    myDownloadRadioButton.setVisible(canDownload);
    myUseFromProviderRadioButton.setVisible(canUseFromProvider);
    Choice selectedOption;
    if (canUseFromProvider) {
        selectedOption = Choice.USE_FROM_PROVIDER;
    } else if (libraries.isEmpty() && canDownload) {
        selectedOption = Choice.DOWNLOAD;
    } else {
        selectedOption = Choice.USE_LIBRARY;
        doCreate(true);
    }
    myButtonEnumModel.setSelected(selectedOption);
    if (!canDownload && !canUseFromProvider && !showDoNotCreateOption) {
        myUseLibraryRadioButton.setVisible(false);
        myUseLibraryLabel.setVisible(true);
    } else {
        myUseLibraryLabel.setVisible(false);
    }
    final Dimension minimumSize = new Dimension(-1, myMessageLabel.getFontMetrics(myMessageLabel.getFont()).getHeight() * 2);
    myHiddenLabel.setMinimumSize(minimumSize);
    myCreateButton.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            doCreate(false);
        }
    });
    myConfigureButton.addActionListener(new ActionListener() {

        public void actionPerformed(final ActionEvent e) {
            doConfigure();
        }
    });
    updateState();
    showCard("editing");
}
Also used : AllIcons(com.intellij.icons.AllIcons) NotNullComputable(com.intellij.openapi.util.NotNullComputable) VirtualFile(com.intellij.openapi.vfs.VirtualFile) ItemListener(java.awt.event.ItemListener) DownloadableLibraryDescription(com.intellij.framework.library.DownloadableLibraryDescription) JBLabel(com.intellij.ui.components.JBLabel) RadioButtonEnumModel(com.intellij.util.ui.RadioButtonEnumModel) FrameworkLibraryVersion(com.intellij.framework.library.FrameworkLibraryVersion) Library(com.intellij.openapi.roots.libraries.Library) ProjectManager(com.intellij.openapi.project.ProjectManager) ExistingLibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.ExistingLibraryEditor) Disposer(com.intellij.openapi.util.Disposer) OldCustomLibraryDescription(com.intellij.ide.util.frameworkSupport.OldCustomLibraryDescription) FileUtil(com.intellij.openapi.util.io.FileUtil) Logger(com.intellij.openapi.diagnostic.Logger) NewLibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor) DownloadableFileSetVersions(com.intellij.util.download.DownloadableFileSetVersions) CustomLibraryDescription(com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription) ItemEvent(java.awt.event.ItemEvent) OrderRootType(com.intellij.openapi.roots.OrderRootType) LibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor) LocalFileSystem(com.intellij.openapi.vfs.LocalFileSystem) IdeBundle(com.intellij.ide.IdeBundle) Nullable(org.jetbrains.annotations.Nullable) List(java.util.List) DownloadableLibraryType(com.intellij.framework.library.DownloadableLibraryType) NewLibraryConfiguration(com.intellij.openapi.roots.libraries.NewLibraryConfiguration) ColoredListCellRenderer(com.intellij.ui.ColoredListCellRenderer) XmlStringUtil(com.intellij.xml.util.XmlStringUtil) NotNull(org.jetbrains.annotations.NotNull) WriteAction(com.intellij.openapi.application.WriteAction) ActionListener(java.awt.event.ActionListener) FrameworkLibraryVersionFilter(com.intellij.framework.library.FrameworkLibraryVersionFilter) ContainerUtil(com.intellij.util.containers.ContainerUtil) MessageFormat(java.text.MessageFormat) ArrayList(java.util.ArrayList) LibrariesContainer(com.intellij.openapi.roots.ui.configuration.projectRoot.LibrariesContainer) Comparing(com.intellij.openapi.util.Comparing) SortedComboBoxModel(com.intellij.ui.SortedComboBoxModel) Project(com.intellij.openapi.project.Project) PlatformIcons(com.intellij.util.PlatformIcons) LibraryEx(com.intellij.openapi.roots.impl.libraries.LibraryEx) LibraryPresentationManager(com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager) StringUtil(com.intellij.openapi.util.text.StringUtil) ActionEvent(java.awt.event.ActionEvent) Disposable(com.intellij.openapi.Disposable) java.awt(java.awt) Result(com.intellij.openapi.application.Result) OrderEntryAppearanceService(com.intellij.openapi.roots.ui.OrderEntryAppearanceService) PathUtil(com.intellij.util.PathUtil) javax.swing(javax.swing) ItemEvent(java.awt.event.ItemEvent) ActionEvent(java.awt.event.ActionEvent) LibraryEx(com.intellij.openapi.roots.impl.libraries.LibraryEx) ExistingLibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.ExistingLibraryEditor) ExistingLibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.ExistingLibraryEditor) NewLibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor) LibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.LibraryEditor) ActionListener(java.awt.event.ActionListener) ItemListener(java.awt.event.ItemListener) Library(com.intellij.openapi.roots.libraries.Library) NewLibraryEditor(com.intellij.openapi.roots.ui.configuration.libraryEditor.NewLibraryEditor)

Aggregations

NotNullComputable (com.intellij.openapi.util.NotNullComputable)2 DownloadableLibraryDescription (com.intellij.framework.library.DownloadableLibraryDescription)1 DownloadableLibraryType (com.intellij.framework.library.DownloadableLibraryType)1 FrameworkLibraryVersion (com.intellij.framework.library.FrameworkLibraryVersion)1 FrameworkLibraryVersionFilter (com.intellij.framework.library.FrameworkLibraryVersionFilter)1 AllIcons (com.intellij.icons.AllIcons)1 IdeBundle (com.intellij.ide.IdeBundle)1 OldCustomLibraryDescription (com.intellij.ide.util.frameworkSupport.OldCustomLibraryDescription)1 Disposable (com.intellij.openapi.Disposable)1 Result (com.intellij.openapi.application.Result)1 WriteAction (com.intellij.openapi.application.WriteAction)1 Logger (com.intellij.openapi.diagnostic.Logger)1 Project (com.intellij.openapi.project.Project)1 ProjectManager (com.intellij.openapi.project.ProjectManager)1 OrderRootType (com.intellij.openapi.roots.OrderRootType)1 LibraryEx (com.intellij.openapi.roots.impl.libraries.LibraryEx)1 Library (com.intellij.openapi.roots.libraries.Library)1 NewLibraryConfiguration (com.intellij.openapi.roots.libraries.NewLibraryConfiguration)1 OrderEntryAppearanceService (com.intellij.openapi.roots.ui.OrderEntryAppearanceService)1 CustomLibraryDescription (com.intellij.openapi.roots.ui.configuration.libraries.CustomLibraryDescription)1