From c47ea7df513220187cd87b0c49d90692bb20fa29 Mon Sep 17 00:00:00 2001
From: David Reeves <dereeves@nps.edu>
Date: Wed, 31 Oct 2018 13:43:02 -0700
Subject: [PATCH] * code explorer filtering and selecting works on classes or
 methods now

---
 .../.vs/BehaviorDevelopmentStudio/v14/.suo    | Bin 538112 -> 537600 bytes
 .../BehaviorStudio2/CodeExplorer.cs           | 174 ++++++++++++++----
 .../dist/BDSCodeCompleteServer.jar            | Bin 27146 -> 27130 bytes
 .../src/bdscodecompleteserver/BDSServer.java  |   6 +-
 4 files changed, 138 insertions(+), 42 deletions(-)

diff --git a/BehaviorDevelopmentStudio/.vs/BehaviorDevelopmentStudio/v14/.suo b/BehaviorDevelopmentStudio/.vs/BehaviorDevelopmentStudio/v14/.suo
index 6f09ac9d3b1dd2f116ee29c19138395687d687cf..88f1f9d6c0676e7fe39c54ad75ece39c61dbf3da 100644
GIT binary patch
delta 1584
zcmYk6e@v4{7{~A4UhiJ8uqp^uaTc7RQ$Ph|8>vaRsli0V05kr96Hpvrty5Y>Wzt2^
zg^`8zOpoYdl(|>bB|=}*o6~8Rm@NAd#|(ey*0|`LFn>*vPF>XQd5Lqo<a2k=bI;v<
zpX8qN-?ICM?Ojehsek@#CE;#E{<`vwgLs|pqaWe`S%OdSQc{3N`1_;@-`8Vg3r;}C
z`Pt<VRKtBrEB>6vpbv1LsTDjiRzL_si02UdYh5OU3c<()ihz&6PKPlAumV{?A}|@S
z0Z-%cxPX`^yq!$L6ZvOqnevNC|4U8AoLF4MSmz~{Ws{C!gnEG^z)`?h7(?$*tiU=+
ze2hcMUIj<F&)SMV<}v8IxNm%`r5&OTeMaj^R(evEKwF>QSG)=9S+>h5p)@bX%egPT
zbzCJx7$TvGd)Mhoy(;gJITToct>xf)exo6&k~`GuXHMRh+tO1+dV)%z$gbO+4izuv
z2NP11`G~*0pxAmC^6LeT0Au;|F6c};55@ohhs7`PgA1nz5(&S%mnaj7?pa7*P};D*
zxpIe!D|oDGr*c~1+gARKPw77EF|6CG2QBz0kGbRHy5WrIL{I{n`+p_{VjybD(kneB
zY5FI{Yj9|n*TlW)ouc+z<`(t}lB)YVdR6Yoy%^f#H*x<wf2iA{SPfn6aMUhfH^4LY
z_9Yq4Fc^l$v5XSFdS;yi#Z$O--wBHmGaoJ=g%y2Z-yy1dD?4%E(5OCIWx*kBbOLTO
zgyO9`V<&gVPGUd-OaPIwlji%SbUW;AG08iO2BV_wI=zv!6Hc@M#yCxEAEL8N-H_nM
zE#^$|-4L}+%|mX~fIO%URiZc0D(LG_GxDN0Q9Y`W@!u#`!Z)Z33)gKL5s{lTQ)W(P
zSMZE?AaD(Gpbe-NHNt!~Y_g*!n0dfohc=-cWEb~5rj!Ibm@k6>t1u1It!6|K!aP&4
ziA%#YJ1H4f42*_F(rwx#T)$Jlmci8UV;W5n(FFFAwu~ifGnpbIf6z=tT=|nu3*Vs;
z9KH)(FoQ*;e}ukn;yo88h>8)K8_r?hV6#yiNc@n?3S}fVmc*y*Yl-t%9E)2U*>>^X
z1onyyz01nYf;^;7ex)%@OnyKu!v27c)gls&4{5hj^_C!ys1t-EwB9WjJ)&PKnv*Fa
z@PxXg>oJJXwt;zeHcOLfJJ=1g_LNdFw}zF;vTD|E3KJF`C+vBUiIu5ZJtH#eU^Xml
z8`!Y6f{|b|^NM&qD->sDFoztdXLGQ&pDCIH=wV8DCOc&sUkWAoZ>xp5Dvjin|0h$(
zmSU{~HoXdT0>z9z*LBk@ahH+3y-=-|)qB_h{GUjy1tGi^=w?K_#YniGVIr{x8#E8N
zN0@a?X4Vj0A|o9PUd4q*lF#>MH;Osmvm(CKL*>OY%z@PvKN_DCJpZ!&b6N9xw=oa4
zFo$hZT~kxln!3$Z6{{OO-Uhe3ro!u6yS7TWT9`{lpc_-q%d?AwRWhfz{3}z%`9Y@g
z1Eo}cK-Fdz{(>pwuyURekvc?+rE?EEhqXaQcz#EQQMZ(r9M6`EgG^!(h_gP~cah~=
z<<)EKMXWhg`YgfJAW=&urNEz-3K#{L4x>?|HW(Me*R!hM4|-0+OH5R+W{AOSG$%Mj
z-E!M3b&(?cpjMlsD#Deo`lTyRb>YL20u^)DfvF-hmrW1mtEr;Bg-sE&=czya11LEk
Aj{pDw

delta 1637
zcmZvb3v3ic7{_;J=jL0Eqa3}q6sUS_cpSBqVu4^i!hr>fkwBmVlBTv`qY$`4A3Phn
zKv7Z~Q#yD<02K->uPB8jH)3Nv2th&&HiVE^8lnx4iqK%;h%uG=Z8au7Hu>G$H;@1K
z|GwQZyZq(@e`Am&pPo9N^0p0Q?7eG51>HtYia4z$yF|5KOG-psUraWNxh$7#7F$^*
z`O1#7^<+TokZ;PqHP=b0T}?kAO-6u?(=<(FG5^a~bxoUy!7yYp@*&1UaZE$JNCv`?
z;Ycd-tgo-nhZDbx9qa|-7DtSEG>O?yjRaydPcLb5=d&h);sx&c$<F3u7#v4VAWr<u
z{><}@PQJIRi%$~UpZJ5`ypswuHN(zGz2$3eqRrX7IYOI)e%n787wc$~vlbj}5Gm4U
z`sf~A6zAu8`?b;RapVLdj^#Hrxfy8_)AL8{GQIAbIEnfCI&?cclMlA5nj6TOMNhc>
z<gkY{6<3jqqS{+a8bus`cZljCwY&~JGEMw8EMRApT=S5lBEG6`U?U23BxCKGCQrAs
zT-ny4XV`_|f)ueoC5bsk?6Y+-MhZpsxY~gWai7yUd}Qf)SS|evS(0tmA2UQ?Qd+<7
z{yyNbMYu;4P73sE95MwH<}2ozJs#?<!<;*i_Yh~dNZZ>o=qv_N1mnI|rx#eS%L$%{
z=`%+N@4mC19$bF>*BQHQ-(gO-5_?_q7D^U~c+qxRL+wpRHu=c=PGzKKd;Hw{@pA;B
zh>kE7Kj(Tpm(M|KQ#I8MJkp`+?(!NEz0Jd9P#Lz!gKN&XSZ=<<U(}aip=;N>(&d#q
zJT-leR;86`tF>&cP%GCKVpO56(8Ag~T0k3%2M5VlAMlN?*+MTRBAxo=?k=9?O~4fg
z=Rsvnwsr9w8M?<qGV~J<Df1qW5owNqgCem!Wq_t-E!38yuGPh<3f<=yhzQh=l%u=(
z@aQ9cp2+Fl{A*?QaFawc;5<=eG)yCr9-b*n$3lt>l|xL-&t;P3K#<~Fc<Ym)^3A(&
z)cMvm$tFOMFZs@m|JAGs@Fk5t<sCkm=7Eux8{E<RoKh#D!i4Q04|>3-d`a+-SWh{%
zQh-G(pq0qhQQ&d;QN*jht%Qlx`js;)6R6e8X*3HMQ_O^3-Fn8km4}BIbhzY?mHkN)
z<gR5fO-<Vg7f2)s)8*4ykf7$zf)+ix23qw&UZ+ogKCv6}@+g=R-4BE*5`aEpEdv_O
z1jZGc2)!ioE>y{7Z@3a=;}ytMEh{0JkbsPxas}k)-8|9S22_T^FgB&SVtH9*(Tvi{
z70U}N%F41gtX_pVWNjF>s@NA0BGEb^{9lG-N;0&mwqnR3)&`&=;nR9mUjyri{G}2a
zWGo5t)TI*0BUU{YkJhXP%$Ku3Pjl`P7X_!rs5y<Gh`h7`hRc>U)D&qo9%b!@rMlzY
z)nBLDxDsCfr|*@hwFe1f)^Nb9ygl$}u;amM!3JCe%4B{S3#d$P+yI$)hX+-#0WOmN
zO<oa!c2PVdL3PC-RhP{lx$32VE%pBGg+wo-qM{LaMxrT3XOimdgy)Iuxy_4I(S3NE
zM9Lv#J%S|b3|cS@8ev93s&j#-Vg<?gaScVBD?1EFyJY_XBCfqQS$a=HP~N%;hP-+e
z3~^vCS3BLtQoriFh5FWA;3|}3n0N!m8>W?wy17P@ydH*C66ZtSOY_Rw$L(Gocy4y>
rg}jGyhV=dnTf~V2>Eh!9Ln8MeBxB=^P~;^e_TR0I*+z>ra}Dzk{--rm

diff --git a/BehaviorDevelopmentStudio/BehaviorStudio2/CodeExplorer.cs b/BehaviorDevelopmentStudio/BehaviorStudio2/CodeExplorer.cs
index dc1992a..62667a7 100644
--- a/BehaviorDevelopmentStudio/BehaviorStudio2/CodeExplorer.cs
+++ b/BehaviorDevelopmentStudio/BehaviorStudio2/CodeExplorer.cs
@@ -9,6 +9,7 @@ namespace BehaviorStudio2
         delegate void SetListCallback(CodeExplorerItem[] lines);
 
         static Stack<CodeExplorerItemList> itemList = new Stack<CodeExplorerItemList>();
+        static Stack<CodeExplorerItem> selectStack = new Stack<CodeExplorerItem>();
 
         //static List<string> unfilteredList;
         static string className = "";
@@ -18,26 +19,43 @@ namespace BehaviorStudio2
             InitializeComponent();
         }
 
+        private void SetMethods(List<string> lines)
+        {
+            lines.RemoveAt(lines.Count - 1);
+            lines.Sort();
+            itemList.Push(new CodeExplorerItemList(lines));
+
+            if (this.optionsLB.InvokeRequired)
+            {
+                SetListCallback l = new SetListCallback(_SetOptionsLB);
+                this.Invoke(l, new object[] { itemList.Peek().items.ToArray() });
+            }
+            else
+            {
+                _SetOptionsLB(itemList.Peek().items.ToArray());
+            }
+        }
+
         private void SetLines(List<string> lines)
         {
             lines.RemoveAt(lines.Count - 1);
             lines.Sort();
-            //unfilteredList = lines;
             itemList.Push(new CodeExplorerItemList(lines));
 
             if (this.optionsLB.InvokeRequired)
             {
-                SetListCallback l = new SetListCallback(_SetLines);
+                SetListCallback l = new SetListCallback(_SetOptionsLB);
                 this.Invoke(l, new object[] { itemList.Peek().items.ToArray() });
             }
             else
             {
-                _SetLines(itemList.Peek().items.ToArray());
+                _SetOptionsLB(itemList.Peek().items.ToArray());
             }
         }
 
-        private void _SetLines(CodeExplorerItem[] items)
+        private void _SetOptionsLB(CodeExplorerItem[] items)
         {
+            this.optionsLB.Items.Clear();
             this.optionsLB.Items.AddRange(items);
         }
 
@@ -61,26 +79,6 @@ namespace BehaviorStudio2
                 }
                 this.optionsLB.Items.AddRange(itemList.Peek().items.ToArray());
             }
-
-            //if (unfilteredList == null || unfilteredList.Count < 1)
-            //{
-            //    AsyncThreadClient atc = new AsyncThreadClient();
-            //    atc.Connect();
-            //    Console.WriteLine("ATC Connected!");
-            //    atc.SendAndReceiveThread("GETJARS<EOL>", SetLines);
-            //}
-            //else
-            //{
-            //    this.optionsLB.Items.AddRange(unfilteredList.ToArray());
-            //}
-        }
-
-        private void SetMethods(List<string> lines)
-        {
-            foreach (string line in lines)
-            {
-                Console.WriteLine("Line: " + line);
-            }
         }
 
         private void FindMethods(string line)
@@ -120,6 +118,18 @@ namespace BehaviorStudio2
         {
             string filter = lineTB.Text;
 
+            string[] strs = filter.Split('.');
+
+            if (strs.Length > 1 && strs[strs.Length - 1] == "")
+            {
+                // last char=.
+                filter = strs[strs.Length - 2] + ".";
+            }
+            else
+            {
+                filter = strs[strs.Length - 1].Trim();
+            }
+
             FilterList(filter);
         }
 
@@ -188,8 +198,20 @@ namespace BehaviorStudio2
         {
             if (optionsLB.SelectedIndex > -1)
             {
-                string txt = (string)optionsLB.SelectedItem;
-                lineTB.Text = txt;
+                string[] strs = lineTB.Text.Split('.');
+                CodeExplorerItem cei = (CodeExplorerItem)optionsLB.SelectedItem;
+                selectStack.Push(cei);
+                strs[strs.Length - 1] = cei.GetFullDescription(false);
+
+                string text = "";
+                for(int i=0;i<strs.Length;i++)
+                {
+                    text += strs[i];
+                    if (i < strs.Length - 1)
+                        text += ".";
+                }
+
+                lineTB.Text = text;
                 lineTB.SelectionStart = lineTB.Text.Length;
                 lineTB.SelectionLength = 0;
             }
@@ -217,7 +239,7 @@ namespace BehaviorStudio2
             // search through the list
             foreach (CodeExplorerItem item in itemList.Peek().items)
             {
-                string line = item.className;
+                string line = item.GetSearchName();
                 // convert the string to lower
                 string lineLower = line.ToLower();
 
@@ -286,7 +308,7 @@ namespace BehaviorStudio2
         {
             CodeExplorerItem.includeFullClassname = fullClassCBX.Checked;
 
-            if (optionsLB.Items.Count > 0)
+            if (itemList.Peek().IsClassList && optionsLB.Items.Count > 0)
             {
                 int sel = optionsLB.SelectedIndex;
                 object[] objs = new object[optionsLB.Items.Count];
@@ -303,6 +325,8 @@ namespace BehaviorStudio2
         public List<CodeExplorerItem> items;
         public CodeExplorerItem selectedItem;
 
+        public bool IsClassList { get { return (items == null || items.Count < 1 ? false : true); } }
+
         public CodeExplorerItemList(List<string> lines)
         {
             items = new List<CodeExplorerItem>();
@@ -328,34 +352,106 @@ namespace BehaviorStudio2
     {
         public static bool includeFullClassname = false;
 
-        public string returnClass = "";
-        public string className = "";
-        public string fullClassName = "";
-        public string[] paramNames = null;
+        string methodName = "";
+
+        // return value
+        string returnClassName = "";
+        string returnFullClassName = "";
+
+        // class
+        string className = "";
+        string fullClassName = "";
+
+        // params
+        string[] paramClassNames = null;
+        string[] paramFullClassNames = null;
+
+        public bool IsClassItem { get; protected set; }
 
         public CodeExplorerItem(string item)
         {
             string[] its = item.Split('|');
 
-            className = its[0];
-            fullClassName = its[1];
+            if (its.Length == 2)
+            {
+                // its a class item
+                className = its[0];
+                fullClassName = its[1];
+                IsClassItem = true;
+            }
+            else if (its.Length == 3)
+            {
+                // its a method item
+                methodName = its[0];
+
+                // return class
+                returnFullClassName = its[its.Length - 1];
+                returnClassName = GetSimpleClassName(returnFullClassName);
+
+                // params
+                paramFullClassNames = its[1].Trim().Split(',');
+                paramClassNames = new string[paramFullClassNames.Length];
+                for (int i = 0; i < paramFullClassNames.Length; i++)
+                    paramClassNames[i] = GetSimpleClassName(paramFullClassNames[i]);
+            }
+            else
+            {
+                Console.WriteLine("Error: Unable to parse code explorer item - " + item);
+            }
+        }
+
+        public string GetSearchName()
+        {
+            if (IsClassItem)
+                return className;
+            else
+                return methodName;
         }
 
         public override string ToString()
+        {
+            return GetFullDescription(CodeExplorerItem.includeFullClassname);
+        }
+
+        public string GetFullDescription(bool verbose)
+        {
+            if (IsClassItem)
+            {
+                if (verbose)
+                    return className + "(" + fullClassName + ")";
+                else
+                    return className;
+            }
+            else
+            {
+                if (verbose)
+                    return methodName + "(" + GetParamDescription(true) + ") " + returnFullClassName;
+                else
+                    return methodName + "(" + GetParamDescription(false) + ")";
+            }
+        }
+
+        string GetParamDescription(bool verbose)
         {
             string desc = "";
-            if (paramNames != null && paramNames.Length > 0)
+            if (paramClassNames != null && paramClassNames.Length > 0)
             {
-                for (int i = 0; i < paramNames.Length; i++)
+                for (int i = 0; i < paramClassNames.Length; i++)
                 {
                     if (i != 0)
                         desc += ",";
-                    desc += paramNames[i];
+                    desc += verbose ? paramFullClassNames[i] : paramClassNames[i];
                 }
             }
 
-            return className + (includeFullClassname ? "(" + fullClassName + ")" : "");// + ":" + (returnClass == null || returnClass == "" ? "null" : returnClass) +
-                //":" + (desc == null || returnClass == "" ? "null" : desc);
+            return desc;
+        }
+
+        public static string GetSimpleClassName(string fclassname)
+        {
+            string[] strs = fclassname.Split('.');
+
+            return strs[strs.Length - 1];
         }
     }
 }
diff --git a/java/BDSCodeCompleteServer/dist/BDSCodeCompleteServer.jar b/java/BDSCodeCompleteServer/dist/BDSCodeCompleteServer.jar
index 74d56dd885d61eaa0c07a7905cb81971cf7a42ca..5a6d3ae33445a4f2bcd323a77b28bb8b8ba70f29 100644
GIT binary patch
delta 2106
zcmaJ?3wVxo6#t#~+qeI__xtaDvHQ(!V}@C6EoNpj#*B^08pG`Jxs0%4;Ul@`60ayl
zqM}e(kwi)tbQ8LWE~KK1D58mV{_n=~)YH@ReBXJ`?SIbiob$gdI7anH$+KT?o0|dX
zz_PN^rJixNrDdhtQV$4E7V~!1#w<D*0vt3w^{%cm50qf5fg#wYW4jXS6nRPDWq}<A
zcH$KS0=o>j<5gwZE%2Ja9%b2Uz!R?<kl3dzZwS2Uf&F;Pz}t97$Ghr#z`#KqQmfxn
z<b5T6An>7qFl;m63d2WAby&$vO7O9YcSQLz*@+__IErJ6d}82JrQ46sbbPMkxPfAP
zq2q-5p49QBj<0llt>YUVr*xcF!M;_tGdjN0@x8zg3f)-)=kTMBpLG1p`HS(32hQVH
z2QJ{E1Ha*SMJ@@<({Wir`9sGQWxT2o{;8v0DX;1HONG9!$PGmr44fzEL^^2(*~m>1
zyC8Q11zacz(iQPgYC|W75~Kru7sykPmrmY-d<6Ll@~b=Lv5E{9`~?MYOU>DiUT%Tx
zWFB#pQ&3&1tRw$sY6=uAutrdbpilwRyy4j{uo6`gPSg?@WjQJ&N-@mL@Ja~`kQ7GY
zY@`T9A|-}ngt^cw)h~*ol_o}!Scx)>H2W3=We936sRgwZ)JjroiX-@TALA^qo)kTy
zrn=f$U747es0{If0wuMfwvrMsTT(k>b$jYy?(H8MFR3FXN$Nz&5)UftZK&nSB;Af_
zl2RyD&>fP}=uUH-cZ^?W>Ov4DowM_Ml%z{ar>^EY?_7N$7D>vWZssNLB3GtD6eOuT
zB@;ZdCzqGiOe#-{=5;yQ19H0+6iUjXY(YIF<zOv$M^aDfC8(LCTm_&v^&!wyNqH1c
zuotR=B=x0y1+^c+h#ob3!bFBpzzF)QPC7VnUiN^V`B{Z&(w_>bo1{YJKY#{GDxyK=
zNuM}Ju%x?au%u$T+w}GgjtrGlLPI1CrBX@56j(}-G@KhjBPhEr-#6X8O9>x4!cf=&
zH7BM}Q?b502J6d11blqJlV#bB{hb)abhLS>Svid{I|R2KIF>DK*p|g7wHo7KW4RB;
zW1<zIkF}O}1nX254U?D;g4TfUunE)%+$(S&NMN$y$Wu^j#orpdiQ|`ql)6;>bUu*@
zXodSRl`|Pkr(hcU`Jx8X;o_(Pn1C6K)`kU)V<zKJIhQrzP&p%EzkvYG^MJstYsiRe
z;6N<aH06fcBPutbo#ia<0F8F*T$dI)ofyilu$2~+@o=C8;xWg95{BNGi+P-O_AT91
z<TvUl5FwVIo&3<Q3H&K;a^ng+6<LrqDrF=yF`vuelueK|a&jrENCiF*-VC<|?2MN&
z&oYmPr})+ISOp&9%ND##dG+YJ*oY-WZszvLWJl%>M1*)T@yj$XM*7oW(;gL1#b*1c
zRNf_3QPEt~{HWblQTyPJY{X$PmtsdthPp)ck_K_t9>!AmQ**u!m%#)dHf+Um)_GDQ
zHscZY^P(hd#0uuT=`feFk~tp=$6h>&$KcRx2xqQ>Ejwv7RxxM89$JaVnR9dD2O5hf
zIG~*`u?nol8gBg+8iFUW7J|-jKNJ{#PqcwIw-s|wv5rT~oZ74!)^Qh-VQ+%G{ubn?
zZ$Vzq4@P6I^_;6Q!!vLRtHE0!ucJM8R^ZusWYi<6fp@yY+Mul4U|E>iDDa%X^Gu1e
zHy{oE|LY^LNno?Jj#u+<vs!l*9latNkOEz})DifP48V2Bn|P8N(6Q;XC|53Z3;*4@
zY(Ea7;RTj7yvSz&+-2g&=P2$0{_zy&1r?o$&GrD)za=}47&)<Q+{n6&*!V0Pzs=^D
zid6Mhn;R-l|Ld(@QQ6P(I9C~_$yhU{Q;gZVs)M$?EwimmS5=ahm}s#x5<|?nRX(QX
o4Am|tu`0pLb+*wOvX~7v7dyLXnK>3aC&$~o<n(dR<NF2p8~DAdkpKVy

delta 2131
zcmaJ?2~?C-6#ni%4DaWk$1s4xun4#dDk@r%DQb!v67DOaC<BZO7~q!ZWTuss+siQ1
zGSkvr$|y}uv&B-gveb%f(@bqMvrN;J?i<i^>U271=Dz#xz3+bCz3;vMT{%Jvj#6;H
z3|oK&m_XCwoF&1{Y)y)Dwx;eE!92~3n00V@RTNOAg3Zppf*|DJB@3fbY2sx)c}0tD
z0^0>%wXg#_EePzg5Qx{bXScu}f!DQXuZ3W|VL{?e?RiV!?I7&KI~Lx>eiH}uc+kRo
zIHXs<uf+#?`k}yK3o)p);ETaW+VruWv&g{_o$siQWw8TCgK!L=Xz{6q&$MkHs!V)t
z;<$xud|~2CJ$_~4YZKp?IAP+XiEmAu(#gKlzSAbom^dr&y=M1=g&*;giJwiJWBhFV
z5`^>k)qxB6&4J%>QHwtW7MQrCsa!Vkr*>Y^46mB_OB=75xUN%Ivmj_e7S5AllFg(5
zi|iDrg%D&~7{G;65LsF{v{{-ItS3&B+#x2pI6Z|53NtBOP#r;a1w~XI4_ZMMPa*}m
zxv|RU=p7KnLF$mh<BVod&vehYDP^94WhG08MpO=#izz%t?+wKYtQJ&HP@KRrbvd}D
z%Zu?66HrcI?gc1RbDVCK>1<TjEh(N7*hlrXXdp2Td1}5hHLM{u(w4?rG?DNiUmbS3
z)0#?ZMu~!wBsHfNgwSpiy`G}7gpw&mMc$%<<m6=SXelU4QZluY)Ef6oYC|cK+EP2U
zrGIpyq+94#N$n|BV!rm?hH@@bQU~}X-A)|^b&`}uos~DFepnakN)Xu{)3bVHr%Ael
zx~Y{ReawYeB&j>4t8*bk96dCnXh}UORb{!{zFyQ@P#;MdSi^mg)R!^^#YnnSqh(P)
z0+mbZPb~@dfttOf0W?ta8pM4~7@u2G%6J19Zm{l|qi6b{%=AIMvbqoKAZZAtOB$-f
zhtY6JBWNU{P7iNU9+#gm$x~KXtWLY!8L^VGX_TZK8chfvpF1_T)s!;t#8zEPN^)oP
z^_G_L_DC8-xst}xI7xYwN-$b56_3`q%P<ldE}wc=b`DJo49ejvN*DvXS{Uh$1@t}w
zE*E%nc^1IV37E)olG+*Rp(2&wZa%n}JxT2A&R2Lc?t+cyeNlobJZep^<wL<*F2=&Z
zRMsP4RHGYg0@DPh3(Nos+$}h6Cd&Q!SGzZI{=QM8eL8;{U)2_9f?1f&NEXM;gpcDw
z8RZ_#;jDES@m^+Y!vf|pmw9N+rL{aXW*qF-QHOEv6PR}uU7A&MBA!mG#fCm98XGXq
zGD;vo69PI`CPmLCrm`WX!cS!~9B70@Jm9AigA6>#kT%S_X)8xojg9Ie${%N^Ftn^C
ze}dakv%*e8{FDtE%}nOvAufX<YbhJ##l!w0HTg`0Fx^J5GhgOBPaTMDA2yBmP~Z{%
z3WLuoubxyHR&NoJU9E|0=NP^X^`e|C!bYeQap5#lU5rblY!x4$N~6@U_yjI$M*J>+
zQF{@NbTq?aF2#<<+}$O*mo${SwiF8C)DYY8D3(D|5?;h(YzwAjY(fRcIVlC}v7EIK
zI?Sa!&YFv2u?H*g1RRD9v8)xcXFILJO4e-HO%+(hT7VB{XcC^}gm#>xd_0BK-1<v2
z3QuDV1fAkTrOEI^V+_7=tXO-7ZM?;-@ppr3U&~!+2YW5$bvG$Ldz11yeo1Pu)-hHM
z!gKHm|B2iTc@3?&vjXd{pvx7cRP(uY_zx)CHuycPJTI_OU=vGX^lEfK`2WTTY!=w!
zU&pKYw?(hJj5f}C)o2e>`1BR{4+P*E<PARUs?nzQw&+kU^#%S1a@k>=#NZv_PGBp_
zc;rLPuhKD;0{?iUGb4r^Z;&1Y=zn7l9Gh1<t~jr<b%Vt2Hh#2Kc7CdU#8pN9$$vfK
z^9%a<BdQ8wjMxS$v~7JAS=icG+nm)Vs<<%4NK5vslar&=v_hA<P#A64+p?*J>flW>
dLeg1vtJ&U8#(<uFb!yKLb;|1s9F@;R@Hf~7wXOgF

diff --git a/java/BDSCodeCompleteServer/src/bdscodecompleteserver/BDSServer.java b/java/BDSCodeCompleteServer/src/bdscodecompleteserver/BDSServer.java
index 23c006e..4348904 100644
--- a/java/BDSCodeCompleteServer/src/bdscodecompleteserver/BDSServer.java
+++ b/java/BDSCodeCompleteServer/src/bdscodecompleteserver/BDSServer.java
@@ -273,12 +273,12 @@ public class BDSServer implements Runnable
                         if (params!=null&&params.length>0)
                         {
                             for(Class<?> param : params)
-                                paramsDesc+=param.getCanonicalName()+", ";
-                            paramsDesc=paramsDesc.substring(0,paramsDesc.length()-2);
+                                paramsDesc+=param.getCanonicalName()+",";
+                            paramsDesc=paramsDesc.substring(0,paramsDesc.length()-1);
                         }
                         if (ret!=null)
                             returnDesc+=ret.getCanonicalName();
-                        String desc = method.getName()+"("+paramsDesc+"):"+returnDesc;
+                        String desc = method.getName()+"|"+paramsDesc+"|"+returnDesc;
                         methodDescs.add(desc);
                     }
                 }
-- 
GitLab