(O2 Platform list: this is the thread with Jim I mentioned below regarding ICSharp and he agreed to continue it here)<div><br></div><div>Jim, I definitely would recommend that you take a look at what O2 does, since I probably solved most (if not all) of the problems you are going to have (initially) when trying to use ICSharp for .NET code analysis.</div>

<div><br></div><div>For O2, there are two key capabilities that I get from ICSharpCode and that are the foundation of the &#39;O2 Scripting environment&#39; and &#39;MethodStreams&#39;. These are: CodeComplete and Refactoring.<br>
<br><b>Starting with CodeComplete support.</b><br><br>If you fire up O2 and open up an &#39;Simple Script Editor&#39;, and type (for example) <i><b>Processes.</b></i> you will see a dropdown box with the list of available methods<br>
<br><img title="tmp455E.tmp.jpeg" alt="tmp455E.tmp.jpeg" src="cid:ii_12cd12896d4a816c"><br><br clear="all">This funcionality is provided by ICSharpCode code complete capabilities. Unfortunately ICSharpCode (at last the version I used) was not very modular, and I had to make a number of changes in order to make it work as smoothly as it does in that O2 GUI.<br>
<br>When I was adding CodeComplete to O2, the first thing that I wanted to do was to isolate its funcionality into a separate System.Windows.Forms.Control , but,  ICSharpCode has a number of dependencies on System.Windows.Forms.Form which made it hard (i.e. if you tried to use the control that comes with Sharpdevelop outside SharpDevelop GUI/Canvas you would get a number of exceptions).<br>
<br>So in my efforts to understand the moving parts I first created a stand-alone Control+Form using the main SharpDevelop classes which you can see here: <a href="http://code.google.com/p/o2platform/source/browse/trunk/SourceCode_3rdParty_Dlls/SharpDevelop/CodeCompletion/">http://code.google.com/p/o2platform/source/browse/trunk/SourceCode_3rdParty_Dlls/SharpDevelop/CodeCompletion/</a><br>
<br>After that was working, I was in a position were I really understood the SharpDevelop code complete architecutre, and this allowed me to create a stand alone class that just received a SharpDeveloper Text editor object as a reference<br>
(see <span class="pln"></span><i><span class="kwd">public</span><span class="pln"> O2CodeCompletion</span><span class="pun">(</span><span class="typ">TextEditorControl</span><span class="pln"> _textEditor</span><span class="pun">)</span><span class="pln"></span></i> ctor in <a href="http://code.google.com/p/o2platform/source/browse/trunk/O2%20-%20All%20Active%20Projects/O2%20Modules%20Using%203rd%20Party%20Dlls/O2_External_SharpDevelop/O2CodeCompletion.cs">http://code.google.com/p/o2platform/source/browse/trunk/O2%20-%20All%20Active%20Projects/O2%20Modules%20Using%203rd%20Party%20Dlls/O2_External_SharpDevelop/O2CodeCompletion.cs</a><br>
<br>The reason for the classes in that file to be that long, is because I wanted to consolidate in one place all pluming that was required to make the code complete work.<br><br>This was crucial when I later added new features to the O2 base code, namely the ability to handle partial code snippets (which is what you will see in the &#39;O2 Simple Script Editor&#39; GUI.<br>
<br>The other key feature that I added was the ability to dynamically consume the dynamic references added to the O2 scripts.<br><br>For example if you add this reference tag to an O2 Script:<br><br><i>//O2Ref:O2_Misc_Microsoft_MPL_Libs.dll</i><br>
<br>you will get (almost immediately) code complete support for it:<br><br><img title="tmp3FC0.tmp.jpeg" alt="tmp3FC0.tmp.jpeg" src="cid:ii_12cd17fd2fb1eb23"> <br><br>As most everything in O2, this capability is already exposed via an API, so in my next post I will show how to pragmatically access them.<br>
<br>As final example, the &#39;O2 Simple Script Editor&#39; (show in the screenshots above) is in it self a script, that gets dynamically compiled and executed: <a href="http://code.google.com/p/o2platform/source/browse/trunk/O2_Scripts/Utils/O2/ascx_Simple_Script_Editor.cs.o2">http://code.google.com/p/o2platform/source/browse/trunk/O2_Scripts/Utils/O2/ascx_Simple_Script_Editor.cs.o2</a><br>
<br>Dinis Cruz<br><br><br><div class="gmail_quote">On 10 December 2010 13:28, Jim DelGrosso <span dir="ltr">&lt;<a href="mailto:JDelGrosso@cigital.com" target="_blank">JDelGrosso@cigital.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">I have downloaded the ICSharp code and built the IDE so I can see how ICSharp is doing type resolution – I have not seen it used in the O2 environment (it&#39;s on the ToDo pile). I may take you up on your offer for a DimDim demo but let me get a better understanding of what is going on first.<br>


<br>
I&#39;m actually using ICSharp in something but wanted similar functionality that you had in O2 regarding type resolution. I was just curious if there was some &quot;setting&quot; within the ICSharp code to achieve the type resolution functionality but a cursory look seems to indicate there is not. I&#39;ll take a look at the ICSharp IDE starting with the links you provided and possibly your implementation as well to figure out what I need.<br>


<br>
Thanks,<br>
<br>
<br>
From: dinis cruz &lt;<a href="mailto:dinis.cruz@owasp.org" target="_blank">dinis.cruz@owasp.org</a>&lt;mailto:<a href="mailto:dinis.cruz@owasp.org" target="_blank">dinis.cruz@owasp.org</a>&gt;&gt;<br>
Date: Fri, 10 Dec 2010 07:55:11 -0500<br>
To: Jim DelGrosso &lt;<a href="mailto:jdelgrosso@cigital.com" target="_blank">jdelgrosso@cigital.com</a>&lt;mailto:<a href="mailto:jdelgrosso@cigital.com" target="_blank">jdelgrosso@cigital.com</a>&gt;&gt;<br>
Subject: Re: O2 and ICSharp<br>
<div><br>
Hi Jim, O2 has massive support for ICSharp (from SharpDevelop), in fact I build a full-blow static-analysis and taint-analysis built  engine on top of it.<br>
<br>
Have you see how it works? The most visible part of this is in O2&#39;s Scripting environment and on the MethodStreams/CodeStreams that you can create.<br>
<br>
If you are around and have some time, I can give you a remove demo (using DimDim) so that you can see in action (and try it locally)<br>
<br>
My main question is: what exactly are you trying to do? There are a ton of use cases that the O2 APIs allow (from simple &#39;which methods expose Attribute XYZ&#39; to  &#39;build me a file that contains all source code that is mapped from this first method X, include the XSD validation mappings at the top and the stored procedures used at the bottom&#39;<br>


<br>
</div>If you want to look at what is going on the code take a look at the <a href="http://code.google.com/p/o2platform/source/browse/#svn/trunk/O2" target="_blank">http://code.google.com/p/o2platform/source/browse/#svn/trunk/O2</a> - All Active Projects/O2_APIs/O2_API_AST&lt;<a href="http://code.google.com/p/o2platform/source/browse/#svn/trunk/O2%20-%20All%20Active%20Projects/O2_APIs/O2_API_AST" target="_blank">http://code.google.com/p/o2platform/source/browse/#svn/trunk/O2%20-%20All%20Active%20Projects/O2_APIs/O2_API_AST</a>&gt; project and the <a href="http://code.google.com/p/o2platform/source/browse/#svn/trunk/O2_Scripts/Languages_and_Frameworks/DotNet/DotNet_Ast_Scanner" target="_blank">http://code.google.com/p/o2platform/source/browse/#svn/trunk/O2_Scripts/Languages_and_Frameworks/DotNet/DotNet_Ast_Scanner</a> scripts (these are part of the dynamically compiled scripts that are synced on O2 Startup with O2&#39;s SVN server)<br>


<div><br>
Finally here is the SharpDevelop APIs that I used (I made a couple modifications and bug fixes) <a href="http://code.google.com/p/o2platform/source/browse/trunk/SourceCode_3rdParty_Dlls/SharpDevelop/" target="_blank">http://code.google.com/p/o2platform/source/browse/trunk/SourceCode_3rdParty_Dlls/SharpDevelop/</a><br>


<br>
Dinis Cruz<br>
<br>
Blog: <a href="http://diniscruz.blogspot.com" target="_blank">http://diniscruz.blogspot.com</a><br>
Twitter: <a href="http://twitter.com/DinisCruz" target="_blank">http://twitter.com/DinisCruz</a><br>
Web: <a href="http://www.owasp.org/index.php/O2" target="_blank">http://www.owasp.org/index.php/O2</a><br>
<br>
<br>
</div><div><div></div><div>On 10 December 2010 12:32, Jim DelGrosso &lt;<a href="mailto:JDelGrosso@cigital.com" target="_blank">JDelGrosso@cigital.com</a>&lt;mailto:<a href="mailto:JDelGrosso@cigital.com" target="_blank">JDelGrosso@cigital.com</a>&gt;&gt; wrote:<br>


Dinis,<br>
<br>
Hey there. I have a quick question (hopefully) about how you are using<br>
ICSharp inside of O2. I know you came here to Cigital a while ago and<br>
demoed O2 and showed how O2 was using ICSharp and specifically using<br>
ICSharp to perform type resolution or type binding. My question is: Can<br>
you describe briefly how you are using ICSharp to perform this<br>
functionality? I know it can support this functionality since the IDE can<br>
provide tooltips with the exact type of a variable for example and I&#39;m<br>
sure ICSharpCode.SharpDevelop.Dom is involved. What I was wondering was if<br>
there is some simple way to &quot;turn this feature&quot; on or do I need to<br>
implement some other key functionality that the ICSharp IDE is performing.<br>
<br>
Any pointers (either in the ICSharp or O2 code) are greatly appreciated.<br>
Thanks,<br>
<br>
----<br>
Jim DelGrosso<br>
Technical Manager, Cigital, Inc<br>
21351 Ridgetop Circle, Suite 400, Dulles, VA 20166<br>
Work: 703.404.9293 x1233<br>
Cell: 703.431.7013<br>
<a href="http://www.cigital.com" target="_blank">http://www.cigital.com</a><br>
Software Confidence. Achieved.<br>
<br>
<br>
<br>
<br>
</div></div></blockquote></div><br></div>