All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.yiwowang.intellij.finding.SearchMember Maven / Gradle / Ivy

The newest version!
package com.yiwowang.intellij.finding;

import com.intellij.openapi.project.Project;
import com.yiwowang.intellij.finding.base.bean.ClassBean;
import com.yiwowang.intellij.finding.base.bean.FindUsagesParams;
import com.yiwowang.intellij.finding.base.bean.MemberBean;
import com.yiwowang.intellij.finding.base.util.Utils;
import com.yiwowang.intellij.finding.wrap.DocumentListenerWrap;
import org.apache.commons.lang.StringUtils;

import javax.swing.*;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import java.awt.event.*;
import java.util.ArrayList;
import java.util.List;

public class SearchMember extends SearchClass {
    private SearchForm form;
    private List members;
    private MemberBean selectedMember;

    public SearchMember(Project project, SearchForm form) {
        super(form);
        this.form = form;
        DocumentListener documentListener = new DocumentListenerWrap() {
            @Override
            public void onChange(DocumentEvent e) {
                Utils.executeThread(new Runnable() {
                    @Override
                    public void run() {
                        searchMember(getMemberInput().getText());
                    }
                });
            }
        };
        form.methodInput.getDocument().addDocumentListener(documentListener);
        form.fieldInput.getDocument().addDocumentListener(documentListener);
        form.memberList.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                int index = form.memberList.getSelectedIndex();
                if (index >= 0 && index < members.size()) {
                    selectedMember = (MemberBean) form.memberList.getModel().getElementAt(index);
//                    selectedMember = members.get(index);
                    if (form.methodRbtn.isSelected() && selectedMember.type == MemberBean.TYPE_METHOD) {
                        form.methodInput.setText(selectedMember.getInputFormatName());
                    } else if (form.fieldRbtn.isSelected() && selectedMember.type == MemberBean.TYPE_FIELD) {
                        form.fieldInput.setText(selectedMember.getInputFormatName());
                    }
                }
            }
        });

        form.memberSearchBtn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                FindUsagesParams params = createFindUsageParams();
                if (params.isValid()) {
                    ResultForm.showDialog(form.context, params);
                }
            }
        });

        // 默认选择
        form.methodRbtn.setSelected(true);
    }

    public FindUsagesParams createFindUsageParams() {
        FindUsagesParams params = new FindUsagesParams();
        params.className = StringUtils.deleteWhitespace(form.classInput.getText());
        if (form.classRbtn.isSelected()) {
            params.searchType = FindUsagesParams.TYPE_CLASS;
        } else if (form.methodRbtn.isSelected()) {
            String methodInput = StringUtils.deleteWhitespace(form.methodInput.getText());
            if (!StringUtils.isEmpty(methodInput)) {
                params.searchType = FindUsagesParams.TYPE_METHOD;
                params.methodName = StringUtils.substringBefore(methodInput, "(");

                if (methodInput.contains("(") && methodInput.contains(")")) {
                    params.methodParamType = "(" + StringUtils.substringBetween(methodInput, "(", ")") + ")";
                } else {
                    params.methodParamType = null;
                }
            }
        } else if (form.fieldRbtn.isSelected()) {
            String fieldInput = StringUtils.deleteWhitespace(form.fieldInput.getText());
            if (!StringUtils.isEmpty(fieldInput)) {
                params.searchType = FindUsagesParams.TYPE_FIELD;
                params.fieldName = fieldInput;
            }
        } else if (form.constantRbtn.isSelected()) {
            String constantInput = StringUtils.deleteWhitespace(form.constantInput.getText());
            if (!StringUtils.isEmpty(constantInput)) {
                params.searchType = FindUsagesParams.TYPE_CONSTANTS;
                params.constant = constantInput;
            }
        } else if (form.packageRbtn.isSelected()) {
            String packageInput = StringUtils.deleteWhitespace(form.packageInput.getText());
            if (!StringUtils.isEmpty(packageInput)) {
                params.searchType = FindUsagesParams.TYPE_PACKAGE;
                params.packageName = packageInput;
            }
        }
        return params;
    }

    public void formFindUsagesParams(FindUsagesParams params) {
        if (params == null || !params.isValid()) {
            return;
        }
        // select find usages tab
        form.tabPane.setSelectedIndex(1);

        switch (params.searchType) {
            case FindUsagesParams.TYPE_CLASS:
                form.classRbtn.setSelected(true);
                form.classInput.setText(params.className);
                form.setClassMode();
                break;
            case FindUsagesParams.TYPE_METHOD:
                form.methodRbtn.setSelected(true);
                form.classInput.setText(params.className);
                form.methodInput.setText(params.methodName + (params.methodParamType == null ? "" : params.methodParamType));
                form.setClassMethodMode();
                break;
            case FindUsagesParams.TYPE_FIELD:
                form.methodRbtn.setSelected(true);
                form.classInput.setText(params.className);
                form.fieldInput.setText(params.fieldName);
                form.setClassFieldMode();
                break;
            case FindUsagesParams.TYPE_CONSTANTS:
                form.constantRbtn.setSelected(true);
                form.classInput.setText(params.className);
                form.constantInput.setText(params.constant);
                form.setClassConstantMode();
                break;
        }

        ResultForm.showDialog(form.context, params);
    }


    @Override
    protected void onSelected(ClassBean classBean) {
        super.onSelected(classBean);
        selectedMember = null;
        form.methodInput.setText("");
        form.fieldInput.setText("");
        refreshMethodList(classBean);
    }

    private void refreshMethodList(ClassBean classBean) {
        Utils.executeThread(new Utils.AsyncTask>() {
            @Override
            public List doInBackground() {
                form.context.projectFinding.decodeClass(classBean);
                return classBean.members;
            }

            @Override
            public void doUi(List data) {
                if (data == null) {
                    data = new ArrayList<>();
                }
                members = data;
                initMembers(members);
            }
        });

    }


    private void searchMember(String inputText) {
        // todo 去空格?
        if (inputText.isEmpty()) {
            selectedMember = null;
            form.memberList.clearSelection();
            initMembers(members);
            return;
        }
        String input = StringUtils.deleteWhitespace(inputText);
        if (selectedMember != null && input.equals(selectedMember.name)) {
            return;
        }
        List filterMembers = new ArrayList<>();
        for (int i = 0; i < members.size(); i++) {
            MemberBean member = members.get(i);
            String name = StringUtils.deleteWhitespace(member.getInputFormatName());
            if (Utils.contains(name, input, form.memberIgnoreCaseChk.isSelected())) {
                System.out.println(" name:" + name + ",input:" + input);
                filterMembers.add(member);
                if (name.length() == input.length()) {
                    initMembers(members);
                    selectedMember = member;
                    form.memberList.setSelectedIndex(i);
                    return;
                }
            }
        }
        initMembers(filterMembers);
        selectedMember = null;
        form.memberList.clearSelection();
    }

    private void initMembers(List members) {
        if (members == null) {
            return;
        }
        form.memberList.setModel(new AbstractListModel() {
            @Override
            public int getSize() {
                return members.size();
            }

            @Override
            public MemberBean getElementAt(int index) {
                return members.get(index);
            }
        });
    }

    public JTextField getMemberInput() {
        if (form.methodRbtn.isSelected()) {
            return form.methodInput;
        } else {
            return form.fieldInput;
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy