package com.intellij.perlplugin.bo;
import com.intellij.perlplugin.ModulesContainer;
import java.util.ArrayList;
/**
* Created by eli on 28-11-14.
*/
public class Sub {
private Package packageObj;
private String subName;
private int positionInFile;
private ArrayList<Argument> arguments = new ArrayList<Argument>();
public Sub(Package packageObj, String subName) {
this.subName = subName;
this.packageObj = packageObj;
ModulesContainer.addSub(this);
}
public String getName() {
return subName;
}
public void setName(String subName) {
this.subName = subName;
}
public ArrayList<Argument> getArguments() {
return arguments;
}
public void setArguments(ArrayList<Argument> arguments) {
this.arguments = arguments;
}
public int getPositionInFile() {
return positionInFile;
}
public void setPositionInFile(int positionInFile) {
this.positionInFile = positionInFile;
}
public Package getPackageObj() {
return packageObj;
}
@Override
public String toString() {
return "Sub{" + "\n" +
" subName='" + subName + '\'' + ",\n" +
" packageObj='" + packageObj.getQualifiedName() + '\'' + ",\n" +
" positionInFile='" + positionInFile + '\'' + ",\n" +
" arguments=" + arguments + "\n" +
'}';
}
public String toString2() {
return toString2(false);
}
/**
*
* @param hideSelf true - hide in auto complete the 1st sub argument if it's $self,$class or $proto
*/
public String toString2(boolean hideSelf) {
StringBuffer sb = new StringBuffer();
sb.append(getName());
sb.append("(");
boolean isFirstHidden = false;
for (int i = 0; i < getArguments().size(); i++) {
Argument argument = getArguments().get(i);
if(hideSelf && i == 0 && argument.getName().matches("\\$(self|class|proto)")){
isFirstHidden = true;
continue;
}
sb.append(" " + argument.toString2());
if (i < getArguments().size() - 1) {
sb.append(",");
}
}
if (getArguments().size() == 0 || (getArguments().size() == 1 && isFirstHidden)) {
sb.append(")");
} else {
sb.append(" )");
}
return sb.toString();
}
}