![JAR search and dependency download from the Maven repository](/logo.png)
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