* DLTK Mylyn integration
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/.cvsignore b/mylyn/features/org.eclipse.dltk.mylyn-feature/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/.project b/mylyn/features/org.eclipse.dltk.mylyn-feature/.project
new file mode 100644
index 0000000..54163ad
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/.project
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.dltk.mylyn-feature</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.pde.FeatureBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.FeatureNature</nature>
+ </natures>
+</projectDescription>
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/build.properties b/mylyn/features/org.eclipse.dltk.mylyn-feature/build.properties
new file mode 100644
index 0000000..1db758e
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/build.properties
@@ -0,0 +1,13 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+bin.includes = feature.xml,\
+ eclipse_update_120.jpg,\
+ epl-v10.html,\
+ feature.properties,\
+ license.html
+root=rootfiles
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/eclipse_update_120.jpg b/mylyn/features/org.eclipse.dltk.mylyn-feature/eclipse_update_120.jpg
new file mode 100644
index 0000000..68e3e02
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/eclipse_update_120.jpg
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/epl-v10.html b/mylyn/features/org.eclipse.dltk.mylyn-feature/epl-v10.html
new file mode 100644
index 0000000..ed4b196
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/epl-v10.html
@@ -0,0 +1,328 @@
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
+<meta name=ProgId content=Word.Document>
+<meta name=Generator content="Microsoft Word 9">
+<meta name=Originator content="Microsoft Word 9">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<!--[if gte mso 9]><xml>
+ <o:DocumentProperties>
+ <o:Revision>2</o:Revision>
+ <o:TotalTime>3</o:TotalTime>
+ <o:Created>2004-03-05T23:03:00Z</o:Created>
+ <o:LastSaved>2004-03-05T23:03:00Z</o:LastSaved>
+ <o:Pages>4</o:Pages>
+ <o:Words>1626</o:Words>
+ <o:Characters>9270</o:Characters>
+ <o:Lines>77</o:Lines>
+ <o:Paragraphs>18</o:Paragraphs>
+ <o:CharactersWithSpaces>11384</o:CharactersWithSpaces>
+ <o:Version>9.4402</o:Version>
+ </o:DocumentProperties>
+</xml><![endif]--><!--[if gte mso 9]><xml>
+ <w:WordDocument>
+ <w:TrackRevisions/>
+ </w:WordDocument>
+</xml><![endif]-->
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {font-family:Tahoma;
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-generic-font-family:swiss;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ font-family:"Times New Roman";
+ mso-fareast-font-family:"Times New Roman";}
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+ font-family:Tahoma;
+ mso-fareast-font-family:"Times New Roman";}
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/feature.properties b/mylyn/features/org.eclipse.dltk.mylyn-feature/feature.properties
new file mode 100644
index 0000000..3cf0c14
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/feature.properties
@@ -0,0 +1,122 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+# "featureName" property - name of the feature
+featureName=Dynamic Languages Toolkit - Mylyn Integration
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=Dynamic Languages Toolkit Update Site
+
+# "description" property - description of the feature
+description=Tools for mylyn Developers
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+January 28, 2004\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments\n\
+("Fragments"), and features ("Features"). A Feature is a bundle of one or\n\
+more Plug-ins and/or Fragments and associated material. Files named\n\
+"feature.xml" may contain a list of the names and version numbers of the\n\
+Plug-ins and/or Fragments associated with a Feature. Plug-ins and Fragments\n\
+are located in directories named "plugins" and Features are located in\n\
+directories named "features".\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Subdirectories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE CPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n
+########### end of license property ##########################################
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/feature.xml b/mylyn/features/org.eclipse.dltk.mylyn-feature/feature.xml
new file mode 100644
index 0000000..6a806b1
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/feature.xml
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/**
+ * <copyright>
+ *
+ * Copyright (c) 2005, 2007 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ *
+ * </copyright>
+ */
+-->
+<feature
+ id="org.eclipse.dltk.mylyn"
+ label="%featureName"
+ version="0.95.0.qualifier"
+ provider-name="%providerName"
+ image="eclipse_update_120.jpg">
+
+ <description url="http://www.eclipse.org/dltk">
+ %description
+ </description>
+
+ <copyright url="http://www.eclipse.org/legal/epl-v10.html">
+ Copyright (c) 2005, 2007 IBM Corporation and others.
+All rights reserved. This program and the accompanying materials
+are made available under the terms of the Eclipse Public License v1.0
+which accompanies this distribution, and is available at
+http://www.eclipse.org/legal/epl-v10.html
+ </copyright>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <url>
+ <update label="%updateSiteName" url="http://download.eclipse.org/technology/dltk/updates/"/>
+ <discovery label="%updateSiteName" url="http://download.eclipse.org/technology/dltk/updates/"/>
+ </url>
+
+ <requires>
+ <import feature="org.eclipse.dltk.core" version="0.95.0.qualifier"/>
+ <import feature="org.eclipse.mylyn.context_feature" version="3.0.0.qualifier"/>
+ <import feature="org.eclipse.mylyn.ide_feature" version="3.0.0.qualifier"/>
+ <import feature="org.eclipse.mylyn.monitor_feature" version="3.0.0.qualifier"/>
+ <import feature="org.eclipse.mylyn_feature" version="3.0.0.qualifier"/>
+ </requires>
+
+ <plugin
+ id="org.eclipse.dltk.mylyn"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"
+ unpack="false"/>
+
+ <plugin
+ id="org.eclipse.dltk.mylyn.source"
+ download-size="0"
+ install-size="0"
+ version="0.0.0"/>
+
+</feature>
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/license.html b/mylyn/features/org.eclipse.dltk.mylyn-feature/license.html
new file mode 100644
index 0000000..b38c3d7
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/license.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>Eclipse DLTK - mylyn Development Tools License</title>
+</head>
+<body lang="EN-US">
+<h1>Eclipse DLTK - mylyn Development Tools License</h1><h3>June 5, 2008</h3>
+<ul>
+ <li>Eclipse Public License v1.0 (<a href="#epl">http://www.eclipse.org/legal/epl-v10.html</a>) for mylyn Development Tools</li>
+</ul>
+
+<hr>
+
+<div name="epl" lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
+
+</div>
+
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/rootfiles/epl-v10.html b/mylyn/features/org.eclipse.dltk.mylyn-feature/rootfiles/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/rootfiles/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/rootfiles/notice.html b/mylyn/features/org.eclipse.dltk.mylyn-feature/rootfiles/notice.html
new file mode 100644
index 0000000..74122b2
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/rootfiles/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository ("Repository") in CVS
+ modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java<sup>TM</sup> ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body>
+</html>
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/build.properties b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/build.properties
new file mode 100644
index 0000000..a250c6b
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/build.properties
@@ -0,0 +1,14 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+###############################################################################
+bin.includes = feature.xml,\
+ feature.properties,\
+ epl-v10.html,\
+ eclipse_update_120.jpg,\
+ license.html
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/eclipse.gif b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/eclipse.gif
new file mode 100644
index 0000000..bdc2912
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/eclipse.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/eclipse_update_120.jpg b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/eclipse_update_120.jpg
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/epl-v10.html b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/feature.properties b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/feature.properties
new file mode 100644
index 0000000..5f274c9
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/feature.properties
@@ -0,0 +1,155 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+###############################################################################
+# /**
+# * <copyright>
+# *
+# * Copyright (c) 2006 IBM Corporation and others.
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# *
+#
+# *
+# * </copyright>
+# *
+# * $Id: feature.properties,v 1.1 2008/05/26 10:24:04 asobolev Exp $
+# */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# This file contains externalized strings for feature.xml
+# "%foo" in feature.xml corresponds to the key "foo" in this file
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file should be translated.
+
+# "featureName" property - name of the feature
+featureName=Dynamic Languages Toolkit - Mylyn Integration Source Code (Incubation)
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=Dynamic Languages Toolkit Update Site
+
+# "description" property - description of the feature
+description=Dynamic Languages Toolkit - Mylyn Integration Code
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+January 28, 2004\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments\n\
+("Fragments"), and features ("Features"). A Feature is a bundle of one or\n\
+more Plug-ins and/or Fragments and associated material. Files named\n\
+"feature.xml" may contain a list of the names and version numbers of the\n\
+Plug-ins and/or Fragments associated with a Feature. Plug-ins and Fragments\n\
+are located in directories named "plugins" and Features are located in\n\
+directories named "features".\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Subdirectories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE CPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n
+########### end of license property ##########################################
+
+updateSiteName=Dynamic Languages Toolkit (DLTK) Updates
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/license.html b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/license.html
new file mode 100644
index 0000000..79bd185
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplateFeature/license.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>Eclipse DLTK Core Frameworks License</title>
+</head>
+<body lang="EN-US">
+<h1>Eclipse DLTK Core Frameworks License</h1><h3>June 5, 2008</h3>
+<ul>
+ <li>Eclipse Public License v1.0 (<a href="#epl">http://www.eclipse.org/legal/epl-v10.html</a>) for Eclipse DLTK Core Frameworks</li>
+</ul>
+
+<hr>
+
+<div name="epl" lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
+
+</div>
+
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.html b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.html
new file mode 100644
index 0000000..7c8477f
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2008</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.ini b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.ini
new file mode 100644
index 0000000..6ae9bf8
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.ini
@@ -0,0 +1,15 @@
+# about.ini
+# contains information about a feature
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# "%key" are externalized strings defined in about.properties
+# This file does not need to be translated.
+
+# Property "aboutText" contains blurb for "About" dialog (translated)
+aboutText=%featureText
+
+# Property "featureImage" contains path to feature image (32x32)
+featureImage=eclipse32.png
+
+# Property "appName" contains name of the application (translated)
+appName=%featureName
+
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.mappings b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.mappings
new file mode 100644
index 0000000..720ca87
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.mappings
@@ -0,0 +1,6 @@
+# about.mappings
+# contains fill-ins for about.properties
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# This file does not need to be translated.
+
+0=@build@
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.properties b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.properties
new file mode 100644
index 0000000..6e2b93d
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/about.properties
@@ -0,0 +1,54 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+###############################################################################
+# /**
+# * <copyright>
+# *
+# * Copyright (c) 2006 IBM Corporation and others.
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# *
+#
+# *
+# * </copyright>
+# *
+# * $Id: about.properties,v 1.1 2008/05/26 10:24:03 asobolev Exp $
+# */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+# about.properties
+# contains externalized strings for about.ini
+# java.io.Properties file (ISO 8859-1 with "\" escapes)
+# fill-ins are supplied by about.mappings
+# This file should be translated.
+
+featureName=Dynamic Languages Toolkit (DLTK) mylyn IDE Source
+
+featureText=Dynamic Languages Toolkit (DLTK) mylyn IDE Source\n\
+\n\
+Version: {featureVersion}\n\
+Build id: {0}\n\
+\n\
+(c) Copyright Eclipse contributors and others 2000, 2007. All rights reserved.\n\
+Visit http://www.eclipse.org/dltk
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/build.properties b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/build.properties
new file mode 100644
index 0000000..2a3a91c
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/build.properties
@@ -0,0 +1,19 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+###############################################################################
+bin.includes = plugin.xml,\
+ plugin.properties,\
+ about.html,\
+ about.ini,\
+ about.mappings,\
+ about.properties,\
+ eclipse32.png,\
+ src/,\
+ META-INF/
+sourcePlugin = true
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse.gif b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse.gif
new file mode 100644
index 0000000..bdc2912
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse.png b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse.png
new file mode 100644
index 0000000..7397524
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse.png
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse24.gif b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse24.gif
new file mode 100644
index 0000000..fbb1d47
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse24.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse32.gif b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse32.gif
new file mode 100644
index 0000000..e6ad7cc
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse32.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse32.png b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse32.png
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse48.gif b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse48.gif
new file mode 100644
index 0000000..501ab99
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse48.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse48.png b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse48.png
new file mode 100644
index 0000000..b60ab3c
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse48.png
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse_lg.gif b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse_lg.gif
new file mode 100644
index 0000000..bf8b872
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/eclipse_lg.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/plugin.properties b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/plugin.properties
new file mode 100644
index 0000000..7ac5eb5
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn-feature/sourceTemplatePlugin/plugin.properties
@@ -0,0 +1,41 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+###############################################################################
+# /**
+# * <copyright>
+# *
+# * Copyright (c) 2002, 2006 IBM Corporation and others.
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# *
+#
+# *
+# * </copyright>
+# *
+# * $Id: plugin.properties,v 1.1 2008/05/26 10:24:03 asobolev Exp $
+# */
+
+# NLS_MESSAGEFORMAT_VAR
+
+# ==============================================================================
+# Do not change the properties between this line and the last line containing:
+# %%% END OF TRANSLATED PROPERTIES %%%
+# Instead, either redefine an existing property, or create a new property,
+# append it to the end of the file, and change the code to use the new name.
+# ==============================================================================
+
+pluginName=Dynamic Languages Toolkit (DLTK) Mylyn Integration Source
+providerName=Eclipse.org
+
+# ==============================================================================
+# %%% END OF TRANSLATED PROPERTIES %%%
+# The above properties have been shipped for translation.
+# ==============================================================================
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/.project b/mylyn/features/org.eclipse.dltk.mylyn.sdk/.project
new file mode 100644
index 0000000..156e79b
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.dltk.mylyn.sdk</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/build.properties b/mylyn/features/org.eclipse.dltk.mylyn.sdk/build.properties
new file mode 100644
index 0000000..be88b72
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/build.properties
@@ -0,0 +1,31 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+###############################################################################
+#/**
+# * <copyright>
+# *
+# * Copyright (c) 2005 IBM Corporation and others.
+# * All rights reserved. This program and the accompanying materials
+# * are made available under the terms of the Eclipse Public License v1.0
+# * which accompanies this distribution, and is available at
+# * http://www.eclipse.org/legal/epl-v10.html
+# *
+#
+# *
+# * </copyright>
+# *
+# * $Id: build.properties,v 1.1 2008/05/26 10:24:03 asobolev Exp $ build.properties,v 1.1 2005/11/25 20:30:36 cdamus Exp $
+# */
+bin.includes = epl-v10.html,\
+ eclipse_update_120.jpg,\
+ feature.properties,\
+ feature.xml,\
+ license.html
+root=rootfiles
+generate.feature@org.eclipse.dltk.mylyn=org.eclipse.dltk.mylyn
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse.gif b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse.gif
new file mode 100644
index 0000000..bdc2912
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse.png b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse.png
new file mode 100644
index 0000000..7397524
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse.png
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse32.gif b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse32.gif
new file mode 100644
index 0000000..e6ad7cc
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse32.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse32.png b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse32.png
new file mode 100644
index 0000000..568fac1
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse32.png
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse48.gif b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse48.gif
new file mode 100644
index 0000000..501ab99
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse48.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse48.png b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse48.png
new file mode 100644
index 0000000..b60ab3c
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse48.png
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse_lg.gif b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse_lg.gif
new file mode 100644
index 0000000..bf8b872
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse_lg.gif
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse_update_120.jpg b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse_update_120.jpg
new file mode 100644
index 0000000..bfdf708
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/eclipse_update_120.jpg
Binary files differ
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/epl-v10.html b/mylyn/features/org.eclipse.dltk.mylyn.sdk/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/feature.properties b/mylyn/features/org.eclipse.dltk.mylyn.sdk/feature.properties
new file mode 100644
index 0000000..a8580ef
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/feature.properties
@@ -0,0 +1,119 @@
+###############################################################################
+# Copyright (c) 2005, 2007 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+
+# "featureName" property - name of the feature
+featureName=Dynamic Languages Toolkit - mylyn Development Tools SDK
+
+# "providerName" property - name of the company that provides the feature
+providerName=Eclipse.org
+
+# "updateSiteName" property - label for the update site
+updateSiteName=Eclipse.org update site
+
+# "description" property - description of the feature
+description=Binaries and API documentation and source zips for DLTK.
+
+# "licenseURL" property - URL of the "Feature License"
+# do not translate value - just change to point to a locale-specific HTML page
+licenseURL=license.html
+
+# "license" property - text of the "Feature Update License"
+# should be plain text version of license agreement pointed to be "licenseURL"
+license=\
+ECLIPSE FOUNDATION SOFTWARE USER AGREEMENT\n\
+January 28, 2004\n\
+\n\
+Usage Of Content\n\
+\n\
+THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR\n\
+OTHER MATERIALS FOR OPEN SOURCE PROJECTS (COLLECTIVELY "CONTENT").\n\
+USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS\n\
+AGREEMENT AND/OR THE TERMS AND CONDITIONS OF LICENSE AGREEMENTS OR\n\
+NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU\n\
+AGREE THAT YOUR USE OF THE CONTENT IS GOVERNED BY THIS AGREEMENT\n\
+AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS\n\
+OR NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE\n\
+TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND CONDITIONS\n\
+OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED\n\
+BELOW, THEN YOU MAY NOT USE THE CONTENT.\n\
+\n\
+Applicable Licenses\n\
+\n\
+Unless otherwise indicated, all Content made available by the Eclipse Foundation\n\
+is provided to you under the terms and conditions of the Eclipse Public\n\
+License Version 1.0 ("EPL"). A copy of the EPL is provided with this\n\
+Content and is also available at http://www.eclipse.org/legal/epl-v10.html.\n\
+For purposes of the EPL, "Program" will mean the Content.\n\
+\n\
+Content includes, but is not limited to, source code, object code,\n\
+documentation and other files maintained in the Eclipse.org CVS\n\
+repository ("Repository") in CVS modules ("Modules") and made available\n\
+as downloadable archives ("Downloads").\n\
+\n\
+Content may be apportioned into plug-ins ("Plug-ins"), plug-in fragments\n\
+("Fragments"), and features ("Features"). A Feature is a bundle of one or\n\
+more Plug-ins and/or Fragments and associated material. Files named\n\
+"feature.xml" may contain a list of the names and version numbers of the\n\
+Plug-ins and/or Fragments associated with a Feature. Plug-ins and Fragments\n\
+are located in directories named "plugins" and Features are located in\n\
+directories named "features".\n\
+\n\
+Features may also include other Features ("Included Features"). Files named\n\
+"feature.xml" may contain a list of the names and version numbers of\n\
+Included Features.\n\
+\n\
+The terms and conditions governing Plug-ins and Fragments should be\n\
+contained in files named "about.html" ("Abouts"). The terms and\n\
+conditions governing Features and Included Features should be contained\n\
+in files named "license.html" ("Feature Licenses"). Abouts and Feature\n\
+Licenses may be located in any directory of a Download or Module\n\
+including, but not limited to the following locations:\n\
+\n\
+ - The top-level (root) directory\n\
+ - Plug-in and Fragment directories\n\
+ - Subdirectories of the directory named "src" of certain Plug-ins\n\
+ - Feature directories\n\
+\n\
+Note: if a Feature made available by the Eclipse Foundation is installed using the\n\
+Eclipse Update Manager, you must agree to a license ("Feature Update\n\
+License") during the installation process. If the Feature contains\n\
+Included Features, the Feature Update License should either provide you\n\
+with the terms and conditions governing the Included Features or inform\n\
+you where you can locate them. Feature Update Licenses may be found in\n\
+the "license" property of files named "feature.properties". Such Abouts,\n\
+Feature Licenses and Feature Update Licenses contain the terms and\n\
+conditions (or references to such terms and conditions) that govern your\n\
+use of the associated Content in that directory.\n\
+\n\
+THE ABOUTS, FEATURE LICENSES AND FEATURE UPDATE LICENSES MAY REFER\n\
+TO THE CPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS.\n\
+SOME OF THESE OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):\n\
+\n\
+ - Common Public License Version 1.0 (available at http://www.eclipse.org/legal/cpl-v10.html)\n\
+ - Apache Software License 1.1 (available at http://www.apache.org/licenses/LICENSE)\n\
+ - Apache Software License 2.0 (available at http://www.apache.org/licenses/LICENSE-2.0)\n\
+ - IBM Public License 1.0 (available at http://oss.software.ibm.com/developerworks/opensource/license10.html)\n\
+ - Metro Link Public License 1.00 (available at http://www.opengroup.org/openmotif/supporters/metrolink/license.html)\n\
+ - Mozilla Public License Version 1.1 (available at http://www.mozilla.org/MPL/MPL-1.1.html)\n\
+\n\
+IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR\n\
+TO USE OF THE CONTENT. If no About, Feature License or Feature Update License\n\
+is provided, please contact the Eclipse Foundation to determine what terms and conditions\n\
+govern that particular Content.\n\
+\n\
+Cryptography\n\
+\n\
+Content may contain encryption software. The country in which you are\n\
+currently may have restrictions on the import, possession, and use,\n\
+and/or re-export to another country, of encryption software. BEFORE\n\
+using any encryption software, please check the country's laws,\n\
+regulations and policies concerning the import, possession, or use,\n\
+and re-export of encryption software, to see if this is permitted.\n
+########### end of license property ##########################################
+
+updateSiteName=Dynamic Languages Toolkit (DLTK) Updates
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/feature.xml b/mylyn/features/org.eclipse.dltk.mylyn.sdk/feature.xml
new file mode 100644
index 0000000..92326fe
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/feature.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+ id="org.eclipse.dltk.mylyn.sdk"
+ label="%featureName"
+ version="0.95.0.qualifier"
+ provider-name="%providerName"
+ image="eclipse_update_120.jpg">
+
+ <description>
+ %description
+ </description>
+
+ <license url="%licenseURL">
+ %license
+ </license>
+
+ <url>
+ <update label="%updateSiteName" url="http://download.eclipse.org/technology/dltk/updates/"/>
+ <discovery label="%updateSiteName" url="http://download.eclipse.org/technology/dltk/updates/"/>
+ </url>
+
+ <includes
+ id="org.eclipse.dltk.mylyn"
+ version="0.0.0"/>
+
+ <includes
+ id="org.eclipse.dltk.mylyn.source"
+ version="0.0.0"/>
+
+</feature>
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/license.html b/mylyn/features/org.eclipse.dltk.mylyn.sdk/license.html
new file mode 100644
index 0000000..15e0ed7
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/license.html
@@ -0,0 +1,265 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>Eclipse DLTK - TCL Development Tools License</title>
+</head>
+<body lang="EN-US">
+<h1>Eclipse DLTK - TCL Development Tools License</h1><h3>June 5, 2008</h3>
+<ul>
+ <li>Eclipse Public License v1.0 (<a href="#epl">http://www.eclipse.org/legal/epl-v10.html</a>) for TCL Development Tools</li>
+</ul>
+
+<hr>
+
+<div name="epl" lang=EN-US style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal><![if !supportEmptyParas]> <![endif]><o:p></o:p></p>
+
+</div>
+
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/rootfiles/epl-v10.html b/mylyn/features/org.eclipse.dltk.mylyn.sdk/rootfiles/epl-v10.html
new file mode 100644
index 0000000..cb1073a
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/rootfiles/epl-v10.html
@@ -0,0 +1,304 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html xmlns:o="urn:schemas-microsoft-com:office:office"
+xmlns:w="urn:schemas-microsoft-com:office:word"
+xmlns="http://www.w3.org/TR/REC-html40">
+
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<link rel=File-List
+href="./Eclipse%20EPL%202003_11_10%20Final_files/filelist.xml">
+<title>Eclipse Public License - Version 1.0</title>
+<style>
+<!--
+ /* Font Definitions */
+@font-face
+ {
+ panose-1:2 11 6 4 3 5 4 4 2 4;
+ mso-font-charset:0;
+ mso-font-pitch:variable;
+ mso-font-signature:553679495 -2147483648 8 0 66047 0;}
+ /* Style Definitions */
+p.MsoNormal, li.MsoNormal, div.MsoNormal
+ {mso-style-parent:"";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p
+ {margin-right:0in;
+ mso-margin-top-alt:auto;
+ mso-margin-bottom-alt:auto;
+ margin-left:0in;
+ mso-pagination:widow-orphan;
+ font-size:12.0pt;
+ }
+p.BalloonText, li.BalloonText, div.BalloonText
+ {mso-style-name:"Balloon Text";
+ margin:0in;
+ margin-bottom:.0001pt;
+ mso-pagination:widow-orphan;
+ font-size:8.0pt;
+
+ }
+@page Section1
+ {size:8.5in 11.0in;
+ margin:1.0in 1.25in 1.0in 1.25in;
+ mso-header-margin:.5in;
+ mso-footer-margin:.5in;
+ mso-paper-source:0;}
+div.Section1
+ {page:Section1;}
+-->
+</style>
+</head>
+
+<body lang="EN-US" style='tab-interval:.5in'>
+
+<div class=Section1>
+
+<p align=center style='text-align:center'><b>Eclipse Public License - v 1.0</b>
+</p>
+
+<p><span style='font-size:10.0pt'>THE ACCOMPANYING PROGRAM IS PROVIDED UNDER
+THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE,
+REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE
+OF THIS AGREEMENT.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>1. DEFINITIONS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>"Contribution" means:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+in the case of the initial Contributor, the initial code and documentation
+distributed under this Agreement, and<br clear=left>
+b) in the case of each subsequent Contributor:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+changes to the Program, and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+additions to the Program;</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>where
+such changes and/or additions to the Program originate from and are distributed
+by that particular Contributor. A Contribution 'originates' from a Contributor
+if it was added to the Program by such Contributor itself or anyone acting on
+such Contributor's behalf. Contributions do not include additions to the
+Program which: (i) are separate modules of software distributed in conjunction
+with the Program under their own license agreement, and (ii) are not derivative
+works of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Contributor" means any person or
+entity that distributes the Program.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Licensed Patents " mean patent
+claims licensable by a Contributor which are necessarily infringed by the use
+or sale of its Contribution alone or when combined with the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>"Program" means the Contributions
+distributed in accordance with this Agreement.</span> </p>
+
+<p><span style='font-size:10.0pt'>"Recipient" means anyone who
+receives the Program under this Agreement, including all Contributors.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>2. GRANT OF RIGHTS</span></b> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+Subject to the terms of this Agreement, each Contributor hereby grants Recipient
+a non-exclusive, worldwide, royalty-free copyright license to<span
+style='color:red'> </span>reproduce, prepare derivative works of, publicly
+display, publicly perform, distribute and sublicense the Contribution of such
+Contributor, if any, and such derivative works, in source code and object code
+form.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+Subject to the terms of this Agreement, each Contributor hereby grants
+Recipient a non-exclusive, worldwide,<span style='color:green'> </span>royalty-free
+patent license under Licensed Patents to make, use, sell, offer to sell, import
+and otherwise transfer the Contribution of such Contributor, if any, in source
+code and object code form. This patent license shall apply to the combination
+of the Contribution and the Program if, at the time the Contribution is added
+by the Contributor, such addition of the Contribution causes such combination
+to be covered by the Licensed Patents. The patent license shall not apply to
+any other combinations which include the Contribution. No hardware per se is
+licensed hereunder. </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>c)
+Recipient understands that although each Contributor grants the licenses to its
+Contributions set forth herein, no assurances are provided by any Contributor
+that the Program does not infringe the patent or other intellectual property
+rights of any other entity. Each Contributor disclaims any liability to Recipient
+for claims brought by any other entity based on infringement of intellectual
+property rights or otherwise. As a condition to exercising the rights and
+licenses granted hereunder, each Recipient hereby assumes sole responsibility
+to secure any other intellectual property rights needed, if any. For example,
+if a third party patent license is required to allow Recipient to distribute
+the Program, it is Recipient's responsibility to acquire that license before
+distributing the Program.</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>d)
+Each Contributor represents that to its knowledge it has sufficient copyright
+rights in its Contribution, if any, to grant the copyright license set forth in
+this Agreement. </span></p>
+
+<p><b><span style='font-size:10.0pt'>3. REQUIREMENTS</span></b> </p>
+
+<p><span style='font-size:10.0pt'>A Contributor may choose to distribute the
+Program in object code form under its own license agreement, provided that:</span>
+</p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it complies with the terms and conditions of this Agreement; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b)
+its license agreement:</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>i)
+effectively disclaims on behalf of all Contributors all warranties and
+conditions, express and implied, including warranties or conditions of title
+and non-infringement, and implied warranties or conditions of merchantability
+and fitness for a particular purpose; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>ii)
+effectively excludes on behalf of all Contributors all liability for damages,
+including direct, indirect, special, incidental and consequential damages, such
+as lost profits; </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iii)
+states that any provisions which differ from this Agreement are offered by that
+Contributor alone and not by any other party; and</span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>iv)
+states that source code for the Program is available from such Contributor, and
+informs licensees how to obtain it in a reasonable manner on or through a
+medium customarily used for software exchange.<span style='color:blue'> </span></span></p>
+
+<p><span style='font-size:10.0pt'>When the Program is made available in source
+code form:</span> </p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>a)
+it must be made available under this Agreement; and </span></p>
+
+<p class=MsoNormal style='margin-left:.5in'><span style='font-size:10.0pt'>b) a
+copy of this Agreement must be included with each copy of the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Contributors may not remove or alter any
+copyright notices contained within the Program. </span></p>
+
+<p><span style='font-size:10.0pt'>Each Contributor must identify itself as the
+originator of its Contribution, if any, in a manner that reasonably allows
+subsequent Recipients to identify the originator of the Contribution. </span></p>
+
+<p><b><span style='font-size:10.0pt'>4. COMMERCIAL DISTRIBUTION</span></b> </p>
+
+<p><span style='font-size:10.0pt'>Commercial distributors of software may
+accept certain responsibilities with respect to end users, business partners
+and the like. While this license is intended to facilitate the commercial use
+of the Program, the Contributor who includes the Program in a commercial
+product offering should do so in a manner which does not create potential
+liability for other Contributors. Therefore, if a Contributor includes the
+Program in a commercial product offering, such Contributor ("Commercial
+Contributor") hereby agrees to defend and indemnify every other
+Contributor ("Indemnified Contributor") against any losses, damages and
+costs (collectively "Losses") arising from claims, lawsuits and other
+legal actions brought by a third party against the Indemnified Contributor to
+the extent caused by the acts or omissions of such Commercial Contributor in
+connection with its distribution of the Program in a commercial product
+offering. The obligations in this section do not apply to any claims or Losses
+relating to any actual or alleged intellectual property infringement. In order
+to qualify, an Indemnified Contributor must: a) promptly notify the Commercial
+Contributor in writing of such claim, and b) allow the Commercial Contributor
+to control, and cooperate with the Commercial Contributor in, the defense and
+any related settlement negotiations. The Indemnified Contributor may participate
+in any such claim at its own expense.</span> </p>
+
+<p><span style='font-size:10.0pt'>For example, a Contributor might include the
+Program in a commercial product offering, Product X. That Contributor is then a
+Commercial Contributor. If that Commercial Contributor then makes performance
+claims, or offers warranties related to Product X, those performance claims and
+warranties are such Commercial Contributor's responsibility alone. Under this
+section, the Commercial Contributor would have to defend claims against the
+other Contributors related to those performance claims and warranties, and if a
+court requires any other Contributor to pay any damages as a result, the
+Commercial Contributor must pay those damages.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>5. NO WARRANTY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
+WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING,
+WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT,
+MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely
+responsible for determining the appropriateness of using and distributing the
+Program and assumes all risks associated with its exercise of rights under this
+Agreement , including but not limited to the risks and costs of program errors,
+compliance with applicable laws, damage to or loss of data, programs or
+equipment, and unavailability or interruption of operations. </span></p>
+
+<p><b><span style='font-size:10.0pt'>6. DISCLAIMER OF LIABILITY</span></b> </p>
+
+<p><span style='font-size:10.0pt'>EXCEPT AS EXPRESSLY SET FORTH IN THIS
+AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR
+ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING WITHOUT LIMITATION LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY
+OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OR DISTRIBUTION OF
+THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF
+THE POSSIBILITY OF SUCH DAMAGES.</span> </p>
+
+<p><b><span style='font-size:10.0pt'>7. GENERAL</span></b> </p>
+
+<p><span style='font-size:10.0pt'>If any provision of this Agreement is invalid
+or unenforceable under applicable law, it shall not affect the validity or
+enforceability of the remainder of the terms of this Agreement, and without
+further action by the parties hereto, such provision shall be reformed to the
+minimum extent necessary to make such provision valid and enforceable.</span> </p>
+
+<p><span style='font-size:10.0pt'>If Recipient institutes patent litigation
+against any entity (including a cross-claim or counterclaim in a lawsuit)
+alleging that the Program itself (excluding combinations of the Program with
+other software or hardware) infringes such Recipient's patent(s), then such
+Recipient's rights granted under Section 2(b) shall terminate as of the date
+such litigation is filed. </span></p>
+
+<p><span style='font-size:10.0pt'>All Recipient's rights under this Agreement
+shall terminate if it fails to comply with any of the material terms or
+conditions of this Agreement and does not cure such failure in a reasonable
+period of time after becoming aware of such noncompliance. If all Recipient's
+rights under this Agreement terminate, Recipient agrees to cease use and
+distribution of the Program as soon as reasonably practicable. However,
+Recipient's obligations under this Agreement and any licenses granted by
+Recipient relating to the Program shall continue and survive. </span></p>
+
+<p><span style='font-size:10.0pt'>Everyone is permitted to copy and distribute
+copies of this Agreement, but in order to avoid inconsistency the Agreement is
+copyrighted and may only be modified in the following manner. The Agreement
+Steward reserves the right to publish new versions (including revisions) of
+this Agreement from time to time. No one other than the Agreement Steward has
+the right to modify this Agreement. The Eclipse Foundation is the initial
+Agreement Steward. The Eclipse Foundation may assign the responsibility to
+serve as the Agreement Steward to a suitable separate entity. Each new version
+of the Agreement will be given a distinguishing version number. The Program
+(including Contributions) may always be distributed subject to the version of
+the Agreement under which it was received. In addition, after a new version of
+the Agreement is published, Contributor may elect to distribute the Program
+(including its Contributions) under the new version. Except as expressly stated
+in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to
+the intellectual property of any Contributor under this Agreement, whether
+expressly, by implication, estoppel or otherwise. All rights in the Program not
+expressly granted under this Agreement are reserved.</span> </p>
+
+<p><span style='font-size:10.0pt'>This Agreement is governed by the laws of the
+State of New York and the intellectual property laws of the United States of
+America. No party to this Agreement will bring a legal action under this
+Agreement more than one year after the cause of action arose. Each party waives
+its rights to a jury trial in any resulting litigation.</span> </p>
+
+<p class=MsoNormal></p>
+
+</div>
+
+</body>
+
+</html>
\ No newline at end of file
diff --git a/mylyn/features/org.eclipse.dltk.mylyn.sdk/rootfiles/notice.html b/mylyn/features/org.eclipse.dltk.mylyn.sdk/rootfiles/notice.html
new file mode 100644
index 0000000..74122b2
--- /dev/null
+++ b/mylyn/features/org.eclipse.dltk.mylyn.sdk/rootfiles/notice.html
@@ -0,0 +1,79 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
+<html>
+<head>
+<meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
+<title>Eclipse.org Software User Agreement</title>
+</head>
+
+<body lang="EN-US" link=blue vlink=purple>
+<h2>Eclipse Foundation Software User Agreement</h2>
+<p>March 17, 2005</p>
+
+<h3>Usage Of Content</h3>
+
+<p>THE ECLIPSE FOUNDATION MAKES AVAILABLE SOFTWARE, DOCUMENTATION, INFORMATION AND/OR OTHER MATERIALS FOR OPEN SOURCE PROJECTS
+ (COLLECTIVELY "CONTENT"). USE OF THE CONTENT IS GOVERNED BY THE TERMS AND CONDITIONS OF THIS AGREEMENT AND/OR THE TERMS AND
+ CONDITIONS OF LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW. BY USING THE CONTENT, YOU AGREE THAT YOUR USE
+ OF THE CONTENT IS GOVERNED BY THIS AGREEMENT AND/OR THE TERMS AND CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR
+ NOTICES INDICATED OR REFERENCED BELOW. IF YOU DO NOT AGREE TO THE TERMS AND CONDITIONS OF THIS AGREEMENT AND THE TERMS AND
+ CONDITIONS OF ANY APPLICABLE LICENSE AGREEMENTS OR NOTICES INDICATED OR REFERENCED BELOW, THEN YOU MAY NOT USE THE CONTENT.</p>
+
+<h3>Applicable Licenses</h3>
+
+<p>Unless otherwise indicated, all Content made available by the Eclipse Foundation is provided to you under the terms and conditions of the Eclipse Public License Version 1.0
+ ("EPL"). A copy of the EPL is provided with this Content and is also available at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+ For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>Content includes, but is not limited to, source code, object code, documentation and other files maintained in the Eclipse.org CVS repository ("Repository") in CVS
+ modules ("Modules") and made available as downloadable archives ("Downloads").</p>
+
+<ul>
+ <li>Content may be structured and packaged into modules to facilitate delivering, extending, and upgrading the Content. Typical modules may include plug-ins ("Plug-ins"), plug-in fragments ("Fragments"), and features ("Features").</li>
+ <li>Each Plug-in or Fragment may be packaged as a sub-directory or JAR (Java<sup>TM</sup> ARchive) in a directory named "plugins".</li>
+ <li>A Feature is a bundle of one or more Plug-ins and/or Fragments and associated material. Each Feature may be packaged as a sub-directory in a directory named "features". Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of the Plug-ins
+ and/or Fragments associated with that Feature.</li>
+ <li>Features may also include other Features ("Included Features"). Within a Feature, files named "feature.xml" may contain a list of the names and version numbers of Included Features.</li>
+</ul>
+
+<p>The terms and conditions governing Plug-ins and Fragments should be contained in files named "about.html" ("Abouts"). The terms and conditions governing Features and
+Included Features should be contained in files named "license.html" ("Feature Licenses"). Abouts and Feature Licenses may be located in any directory of a Download or Module
+including, but not limited to the following locations:</p>
+
+<ul>
+ <li>The top-level (root) directory</li>
+ <li>Plug-in and Fragment directories</li>
+ <li>Inside Plug-ins and Fragments packaged as JARs</li>
+ <li>Sub-directories of the directory named "src" of certain Plug-ins</li>
+ <li>Feature directories</li>
+</ul>
+
+<p>Note: if a Feature made available by the Eclipse Foundation is installed using the Eclipse Update Manager, you must agree to a license ("Feature Update License") during the
+installation process. If the Feature contains Included Features, the Feature Update License should either provide you with the terms and conditions governing the Included Features or
+inform you where you can locate them. Feature Update Licenses may be found in the "license" property of files named "feature.properties" found within a Feature.
+Such Abouts, Feature Licenses, and Feature Update Licenses contain the terms and conditions (or references to such terms and conditions) that govern your use of the associated Content in
+that directory.</p>
+
+<p>THE ABOUTS, FEATURE LICENSES, AND FEATURE UPDATE LICENSES MAY REFER TO THE EPL OR OTHER LICENSE AGREEMENTS, NOTICES OR TERMS AND CONDITIONS. SOME OF THESE
+OTHER LICENSE AGREEMENTS MAY INCLUDE (BUT ARE NOT LIMITED TO):</p>
+
+<ul>
+ <li>Common Public License Version 1.0 (available at <a href="http://www.eclipse.org/legal/cpl-v10.html">http://www.eclipse.org/legal/cpl-v10.html</a>)</li>
+ <li>Apache Software License 1.1 (available at <a href="http://www.apache.org/licenses/LICENSE">http://www.apache.org/licenses/LICENSE</a>)</li>
+ <li>Apache Software License 2.0 (available at <a href="http://www.apache.org/licenses/LICENSE-2.0">http://www.apache.org/licenses/LICENSE-2.0</a>)</li>
+ <li>IBM Public License 1.0 (available at <a href="http://oss.software.ibm.com/developerworks/opensource/license10.html">http://oss.software.ibm.com/developerworks/opensource/license10.html</a>)</li>
+ <li>Metro Link Public License 1.00 (available at <a href="http://www.opengroup.org/openmotif/supporters/metrolink/license.html">http://www.opengroup.org/openmotif/supporters/metrolink/license.html</a>)</li>
+ <li>Mozilla Public License Version 1.1 (available at <a href="http://www.mozilla.org/MPL/MPL-1.1.html">http://www.mozilla.org/MPL/MPL-1.1.html</a>)</li>
+</ul>
+
+<p>IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THE CONTENT. If no About, Feature License, or Feature Update License is provided, please
+contact the Eclipse Foundation to determine what terms and conditions govern that particular Content.</p>
+
+<h3>Cryptography</h3>
+
+<p>Content may contain encryption software. The country in which you are currently may have restrictions on the import, possession, and use, and/or re-export to
+ another country, of encryption software. BEFORE using any encryption software, please check the country's laws, regulations and policies concerning the import,
+ possession, or use, and re-export of encryption software, to see if this is permitted.</p>
+
+<small>Java and all Java-based trademarks are trademarks of Sun Microsystems, Inc. in the United States, other countries, or both.</small>
+</body>
+</html>
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/.classpath b/mylyn/plugins/org.eclipse.dltk.mylyn/.classpath
new file mode 100644
index 0000000..751c8f2
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+ <classpathentry kind="src" path="src"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+ <classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/.cvsignore b/mylyn/plugins/org.eclipse.dltk.mylyn/.cvsignore
new file mode 100644
index 0000000..ba077a4
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/.cvsignore
@@ -0,0 +1 @@
+bin
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/.project b/mylyn/plugins/org.eclipse.dltk.mylyn/.project
new file mode 100644
index 0000000..b3d01d6
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/.project
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>org.eclipse.dltk.mylyn</name>
+ <comment></comment>
+ <projects>
+ <project>org.eclipse.dltk</project>
+ </projects>
+ <buildSpec>
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.ManifestBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <buildCommand>
+ <name>org.eclipse.pde.SchemaBuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ </buildSpec>
+ <natures>
+ <nature>org.eclipse.pde.PluginNature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.jdt.core.prefs b/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0a05151
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@
+#Mon May 26 16:37:14 NOVST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.4
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning
+org.eclipse.jdt.core.compiler.source=1.3
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.jdt.ui.prefs b/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.jdt.ui.prefs
new file mode 100644
index 0000000..9acd383
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.jdt.ui.prefs
@@ -0,0 +1,3 @@
+#Mon May 26 14:33:59 NOVST 2008
+eclipse.preferences.version=1
+org.eclipse.jdt.ui.text.custom_code_templates=<?xml version\="1.0" encoding\="UTF-8" standalone\="no"?><templates/>
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.ltk.core.refactoring.prefs b/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.ltk.core.refactoring.prefs
new file mode 100644
index 0000000..bbfda13
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/.settings/org.eclipse.ltk.core.refactoring.prefs
@@ -0,0 +1,3 @@
+#Mon May 26 14:32:51 NOVST 2008
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/META-INF/MANIFEST.MF b/mylyn/plugins/org.eclipse.dltk.mylyn/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..3158d12
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/META-INF/MANIFEST.MF
@@ -0,0 +1,35 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: %pluginName
+Bundle-Vendor: %pluginProvider
+Bundle-Localization: plugin
+Bundle-SymbolicName: org.eclipse.dltk.mylyn;singleton:=true
+Bundle-Version: 0.95.0.qualifier
+Bundle-Activator: org.eclipse.mylyn.internal.dltk.MylynDLTKPlugin
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.jface.text,
+ org.eclipse.ui.editors,
+ org.eclipse.core.resources,
+ org.eclipse.search,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.forms,
+ org.eclipse.dltk.core,
+ org.eclipse.dltk,
+ org.eclipse.dltk.console,
+ org.eclipse.dltk.console.ui,
+ org.eclipse.dltk.ui,
+ org.eclipse.mylyn,
+ org.eclipse.mylyn.context.core,
+ org.eclipse.mylyn.context.ui,
+ org.eclipse.mylyn.ide.ui,
+ org.eclipse.mylyn.monitor.core,
+ org.eclipse.mylyn.monitor.ui,
+ org.eclipse.mylyn.resources.ui,
+ org.eclipse.mylyn.tasks.core,
+ org.eclipse.mylyn.tasks.ui,
+ org.eclipse.mylyn.commons.core
+Bundle-ActivationPolicy: lazy
+Import-Package: org.eclipse.ui.navigator,
+ org.eclipse.ui.views.contentoutline
+Bundle-RequiredExecutionEnvironment: J2SE-1.4
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/about.html b/mylyn/plugins/org.eclipse.dltk.mylyn/about.html
new file mode 100644
index 0000000..7c8477f
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+
+<p>June 5, 2008</p>
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in ("Content"). Unless otherwise
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 ("EPL"). A copy of the EPL is available
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, "Program" will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is
+being redistributed by another party ("Redistributor") and different terms and conditions may
+apply to your use of any object code in the Content. Check the Redistributor's license that was
+provided with the Content. If no such license exists, contact the Redistributor. Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/build.properties b/mylyn/plugins/org.eclipse.dltk.mylyn/build.properties
new file mode 100644
index 0000000..871eb77
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/build.properties
@@ -0,0 +1,13 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+ .,\
+ about.properties,\
+ about.mappings,\
+ about.ini,\
+ about.html,\
+ eclipse32.png,\
+ plugin.properties,\
+ schema/,\
+ icons/,\
+ plugin.xml
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/edge-ref-java.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/edge-ref-java.gif
new file mode 100644
index 0000000..a20a2ba
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/edge-ref-java.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/edge-ref-junit.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/edge-ref-junit.gif
new file mode 100644
index 0000000..32bcf89
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/edge-ref-junit.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/focus-disabled.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/focus-disabled.gif
new file mode 100644
index 0000000..24bbeae
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/focus-disabled.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/focus.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/focus.gif
new file mode 100644
index 0000000..bf8439c
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/focus.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-decrease.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-decrease.gif
new file mode 100644
index 0000000..645a58f
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-decrease.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-filtering-browsing.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-filtering-browsing.gif
new file mode 100644
index 0000000..c3ca8c4
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-filtering-browsing.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-filtering.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-filtering.gif
new file mode 100644
index 0000000..dee01c3
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-filtering.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-folding.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-folding.gif
new file mode 100644
index 0000000..a720bbd
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-folding.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-increase.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-increase.gif
new file mode 100644
index 0000000..98a2586
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/interest-increase.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/mylar-overlay.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/mylar-overlay.gif
new file mode 100644
index 0000000..6b16d40
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/mylar-overlay.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/proposals-other.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/proposals-other.gif
new file mode 100644
index 0000000..28f69f0
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/proposals-other.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/proposals-type.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/proposals-type.gif
new file mode 100644
index 0000000..b709469
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/proposals-type.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/templateprop_co.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/templateprop_co.gif
new file mode 100644
index 0000000..fdde5fb
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/elcl16/templateprop_co.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/junit-tab.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/junit-tab.gif
new file mode 100644
index 0000000..956ec81
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/junit-tab.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/launch-junit-pde.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/launch-junit-pde.gif
new file mode 100644
index 0000000..bef090f
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/launch-junit-pde.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/launch-junit.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/launch-junit.gif
new file mode 100644
index 0000000..d3c85e3
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/launch-junit.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/link-with-editor.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/link-with-editor.gif
new file mode 100644
index 0000000..068d4c9
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/link-with-editor.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/no-scroll.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/no-scroll.gif
new file mode 100644
index 0000000..33f40b9
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/no-scroll.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/wizard-prefs.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/wizard-prefs.gif
new file mode 100644
index 0000000..9bb095d
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/etool16/wizard-prefs.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/active-hierarchy.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/active-hierarchy.gif
new file mode 100644
index 0000000..f3aa87a
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/active-hierarchy.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/editor-mylar-class.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/editor-mylar-class.gif
new file mode 100644
index 0000000..134d795
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/editor-mylar-class.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/editor-mylar-java.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/editor-mylar-java.gif
new file mode 100644
index 0000000..ef98ae1
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/editor-mylar-java.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/mylar.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/mylar.gif
new file mode 100644
index 0000000..dee01c3
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/eview16/mylar.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/icons/wizban/banner-prefs.gif b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/wizban/banner-prefs.gif
new file mode 100644
index 0000000..ce0f6e3
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/icons/wizban/banner-prefs.gif
Binary files differ
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/plugin.properties b/mylyn/plugins/org.eclipse.dltk.mylyn/plugin.properties
new file mode 100644
index 0000000..6721fe5
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/plugin.properties
@@ -0,0 +1,2 @@
+pluginProvider=Eclipse.org
+pluginName=Dynamic Languages Toolkit IncrTcl Core
\ No newline at end of file
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/plugin.xml b/mylyn/plugins/org.eclipse.dltk.mylyn/plugin.xml
new file mode 100644
index 0000000..0e9af69
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/plugin.xml
@@ -0,0 +1,250 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+<?eclipse version="3.0"?>
+<plugin>
+ <extension-point id="ScriptEditorContributor"
+ name="Mylyn Script Editor Contributor"
+ schema="schema/scriptEditorContributor.exsd"/>
+
+ <extension
+ point="org.eclipse.mylyn.context.core.bridges">
+ <structureBridge
+ class="org.eclipse.mylyn.internal.dltk.DLTKStructureBridge"
+ name="Script Structure Bridge"
+ parentContentType="*"/>
+ </extension>
+
+ <extension point="org.eclipse.mylyn.context.ui.bridges">
+ <uiBridge
+ class="org.eclipse.mylyn.internal.dltk.ui.DLTKUiBridge"
+ contentType="script"
+ activeSearchIcon="icons/elcl16/edge-ref-java.gif"
+ activeSearchLabel="Script Search"/>
+ <labelProvider
+ class="org.eclipse.mylyn.internal.dltk.ui.DLTKContextLabelProvider"
+ contentType="script"/>
+ <preservedFilters
+ viewId="org.eclipse.dltk.mylyn.navigatorContent">
+ <filter
+ class="org.eclipse.mylyn.internal.dltk.ui.DLTKDeclarationsFilter">
+ </filter>
+ </preservedFilters>
+ <preservedFilters
+ viewId="org.eclipse.ui.navigator.ProjectExplorer">
+ <filter
+ class="org.eclipse.mylyn.internal.dltk.ui.DLTKDeclarationsFilter">
+ </filter>
+ </preservedFilters>
+ </extension>
+
+ <!-- ==================== Context Editing Common Navigator ==================== -->
+
+ <extension
+ point="org.eclipse.ui.navigator.viewer">
+ <viewerContentBinding
+ viewerId="org.eclipse.mylyn.context.ui.navigator.context">
+ <includes>
+ <contentExtension
+ pattern="org.eclipse.dltk.core.DLTKContent">
+ </contentExtension>
+ </includes>
+ </viewerContentBinding>
+ </extension>
+ <extension
+ point="org.eclipse.ui.perspectiveExtensions">
+ <perspectiveExtension
+ targetID="org.eclipse.dltk.ruby.ui.RubyPerspective">
+ </perspectiveExtension>
+ </extension>
+
+ <!-- ==================== Editors ==================== -->
+
+
+
+
+
+
+ <extension point="org.eclipse.ui.viewActions">
+ <viewContribution
+ id="org.eclipse.mylyn.dltk.explorer.contribution"
+ targetID="org.eclipse.dltk.ui.ScriptExplorer">
+ <action
+ class="org.eclipse.mylyn.internal.dltk.ui.actions.FocusScriptExplorerAction"
+ disabledIcon="icons/elcl16/focus-disabled.gif"
+ enablesFor="*"
+ icon="icons/elcl16/focus.gif"
+ id="org.eclipse.mylyn.actions.filter.scriptExplorer"
+ label="Focus on Active Task"
+ menubarPath="mylyn"
+ style="toggle"
+ toolbarPath="mylyn"
+ tooltip="Focus on Active Task">
+ </action>
+ </viewContribution>
+ <viewContribution
+ id="org.eclipse.mylyn.ui.views.active.search.contribution"
+ targetID="org.eclipse.mylyn.ui.views.active.search">
+ </viewContribution>
+
+ <viewContribution
+ id="org.eclipse.mylyn.ui.debug.view.contribution"
+ targetID="org.eclipse.debug.ui.DebugView">
+ <action
+ class="org.eclipse.mylyn.internal.dltk.ui.actions.FocusDebugViewAction"
+ disabledIcon="icons/elcl16/focus-disabled.gif"
+ enablesFor="*"
+ icon="icons/elcl16/focus.gif"
+ id="org.eclipse.mylyn.ui.actions.FilterResourceNavigatorAction"
+ label="Focus on Active Task (Experimental)"
+ menubarPath="mylyn"
+ style="toggle"
+ toolbarPath="mylyn"
+ tooltip="Focus on Active Task (Experimental)">
+ </action>
+ </viewContribution>
+ </extension>
+
+ <extension point="org.eclipse.ui.popupMenus">
+ <objectContribution
+ adaptable="false"
+ id="org.eclipse.mylyn.internal.dltk.ui.interest"
+ objectClass="org.eclipse.dltk.core.IModelElement">
+ <action
+ class="org.eclipse.mylyn.internal.context.ui.actions.InterestDecrementAction"
+ enablesFor="*"
+ icon="icons/elcl16/interest-decrease.gif"
+ id="org.eclipse.mylyn.internal.dltk.ui.actions.interest.decrement"
+ label="Remove from Context"
+ menubarPath="additions"
+ tooltip="Mark selected element as uninteresting">
+ </action>
+ <action
+ label="Mark as Landmark"
+ tooltip="Mark the selected element as a landmark"
+ menubarPath="additions"
+ id="org.eclipse.mylyn.ui.actions.InterestIncrementAction"
+ class="org.eclipse.mylyn.internal.context.ui.actions.InterestIncrementAction"
+ icon="icons/elcl16/interest-increase.gif"
+ enablesFor="*"/>
+ <visibility>
+ <systemProperty
+ name="org.eclipse.mylyn.context.core.context.active"
+ value="true">
+ </systemProperty>
+ </visibility>
+ </objectContribution>
+ <objectContribution
+ adaptable="false"
+ id="org.eclipse.dltk.mylyn.ui.interest.contribution.container"
+ objectClass="org.eclipse.dltk.internal.ui.scriptview.BuildPathContainer">
+ <action
+ class="org.eclipse.mylyn.internal.context.ui.actions.InterestDecrementAction"
+ enablesFor="*"
+ icon="icons/elcl16/interest-decrease.gif"
+ id="org.eclipse.mylyn.internal.dltk.ui.actions.interest.decrement.container"
+ label="Remove from Context"
+ menubarPath="additions"
+ tooltip="Mark selected element as uninteresting">
+ </action>
+ <action
+ class="org.eclipse.mylyn.internal.context.ui.actions.InterestIncrementAction"
+ enablesFor="*"
+ icon="icons/elcl16/interest-increase.gif"
+ id="org.eclipse.mylyn.ui.actions.InterestIncrementAction"
+ label="Mark as Landmark"
+ menubarPath="additions"
+ tooltip="Mark the selected element as a landmark">
+ </action>
+ <visibility>
+ <systemProperty
+ name="org.eclipse.mylyn.context.core.context.active"
+ value="true">
+ </systemProperty>
+ </visibility>
+ </objectContribution>
+ </extension>
+
+ <extension point="org.eclipse.ui.actionSets">
+ <actionSet
+ id="org.eclipse.dltk.mylyn.actionSet"
+ label="Mylyn DLTK"
+ visible="true">
+
+ <action
+ class="org.eclipse.mylyn.internal.dltk.ui.actions.ToggleActiveFoldingAction"
+ definitionId="org.eclipse.dltk.mylyn.ui.editor.folding.auto"
+ icon="icons/elcl16/interest-folding.gif"
+ id="org.eclipse.dltk.mylyn.ui.editor.folding.auto"
+ label="Automatically Fold Unintersting Elements"
+ style="toggle"
+ toolbarPath="org.eclipse.ui.edit.text.actionSet.presentation/Presentation"
+ tooltip="Automatically Fold Unintersting Elements">
+ <enablement>
+ <systemProperty
+ name="org.eclipse.mylyn.context.core.context.active"
+ value="true">
+ </systemProperty>
+ </enablement>
+ </action>
+ <action
+ definitionId="org.eclipse.mylyn.dltk.ui.search.context"
+ label="Search the current task context"
+ class="org.eclipse.mylyn.internal.dltk.ui.actions.FindReferencesInContextAction"
+ id="org.eclipse.dltk.mylyn.ui.search.context">
+ </action>
+ </actionSet>
+ </extension>
+
+
+
+ <extension point="org.eclipse.ui.newWizards">
+ <wizard
+ canFinishEarly="false"
+ category="org.eclipse.mylyn.wizards"
+ class="org.eclipse.mylyn.internal.dltk.ui.wizards.MylynPreferenceWizard"
+ hasPages="true"
+ icon="icons/etool16/wizard-prefs.gif"
+ id="org.eclipse.mylyn.dltk.ui.wizards.preferences"
+ name="Recommended Preferences"
+ project="false">
+ </wizard>
+ </extension>
+
+ <extension point="org.eclipse.ui.commands">
+ <command
+ categoryId="org.eclipse.mylyn.ui"
+ description="Search the current task context"
+ id="org.eclipse.mylyn.dltk.ui.search.context"
+ name="Search Task Context">
+ </command>
+ <command
+ categoryId="org.eclipse.mylyn.ui"
+ description="Toggle Active Folding"
+ id="org.eclipse.mylyn.dltk.ui.editor.folding.auto"
+ name="Toggle Active Folding">
+ </command>
+ </extension>
+ <extension
+ point="org.eclipse.ui.actionSetPartAssociations">
+ <actionSetPartAssociation
+ targetID="org.eclipse.mylyn.dltk.actionSet.browsing">
+ <part
+ id="org.eclipse.dltk.ui.MembersView">
+ </part>
+ </actionSetPartAssociation>
+ </extension>
+ <extension
+ point="org.eclipse.dltk.ui.dltkElementFilters">
+ <filter
+ class="org.eclipse.mylyn.internal.dltk.ui.DLTKDeclarationsFilter"
+ description="Member Filter"
+ enabled="false"
+ id="org.eclipse.dltk.mylyn.MembersFilter"
+ name="Member Filter"
+ targetId="org.eclipse.dltk.ScriptExplorer">
+ </filter>
+ </extension>
+
+</plugin>
+
+
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/schema/scriptEditorContributor.exsd b/mylyn/plugins/org.eclipse.dltk.mylyn/schema/scriptEditorContributor.exsd
new file mode 100644
index 0000000..e3118b5
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/schema/scriptEditorContributor.exsd
@@ -0,0 +1,122 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!-- Schema file written by PDE -->
+<schema targetNamespace="org.eclipse.mylyn.java">
+<annotation>
+ <appInfo>
+ <meta.schema plugin="org.eclipse.mylyn.java" id="javaEditorContributor" name="Mylyn Java Editor Contributor"/>
+ </appInfo>
+ <documentation>
+ [Enter description of this extension point.]
+ </documentation>
+ </annotation>
+
+ <element name="extension">
+ <complexType>
+ <sequence>
+ <element ref="hyperlinkDetector" minOccurs="0" maxOccurs="unbounded"/>
+ </sequence>
+ <attribute name="point" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <element name="hyperlinkDetector">
+ <complexType>
+ <attribute name="class" type="string" use="required">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute kind="java"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ <attribute name="id" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ </annotation>
+ </attribute>
+ <attribute name="name" type="string">
+ <annotation>
+ <documentation>
+
+ </documentation>
+ <appInfo>
+ <meta.attribute translatable="true"/>
+ </appInfo>
+ </annotation>
+ </attribute>
+ </complexType>
+ </element>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="since"/>
+ </appInfo>
+ <documentation>
+ [Enter the first release in which this extension point appears.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="examples"/>
+ </appInfo>
+ <documentation>
+ [Enter extension point usage example here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="apiInfo"/>
+ </appInfo>
+ <documentation>
+ [Enter API information here.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="implementation"/>
+ </appInfo>
+ <documentation>
+ [Enter information about supplied implementation of this extension point.]
+ </documentation>
+ </annotation>
+
+ <annotation>
+ <appInfo>
+ <meta.section type="copyright"/>
+ </appInfo>
+ <documentation>
+
+ </documentation>
+ </annotation>
+
+</schema>
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ActiveFoldingEditorTracker.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ActiveFoldingEditorTracker.java
new file mode 100644
index 0000000..e33e185
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ActiveFoldingEditorTracker.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.internal.dltk;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.mylyn.internal.dltk.ui.editor.ActiveFoldingListener;
+import org.eclipse.mylyn.monitor.ui.AbstractEditorTracker;
+
+import org.eclipse.ui.IEditorPart;
+
+
+public class ActiveFoldingEditorTracker extends AbstractEditorTracker {
+
+ protected Map editorListenerMap = new HashMap();
+
+
+ public void editorOpened(IEditorPart part) {
+ if (part instanceof ScriptEditor)
+ registerEditor((ScriptEditor) part);
+ }
+
+ public void editorClosed(IEditorPart part) {
+ if (part instanceof ScriptEditor)
+ unregisterEditor((ScriptEditor) part);
+ }
+
+ public void registerEditor(final ScriptEditor editor) {
+ if (editorListenerMap.containsKey(editor)) {
+ return;
+ } else {
+ ActiveFoldingListener listener = new ActiveFoldingListener(editor);
+ editorListenerMap.put(editor, listener);
+ }
+ }
+
+ public void unregisterEditor(ScriptEditor editor) {
+ ActiveFoldingListener listener = (ActiveFoldingListener) editorListenerMap.get(editor);
+ if (listener != null) {
+ listener.dispose();
+ }
+ editorListenerMap.remove(editor);
+ }
+
+ /**
+ * For testing.
+ */
+ public Map getEditorListenerMap() {
+ return editorListenerMap;
+ }
+
+ protected void editorBroughtToTop(IEditorPart part) {
+ // ignore
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/DLTKStructureBridge.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/DLTKStructureBridge.java
new file mode 100644
index 0000000..1ac6d3e
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/DLTKStructureBridge.java
@@ -0,0 +1,357 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 7, 2005
+ */
+package org.eclipse.mylyn.internal.dltk;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IParent;
+import org.eclipse.dltk.core.IProjectFragment;
+import org.eclipse.dltk.core.ISourceModule;
+import org.eclipse.dltk.core.ISourceReference;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.internal.core.ProjectFragment;
+import org.eclipse.dltk.internal.ui.scriptview.BuildPathContainer;
+import org.eclipse.dltk.ui.util.ExceptionHandler;
+import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.internal.context.core.DegreeOfSeparation;
+import org.eclipse.mylyn.internal.resources.ui.ResourceStructureBridge;
+import org.eclipse.ui.internal.WorkingSet;
+import org.eclipse.ui.views.markers.internal.ConcreteMarker;
+
+public class DLTKStructureBridge extends AbstractContextStructureBridge {
+
+ public final static String CONTENT_TYPE = "script";
+
+ public List providers;
+
+ public DLTKStructureBridge() {
+ providers = new ArrayList();
+ // providers.add(new JavaReferencesProvider());
+ // providers.add(new JavaImplementorsProvider());
+ // providers.add(new JavaReadAccessProvider());
+ // providers.add(new JavaWriteAccessProvider());
+ // providers.add(new JUnitReferencesProvider());
+ }
+
+ public String getContentType() {
+ return CONTENT_TYPE;
+ }
+
+ public Object getAdaptedParent(Object object) {
+ if (object instanceof IFile) {
+ IFile file = (IFile) object;
+ return DLTKCore.create(file.getParent());
+ } else {
+ return super.getAdaptedParent(object);
+ }
+ }
+
+ public String getParentHandle(String handle) {
+ IModelElement modelElement = (IModelElement) getObjectForHandle(handle);
+ if (modelElement != null && modelElement.getParent() != null) {
+ return getHandleIdentifier(modelElement.getParent());
+ } else {
+ return null;
+ }
+ }
+
+ public List getChildHandles(String handle) {
+ Object object = getObjectForHandle(handle);
+ if (object instanceof IModelElement) {
+ IModelElement element = (IModelElement) object;
+ if (element instanceof IParent) {
+ IParent parent = (IParent) element;
+ IModelElement[] children;
+ try {
+ children = parent.getChildren();
+ List childHandles = new ArrayList();
+ for (int i = 0; i < children.length; i++) {
+ String childHandle = getHandleIdentifier(children[i]);
+ if (childHandle != null)
+ childHandles.add(childHandle);
+ }
+ AbstractContextStructureBridge parentBridge = ContextCorePlugin
+ .getDefault().getStructureBridge(parentContentType);
+ if (parentBridge != null
+ && parentBridge instanceof ResourceStructureBridge) {
+ if (element.getElementType() < IModelElement.TYPE) {
+ List resourceChildren = parentBridge
+ .getChildHandles(handle);
+ if (!resourceChildren.isEmpty())
+ childHandles.addAll(resourceChildren);
+ }
+ }
+
+ return childHandles;
+ } catch (ModelException e) {
+ // ignore these, usually indicate no-existent element
+ } catch (Exception e) {
+ MylynStatusHandler.fail(e, "could not get child", false);
+ }
+ }
+ }
+ return new ArrayList();
+ }
+
+ public Object getObjectForHandle(String handle) {
+ try {
+ return DLTKCore.create(handle);
+ } catch (Throwable t) {
+ MylynStatusHandler.log(
+ "Could not create script element for handle: " + handle,
+ this);
+ return null;
+ }
+ }
+
+ /**
+ * Uses resource-compatible path for projects
+ */
+
+ public String getHandleIdentifier(Object object) {
+ if (object instanceof IModelElement) {
+ return ((IModelElement) object).getHandleIdentifier();
+ } else {
+ if (object instanceof IAdaptable) {
+ Object adapter = ((IAdaptable) object)
+ .getAdapter(IModelElement.class);
+ if (adapter instanceof IModelElement) {
+ return ((IModelElement) adapter).getHandleIdentifier();
+ }
+ }
+ }
+ return null;
+ }
+
+ public boolean canBeLandmark(String handle) {
+ IModelElement element = (IModelElement) getObjectForHandle(handle);
+ if ((element instanceof IMember || element instanceof IType || element instanceof ISourceModule)
+ && element.exists()) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * TODO: figure out if the non IModelElement stuff is needed
+ */
+
+ public boolean acceptsObject(Object object) {
+ if (object instanceof IResource) {
+ Object adapter = ((IResource) object)
+ .getAdapter(IModelElement.class);
+ return adapter instanceof IModelElement;
+ }
+
+ boolean accepts = object instanceof IModelElement
+ || object instanceof ProjectFragment
+ || object instanceof BuildPathContainer.RequiredProjectWrapper // ||
+ // object
+ // instanceof
+ // EntryFile
+ || object instanceof IProjectFragment
+ || object instanceof WorkingSet;
+
+ return accepts;
+ }
+
+ /**
+ * Uses special rules for classpath containers since these do not have an
+ * associated interest, i.e. they're not IModelElement(s).
+ */
+ public boolean canFilter(Object object) {
+ if (object instanceof BuildPathContainer.RequiredProjectWrapper) {
+ return true;
+ }
+
+ // else if (object instanceof PackageFragmentRootContainer) {
+ // // since not in model, check if it contains anything interesting
+ // PackageFragmentRootContainer container =
+ // (PackageFragmentRootContainer) object;
+ //
+ // Object[] children = container.getChildren();
+ // for (int i = 0; i < children.length; i++) {
+ // if (children[i] instanceof JarPackageFragmentRoot) {
+ // JarPackageFragmentRoot element = (JarPackageFragmentRoot)
+ // children[i];
+ // IMylarElement node =
+ // ContextCorePlugin.getContextManager().getElement(
+ // element.getHandleIdentifier());
+ // if (node != null && node.getInterest().isInteresting()) {
+ // return false;
+ // }
+ // }
+ // }
+ // }
+
+ else if (object instanceof WorkingSet) {
+ try {
+ WorkingSet workingSet = (WorkingSet) object;
+ IAdaptable[] elements = workingSet.getElements();
+ for (int i = 0; i < elements.length; i++) {
+ IAdaptable adaptable = elements[i];
+ IInteractionElement element = ContextCorePlugin
+ .getContextManager().getElement(
+ getHandleIdentifier(adaptable));
+ if (element.getInterest().isInteresting())
+ return false;
+ }
+ } catch (Exception e) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ public boolean isDocument(String handle) {
+ IModelElement element = (IModelElement) getObjectForHandle(handle);
+ return element instanceof ISourceModule;
+ }
+
+ public String getHandleForOffsetInObject(Object resource, int offset) {
+ if (resource == null || !(resource instanceof ConcreteMarker))
+ return null;
+ ConcreteMarker marker = (ConcreteMarker) resource;
+ try {
+ IResource res = marker.getResource();
+ ISourceModule compilationUnit = null;
+ if (res instanceof IFile) {
+ IFile file = (IFile) res;
+ if (file.getFileExtension().equals("java")) {
+ compilationUnit = DLTKCore.createSourceModuleFrom(file);
+ } else {
+ return null;
+ }
+ }
+ if (compilationUnit != null) {
+ IModelElement javaElement = compilationUnit.getElementAt(marker
+ .getMarker().getAttribute(IMarker.CHAR_START, 0));
+ if (javaElement != null) {
+
+ return javaElement.getHandleIdentifier();
+ } else {
+ return null;
+ }
+ } else {
+ return null;
+ }
+ } catch (ModelException ex) {
+ if (!ex.isDoesNotExist())
+ ExceptionHandler.handle(ex,
+ "error", "could not find java element"); //$NON-NLS-2$ //$NON-NLS-1$
+ return null;
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t, "Could not find element for: " + marker,
+ false);
+ return null;
+ }
+ }
+
+ public String getContentType(String elementHandle) {
+ return getContentType();
+ }
+
+ public List getRelationshipProviders() {
+ return providers;
+ }
+
+ public List getDegreesOfSeparation() {
+ List separations = new ArrayList();
+
+ // separations.add(new DegreeOfSeparation(DOS_1_LABEL, 0));
+ // separations.add(new DegreeOfSeparation(DOS_1_LABEL, 1));
+ // separations.add(new DegreeOfSeparation(DOS_2_LABEL, 2));
+ // separations.add(new DegreeOfSeparation(DOS_3_LABEL, 3));
+ // separations.add(new DegreeOfSeparation(DOS_4_LABEL, 4));
+ // separations.add(new DegreeOfSeparation(DOS_5_LABEL, 5));
+ separations.add(new DegreeOfSeparation("disabled", 0));
+ separations.add(new DegreeOfSeparation("landmark resources", 1));
+ separations.add(new DegreeOfSeparation("interesting resources", 2));
+ separations.add(new DegreeOfSeparation("interesting projects", 3));
+ separations.add(new DegreeOfSeparation("project dependencies", 4));
+ separations.add(new DegreeOfSeparation("entire workspace (slow)", 5));
+ return separations;
+ }
+
+ /**
+ * Some copying from:
+ *
+ * @see org.eclipse.jdt.ui.ProblemsLabelDecorator
+ */
+ public boolean containsProblem(IInteractionElement node) {
+ try {
+ IModelElement element = (IModelElement) getObjectForHandle(node
+ .getHandleIdentifier());
+ switch (element.getElementType()) {
+ case IModelElement.SCRIPT_PROJECT:
+ case IModelElement.PROJECT_FRAGMENT:
+ return getErrorTicksFromMarkers(element.getResource(),
+ IResource.DEPTH_INFINITE, null);
+ case IModelElement.PACKAGE_DECLARATION:
+ case IModelElement.SOURCE_MODULE:
+ case IModelElement.BINARY_MODULE:
+ return getErrorTicksFromMarkers(element.getResource(),
+ IResource.DEPTH_ONE, null);
+ case IModelElement.TYPE:
+ case IModelElement.METHOD:
+ case IModelElement.FIELD:
+ ISourceModule cu = (ISourceModule) element
+ .getAncestor(IModelElement.SOURCE_MODULE);
+ if (cu != null)
+ return getErrorTicksFromMarkers(element.getResource(),
+ IResource.DEPTH_ONE, null);
+ }
+ } catch (CoreException e) {
+ // ignore
+ }
+ return false;
+ }
+
+ private boolean getErrorTicksFromMarkers(IResource res, int depth,
+ ISourceReference sourceElement) throws CoreException {
+ if (res == null || !res.isAccessible())
+ return false;
+ IMarker[] markers = res.findMarkers(IMarker.PROBLEM, true, depth);
+ if (markers != null) {
+ for (int i = 0; i < markers.length; i++) {
+ IMarker curr = markers[i];
+ if (sourceElement == null) {
+ int priority = curr.getAttribute(IMarker.SEVERITY, -1);
+ if (priority == IMarker.SEVERITY_ERROR) {
+ return true;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ public String getLabel(Object arg0) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/InterestInducingProblemListener.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/InterestInducingProblemListener.java
new file mode 100644
index 0000000..a262d86
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/InterestInducingProblemListener.java
@@ -0,0 +1,88 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.ui.viewsupport.IProblemChangedListener;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+
+public class InterestInducingProblemListener implements
+ IProblemChangedListener, IPropertyChangeListener {
+
+ // TODO: consider getting rid of this
+ private DLTKStructureBridge scriptStructureBridge = new DLTKStructureBridge();
+
+ public void problemsChanged(IResource[] changedResources,
+ boolean isMarkerChange) {
+ try {
+ if (!ContextCorePlugin.getContextManager().isContextActive()) {
+ return;
+ } else {
+ for (int i = 0; i < changedResources.length; i++) {
+ IResource resource = changedResources[i];
+ if (resource instanceof IFile) {
+ IModelElement modelElement = (IModelElement) resource
+ .getAdapter(IModelElement.class);
+ if (modelElement != null) {
+ IInteractionElement element = ContextCorePlugin
+ .getContextManager().getElement(
+ modelElement.getHandleIdentifier());
+ if (!scriptStructureBridge.containsProblem(element)) {
+ ContextCorePlugin
+ .getContextManager()
+ .removeErrorPredictedInterest(
+ element.getHandleIdentifier(),
+ DLTKStructureBridge.CONTENT_TYPE,
+ true);
+ } else {
+ ContextCorePlugin
+ .getContextManager()
+ .addErrorPredictedInterest(
+ element.getHandleIdentifier(),
+ DLTKStructureBridge.CONTENT_TYPE,
+ true);
+ }
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ MylynStatusHandler.log(e, "could not update on marker change");
+ }
+ }
+
+ public void propertyChange(PropertyChangeEvent event) {
+ if (MylynDLTKPrefConstants.PREDICTED_INTEREST_ERRORS.equals(event
+ .getProperty())) {
+ if (MylynDLTKPlugin.getDefault().getPreferenceStore().getBoolean(
+ MylynDLTKPrefConstants.PREDICTED_INTEREST_ERRORS)) {
+ enable();
+ } else {
+ disable();
+ }
+ }
+ }
+
+ public void enable() {
+ //DLTKUIPlugin.getDefault().getProblemMarkerManager().addListener(this);
+ }
+
+ public void disable() {
+ //JavaPlugin.getDefault().getProblemMarkerManager().removeListener(this)
+ // ;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/InterestUpdateDeltaListener.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/InterestUpdateDeltaListener.java
new file mode 100644
index 0000000..88d1151
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/InterestUpdateDeltaListener.java
@@ -0,0 +1,105 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk;
+
+import org.eclipse.dltk.core.ElementChangedEvent;
+import org.eclipse.dltk.core.IElementChangedListener;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IModelElementDelta;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
+
+
+public class InterestUpdateDeltaListener implements IElementChangedListener {
+
+ private static boolean asyncExecMode = true;
+
+ public void elementChanged(ElementChangedEvent event) {
+ IModelElementDelta delta = event.getDelta();
+ handleDelta(delta.getAffectedChildren());
+ }
+
+ /**
+ * Only handles first addition/removal
+ */
+ private void handleDelta(IModelElementDelta[] delta) {
+ try {
+ IModelElement added = null;
+ IModelElement removed = null;
+ for (int i = 0; i < delta.length; i++) {
+ IModelElementDelta child = delta[i];
+ if (child.getKind() == IModelElementDelta.ADDED) {
+ if (added == null)
+ added = child.getElement();
+ } else if (child.getKind() == IModelElementDelta.REMOVED) {
+ if (removed == null)
+ removed = child.getElement();
+ }
+ handleDelta(child.getAffectedChildren());
+ }
+
+ if (added != null && removed != null) {
+ IInteractionElement element = ContextCorePlugin.getContextManager().getElement(removed.getHandleIdentifier());
+ if (element != null)
+ resetHandle(element, added.getHandleIdentifier());
+ } else if (removed != null) {
+ IInteractionElement element = ContextCorePlugin.getContextManager().getElement(removed.getHandleIdentifier());
+ if (element != null)
+ delete(element);
+ }
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t, "delta update failed", false);
+ }
+ }
+
+ private void resetHandle(final IInteractionElement element, final String newHandle) {
+ if (!asyncExecMode) {
+ ContextCorePlugin.getContextManager().updateHandle(element, newHandle);
+ } else {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (workbench != null) {
+ workbench.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ ContextCorePlugin.getContextManager().updateHandle(element, newHandle);
+ }
+ });
+ }
+ }
+ }
+
+ private void delete(final IInteractionElement element) {
+ if (!asyncExecMode) {
+
+ //ContextCorePlugin.getContextManager().delete(element, null);
+ ContextCorePlugin.getContextManager().deleteElement(element);
+ } else {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (workbench != null) {
+ workbench.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ ContextCorePlugin.getContextManager().deleteElement(element);
+ }
+ });
+ }
+ }
+ }
+
+ /**
+ * For testing
+ */
+ public static void setAsyncExecMode(boolean asyncExecMode) {
+ InterestUpdateDeltaListener.asyncExecMode = asyncExecMode;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynDLTKPlugin.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynDLTKPlugin.java
new file mode 100644
index 0000000..9d61982
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynDLTKPlugin.java
@@ -0,0 +1,326 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.internal.dltk;
+
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.dltk.ui.DLTKUIPlugin;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.internal.dltk.ui.DLTKEditingMonitor;
+import org.eclipse.mylyn.internal.dltk.ui.DLTKUiUtil;
+import org.eclipse.mylyn.internal.dltk.ui.LandmarkMarkerManager;
+import org.eclipse.mylyn.internal.dltk.ui.editor.ActiveFoldingListener;
+import org.eclipse.mylyn.internal.dltk.ui.wizards.MylynPreferenceWizard;
+import org.eclipse.mylyn.internal.monitor.ui.MonitorUiPlugin;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+public class MylynDLTKPlugin extends AbstractUIPlugin {
+
+ public static final String PLUGIN_ID = "org.eclipse.dltk.mylyn";
+
+ private static MylynDLTKPlugin INSTANCE;
+
+ private ResourceBundle resourceBundle;
+
+ private ActiveFoldingEditorTracker editorTracker;
+
+ // private PackageExplorerManager packageExplorerManager = new
+ // PackageExplorerManager();
+
+ private TypeHistoryManager typeHistoryManager = null;
+
+ private LandmarkMarkerManager landmarkMarkerManager = new LandmarkMarkerManager();
+
+ private InterestInducingProblemListener problemListener = new InterestInducingProblemListener();
+
+ private DLTKEditingMonitor dltkEditingMonitor;
+
+ private InterestUpdateDeltaListener dltkElementChangeListener = new InterestUpdateDeltaListener();
+
+ public MylynDLTKPlugin() {
+ super();
+ INSTANCE = this;
+ }
+
+ /**
+ * Startup order is critical.
+ */
+ public void start(BundleContext context) throws Exception {
+ super.start(context);
+ initDefaultPrefs();
+
+ final IWorkbench workbench = PlatformUI.getWorkbench();
+ workbench.getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ try {
+ // ContextCorePlugin.getContextManager().addListener(
+ // packageExplorerManager);
+ ContextCorePlugin.getContextManager().addListener(
+ landmarkMarkerManager);
+
+ try {
+ typeHistoryManager = new TypeHistoryManager();
+ ContextCorePlugin.getContextManager().addListener(
+ typeHistoryManager);
+ } catch (Throwable t) {
+ MylynStatusHandler
+ .log(t,
+ "Could not install type history manager, incompatible Eclipse version.");
+ }
+
+ if (getPreferenceStore().getBoolean(
+ MylynDLTKPrefConstants.PREDICTED_INTEREST_ERRORS)) {
+ problemListener.enable();
+ }
+ getPreferenceStore().addPropertyChangeListener(
+ problemListener);
+
+ // MylarMonitorPlugin.getDefault().
+ // addWindowPostSelectionListener(packageExplorerManager);
+
+ dltkEditingMonitor = new DLTKEditingMonitor();
+ MonitorUiPlugin.getDefault().getSelectionMonitors().add(
+ dltkEditingMonitor);
+ installEditorTracker(workbench);
+
+ // TODO: race conditions prevents this from running?
+ // if (FocusPackageExplorerAction.getDefault() != null) {
+ // FocusPackageExplorerAction.getDefault().update();
+ // }
+ // if (FocusBrowsingPerspectiveAction.getDefault() != null)
+ // {
+ // FocusBrowsingPerspectiveAction.getDefault().update();
+ // }
+
+ if (!getPreferenceStore().contains(
+ MylynPreferenceWizard.MYLYN_FIRST_RUN)) {
+ DLTKUiUtil.installContentAssist(DLTKUIPlugin
+ .getDefault().getPreferenceStore(), true);
+ }
+
+ if (!getPreferenceStore().contains(
+ MylynPreferenceWizard.MYLYN_FIRST_RUN)) {
+ MylynPreferenceWizard wizard = new MylynPreferenceWizard();
+ Shell shell = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getShell();
+ if (wizard != null && shell != null
+ && !shell.isDisposed()) {
+ WizardDialog dialog = new WizardDialog(shell,
+ wizard);
+ dialog.create();
+ dialog.open();
+ getPreferenceStore().putValue(
+ MylynPreferenceWizard.MYLYN_FIRST_RUN,
+ "false");
+ }
+ }
+
+ DLTKCore
+ .addElementChangedListener(dltkElementChangeListener);
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t,
+ "Mylyn DLTK plug-in initialization failed", true);
+ }
+ }
+ });
+ }
+
+ private void initDefaultPrefs() {
+ // getPreferenceStore().setDefault(MylarJavaPrefConstants.
+ // PACKAGE_EXPLORER_AUTO_EXPAND,
+ // true);
+ getPreferenceStore().setDefault(
+ MylynDLTKPrefConstants.PREDICTED_INTEREST_ERRORS, false);
+ }
+
+ public void stop(BundleContext context) throws Exception {
+ try {
+ super.stop(context);
+ INSTANCE = null;
+ resourceBundle = null;
+
+ // ContextCorePlugin.getContextManager().removeListener(
+ // packageExplorerManager);
+ ContextCorePlugin.getContextManager().removeListener(
+ typeHistoryManager);
+ ContextCorePlugin.getContextManager().removeListener(
+ landmarkMarkerManager);
+
+ MonitorUiPlugin.getDefault().getSelectionMonitors().remove(
+ dltkEditingMonitor);
+
+ // if (FocusPackageExplorerAction.getDefault() != null) {
+ // getPreferenceStore().removePropertyChangeListener(
+ // FocusPackageExplorerAction.getDefault());
+ // }
+
+ // if (PlatformUI.getWorkbench() != null &&
+ // !PlatformUI.getWorkbench().isClosing()) {
+ // for(IWorkbenchWindow w :
+ // PlatformUI.getWorkbench().getWorkbenchWindows()) {
+ // ISelectionService service = w.getSelectionService();
+ // service.removePostSelectionListener(packageExplorerManager);
+ // }
+ // }
+ DLTKCore.removeElementChangedListener(dltkElementChangeListener);
+ // CVSUIPlugin.getPlugin().getChangeSetManager().remove(
+ // changeSetManager);
+ // TODO: uninstall editor tracker
+ } catch (Exception e) {
+ MylynStatusHandler.fail(e, "Mylyn DLTK stop terminated abnormally",
+ false);
+ }
+ }
+
+ private void installEditorTracker(IWorkbench workbench) {
+ editorTracker = new ActiveFoldingEditorTracker();
+ editorTracker.install(workbench);
+ // workbench.addWindowListener(editorTracker);
+ // IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
+ // for (int i = 0; i < windows.length; i++) {
+ // windows[i].addPageListener(editorTracker);
+ // IWorkbenchPage[] pages = windows[i].getPages();
+ // for (int j = 0; j < pages.length; j++) {
+ // pages[j].addPartListener(editorTracker);
+ // }
+ // }
+
+ // update editors that are already opened
+ // for (IWorkbenchWindow w :
+ // PlatformUI.getWorkbench().getWorkbenchWindows())
+
+ for (int j = 0; j < PlatformUI.getWorkbench().getWorkbenchWindows().length; j++) {
+
+ IWorkbenchWindow w = PlatformUI.getWorkbench()
+ .getWorkbenchWindows()[j];
+ IWorkbenchPage page = w.getActivePage();
+ if (page != null) {
+ IEditorReference[] references = page.getEditorReferences();
+ for (int i = 0; i < references.length; i++) {
+ IEditorPart part = references[i].getEditor(false);
+ if (part != null && part instanceof ScriptEditor) {
+ ScriptEditor editor = (ScriptEditor) part;
+ editorTracker.registerEditor(editor);
+ ActiveFoldingListener.resetProjection(editor);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Returns the shared instance.
+ */
+ public static MylynDLTKPlugin getDefault() {
+ return INSTANCE;
+ }
+
+ /**
+ * Returns the string from the plugin's resource bundle, or 'key' if not
+ * found.
+ */
+ public static String getResourceString(String key) {
+ ResourceBundle bundle = MylynDLTKPlugin.getDefault()
+ .getResourceBundle();
+ try {
+ return (bundle != null) ? bundle.getString(key) : key;
+ } catch (MissingResourceException e) {
+ return key;
+ }
+ }
+
+ /**
+ * Returns the plugin's resource bundle,
+ */
+ public ResourceBundle getResourceBundle() {
+ try {
+ if (resourceBundle == null)
+ resourceBundle = ResourceBundle
+ .getBundle("org.eclipse.mylyn.java.JavaPluginResources");
+ } catch (MissingResourceException x) {
+ resourceBundle = null;
+ }
+ return resourceBundle;
+ }
+
+ /**
+ * Returns an image descriptor for the image file at the given plug-in
+ * relative path.
+ *
+ * @param path
+ * the path
+ * @return the image descriptor
+ */
+ public static ImageDescriptor getImageDescriptor(String path) {
+ return AbstractUIPlugin.imageDescriptorFromPlugin(PLUGIN_ID, path);
+ }
+
+ // public static boolean isMylarEditorDefault() {
+ // IEditorRegistry editorRegistry =
+ // WorkbenchPlugin.getDefault().getEditorRegistry();
+ // IEditorDescriptor desc = editorRegistry.getDefaultEditor("*.java");
+ //
+ // return
+ // MylarJavaPrefConstants.MYLAR_JAVA_EDITOR_ID.equals(desc.getLabel());
+ // }
+
+ // public static void setDefaultEditorForJavaFiles(boolean mylar) {
+ //
+ // EditorRegistry editorRegistry = (EditorRegistry)
+ // WorkbenchPlugin.getDefault().getEditorRegistry();
+ // // HACK: cast to allow save to be called
+ // IFileEditorMapping[] array =
+ // WorkbenchPlugin.getDefault().getEditorRegistry().getFileEditorMappings();
+ //
+ // // HACK: cast to allow set to be called
+ // editorRegistry.setFileEditorMappings((FileEditorMapping[]) array);
+ // String defaultEditor = editorRegistry.getDefaultEditor("*.java").getId();
+ //
+ // if (mylar) {
+ //
+ // if (!(defaultEditor.equals(MylarJavaPrefConstants.MYLAR_JAVA_EDITOR_ID)))
+ // {
+ // editorRegistry.setDefaultEditor("*.java",
+ // MylarJavaPrefConstants.MYLAR_JAVA_EDITOR_ID);
+ // editorRegistry.saveAssociations();
+ // }
+ // } else {
+ // if (!(defaultEditor.equals(JavaUI.ID_CU_EDITOR))) {
+ // editorRegistry.setDefaultEditor("*.java", JavaUI.ID_CU_EDITOR);
+ // editorRegistry.saveAssociations();
+ // }
+ // }
+ // }
+
+ // public TypeHistoryManager getTypeHistoryManager() {
+ // return typeHistoryManager;
+ // }
+
+ /**
+ * For testing.
+ */
+ public ActiveFoldingEditorTracker getEditorTracker() {
+ return editorTracker;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynDLTKPrefConstants.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynDLTKPrefConstants.java
new file mode 100644
index 0000000..8351458
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynDLTKPrefConstants.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk;
+
+public class MylynDLTKPrefConstants {
+
+ public static final String PREDICTED_INTEREST_ERRORS = "org.eclipse.dltk.mylyn.interest.prediction.errors";
+ public static final String ACTIVE_FOLDING_ENABLED = "org.eclipse.dltk.mylyn.active.folding.enabled";
+ public static final String AUTO_MANAGE_EDITORS = "org.eclipse.dltk.mylyn.auto.manage.editors";
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynStatusHandler.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynStatusHandler.java
new file mode 100644
index 0000000..ace449d
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/MylynStatusHandler.java
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk;
+
+import org.eclipse.mylyn.internal.dltk.search.AbstractDLTKRelationProvider;
+import org.eclipse.mylyn.internal.dltk.ui.editor.ActiveFoldingListener;
+
+public class MylynStatusHandler {
+
+ public static void log(Throwable t, String string) {
+ // ignore
+
+ }
+
+ public static void fail(Throwable t, String string, boolean b) {
+ // ignore
+
+ }
+
+ public static void log(String string,
+ DLTKStructureBridge scriptStructureBridge) {
+ // ignore
+
+ }
+
+ public static void log(String string,
+ ActiveFoldingListener activeFoldingListener) {
+ // ignore
+
+ }
+
+ public static void log(String string,
+ AbstractDLTKRelationProvider abstractscriptRelationProvider) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/TypeHistoryManager.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/TypeHistoryManager.java
new file mode 100644
index 0000000..17087bf
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/TypeHistoryManager.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk;
+
+import java.util.List;
+import java.util.ListIterator;
+
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.mylyn.context.core.AbstractContextListener;
+import org.eclipse.mylyn.context.core.IInteractionContext;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.monitor.core.IInteractionEventListener;
+import org.eclipse.mylyn.monitor.core.InteractionEvent;
+
+
+public class TypeHistoryManager /*implements IInteractionEventListener*/extends AbstractContextListener {
+
+// private TypeInfoFactory factory = new TypeInfoFactory();
+
+ public void contextActivated(IInteractionContext context) {
+ clearTypeHistory();
+ //for (IInteractionElement node : context.getInteresting())
+ for (ListIterator it = context.getInteresting().listIterator(); it.hasNext(); )
+ {
+ IInteractionElement node = (IInteractionElement)it.next();
+ updateTypeHistory(node, true);
+ }
+ }
+
+ /**
+ * Path has to be compatible with ITypeNameRequestor
+ */
+ private void updateTypeHistory(IInteractionElement node, boolean add) {
+ IModelElement element = DLTKCore.create(node.getHandleIdentifier());
+ if (element instanceof IType) {
+ IType type = (IType) element;
+ if (type != null && type.exists() ) {
+// TypeInfo info = factory.create(type.getPackageFragment().getElementName().toCharArray(), type
+// .getElementName().toCharArray(), enclosingTypeNames(type), type.getFlags(), getPath(type));
+
+// JavaSearchTypeNameMatch typeNameMatch = new JavaSearchTypeNameMatch(type, type.getFlags());
+//
+// if (add && !OpenTypeHistory.getInstance().contains(typeNameMatch)) {
+// OpenTypeHistory.getInstance().accessed(typeNameMatch);
+// } else {
+// OpenTypeHistory.getInstance().remove(typeNameMatch);
+// }
+ }
+ }
+ }
+
+ /**
+ * HACK: to avoid adding AspectJ types, for example:
+ *
+ * class: =TJP Example/src<tjp{Demo.java[Demo aspect: =TJP Example/src<tjp*GetInfo.aj}GetInfo
+ */
+ private boolean isAspectjType(IType type) {
+ if (type.getHandleIdentifier().indexOf('}') != -1) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public void contextDeactivated(IInteractionContext context) {
+ clearTypeHistory();
+ }
+
+// /**
+// * Public for testing
+// */
+ public void clearTypeHistory() {
+ //TypeNameMatch[] typeInfos = OpenTypeHistory.getInstance().getTypeInfos();
+ //for (int i = 0; i < typeInfos.length; i++) {
+ // OpenTypeHistory.getInstance().remove(typeInfos[i]);
+ //}
+ }
+
+ public void interestChanged(List nodes) {
+ for (ListIterator it = nodes.listIterator(); it.hasNext(); ) {
+ IInteractionElement node = (IInteractionElement) it.next();
+ updateTypeHistory(node, true);
+ }
+ }
+
+ public void elementDeleted(IInteractionElement node) {
+ updateTypeHistory(node, false);
+ }
+
+// public void presentationSettingsChanging(UpdateKind kind) {
+// // ignore
+// }
+//
+// public void presentationSettingsChanged(UpdateKind kind) {
+// // ignore
+// }
+
+
+
+ public void landmarkAdded(IInteractionElement node) {
+ // ignore
+ }
+
+ public void landmarkRemoved(IInteractionElement node) {
+ // ignore
+ }
+
+ public void relationsChanged(IInteractionElement node) {
+ // ignore
+ }
+
+ public void contextCleared(IInteractionContext arg0) {
+ // ignore
+
+ }
+
+ public void interactionObserved(InteractionEvent event) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void startMonitoring() {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void stopMonitoring() {
+ // TODO Auto-generated method stub
+
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/AbstractDLTKRelationProvider.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/AbstractDLTKRelationProvider.java
new file mode 100644
index 0000000..c30dc21
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/AbstractDLTKRelationProvider.java
@@ -0,0 +1,451 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Jan 26, 2005
+ */
+package org.eclipse.mylyn.internal.dltk.search;
+
+import java.util.ArrayList;
+import java.util.ConcurrentModificationException;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Set;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IScriptProject;
+import org.eclipse.dltk.core.ISourceModule;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.dltk.core.search.IDLTKSearchConstants;
+import org.eclipse.dltk.core.search.IDLTKSearchScope;
+import org.eclipse.dltk.core.search.SearchEngine;
+import org.eclipse.dltk.internal.ui.search.DLTKSearchQuery;
+import org.eclipse.dltk.internal.ui.search.DLTKSearchResult;
+import org.eclipse.dltk.ui.search.ElementQuerySpecification;
+import org.eclipse.dltk.ui.search.QuerySpecification;
+import org.eclipse.mylyn.context.core.AbstractContextStructureBridge;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.internal.context.core.AbstractRelationProvider;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.internal.context.core.IActiveSearchListener;
+import org.eclipse.mylyn.internal.context.core.IActiveSearchOperation;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+import org.eclipse.mylyn.internal.dltk.MylynStatusHandler;
+import org.eclipse.mylyn.internal.resources.ui.ResourcesUiBridgePlugin;
+import org.eclipse.search.ui.ISearchResult;
+import org.eclipse.search2.internal.ui.InternalSearchUI;
+
+public abstract class AbstractDLTKRelationProvider extends
+ AbstractRelationProvider {
+
+ public static final String ID_GENERIC = "org.eclipse.dltk.mylyn.relation";
+
+ public static final String NAME = "DLTK relationships";
+
+ private static final int DEFAULT_DEGREE = 2;
+
+ private static final List runningJobs = new ArrayList();
+
+ public String getGenericId() {
+ return ID_GENERIC;
+ }
+
+ protected AbstractDLTKRelationProvider(String structureKind, String id) {
+ super(structureKind, id);
+ }
+
+ protected void findRelated(final IInteractionElement node,
+ int degreeOfSeparation) {
+ if (node == null)
+ return;
+ if (node.getContentType() == null) {
+ MylynStatusHandler.log("null content type for: " + node, this);
+ return;
+ }
+ if (!node.getContentType().equals(DLTKStructureBridge.CONTENT_TYPE))
+ return;
+ IModelElement modelElement = DLTKCore
+ .create(node.getHandleIdentifier());
+ if (!acceptElement(modelElement) || !modelElement.exists()) {
+ return;
+ }
+
+ IDLTKSearchScope scope = createSearchScope(modelElement,
+ degreeOfSeparation);
+ if (scope != null)
+ runJob(node, degreeOfSeparation, getId());
+ }
+
+ private IDLTKSearchScope createSearchScope(IModelElement element,
+ int degreeOfSeparation) {
+ Set landmarks = ContextCorePlugin.getContextManager()
+ .getActiveLandmarks();
+ List interestingElements = ContextCorePlugin.getContextManager()
+ .getActiveContext().getInteresting();
+
+ Set searchElements = new HashSet();
+ int includeMask = IDLTKSearchScope.SOURCES;
+ if (degreeOfSeparation == 1) {
+ // for (IInteractionElement landmark : landmarks) {
+ for (Iterator it = landmarks.iterator(); it.hasNext();) {
+ IInteractionElement landmark = (IInteractionElement) it.next();
+ AbstractContextStructureBridge bridge = ContextCorePlugin
+ .getDefault().getStructureBridge(
+ landmark.getContentType());
+ if (includeNodeInScope(landmark, bridge)) {
+ Object o = bridge.getObjectForHandle(landmark
+ .getHandleIdentifier());
+ if (o instanceof IModelElement) {
+ IModelElement landmarkElement = (IModelElement) o;
+ if (landmarkElement.exists()) {
+ if (landmarkElement instanceof IMember
+ && !landmark.getInterest().isPropagated()) {
+ searchElements.add(((IMember) landmarkElement)
+ .getSourceModule());
+ } else if (landmarkElement instanceof ISourceModule) {
+ searchElements.add(landmarkElement);
+ }
+ }
+ }
+ }
+ }
+ } else if (degreeOfSeparation == 2) {
+ // for (IInteractionElement interesting : interestingElements) {
+ for (Iterator it = interestingElements.iterator(); it.hasNext();) {
+ IInteractionElement interesting = (IInteractionElement) it
+ .next();
+ AbstractContextStructureBridge bridge = ContextCorePlugin
+ .getDefault().getStructureBridge(
+ interesting.getContentType());
+ if (includeNodeInScope(interesting, bridge)) {
+ Object object = bridge.getObjectForHandle(interesting
+ .getHandleIdentifier());
+ if (object instanceof IModelElement) {
+ IModelElement interestingElement = (IModelElement) object;
+ if (interestingElement.exists()) {
+ if (interestingElement instanceof IMember
+ && !interesting.getInterest()
+ .isPropagated()) {
+ searchElements
+ .add(((IMember) interestingElement)
+ .getSourceModule());
+ } else if (interestingElement instanceof ISourceModule) {
+ searchElements.add(interestingElement);
+ }
+ }
+ }
+ }
+ }
+ } else if (degreeOfSeparation == 3 || degreeOfSeparation == 4) {
+ // for (IInteractionElement interesting : interestingElements) {
+ for (Iterator it = interestingElements.iterator(); it.hasNext();) {
+ IInteractionElement interesting = (IInteractionElement) it
+ .next();
+
+ AbstractContextStructureBridge bridge = ContextCorePlugin
+ .getDefault().getStructureBridge(
+ interesting.getContentType());
+ if (includeNodeInScope(interesting, bridge)) {
+ IResource resource = ResourcesUiBridgePlugin.getDefault()
+ .getResourceForElement(interesting, true);
+ if (resource != null) {
+ IProject project = resource.getProject();
+
+ // if (project != null &&
+ // DLTKProject.hasScriptNature(project) &&
+ // project.exists()) {
+
+ if (project != null && project.exists()) {
+ IScriptProject scriptProject = DLTKCore
+ .create(project);// ((IModelElement)o).
+ if (scriptProject != null && scriptProject.exists())
+ searchElements.add(scriptProject);
+ }
+ }
+ }
+ }
+ if (degreeOfSeparation == 4) {
+
+ includeMask = IDLTKSearchScope.SOURCES
+ | IDLTKSearchScope.APPLICATION_LIBRARIES
+ | IDLTKSearchScope.SYSTEM_LIBRARIES;
+ }
+ } else if (degreeOfSeparation == 5) {
+ return SearchEngine.createWorkspaceScope(null);
+ }
+
+ if (searchElements.size() == 0) {
+ return null;
+ } else {
+ IModelElement[] elements = new IModelElement[searchElements.size()];
+ int j = 0;
+ // for (IModelElement searchElement : searchElements) {
+ for (Iterator it = searchElements.iterator(); it.hasNext();) {
+ IModelElement searchElement = (IModelElement) it.next();
+ elements[j] = searchElement;
+ j++;
+ }
+
+ return SearchEngine.createSearchScope(elements, includeMask, null);
+ }
+ }
+
+ /**
+ * Only include Script elements and files.
+ */
+ private boolean includeNodeInScope(IInteractionElement interesting,
+ AbstractContextStructureBridge bridge) {
+ if (interesting == null || bridge == null) {
+ return false;
+ } else {
+ if (interesting.getContentType() == null) {
+ // TODO: remove
+ MylynStatusHandler.log("null content type for: "
+ + interesting.getHandleIdentifier(), this);
+ return false;
+ } else {
+ return interesting.getContentType().equals(
+ DLTKStructureBridge.CONTENT_TYPE)
+ || bridge.isDocument(interesting.getHandleIdentifier());
+ }
+ }
+ }
+
+ protected boolean acceptResultElement(IModelElement element) {
+ return true;
+ }
+
+ protected boolean acceptElement(IModelElement modelElement) {
+ return modelElement != null
+ && (modelElement instanceof IMember || modelElement instanceof IType);
+ }
+
+ private void runJob(final IInteractionElement node,
+ final int degreeOfSeparation, final String kind) {
+
+ int limitTo = 0;
+ if (kind.equals(DLTKReferencesProvider.ID)) {
+ limitTo = IDLTKSearchConstants.REFERENCES;
+ } else if (kind.equals(DLTKImplementorsProvider.ID)) {
+ // limitTo = IDLTKSearchConstants.IMPLEMENTORS;
+ } else if (kind.equals(DLTKTestingReferencesProvider.ID)) {
+ limitTo = IDLTKSearchConstants.REFERENCES;
+ } else if (kind.equals(DLTKReadAccessProvider.ID)) {
+ limitTo = IDLTKSearchConstants.REFERENCES;
+ } else if (kind.equals(DLTKWriteAccessProvider.ID)) {
+ limitTo = IDLTKSearchConstants.REFERENCES;
+ }
+
+ final DLTKSearchOperation query = (DLTKSearchOperation) getSearchOperation(
+ node, limitTo, degreeOfSeparation);
+ if (query == null)
+ return;
+
+ DLTKSearchJob job = new DLTKSearchJob(query.getLabel(), query);
+ query.addListener(new IActiveSearchListener() {
+
+ private boolean gathered = false;
+
+ public boolean resultsGathered() {
+ return gathered;
+ }
+
+ public void searchCompleted(List l) {
+ if (l == null)
+ return;
+ List relatedHandles = new ArrayList();
+ Object[] elements = l.toArray();
+ for (int i = 0; i < elements.length; i++) {
+ if (elements[i] instanceof IModelElement)
+ relatedHandles.add((IModelElement) elements[i]);
+ }
+
+ // for (IModelElement element : relatedHandles) {
+ for (ListIterator it = relatedHandles.listIterator(); it
+ .hasNext();) {
+ IModelElement element = (IModelElement) it.next();
+ if (!acceptResultElement(element))
+ continue;
+ incrementInterest(node, DLTKStructureBridge.CONTENT_TYPE,
+ element.getHandleIdentifier(), degreeOfSeparation);
+ }
+ gathered = true;
+ AbstractDLTKRelationProvider.this.searchCompleted(node);
+ }
+
+ });
+ InternalSearchUI.getInstance();
+
+ runningJobs.add(job);
+ job.setPriority(Job.DECORATE - 10);
+ job.schedule();
+ }
+
+ public IActiveSearchOperation getSearchOperation(IInteractionElement node,
+ int limitTo, int degreeOfSeparation) {
+ IModelElement modelElement = DLTKCore
+ .create(node.getHandleIdentifier());
+ if (modelElement == null || !modelElement.exists())
+ return null;
+
+ IDLTKSearchScope scope = createSearchScope(modelElement,
+ degreeOfSeparation);
+
+ if (scope == null)
+ return null;
+
+ QuerySpecification specs = new ElementQuerySpecification(modelElement,
+ limitTo, scope, "Mylyn degree of separation: "
+ + degreeOfSeparation);
+
+ return new DLTKSearchOperation(specs);
+ }
+
+ protected static class DLTKSearchJob extends Job {
+
+ private DLTKSearchOperation op;
+
+ public DLTKSearchJob(String name, DLTKSearchOperation op) {
+ super(name);
+ this.op = op;
+ }
+
+ /**
+ * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+
+ protected IStatus run(IProgressMonitor monitor) {
+ return op.run(monitor);
+ }
+
+ }
+
+ protected static class DLTKSearchOperation extends DLTKSearchQuery
+ implements IActiveSearchOperation {
+ private ISearchResult result = null;
+
+ public ISearchResult getSearchResult() {
+ if (result == null)
+ result = new DLTKSearchResult(this);
+ new DLTKActiveSearchResultUpdater((DLTKSearchResult) result);
+ return result;
+ }
+
+ public IStatus run(IProgressMonitor monitor) {
+ try {
+ IStatus runStatus = super.run(monitor);
+ ISearchResult result = getSearchResult();
+ if (result instanceof DLTKSearchResult) {
+ // TODO make better
+ Object[] objs = ((DLTKSearchResult) result).getElements();
+ if (objs == null) {
+ notifySearchCompleted(null);
+ } else {
+ List l = new ArrayList();
+ for (int i = 0; i < objs.length; i++) {
+ l.add(objs[i]);
+ }
+ notifySearchCompleted(l);
+ }
+ }
+ return runStatus;
+ } catch (ConcurrentModificationException cme) {
+ MylynStatusHandler.log(cme, "script search failed");
+ } catch (Throwable t) {
+ MylynStatusHandler.log(t, "script search failed");
+ }
+
+ IStatus status = new Status(IStatus.WARNING,
+ ContextCorePlugin.PLUGIN_ID, IStatus.OK,
+ "could not run Script search", null);
+ notifySearchCompleted(null);
+ return status;
+ }
+
+ /**
+ * Constructor
+ *
+ * @param data
+ */
+ public DLTKSearchOperation(QuerySpecification data) {
+ super(data);
+
+ }
+
+ /** List of listeners wanting to know about the searches */
+ private List listeners = new ArrayList();
+
+ /**
+ * Add a listener for when the bugzilla search is completed
+ *
+ * @param l
+ * The listener to add
+ */
+ public void addListener(IActiveSearchListener l) {
+ // add the listener to the list
+ listeners.add(l);
+ }
+
+ /**
+ * Remove a listener for when the bugzilla search is completed
+ *
+ * @param l
+ * The listener to remove
+ */
+ public void removeListener(IActiveSearchListener l) {
+ // remove the listener from the list
+ listeners.remove(l);
+ }
+
+ /**
+ * Notify all of the listeners that the bugzilla search is completed
+ *
+ * @param doiList
+ * A list of BugzillaSearchHitDoiInfo
+ * @param member
+ * The IMember that the search was performed on
+ */
+ public void notifySearchCompleted(List l) {
+ // go through all of the listeners and call
+ // searchCompleted(colelctor,
+ // member)
+ // for (IActiveSearchListener listener : listeners) {
+ for (ListIterator it = listeners.listIterator(); it.hasNext();) {
+ IActiveSearchListener listener = (IActiveSearchListener) it
+ .next();
+ listener.searchCompleted(l);
+ }
+ }
+
+ }
+
+ public void stopAllRunningJobs() {
+ // for (Job j : runningJobs) {
+ for (ListIterator it = runningJobs.listIterator(); it.hasNext();) {
+ Job j = (Job) it.next();
+ j.cancel();
+ }
+ runningJobs.clear();
+ }
+
+ protected int getDefaultDegreeOfSeparation() {
+ return DEFAULT_DEGREE;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKActiveSearchResultUpdater.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKActiveSearchResultUpdater.java
new file mode 100644
index 0000000..b9c072d
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKActiveSearchResultUpdater.java
@@ -0,0 +1,168 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.search;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.ElementChangedEvent;
+import org.eclipse.dltk.core.IElementChangedListener;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IModelElementDelta;
+import org.eclipse.dltk.internal.ui.search.DLTKSearchResult;
+import org.eclipse.search.ui.IQueryListener;
+import org.eclipse.search.ui.ISearchQuery;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.search.ui.text.Match;
+
+/**
+ * COPIED FROM: org.eclipse.jdt.internal.ui.search.SearchResultUpdater
+ *
+ * @author Shawn Minto
+ */
+
+public class DLTKActiveSearchResultUpdater implements IElementChangedListener,
+ IQueryListener {
+
+ private DLTKSearchResult fResult;
+
+ private static final int REMOVED_FLAGS = IModelElementDelta.F_MOVED_TO
+ | IModelElementDelta.F_CLOSED | IModelElementDelta.F_CONTENT;
+
+ public DLTKActiveSearchResultUpdater(DLTKSearchResult result) {
+ fResult = result;
+ NewSearchUI.addQueryListener(this);
+ DLTKCore.addElementChangedListener(this);
+ // TODO make this work with resources
+ }
+
+ public void elementChanged(ElementChangedEvent event) {
+ // long t0= System.currentTimeMillis();
+ IModelElementDelta delta = event.getDelta();
+ Set removedElements = new HashSet();
+ Set potentiallyRemovedElements = new HashSet();
+ collectRemoved(potentiallyRemovedElements, removedElements, delta);
+ if (removedElements.size() > 0)
+ handleRemoved(removedElements);
+ if (potentiallyRemovedElements.size() > 0)
+ handleRemoved(potentiallyRemovedElements);
+ }
+
+ private void handleRemoved(Set removedElements) {
+ Object[] elements = fResult.getElements();
+ for (int i = 0; i < elements.length; i++) {
+ if (isContainedInRemoved(removedElements, elements[i])) {
+ if (elements[i] instanceof IModelElement) {
+ IModelElement je = (IModelElement) elements[i];
+ if (!je.exists()) {
+ Match[] matches = fResult.getMatches(elements[i]);
+ for (int j = 0; j < matches.length; j++) {
+ fResult.removeMatch(matches[j]);
+ }
+ // XXX remove edge and element
+ }
+ } else if (elements[i] instanceof IResource) {
+ IResource resource = (IResource) elements[i];
+ if (!resource.exists()) {
+ Match[] matches = fResult.getMatches(elements[i]);
+ for (int j = 0; j < matches.length; j++) {
+ fResult.removeMatch(matches[j]);
+ }
+ // XXX remove edge and element
+ }
+
+ }
+ }
+ }
+ }
+
+ private boolean isContainedInRemoved(Set removedElements, Object object) {
+ for (Iterator elements = removedElements.iterator(); elements.hasNext();) {
+ if (isParentOf(elements.next(), object))
+ return true;
+ }
+ return false;
+ }
+
+ private boolean isParentOf(Object ancestor, Object descendant) {
+ while (descendant != null && !ancestor.equals(descendant))
+ descendant = getParent(descendant);
+ return descendant != null;
+ }
+
+ private Object getParent(Object object) {
+ if (object instanceof IModelElement)
+ return ((IModelElement) object).getParent();
+ else if (object instanceof IResource)
+ return ((IResource) object).getParent();
+ return null;
+ }
+
+ private void collectRemoved(Set potentiallyRemovedSet, Set removedElements,
+ IModelElementDelta delta) {
+ if (delta.getKind() == IModelElementDelta.REMOVED)
+ removedElements.add(delta.getElement());
+ else if (delta.getKind() == IModelElementDelta.CHANGED) {
+ int flags = delta.getFlags();
+ if ((flags & REMOVED_FLAGS) != 0) {
+ potentiallyRemovedSet.add(delta.getElement());
+ } else {
+ IModelElementDelta[] childDeltas = delta.getAffectedChildren();
+ for (int i = 0; i < childDeltas.length; i++) {
+ collectRemoved(potentiallyRemovedSet, removedElements,
+ childDeltas[i]);
+ }
+ }
+ }
+ IResourceDelta[] resourceDeltas = delta.getResourceDeltas();
+ if (resourceDeltas != null) {
+ for (int i = 0; i < resourceDeltas.length; i++) {
+ collectRemovals(removedElements, resourceDeltas[i]);
+ }
+ }
+ }
+
+ public void queryAdded(ISearchQuery query) {
+ // don't care
+ }
+
+ public void queryRemoved(ISearchQuery query) {
+ if (fResult.equals(query.getSearchResult())) {
+ DLTKCore.removeElementChangedListener(this);
+ NewSearchUI.removeQueryListener(this);
+ }
+ }
+
+ private void collectRemovals(Set removals, IResourceDelta delta) {
+ if (delta.getKind() == IResourceDelta.REMOVED)
+ removals.add(delta.getResource());
+ else {
+ IResourceDelta[] children = delta.getAffectedChildren();
+ for (int i = 0; i < children.length; i++) {
+ collectRemovals(removals, children[i]);
+ }
+ }
+ }
+
+ public void queryStarting(ISearchQuery query) {
+ // not interested
+ }
+
+ public void queryFinished(ISearchQuery query) {
+ // not interested
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKImplementorsProvider.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKImplementorsProvider.java
new file mode 100644
index 0000000..0bd6a58
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKImplementorsProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.search;
+
+import java.util.List;
+
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+
+public class DLTKImplementorsProvider extends AbstractDLTKRelationProvider {
+
+ public List getDegreesOfSeparation() {
+ return null;
+ }
+
+ public static final String ID = ID_GENERIC + ".implementors";
+
+ public static final String NAME = "implemented by";
+
+ public DLTKImplementorsProvider() {
+ super(DLTKStructureBridge.CONTENT_TYPE, ID);
+ }
+
+ protected boolean acceptElement(IModelElement modelElement) {
+ return modelElement != null && modelElement instanceof IType;
+ }
+
+ protected String getSourceId() {
+ return ID;
+ }
+
+ public String getName() {
+ return NAME;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKReadAccessProvider.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKReadAccessProvider.java
new file mode 100644
index 0000000..64381a7
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKReadAccessProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.search;
+
+import java.util.List;
+
+import org.eclipse.dltk.core.IField;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+
+public class DLTKReadAccessProvider extends AbstractDLTKRelationProvider {
+
+ public List getDegreesOfSeparation() {
+ return null;
+ }
+
+ public static final String ID = ID_GENERIC + ".readaccess";
+
+ public static final String NAME = "read by";
+
+ public DLTKReadAccessProvider() {
+ super(DLTKStructureBridge.CONTENT_TYPE, ID);
+ }
+
+ protected boolean acceptElement(IModelElement modelElement) {
+ return modelElement instanceof IField;
+ }
+
+ protected String getSourceId() {
+ return ID;
+ }
+
+ public String getName() {
+ return NAME;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKReferencesProvider.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKReferencesProvider.java
new file mode 100644
index 0000000..b4c327b
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKReferencesProvider.java
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.search;
+
+import java.util.List;
+
+import org.eclipse.dltk.core.IMethod;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.mylyn.context.core.IDegreeOfSeparation;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+
+
+public class DLTKReferencesProvider extends AbstractDLTKRelationProvider {
+
+
+ public List getDegreesOfSeparation()
+ {
+ return null;
+ }
+ public static final String ID = ID_GENERIC + ".references";
+
+ public static final String NAME = "referenced by";
+
+ public DLTKReferencesProvider() {
+ super(DLTKStructureBridge.CONTENT_TYPE, ID);
+ }
+
+ protected boolean acceptResultElement(IModelElement element) {
+ if (element instanceof IMethod) {
+ IMethod method = (IMethod) element;
+ if (method.getElementName().startsWith("test")) {
+ return false; // HACK
+ } else {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ protected String getSourceId() {
+ return ID;
+ }
+
+ public String getName() {
+ return NAME;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKTestingReferencesProvider.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKTestingReferencesProvider.java
new file mode 100644
index 0000000..ce3e60e
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKTestingReferencesProvider.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.search;
+
+import java.util.List;
+
+import org.eclipse.dltk.core.IMethod;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.mylyn.context.core.IDegreeOfSeparation;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+
+
+public class DLTKTestingReferencesProvider extends AbstractDLTKRelationProvider {
+
+ public List getDegreesOfSeparation()
+ {
+ return null;
+ }
+
+ public static final String ID = ID_GENERIC + ".junitreferences";
+
+ public static final String NAME = "tested by";
+
+ public DLTKTestingReferencesProvider() {
+ super(DLTKStructureBridge.CONTENT_TYPE, ID);
+ }
+
+ protected boolean acceptResultElement(IModelElement element) {
+ if (element instanceof IMethod) {
+ IMethod method = (IMethod) element;
+ boolean isTestMethod = false;
+ boolean isTestCase = false;
+ if (method.getElementName().startsWith("test"))
+ isTestMethod = true;
+
+ IModelElement parent = method.getParent();
+ if (parent instanceof IType) {
+ IType type = (IType) parent;
+ isTestCase = false;//MylynContextTestUtil.isTestType(type);
+ }
+ return isTestMethod && isTestCase;
+ }
+ return false;
+ }
+
+ protected String getSourceId() {
+ return ID;
+ }
+
+ public String getName() {
+ return NAME;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKWriteAccessProvider.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKWriteAccessProvider.java
new file mode 100644
index 0000000..722bee4
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/search/DLTKWriteAccessProvider.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.search;
+
+import java.util.List;
+
+import org.eclipse.dltk.core.IField;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+
+public class DLTKWriteAccessProvider extends AbstractDLTKRelationProvider {
+
+ public List getDegreesOfSeparation() {
+ return null;
+ }
+
+ public static final String ID = ID_GENERIC + ".writeaccess";
+
+ public static final String NAME = "written by";
+
+ public DLTKWriteAccessProvider() {
+ super(DLTKStructureBridge.CONTENT_TYPE, ID);
+ }
+
+ protected boolean acceptElement(IModelElement modelElement) {
+ return modelElement instanceof IField;
+ }
+
+ protected String getSourceId() {
+ return ID;
+ }
+
+ public String getName() {
+ return NAME;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKContextLabelProvider.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKContextLabelProvider.java
new file mode 100644
index 0000000..94dd43d
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKContextLabelProvider.java
@@ -0,0 +1,157 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Aug 6, 2004
+ */
+package org.eclipse.mylyn.internal.dltk.ui;
+
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.dltk.ui.ScriptElementLabels;
+import org.eclipse.dltk.ui.viewsupport.AppearanceAwareLabelProvider;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.context.core.IInteractionRelation;
+import org.eclipse.mylyn.internal.context.ui.ContextUiImages;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+import org.eclipse.mylyn.internal.dltk.MylynDLTKPlugin;
+import org.eclipse.swt.graphics.Image;
+
+public class DLTKContextLabelProvider extends AppearanceAwareLabelProvider {
+
+ private static final String LABEL_ELEMENT_MISSING = "<missing element>";
+
+ private static final ImageDescriptor EDGE_REF_JUNIT = MylynDLTKPlugin
+ .getImageDescriptor("icons/elcl16/edge-ref-junit.gif");
+
+ public DLTKContextLabelProvider() {
+ super(AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS
+ | ScriptElementLabels.P_COMPRESSED,
+ AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS,
+ MylynDLTKPlugin.getDefault().getPreferenceStore());
+ }
+
+ public String getText(Object object) {
+ if (object instanceof IInteractionElement) {
+ IInteractionElement node = (IInteractionElement) object;
+ if (DLTKStructureBridge.CONTENT_TYPE.equals(node.getContentType())) {
+ IModelElement element = DLTKCore.create(node
+ .getHandleIdentifier());
+ if (element == null) {
+ return LABEL_ELEMENT_MISSING;
+ } else {
+ return getTextForElement(element);
+ }
+ }
+ } else if (object instanceof IInteractionRelation) {
+ return getNameForRelationship(((IInteractionRelation) object)
+ .getRelationshipHandle());
+ } else if (object instanceof IModelElement) {
+ return getTextForElement((IModelElement) object);
+ }
+ return super.getText(object);
+ }
+
+ private String getTextForElement(IModelElement element) {
+ // if (DelegatingContextLabelProvider.isQualifyNamesMode()) {
+ if (element instanceof IMember && !(element instanceof IType)) {
+ String parentName = ((IMember) element).getParent()
+ .getElementName();
+ if (parentName != null && parentName != "") {
+ return parentName + '.' + super.getText(element);
+ }
+ }
+ // }
+ if (element.exists()) {
+ return super.getText(element);
+ } else {
+ return LABEL_ELEMENT_MISSING;
+ }
+ }
+
+ public Image getImage(Object object) {
+ if (object instanceof IInteractionElement) {
+ IInteractionElement node = (IInteractionElement) object;
+ if (node.getContentType().equals(DLTKStructureBridge.CONTENT_TYPE)) {
+ return super.getImage(DLTKCore.create(node
+ .getHandleIdentifier()));
+ }
+ } else if (object instanceof IInteractionRelation) {
+ ImageDescriptor descriptor = getIconForRelationship(((IInteractionRelation) object)
+ .getRelationshipHandle());
+ if (descriptor != null) {
+ return ContextUiImages.getImage(descriptor);
+ } else {
+ return null;
+ }
+ }
+ return super.getImage(object);
+ }
+
+ private ImageDescriptor getIconForRelationship(String relationshipHandle) {
+ // if
+ // (relationshipHandle.equals(AbstractJavaRelationProvider.ID_GENERIC))
+ // {
+ // return ContextUiImages.EDGE_REFERENCE;
+ // } else if (relationshipHandle.equals(JavaReferencesProvider.ID)) {
+ // return ContextUiImages.EDGE_REFERENCE;
+ // } else if (relationshipHandle.equals(JavaImplementorsProvider.ID)) {
+ // return ContextUiImages.EDGE_INHERITANCE;
+ // } else if (relationshipHandle.equals(JUnitReferencesProvider.ID)) {
+ // return EDGE_REF_JUNIT;
+ // } else if (relationshipHandle.equals(JavaWriteAccessProvider.ID)) {
+ // return ContextUiImages.EDGE_ACCESS_WRITE;
+ // } else if (relationshipHandle.equals(JavaReadAccessProvider.ID)) {
+ // return ContextUiImages.EDGE_ACCESS_READ;
+ // } else {
+ // return null;
+ // }
+
+ return null;
+ }
+
+ private String getNameForRelationship(String relationshipHandle) {
+ // if
+ // (relationshipHandle.equals(AbstractJavaRelationProvider.ID_GENERIC))
+ // {
+ // return AbstractJavaRelationProvider.NAME;
+ // } else if (relationshipHandle.equals(JavaReferencesProvider.ID)) {
+ // return JavaReferencesProvider.NAME;
+ // } else if (relationshipHandle.equals(JavaImplementorsProvider.ID)) {
+ // return JavaImplementorsProvider.NAME;
+ // } else if (relationshipHandle.equals(JUnitReferencesProvider.ID)) {
+ // return JUnitReferencesProvider.NAME;
+ // } else if (relationshipHandle.equals(JavaWriteAccessProvider.ID)) {
+ // return JavaWriteAccessProvider.NAME;
+ // } else if (relationshipHandle.equals(JavaReadAccessProvider.ID)) {
+ // return JavaReadAccessProvider.NAME;
+ // } else if (relationshipHandle.equals(MylarContextManager.
+ // CONTAINMENT_PROPAGATION_ID)) {
+ // return "Containment"; // TODO: make this generic?
+ // } else {
+ // return null;
+ // }
+ return null;
+ }
+
+ public static AppearanceAwareLabelProvider createJavaUiLabelProvider() {
+ AppearanceAwareLabelProvider scriptUiLabelProvider = new AppearanceAwareLabelProvider(
+ AppearanceAwareLabelProvider.DEFAULT_TEXTFLAGS
+ | ScriptElementLabels.P_COMPRESSED,
+ AppearanceAwareLabelProvider.DEFAULT_IMAGEFLAGS,
+ MylynDLTKPlugin.getDefault().getPreferenceStore());
+ // javaUiLabelProvider.addLabelDecorator(new
+ // TreeHierarchyLayoutProblemsDecorator());
+ return scriptUiLabelProvider;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKDeclarationsFilter.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKDeclarationsFilter.java
new file mode 100644
index 0000000..6782108
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKDeclarationsFilter.java
@@ -0,0 +1,26 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui;
+
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+
+
+public class DLTKDeclarationsFilter extends ViewerFilter {
+
+ public boolean select(Viewer viewer, Object parent, Object element) {
+ return !(element instanceof IMember || element instanceof IType);
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKEditingMonitor.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKEditingMonitor.java
new file mode 100644
index 0000000..824ff01
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKEditingMonitor.java
@@ -0,0 +1,143 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui;
+
+import org.eclipse.dltk.core.IMethod;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IPackageDeclaration;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.internal.ui.actions.SelectionConverter;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.mylyn.internal.dltk.MylynStatusHandler;
+import org.eclipse.mylyn.internal.dltk.search.DLTKImplementorsProvider;
+import org.eclipse.mylyn.internal.dltk.search.DLTKReferencesProvider;
+import org.eclipse.mylyn.monitor.ui.AbstractUserInteractionMonitor;
+import org.eclipse.ui.IWorkbenchPart;
+
+
+public class DLTKEditingMonitor extends AbstractUserInteractionMonitor {
+
+ protected IModelElement lastSelectedElement = null;
+
+ protected IModelElement lastResolvedElement = null;
+
+ protected ScriptEditor currentEditor;
+
+ protected StructuredSelection currentSelection = null;
+
+ public DLTKEditingMonitor() {
+ super();
+ }
+
+ /**
+ * Only public for testing
+ */
+ public void handleWorkbenchPartSelection(IWorkbenchPart part, ISelection selection, boolean contributeToContext) {
+ try {
+ IModelElement selectedElement = null;
+ if (selection instanceof StructuredSelection) {
+ StructuredSelection structuredSelection = (StructuredSelection) selection;
+
+ if (structuredSelection.equals(currentSelection))
+ return;
+ currentSelection = structuredSelection;
+
+ Object selectedObject = structuredSelection.getFirstElement();
+ if (selectedObject instanceof IModelElement) {
+ IModelElement checkedElement = checkIfAcceptedAndPromoteIfNecessary((IModelElement) selectedObject);
+ if (checkedElement == null) {
+ return;
+ } else {
+ selectedElement = checkedElement;
+ }
+ }
+ if (selectedElement != null)
+ super.handleElementSelection(part, selectedElement, contributeToContext);
+ } else {
+ if (selection instanceof TextSelection && part instanceof ScriptEditor) {
+ currentEditor = (ScriptEditor) part;
+ TextSelection textSelection = (TextSelection) selection;
+ selectedElement = SelectionConverter.resolveEnclosingElement(currentEditor, textSelection);
+ if (selectedElement instanceof IPackageDeclaration)
+ return; // HACK: ignoring these selections
+ IModelElement[] resolved = SelectionConverter.codeResolve(currentEditor);
+ if (resolved != null && resolved.length == 1 && !resolved[0].equals(selectedElement)) {
+ lastResolvedElement = resolved[0];
+ }
+
+ boolean selectionResolved = false;
+ if (selectedElement instanceof IMethod && lastSelectedElement instanceof IMethod) {
+ if (lastResolvedElement != null && lastSelectedElement != null
+ && lastResolvedElement.equals(selectedElement)
+ && !lastSelectedElement.equals(lastResolvedElement)) {
+ super.handleNavigation(part, selectedElement, DLTKReferencesProvider.ID, contributeToContext);
+ selectionResolved = true;
+ } else if (lastSelectedElement != null && lastSelectedElement.equals(lastResolvedElement)
+ && !lastSelectedElement.equals(selectedElement)) {
+ super.handleNavigation(part, selectedElement, DLTKReferencesProvider.ID, contributeToContext);
+ selectionResolved = true;
+ }
+ } else if (selectedElement != null && lastSelectedElement != null
+ && !lastSelectedElement.equals(selectedElement)) {
+ if (lastSelectedElement.getElementName().equals(selectedElement.getElementName())) {
+ if (selectedElement instanceof IMethod && lastSelectedElement instanceof IMethod) {
+ super.handleNavigation(part, selectedElement, DLTKImplementorsProvider.ID, contributeToContext);
+ selectionResolved = true;
+ } else if (selectedElement instanceof IType && lastSelectedElement instanceof IType) {
+ super.handleNavigation(part, selectedElement, DLTKImplementorsProvider.ID, contributeToContext);
+ selectionResolved = true;
+ }
+ }
+ }
+ if (selectedElement != null) {
+ if (!selectionResolved && selectedElement.equals(lastSelectedElement)) {
+ super.handleElementEdit(part, selectedElement, contributeToContext);
+ } else if (!selectedElement.equals(lastSelectedElement)) {
+ super.handleElementSelection(part, selectedElement, contributeToContext);
+ }
+ }
+
+ IModelElement checkedElement = checkIfAcceptedAndPromoteIfNecessary(selectedElement);
+ if (checkedElement == null) {
+ return;
+ } else {
+ selectedElement = checkedElement;
+ }
+ }
+ }
+ if (selectedElement != null)
+ lastSelectedElement = selectedElement;
+ } catch (ModelException e) {
+ // ignore, fine to fail to resolve an element if the model is not up-to-date
+ } catch (Throwable t) {
+ MylynStatusHandler.log(t, "Failed to update model based on selection.");
+ }
+ }
+
+ /**
+ * @return null for elements that aren't modeled
+ */
+ protected IModelElement checkIfAcceptedAndPromoteIfNecessary(IModelElement element) {
+ // if (element instanceof IPackageDeclaration) return null;
+// if (element instanceof IImportContainer) {
+// return element.getParent();
+// } else if (element instanceof IImportDeclaration) {
+// return element.getParent().getParent();
+// } else {
+ return element;
+ //}
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKStackTraceFileHyperlink.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKStackTraceFileHyperlink.java
new file mode 100644
index 0000000..7ef5af5
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKStackTraceFileHyperlink.java
@@ -0,0 +1,165 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+/**
+ * @author Rob Elves
+ */
+public class DLTKStackTraceFileHyperlink implements IHyperlink {
+
+ private IRegion region;
+
+ private String traceLine;
+
+ public DLTKStackTraceFileHyperlink(IRegion region, String traceLine) {
+ this.region = region;
+ this.traceLine = traceLine;
+ }
+
+ public IRegion getHyperlinkRegion() {
+ return region;
+ }
+
+ public String getHyperlinkText() {
+ // ignore
+ return null;
+ }
+
+ public String getTypeLabel() {
+ // ignore
+ return null;
+ }
+
+ public void open() {
+
+ int lineNumber;
+ try {
+
+ String typeName = getTypeName();
+ lineNumber = getLineNumber();
+
+ // documents start at 0
+ if (lineNumber > 0) {
+ lineNumber--;
+ }
+ Object sourceElement = getSourceElement(typeName);
+// if (sourceElement != null) {
+// IDebugModelPresentation presentation =De.getDefault().getModelPresentation();
+// IEditorInput editorInput = presentation.getEditorInput(sourceElement);
+// if (editorInput != null) {
+// String editorId = presentation.getEditorId(editorInput, sourceElement);
+// if (editorId != null) {
+// IEditorPart editorPart = JDIDebugUIPlugin.getActivePage().openEditor(editorInput, editorId);
+// if (editorPart instanceof ITextEditor && lineNumber >= 0) {
+// ITextEditor textEditor = (ITextEditor) editorPart;
+// IDocumentProvider provider = textEditor.getDocumentProvider();
+// provider.connect(editorInput);
+// IDocument document = provider.getDocument(editorInput);
+// try {
+// IRegion line = document.getLineInformation(lineNumber);
+// textEditor.selectAndReveal(line.getOffset(), line.getLength());
+// } catch (BadLocationException e1) {
+// MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow()
+// .getShell(), "Open Type", "Line not found in type.");
+// }
+// provider.disconnect(editorInput);
+// }
+// return;
+// }
+// }
+// }
+ // did not find source
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Type",
+ "Type could not be located.");
+ } catch (CoreException e1) {
+ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Open Type",
+ "Failed to open type.");
+ return;
+ }
+
+ }
+
+ // adapted from JavaStackTraceHyperlink
+ private Object getSourceElement(String typeName) throws CoreException {
+ Object result = null;
+ //result = OpenTypeAction.findTypeInWorkspace(typeName);
+ // }
+ return result;
+ }
+
+ // adapted from JavaStackTraceHyperlink
+ private String getTypeName() {
+ int start = traceLine.indexOf('(');
+ int end = traceLine.indexOf(':');
+ if (start >= 0 && end > start) {
+
+ // get File name (w/o .java)
+ String typeName = traceLine.substring(start + 1, end);
+ typeName = typeName.substring(0, typeName.indexOf("."));
+
+ String qualifier = traceLine.substring(0, start);
+ // remove the method name
+ start = qualifier.lastIndexOf('.');
+
+ if (start >= 0) {
+ // remove the class name
+ start = (qualifier.subSequence(0, start).toString()).lastIndexOf('.');
+ if (start == -1) {
+ start = 0; // default package
+ }
+ }
+
+ if (start >= 0) {
+ qualifier = qualifier.substring(0, start);
+ }
+
+ if (qualifier.length() > 0) {
+ typeName = qualifier + "." + typeName; //$NON-NLS-1$
+ }
+ return typeName.trim();
+ }
+
+ return "error"; // TODO: Complain
+ }
+
+ // adapted from JavaStackTraceHyperlink
+ private int getLineNumber() throws CoreException {
+ int index = traceLine.lastIndexOf(':');
+ if (index >= 0) {
+ String numText = traceLine.substring(index + 1);
+ index = numText.indexOf(')');
+ if (index >= 0) {
+ numText = numText.substring(0, index);
+ }
+ try {
+ return Integer.parseInt(numText);
+ } catch (NumberFormatException e) {
+ throw new CoreException(null);
+ }
+ }
+
+ throw new CoreException(null);
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKUiBridge.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKUiBridge.java
new file mode 100644
index 0000000..d0b28e3
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKUiBridge.java
@@ -0,0 +1,204 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Apr 6, 2005
+ */
+package org.eclipse.mylyn.internal.dltk.ui;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.internal.ui.actions.SelectionConverter;
+import org.eclipse.dltk.internal.ui.editor.EditorUtility;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.dltk.internal.ui.editor.ScriptOutlinePage;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.context.ui.AbstractContextUiBridge;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+import org.eclipse.mylyn.internal.dltk.MylynStatusHandler;
+import org.eclipse.mylyn.internal.resources.ui.ResourcesUiBridgePlugin;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
+
+public class DLTKUiBridge extends AbstractContextUiBridge {
+
+ private Field scriptOutlineField = null;
+
+ public DLTKUiBridge() {
+ try {
+ scriptOutlineField = ScriptOutlinePage.class
+ .getDeclaredField("fOutlineViewer");
+ scriptOutlineField.setAccessible(true);
+ } catch (Exception e) {
+ MylynStatusHandler.fail(e,
+ "could not get install Mylyn on Outline viewer", true);
+ }
+ }
+
+ public void open(IInteractionElement node) {
+ // get the element and open it in an editor
+ IModelElement modelElement = DLTKCore
+ .create(node.getHandleIdentifier());
+ if (modelElement == null || !modelElement.exists())
+ return;
+ try {
+ IEditorPart part = EditorUtility.openInEditor(modelElement);
+ EditorUtility.revealInEditor(part, modelElement);
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t, "Could not open editor for: " + node,
+ true);
+ }
+ }
+
+ // private boolean explorerLinked =
+ // PreferenceConstants.getPreferenceStore().getBoolean(
+ // PreferenceConstants.LINK_PACKAGES_TO_EDITOR);
+
+ // public void setContextCapturePaused(boolean paused) {
+ // PackageExplorerPart explorer =
+ // PackageExplorerPart.getFromActivePerspective();
+ // if (paused) {
+ // explorerLinked = PreferenceConstants.getPreferenceStore().getBoolean(
+ // PreferenceConstants.LINK_PACKAGES_TO_EDITOR);
+ // if (explorerLinked) { // causes delayed selection
+ // if (explorer != null)
+ // explorer.setLinkingEnabled(false);
+ // }
+ // } else {
+ // if (explorer != null)
+ // explorer.setLinkingEnabled(true);
+ // PreferenceConstants.getPreferenceStore().setValue(PreferenceConstants.
+ // LINK_PACKAGES_TO_EDITOR,
+ // explorerLinked);
+ // if (explorer != null) {
+ // explorer.setLinkingEnabled(explorerLinked);
+ // }
+ // }
+ // }
+
+ // @Override
+ public void restoreEditor(IInteractionElement document) {
+ IResource resource = ResourcesUiBridgePlugin.getDefault()
+ .getResourceForElement(document, false);
+ IWorkbenchPage activePage = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage();
+ if (activePage != null && resource instanceof IFile
+ && resource.exists()) {
+ try {
+ IDE.openEditor(activePage, (IFile) resource, false);
+ } catch (PartInitException e) {
+ MylynStatusHandler.fail(e, "failed to open editor for: "
+ + resource, false);
+ }
+ }
+ }
+
+ public void close(IInteractionElement node) {
+ try {
+ IWorkbenchPage page = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage();
+ if (page != null) {
+ IEditorReference[] references = page.getEditorReferences();
+ for (int i = 0; i < references.length; i++) {
+ IEditorPart part = references[i].getEditor(false);
+ if (part != null && part instanceof ScriptEditor) {
+ ScriptEditor editor = (ScriptEditor) part;
+ Object adapter = editor.getEditorInput().getAdapter(
+ IModelElement.class);
+ if (adapter instanceof IModelElement
+ && node.getHandleIdentifier().equals(
+ ((IModelElement) adapter)
+ .getHandleIdentifier())) {
+ editor.close(true);
+ }
+ }
+ }
+ }
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t, "Could not auto close editor.", false);
+ }
+ }
+
+ public boolean acceptsEditor(IEditorPart editorPart) {
+ return editorPart instanceof ScriptEditor;
+ }
+
+ public IInteractionElement getElement(IEditorInput input) {
+ Object adapter = input.getAdapter(IModelElement.class);
+ if (adapter instanceof IModelElement) {
+ IModelElement modelElement = (IModelElement) adapter;
+ String handle = ContextCorePlugin.getDefault().getStructureBridge(
+ modelElement).getHandleIdentifier(modelElement);
+ return ContextCorePlugin.getContextManager().getElement(handle);
+ } else {
+ return null;
+ }
+ }
+
+ public List getContentOutlineViewers(IEditorPart editorPart) {
+ if (editorPart == null || scriptOutlineField == null)
+ return null;
+ List viewers = new ArrayList();
+ Object out = editorPart.getAdapter(IContentOutlinePage.class);
+ if (out instanceof ScriptOutlinePage) {
+ ScriptOutlinePage page = (ScriptOutlinePage) out;
+ if (page != null && page.getControl() != null) {
+ try {
+ viewers.add((TreeViewer) scriptOutlineField.get(page));
+ } catch (Exception e) {
+ MylynStatusHandler.log(e, "could not get outline viewer");
+ }
+ }
+ }
+ return viewers;
+ }
+
+ public Object getObjectForTextSelection(TextSelection selection,
+ IEditorPart editor) {
+ if (editor instanceof ScriptEditor) {
+ TextSelection textSelection = selection;
+ try {
+ if (selection != null) {
+ return SelectionConverter.resolveEnclosingElement(
+ (ScriptEditor) editor, textSelection);
+ } else {
+ Object element = ((ScriptEditor) editor).getEditorInput()
+ .getAdapter(IModelElement.class);
+ if (element instanceof IModelElement)
+ return element;
+ }
+ } catch (ModelException e) {
+ // ignore
+ }
+ }
+ return null;
+ }
+
+ public String getContentType() {
+ return DLTKStructureBridge.CONTENT_TYPE;
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKUiUtil.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKUiUtil.java
new file mode 100644
index 0000000..1fb2a5d
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/DLTKUiUtil.java
@@ -0,0 +1,166 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.dltk.core.DLTKContentTypeManager;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.DLTKLanguageManager;
+import org.eclipse.dltk.core.IDLTKLanguageToolkit;
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IScriptProject;
+import org.eclipse.dltk.core.ISourceModule;
+import org.eclipse.dltk.core.IType;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.dltk.ui.PreferenceConstants;
+import org.eclipse.dltk.ui.ScriptElementImageDescriptor;
+import org.eclipse.dltk.ui.util.ExceptionHandler;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.mylyn.internal.dltk.MylynStatusHandler;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
+import org.eclipse.ui.IFileEditorInput;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.texteditor.AbstractTextEditor;
+import org.eclipse.ui.views.markers.internal.ConcreteMarker;
+
+public class DLTKUiUtil {
+
+ private static final Point SMALL_SIZE = new Point(16, 16);
+
+ private static final String SEPARATOR_CODEASSIST = "\0"; //$NON-NLS-1$
+
+ public static void installContentAssist(IPreferenceStore scriptPrefs,
+ boolean mylynContentAssist) {
+ String oldValue = scriptPrefs
+ .getString(PreferenceConstants.CODEASSIST_EXCLUDED_CATEGORIES);
+ StringTokenizer tokenizer = new StringTokenizer(oldValue,
+ SEPARATOR_CODEASSIST);
+ Set disabledIds = new HashSet();
+ while (tokenizer.hasMoreTokens()) {
+ disabledIds.add((String) tokenizer.nextElement());
+ }
+ String newValue = "";
+ // for (String id : disabledIds) {
+ for (Iterator it = disabledIds.iterator(); it.hasNext();) {
+ String id = (String) it.next();
+ newValue += id + SEPARATOR_CODEASSIST;
+ }
+ scriptPrefs.setValue(
+ PreferenceConstants.CODEASSIST_EXCLUDED_CATEGORIES, newValue);
+ }
+
+ public static ImageDescriptor decorate(ImageDescriptor base, int decorations) {
+ ImageDescriptor imageDescriptor = new ScriptElementImageDescriptor(
+ base, decorations, SMALL_SIZE);
+ return imageDescriptor;
+ }
+
+ public static IModelElement getScriptElement(ConcreteMarker marker) {
+ if (marker == null)
+ return null;
+ try {
+ IResource res = marker.getResource();
+ ISourceModule cu = null;
+ if (res instanceof IFile) {
+ IFile file = (IFile) res;
+ IProject project = res.getProject();
+ IScriptProject scriptProject = DLTKCore.create(project);
+ if (scriptProject.exists()) {
+ IDLTKLanguageToolkit toolkit = DLTKLanguageManager
+ .getLanguageToolkit(scriptProject);
+ if (DLTKContentTypeManager.isValidResourceForContentType(
+ toolkit, res)) {
+ cu = DLTKCore.createSourceModuleFrom(file);
+ }
+ } else {
+ return null;
+ }
+ }
+ if (cu != null) {
+ IModelElement je = cu.getElementAt(marker.getMarker()
+ .getAttribute(IMarker.CHAR_START, 0));
+ return je;
+ } else {
+ return null;
+ }
+ } catch (ModelException ex) {
+ if (!ex.isDoesNotExist())
+ ExceptionHandler.handle(ex,
+ "error", "could not find java element"); //$NON-NLS-2$ //$NON-NLS-1$
+ return null;
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t, "Could not find element for: " + marker,
+ false);
+ return null;
+ }
+ }
+
+ /**
+ * Get the fully qualified name of a IMember
+ *
+ * @param m
+ * The IMember to get the fully qualified name for
+ * @return String representing the fully qualified name
+ */
+ public static String getFullyQualifiedName(IModelElement je) {
+ if (!(je instanceof IMember))
+ return null;
+
+ IMember m = (IMember) je;
+ if (m.getDeclaringType() == null)
+ return ((IType) m).getFullyQualifiedName();
+ else
+ return m.getDeclaringType().getFullyQualifiedName() + "."
+ + m.getElementName();
+ }
+
+ public static void closeActiveEditors(boolean javaOnly) {
+ // for (IWorkbenchWindow workbenchWindow :
+ // PlatformUI.getWorkbench().getWorkbenchWindows()) {
+ for (int j = 0; j < PlatformUI.getWorkbench().getWorkbenchWindows().length; j++) {
+ IWorkbenchWindow workbenchWindow = PlatformUI.getWorkbench()
+ .getWorkbenchWindows()[j];
+ IWorkbenchPage page = workbenchWindow.getActivePage();
+ if (page != null) {
+ IEditorReference[] references = page.getEditorReferences();
+ for (int i = 0; i < references.length; i++) {
+ IEditorPart part = references[i].getEditor(false);
+ if (part != null) {
+ if (javaOnly
+ && part.getEditorInput() instanceof IFileEditorInput
+ && part instanceof ScriptEditor) {
+ ScriptEditor editor = (ScriptEditor) part;
+ editor.close(true);
+ } else if (part instanceof ScriptEditor) {
+ ((AbstractTextEditor) part).close(true);
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/LandmarkMarkerManager.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/LandmarkMarkerManager.java
new file mode 100644
index 0000000..d121716
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/LandmarkMarkerManager.java
@@ -0,0 +1,199 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Feb 16, 2005
+ */
+package org.eclipse.mylyn.internal.dltk.ui;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IWorkspaceRunnable;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.ISourceRange;
+import org.eclipse.dltk.core.ISourceReference;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.context.core.AbstractContextListener;
+import org.eclipse.mylyn.context.core.IInteractionContext;
+//import org.eclipse.mylyn.context.core.IInteractionContextListener;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+import org.eclipse.mylyn.internal.dltk.MylynStatusHandler;
+
+
+public class LandmarkMarkerManager /*implements IInteractionContextListener*/extends AbstractContextListener {
+
+
+ private static final String MARKER_ID_LANDMARK = "org.eclipse.mylyn.ui.landmark";
+ private Map markerMap = new HashMap();
+
+ public LandmarkMarkerManager() {
+ super();
+ }
+
+ public void contextActivated(IInteractionContext taskscape) {
+ modelUpdated();
+ }
+
+ public void contextDeactivated(IInteractionContext taskscape) {
+ modelUpdated();
+ }
+
+ private void modelUpdated() {
+ try {
+ //for (IInteractionElement node : markerMap.keySet()) {
+ for (Iterator it = markerMap.keySet().iterator(); it.hasNext();) {
+ IInteractionElement node = (IInteractionElement) it.next();
+ landmarkRemoved(node);
+ }
+ markerMap.clear();
+ //for (IInteractionElement node : ContextCorePlugin.getContextManager().getActiveLandmarks()) {
+ for(Iterator it = ContextCorePlugin.getContextManager().getActiveLandmarks().iterator(); it.hasNext();) {
+ IInteractionElement node = (IInteractionElement) it.next();
+ landmarkAdded(node);
+ }
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t, "Could not update landmark markers", false);
+ }
+ }
+
+ public void interestChanged(List nodes) {
+ // don't care when the interest changes
+// // TBR
+// for (IInteractionElement el : nodes)
+// {
+// landmarkAdded(el);
+// modelUpdated();
+// }
+
+ }
+
+ public void landmarkAdded(final IInteractionElement node) {
+ if (node == null || node.getContentType() == null)
+ return;
+ if (node.getContentType().equals(DLTKStructureBridge.CONTENT_TYPE)) {
+ final IModelElement element = DLTKCore.create(node.getHandleIdentifier());
+ if (!element.exists())
+ return;
+ if (element instanceof IMember) {
+ try {
+ final ISourceRange range = ((IMember) element).getNameRange();
+ final IResource resource = element.getUnderlyingResource();
+ if (resource instanceof IFile) {
+ IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+ public void run(IProgressMonitor monitor) throws CoreException {
+ IMarker marker = resource.createMarker(MARKER_ID_LANDMARK);
+ if (marker != null && range != null) {
+ marker.setAttribute(IMarker.CHAR_START, range.getOffset());
+ marker.setAttribute(IMarker.CHAR_END, range.getOffset() + range.getLength());
+ marker.setAttribute(IMarker.MESSAGE, "Mylyn Landmark");
+ marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO);
+ markerMap.put(node, new LongWrapper(marker.getId()));
+ }
+ }
+ };
+ resource.getWorkspace().run(runnable, null);
+ }
+ } catch (ModelException e) {
+ MylynStatusHandler.fail(e, "couldn't update marker", false);
+ } catch (CoreException e) {
+ MylynStatusHandler.fail(e, "couldn't update marker", false);
+ }
+ }
+ }
+ }
+
+ public void landmarkRemoved(final IInteractionElement node) {
+ if (node == null)
+ return;
+ if (node.getContentType().equals(DLTKStructureBridge.CONTENT_TYPE)) {
+ IModelElement element = DLTKCore.create(node.getHandleIdentifier());
+ if (!element.exists())
+ return;
+ if (element.getAncestor(IModelElement.SOURCE_MODULE) != null // stuff
+ // from
+ // .class
+ // files
+ && element instanceof ISourceReference) {
+ try {
+ final IResource resource = element.getUnderlyingResource();
+ IWorkspaceRunnable runnable = new IWorkspaceRunnable() {
+ public void run(IProgressMonitor monitor) throws CoreException {
+ if (resource != null) {
+ try {
+ if (markerMap.containsKey(node)) {
+ long id = ((LongWrapper)(markerMap.get(node))).value();
+ IMarker marker = resource.getMarker(id);
+ if (marker != null)
+ marker.delete();
+ }
+ } catch (NullPointerException e) {
+ MylynStatusHandler.log(e, "could not update markers");
+ }
+ }
+ }
+ };
+ resource.getWorkspace().run(runnable, null);
+ } catch (ModelException e) {
+ // ignore the Java Model errors
+// MylarStatusHandler.fail(e, "couldn't update landmark marker", false);
+ } catch (CoreException e) {
+ MylynStatusHandler.fail(e, "couldn't update landmark marker", false);
+ }
+ }
+ }
+ }
+
+ public void relationsChanged(IInteractionElement node) {
+ // don't care when the relationships changed
+ }
+
+/* public void presentationSettingsChanging(UpdateKind kind) {
+ // don't care when there is a presentations setting change
+ }
+
+ public void presentationSettingsChanged(UpdateKind kind) {
+ // don't care when there is a presentation setting change
+ }
+*/
+ public void elementDeleted(IInteractionElement node) {
+ // don't care when a node is deleted
+ }
+
+ public void contextCleared(IInteractionContext arg0) {
+ // ignore
+ }
+
+ private class LongWrapper {
+ private long val = 0;
+
+ public LongWrapper(long v)
+ {
+ val = v;
+ }
+
+ public long value()
+ {
+ return val;
+ }
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FilterMembersAction.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FilterMembersAction.java
new file mode 100644
index 0000000..1dd4e8d
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FilterMembersAction.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui.actions;
+
+import org.eclipse.dltk.internal.ui.scriptview.ScriptExplorerPart;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.mylyn.internal.dltk.MylynDLTKPlugin;
+import org.eclipse.mylyn.internal.dltk.ui.DLTKDeclarationsFilter;
+import org.eclipse.ui.IViewActionDelegate;
+import org.eclipse.ui.IViewPart;
+
+public class FilterMembersAction extends Action implements IViewActionDelegate {
+
+ public static final String PREF_ID = "org.eclipse.dltk.mylyn.ui.explorer.filter.members";
+
+ public FilterMembersAction() {
+ super();
+ // setChecked(true);
+ // try {
+ // boolean checked=
+ //ContextCorePlugin.getDefault().getPreferenceStore().getBoolean(PREF_ID
+ // );
+ // valueChanged(true, true);
+ // } catch (Exception e) {
+ //
+ // }
+ }
+
+ public void run(IAction action) {
+ valueChanged(isChecked(), true);
+
+ }
+
+ private void valueChanged(final boolean on, boolean store) {
+ if (store) {
+ MylynDLTKPlugin.getDefault().getPreferenceStore().setValue(PREF_ID,
+ on);
+ }
+
+ setChecked(true);
+ ScriptExplorerPart packageExplorer = ScriptExplorerPart
+ .getFromActivePerspective();
+ ViewerFilter existingFilter = null;
+ for (int i = 0; i < packageExplorer.getTreeViewer().getFilters().length; i++) {
+ ViewerFilter filter = packageExplorer.getTreeViewer().getFilters()[i];
+ if (filter instanceof DLTKDeclarationsFilter)
+ existingFilter = filter;
+ }
+ if (existingFilter != null) {
+ packageExplorer.getTreeViewer().removeFilter(existingFilter);
+ } else {
+ packageExplorer.getTreeViewer().addFilter(
+ new DLTKDeclarationsFilter());
+ }
+ }
+
+ public void init(IViewPart view) {
+ // don't need to do anything on init
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ // don't care when the selection changes
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FindReferencesInContextAction.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FindReferencesInContextAction.java
new file mode 100644
index 0000000..6960041
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FindReferencesInContextAction.java
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui.actions;
+
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.core.search.IDLTKSearchConstants;
+import org.eclipse.dltk.core.search.IDLTKSearchScope;
+import org.eclipse.dltk.internal.ui.actions.SelectionConverter;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.dltk.internal.ui.search.DLTKSearchQuery;
+import org.eclipse.dltk.internal.ui.search.DLTKSearchScopeFactory;
+import org.eclipse.dltk.ui.search.ElementQuerySpecification;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin;
+import org.eclipse.mylyn.internal.context.ui.ContextWorkingSetManager;
+import org.eclipse.search.ui.NewSearchUI;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.progress.IProgressService;
+
+/**
+ * @author Shawn Minto
+ */
+public class FindReferencesInContextAction extends Action implements IWorkbenchWindowActionDelegate {
+
+ public void run(IAction action) {
+ IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+ if (editor != null && editor instanceof ScriptEditor) {
+ IModelElement[] resolved;
+ try {
+ resolved = SelectionConverter.codeResolve((ScriptEditor) editor);
+ if (resolved != null && resolved.length == 1 && resolved[0] != null) {
+ IModelElement element = resolved[0];
+
+ ContextWorkingSetManager updater = ContextWorkingSetManager.getDefault();
+
+
+ if (updater != null && updater.getWorkingSet() != null) {
+ IDLTKSearchScope scope = DLTKSearchScopeFactory.getInstance().createSearchScope(
+ updater.getWorkingSet(), false,null);
+ DLTKSearchQuery query = new DLTKSearchQuery(new ElementQuerySpecification(element,
+ IDLTKSearchConstants.REFERENCES, scope, "Mylyn Current Task Context"));
+ if (query != null) {
+ NewSearchUI.activateSearchResultView();
+
+ if (query.canRunInBackground()) {
+ NewSearchUI.runQueryInBackground(query);
+ } else {
+ IProgressService progressService = PlatformUI.getWorkbench().getProgressService();
+ NewSearchUI.runQueryInForeground(progressService, query);
+ }
+ }
+ }
+ }
+ } catch (ModelException e) {
+ // ignore search if can't resolve
+ }
+
+ }
+
+ }
+
+ public void dispose() {
+ }
+
+ public void init(IWorkbenchWindow window) {
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FocusDebugViewAction.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FocusDebugViewAction.java
new file mode 100644
index 0000000..beb3315
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FocusDebugViewAction.java
@@ -0,0 +1,40 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui.actions;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.mylyn.context.ui.InterestFilter;
+import org.eclipse.mylyn.context.ui.AbstractFocusViewAction;
+import org.eclipse.ui.IViewPart;
+
+
+public class FocusDebugViewAction extends AbstractFocusViewAction {
+
+ public FocusDebugViewAction() {
+ super(new InterestFilter(), true, true, false);
+ }
+
+
+ public List getViewers() {
+ List viewers = new ArrayList();
+ IViewPart view = super.getPartForAction();
+// if (view instanceof LaunchView) {
+// LaunchView launchView = (LaunchView)view;
+// viewers.add((StructuredViewer)launchView.getViewer());
+// }
+ return viewers;
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FocusScriptExplorerAction.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FocusScriptExplorerAction.java
new file mode 100644
index 0000000..eec23c8
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/FocusScriptExplorerAction.java
@@ -0,0 +1,101 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui.actions;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.internal.ui.actions.SelectionConverter;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.dltk.internal.ui.scriptview.ScriptExplorerPart;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.TextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.StructuredViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.mylyn.context.ui.AbstractAutoFocusViewAction;
+import org.eclipse.mylyn.context.ui.InterestFilter;
+import org.eclipse.mylyn.internal.dltk.ui.DLTKDeclarationsFilter;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IViewPart;
+
+public class FocusScriptExplorerAction extends AbstractAutoFocusViewAction {
+
+ public FocusScriptExplorerAction() {
+ super(new InterestFilter(), true, true, true);
+ }
+
+ protected ISelection resolveSelection(IEditorPart part,
+ ITextSelection changedSelection, StructuredViewer viewer)
+ throws CoreException {
+ Object elementToSelect = null;
+ if (changedSelection instanceof TextSelection
+ && part instanceof ScriptEditor) {
+ TextSelection textSelection = (TextSelection) changedSelection;
+ IModelElement modelElement = SelectionConverter
+ .resolveEnclosingElement((ScriptEditor) part, textSelection);
+ if (modelElement != null) {
+ elementToSelect = modelElement;
+ }
+ }
+
+ if (elementToSelect != null) {
+ StructuredSelection currentSelection = (StructuredSelection) viewer
+ .getSelection();
+ if (currentSelection.size() <= 1) {
+ // for (ViewerFilter filter :
+ // Arrays.asList(viewer.getFilters())) {
+ for (ListIterator it = Arrays.asList(viewer.getFilters())
+ .listIterator(); it.hasNext();) {
+ ViewerFilter filter = (ViewerFilter) it.next();
+ if (filter instanceof DLTKDeclarationsFilter
+ && elementToSelect instanceof IMember) {
+ elementToSelect = ((IMember) elementToSelect)
+ .getSourceModule();
+ }
+ }
+ }
+ }
+ return new StructuredSelection(elementToSelect);
+ }
+
+ protected void setDefaultLinkingEnabled(boolean on) {
+ IViewPart part = super.getPartForAction();
+ if (part instanceof ScriptExplorerPart) {
+ ((ScriptExplorerPart) part).setLinkingEnabled(on);
+ }
+ }
+
+ protected boolean isDefaultLinkingEnabled() {
+ IViewPart part = super.getPartForAction();
+ if (part instanceof ScriptExplorerPart) {
+ return ((ScriptExplorerPart) part).isLinkingEnabled();
+ }
+ return false;
+ }
+
+ public List getViewers() {
+ List viewers = new ArrayList();
+ // TODO: get from super
+ IViewPart part = super.getPartForAction();
+ if (part instanceof ScriptExplorerPart) {
+ viewers.add(((ScriptExplorerPart) part).getTreeViewer());
+ }
+ return viewers;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/ToggleActiveFoldingAction.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/ToggleActiveFoldingAction.java
new file mode 100644
index 0000000..9b4b93e
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/actions/ToggleActiveFoldingAction.java
@@ -0,0 +1,99 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on Jul 29, 2004
+ */
+package org.eclipse.mylyn.internal.dltk.ui.actions;
+
+import org.eclipse.dltk.core.DLTKCore;
+import org.eclipse.dltk.ui.PreferenceConstants;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin;
+import org.eclipse.mylyn.internal.context.ui.ContextUiImages;
+//import org.eclipse.mylyn.internal.context.ui.ContextUiPrefContstants;
+import org.eclipse.mylyn.internal.context.ui.IContextUiPreferenceContstants;
+import org.eclipse.mylyn.internal.dltk.MylynDLTKPrefConstants;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.ui.IActionDelegate2;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+
+/**
+ * @author Mik Kersten
+ *
+ * TODO: move to UI
+ */
+public class ToggleActiveFoldingAction extends Action implements IWorkbenchWindowActionDelegate, IActionDelegate2 {
+
+ private static ToggleActiveFoldingAction INSTANCE;
+
+ private IAction parentAction = null;
+
+ public ToggleActiveFoldingAction() {
+ super();
+ INSTANCE = this;
+ setText("Active folding");
+ //setImageDescriptor(ContextUiImages.INTEREST_FOLDING);
+ }
+
+ public static void toggleFolding(boolean on) {
+ if (INSTANCE.parentAction != null) {
+ INSTANCE.valueChanged(INSTANCE.parentAction, on);
+ }
+ }
+
+ public void run(IAction action) {
+ valueChanged(action, action.isChecked());
+ }
+
+ private void valueChanged(IAction action, final boolean on) {
+ try {
+ if (on) {
+ //DLTk.getDefault().getPreferenceStore().setValue(PreferenceConstants.EDITOR_FOLDING_ENABLED, true);
+
+ DLTKCore.getPlugin().getPluginPreferences().setValue(PreferenceConstants.EDITOR_FOLDING_ENABLED, true);
+ }
+ action.setChecked(on);
+ ContextUiPlugin.getDefault().getPreferenceStore().setValue(MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED, on);
+ } catch (Throwable t) {
+ //MylarStatusHandler.fail(t, "Could not enable editor management", true);
+ }
+ }
+
+ public void setActiveEditor(IAction action, IEditorPart targetEditor) {
+ // don't care when the active editor changes
+ }
+
+ public void selectionChanged(IAction action, ISelection selection) {
+ // don't care when the selection changes
+ }
+
+ public void init(IAction action) {
+ this.parentAction = action;
+ valueChanged(action, ContextUiPlugin.getDefault().getPreferenceStore().getBoolean(
+ MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED));
+ }
+
+ public void dispose() {
+ // don't need to do anything
+
+ }
+
+ public void runWithEvent(IAction action, Event event) {
+ run(action);
+ }
+
+ public void init(IWorkbenchWindow window) {
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/AbstractEditorHyperlinkDetector.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/AbstractEditorHyperlinkDetector.java
new file mode 100644
index 0000000..c009876
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/AbstractEditorHyperlinkDetector.java
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.internal.dltk.ui.editor;
+
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.hyperlink.IHyperlink;
+import org.eclipse.jface.text.hyperlink.IHyperlinkDetector;
+import org.eclipse.ui.texteditor.ITextEditor;
+
+
+
+public abstract class AbstractEditorHyperlinkDetector implements IHyperlinkDetector {
+
+ private ITextEditor editor;
+
+ public abstract IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region,
+ boolean canShowMultipleHyperlinks);
+
+ public ITextEditor getEditor() {
+ return editor;
+ }
+
+ public void setEditor(ITextEditor editor) {
+ this.editor = editor;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/ActiveFoldingListener.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/ActiveFoldingListener.java
new file mode 100644
index 0000000..8a7b484
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/ActiveFoldingListener.java
@@ -0,0 +1,239 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+/*
+ * Created on May 16, 2005
+ */
+package org.eclipse.mylyn.internal.dltk.ui.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.eclipse.core.runtime.Preferences.IPropertyChangeListener;
+import org.eclipse.core.runtime.Preferences.PropertyChangeEvent;
+import org.eclipse.dltk.core.IMember;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.core.IParent;
+import org.eclipse.dltk.core.ISourceModule;
+import org.eclipse.dltk.core.ModelException;
+import org.eclipse.dltk.internal.ui.editor.ScriptEditor;
+import org.eclipse.dltk.ui.DLTKUIPlugin;
+import org.eclipse.dltk.ui.text.folding.IFoldingStructureProviderExtension;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.context.core.IInteractionContext;
+//import org.eclipse.mylyn.internal.context.core.IInteractionContextListener;
+import org.eclipse.mylyn.context.core.AbstractContextListener;
+//import org.eclipse.mylyn.context.core.IInteractionContextListener2;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin;
+import org.eclipse.mylyn.internal.context.core.InteractionContext;
+//import org.eclipse.mylyn.internal.context.ui.ContextUiPrefContstants;
+import org.eclipse.mylyn.internal.dltk.DLTKStructureBridge;
+import org.eclipse.mylyn.internal.dltk.MylynDLTKPrefConstants;
+import org.eclipse.mylyn.internal.dltk.MylynStatusHandler;
+import org.eclipse.dltk.core.IModelElement;
+
+
+public class ActiveFoldingListener /*implements IInteractionContextListener*/extends AbstractContextListener {
+
+ private final ScriptEditor editor;
+
+ private IFoldingStructureProviderExtension updater;
+
+ private static DLTKStructureBridge bridge = (DLTKStructureBridge) ContextCorePlugin.getDefault().getStructureBridge(
+ DLTKStructureBridge.CONTENT_TYPE);
+
+ private boolean enabled = false;
+
+ private IPropertyChangeListener PREFERENCE_LISTENER = new IPropertyChangeListener() {
+ public void propertyChange(PropertyChangeEvent event) {
+ if (event.getProperty().equals(MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED)) {
+ if (event.getNewValue().equals(Boolean.TRUE.toString())) {
+ enabled = true;
+ } else {
+ enabled = false;
+ }
+ updateFolding();
+ }
+ }
+ };
+
+ public ActiveFoldingListener(ScriptEditor editor) {
+ this.editor = editor;
+ ContextCorePlugin.getContextManager().addListener(this);
+ ContextUiPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(PREFERENCE_LISTENER);
+
+ enabled = ContextUiPlugin.getDefault().getPreferenceStore().getBoolean(MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED);
+ try {
+ Object adapter = editor.getAdapter(IFoldingStructureProviderExtension.class);
+ if (adapter instanceof IFoldingStructureProviderExtension) {
+ updater = (IFoldingStructureProviderExtension) adapter;
+ } else {
+ MylynStatusHandler.log("Could not install active folding on provider: " + adapter + ", must extend "
+ + IFoldingStructureProviderExtension.class.getName(), this);
+ }
+ } catch (Exception e) {
+ MylynStatusHandler.fail(e, "could not install auto folding, reflection denied", false);
+ }
+ updateFolding();
+ }
+
+ public void dispose() {
+ ContextCorePlugin.getContextManager().removeListener(this);
+ ContextUiPlugin.getDefault().getPluginPreferences().removePropertyChangeListener(PREFERENCE_LISTENER);
+ }
+
+ public static void resetProjection(ScriptEditor dltk) {
+ // XXX: ignore for 3.2, leave for 3.1?
+ }
+
+ public void updateFolding() {
+ if (!enabled || !ContextCorePlugin.getContextManager().isContextActive()) {
+ editor.resetProjection();
+ } else if (editor.getEditorInput() == null) {
+ return;
+ } else {
+ try {
+ List toExpand = new ArrayList();
+ List toCollapse = new ArrayList();
+ IModelElement element = DLTKUIPlugin.getEditorInputModelElement(editor.getEditorInput());
+ if (element instanceof ISourceModule) {
+ ISourceModule compilationUnit = (ISourceModule) element;
+ List allChildren = getAllChildren(compilationUnit);
+ //for (IModelElement child : allChildren) {
+ for (ListIterator it = allChildren.listIterator(); it.hasNext();) {
+ IModelElement child = (IModelElement) it.next();
+ IInteractionElement mylarElement = ContextCorePlugin.getContextManager().getElement(
+ bridge.getHandleIdentifier(child));
+ if (mylarElement != null && mylarElement.getInterest().isInteresting()) {
+ toExpand.add(child);
+ } else {
+ toCollapse.add(child);
+ }
+ }
+ }
+ if (updater != null) {
+ updater.collapseMembers();
+ updater.expandElements((IModelElement[]) toExpand.toArray(new IModelElement[toExpand.size()]));
+ }
+ } catch (Exception e) {
+ MylynStatusHandler.fail(e, "couldn't update folding", false);
+ }
+ }
+ }
+
+ private static List getAllChildren(IParent parentElement) {
+ List allChildren = new ArrayList();
+ try {
+ //for (IModelElement child : parentElement.getChildren()) {
+ for (int i = 0; i < parentElement.getChildren().length; i++) {
+ IModelElement child = parentElement.getChildren()[i];
+ allChildren.add(child);
+ if (child instanceof IParent) {
+ allChildren.addAll(getAllChildren((IParent) child));
+ }
+ }
+ } catch (ModelException e) {
+ // ignore failures
+ }
+ return allChildren;
+ }
+
+ public void interestChanged(List elements) {
+ //for (IInteractionElement element : elements) {
+ for (ListIterator it = elements.listIterator(); it.hasNext();)
+ {
+ IInteractionElement element = (IInteractionElement) it.next();
+ if (updater == null || !enabled) {
+ return;
+ } else {
+ Object object = bridge.getObjectForHandle(element.getHandleIdentifier());
+ if (object instanceof IMember) {
+ IMember member = (IMember) object;
+ if (element.getInterest().isInteresting()) {
+ updater.expandElements(new IModelElement[] { member });
+ // expand the next 2 children down (e.g. anonymous types)
+ try {
+ IModelElement[] children = ((IParent)member).getChildren();
+ if (children.length == 1) {
+ updater.expandElements(new IModelElement[] { children[0] });
+ if (children[0] instanceof IParent) {
+ IModelElement[] childsChildren = ((IParent)children[0]).getChildren();
+ if (childsChildren.length == 1) {
+ updater.expandElements(new IModelElement[] { childsChildren[0] });
+ }
+ }
+ }
+ } catch (ModelException e) {
+ // ignore
+ }
+ } else {
+ updater.collapseElements(new IModelElement[] { member });
+ }
+ }
+ }
+ }
+ }
+
+ public void contextActivated(IInteractionContext context) {
+ if (ContextUiPlugin.getDefault().getPreferenceStore().getBoolean(MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED)) {
+ updateFolding();
+ }
+ }
+
+ public void contextDeactivated(IInteractionContext context) {
+ if (ContextUiPlugin.getDefault().getPreferenceStore().getBoolean(MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED)) {
+ updateFolding();
+ }
+ }
+
+// public void presentationSettingsChanging(IInteractionContextListener.UpdateKind kind) {
+// // ignore
+// }
+//
+// public void presentationSettingsChanged(IInteractionContextListener.UpdateKind kind) {
+//
+// updateFolding();
+// }
+
+
+// public void presentationSettingsChanging(IInteractionContextListener kind) {
+// // ignore
+// }
+
+// public void presentationSettingsChanged(IInteractionContextListener kind) {
+//
+// updateFolding();
+// }
+
+
+
+ public void landmarkAdded(IInteractionElement element) {
+ // ignore
+ }
+
+ public void landmarkRemoved(IInteractionElement element) {
+ // ignore
+ }
+
+ public void relationsChanged(IInteractionElement node) {
+ // ignore
+ }
+
+ public void elementDeleted(IInteractionElement node) {
+ // ignore
+ }
+
+ public void contextCleared(IInteractionContext arg0) {
+ // ignore
+
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/AutoFoldPreferenceBlock.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/AutoFoldPreferenceBlock.java
new file mode 100644
index 0000000..96fd9b9
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/AutoFoldPreferenceBlock.java
@@ -0,0 +1,113 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui.editor;
+
+import org.eclipse.dltk.ui.text.folding.IFoldingPreferenceBlock;
+import org.eclipse.mylyn.internal.dltk.MylynStatusHandler;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+
+public class AutoFoldPreferenceBlock implements IFoldingPreferenceBlock {
+
+ // XXX never read
+ // private IPreferenceStore preferences;
+ // private Map checkBoxes = new HashMap();
+ // private Text minimumLines;
+
+ public AutoFoldPreferenceBlock() {
+ // preferences = ContextCorePlugin.getDefault().getPreferenceStore(); XXX
+ // never used
+ }
+
+ public Control createControl(Composite parent) {
+ try {
+ Composite inner = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(1, true);
+ layout.verticalSpacing = 3;
+ layout.marginWidth = 0;
+ inner.setLayout(layout);
+ Label label = new Label(inner, SWT.LEFT);
+ label.setText("Elements of low interest will be automatically folded.");
+
+
+ return inner;
+ } catch (Throwable t) {
+ MylynStatusHandler.fail(t, "Could not create folding preferences page", true);
+ }
+ return null;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jdt.ui.text.folding.IJavaFoldingPreferenceBlock#initialize()
+ */
+ public void initialize() {
+
+ // Iterator it= checkBoxes.keySet().iterator();
+ // while (it.hasNext()) {
+ // Button b= (Button) it.next();
+ // String key= (String) checkBoxes.get(b);
+ // b.setSelection(preferences.getBoolean(key));
+ // }
+
+ // minimumLines.setText(String.valueOf(preferences.getInt(FoldingKeys.MINIMUM_SIZE)));
+
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jdt.ui.text.folding.IJavaFoldingPreferenceBlock#performOk()
+ */
+ public void performOk() {
+ // Iterator it = checkBoxes.keySet().iterator();
+ // while(it.hasNext()) {
+ // Button b = (Button) it.next();
+ // String key = (String) checkBoxes.get(b);
+ // preferences.setValue(key, b.getSelection());
+ // }
+ //
+ // int minLines = Integer.parseInt(minimumLines.getText());
+ // preferences.setValue(FoldingKeys.MINIMUM_SIZE, minLines);
+
+ }
+
+ // private Button addCheckBox(Composite parent, String label, String key,
+ // int indentation) {
+ // Button checkBox= new Button(parent, SWT.CHECK);
+ // checkBox.setText(label);
+ //
+ // GridData gd= new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
+ // gd.horizontalIndent= indentation;
+ // gd.horizontalSpan= 1;
+ // gd.grabExcessVerticalSpace= false;
+ // checkBox.setLayoutData(gd);
+ //
+ // checkBoxes.put(checkBox, key);
+ //
+ // return checkBox;
+ // }
+
+ public void performDefaults() {
+ initialize();
+ }
+
+ public void dispose() {
+ // don't care if we are disposed
+
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKNoTypeProposalComputer.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKNoTypeProposalComputer.java
new file mode 100644
index 0000000..754cb16
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKNoTypeProposalComputer.java
@@ -0,0 +1,41 @@
+package org.eclipse.mylyn.internal.dltk.ui.editor;
+
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.dltk.ui.text.completion.ScriptCompletionProposalComputer;
+import org.eclipse.dltk.ui.text.completion.ScriptContentAssistInvocationContext;
+import org.eclipse.dltk.ui.text.completion.ContentAssistInvocationContext;
+import org.eclipse.jface.text.templates.TemplateCompletionProcessor;
+
+public class FocusedDLTKNoTypeProposalComputer extends ScriptCompletionProposalComputer {
+
+ public FocusedDLTKNoTypeProposalComputer() {
+ FocusedDLTKProposalProcessor.getDefault().addMonitoredComputer(this);
+ }
+
+// @Override
+// protected CompletionProposalCollector createCollector(JavaContentAssistInvocationContext context) {
+// return super.createCollector(context);
+// }
+
+ public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+ List proposals = super.computeCompletionProposals(context, monitor);
+ return FocusedDLTKProposalProcessor.getDefault().projectInterestModel(this, proposals);
+ }
+
+ protected TemplateCompletionProcessor createTemplateProposalComputer(
+ ScriptContentAssistInvocationContext arg0) {
+ // TODO Auto-generated method stub
+ return null;
+}
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKProposalProcessor.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKProposalProcessor.java
new file mode 100644
index 0000000..8195210
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKProposalProcessor.java
@@ -0,0 +1,169 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui.editor;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.dltk.core.IModelElement;
+import org.eclipse.dltk.ui.text.completion.AbstractScriptCompletionProposal;
+import org.eclipse.dltk.ui.text.completion.IScriptCompletionProposalComputer;
+import org.eclipse.dltk.ui.text.completion.ScriptCompletionProposal;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.context.core.IInteractionElement;
+import org.eclipse.mylyn.internal.context.core.ContextCorePlugin;
+import org.eclipse.mylyn.internal.context.ui.ContextUiImages;
+import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin;
+
+/**
+ * TODO: parametrize relevance levels (requires JDT changes, bug 119063)
+ *
+ * @author Mik Kersten
+ */
+public class FocusedDLTKProposalProcessor {
+
+ static final int THRESHOLD_INTEREST = 10000;
+
+ private static final int THRESHOLD_IMPLICIT_INTEREST = THRESHOLD_INTEREST * 2;
+
+ private static final int RELEVANCE_IMPLICIT_INTEREST = 300;
+
+ private static final String IDENTIFIER_THIS = "this";
+
+ public static final String LABEL_SEPARATOR = " -------------------------------------------- ";
+
+ public static final FocusedProposalSeparator PROPOSAL_SEPARATOR = new FocusedProposalSeparator();
+
+ private List monitoredProposalComputers = new ArrayList();
+
+ private List alreadyComputedProposals = new ArrayList();
+
+ private List alreadyContainSeparator = new ArrayList();
+
+ private List containsSingleInterestingProposal = new ArrayList();
+
+ private static FocusedDLTKProposalProcessor INSTANCE = new FocusedDLTKProposalProcessor();
+
+ private FocusedDLTKProposalProcessor() {
+ }
+
+ public static FocusedDLTKProposalProcessor getDefault() {
+ return INSTANCE;
+ }
+
+ public void addMonitoredComputer(
+ IScriptCompletionProposalComputer proposalComputer) {
+ monitoredProposalComputers.add(proposalComputer);
+ }
+
+ public List projectInterestModel(
+ IScriptCompletionProposalComputer proposalComputer, List proposals) {
+ try {
+ if (!ContextCorePlugin.getContextManager().isContextActive()) {
+ return proposals;
+ } else {
+ boolean hasInterestingProposals = false;
+ // for (Object object : proposals) {
+ for (ListIterator it = proposals.listIterator(); it.hasNext();) {
+ Object object = it.next();
+ if (object instanceof AbstractScriptCompletionProposal) {
+ boolean foundInteresting = boostRelevanceWithInterest((AbstractScriptCompletionProposal) object);
+ if (!hasInterestingProposals && foundInteresting) {
+ hasInterestingProposals = true;
+ }
+ }
+ }
+
+ // NOTE: this annoying state needs to be maintainted to ensure
+ // the
+ // separator is added only once, and not added for single
+ // proposals
+ if (containsSingleInterestingProposal.size() > 0
+ && proposals.size() > 0) {
+ proposals
+ .add(FocusedDLTKProposalProcessor.PROPOSAL_SEPARATOR);
+ } else if (hasInterestingProposals
+ && alreadyContainSeparator.isEmpty()) {
+ if (proposals.size() == 1) {
+ containsSingleInterestingProposal.add(proposalComputer);
+ } else {
+ proposals
+ .add(FocusedDLTKProposalProcessor.PROPOSAL_SEPARATOR);
+ alreadyContainSeparator.add(proposalComputer);
+ }
+ }
+
+ alreadyComputedProposals.add(proposalComputer);
+ if (alreadyComputedProposals.size() == monitoredProposalComputers
+ .size()) {
+ alreadyComputedProposals.clear();
+ alreadyContainSeparator.clear();
+ containsSingleInterestingProposal.clear();
+ }
+
+ return proposals;
+ }
+ } catch (Throwable t) {
+ StatusHandler.log(new Status(IStatus.ERROR,
+ ContextUiPlugin.ID_PLUGIN,
+ "Failed to project interest onto propsals", t));
+ return proposals;
+ }
+ }
+
+ private boolean boostRelevanceWithInterest(
+ AbstractScriptCompletionProposal proposal) {
+ boolean hasInteresting = false;
+ IModelElement modelElement = proposal.getModelElement();
+ if (modelElement != null) {
+ IInteractionElement interactionElement = ContextCorePlugin
+ .getContextManager().getElement(
+ modelElement.getHandleIdentifier());
+ float interest = interactionElement.getInterest().getValue();
+ // if (interest >
+ // InteractionContextManager.getCommonContextScaling()
+ // .getInteresting()) {
+ if (interest > ContextCorePlugin.getDefault()
+ .getCommonContextScaling().getInteresting()) {
+ // TODO: losing precision here, only going to one decimal place
+ proposal.setRelevance(THRESHOLD_INTEREST
+ + (int) (interest * 10));
+ hasInteresting = true;
+ }
+ } else if (isImplicitlyInteresting(proposal)) {
+ proposal.setRelevance(THRESHOLD_IMPLICIT_INTEREST
+ + proposal.getRelevance());
+ hasInteresting = true;
+ }
+ return hasInteresting;
+ }
+
+ public boolean isImplicitlyInteresting(
+ AbstractScriptCompletionProposal proposal) {
+ return proposal.getRelevance() > RELEVANCE_IMPLICIT_INTEREST
+ && !IDENTIFIER_THIS.equals(proposal.getDisplayString());
+ }
+
+ static class FocusedProposalSeparator extends ScriptCompletionProposal {
+ public FocusedProposalSeparator() {
+ super("", 0, 0, ContextUiImages
+ .getImage(ContextUiImages.QUALIFY_NAMES), LABEL_SEPARATOR,
+ FocusedDLTKProposalProcessor.THRESHOLD_INTEREST);
+
+ }
+
+ protected boolean isSmartTrigger(char arg0) {
+ // TODO Auto-generated method stub
+ return false;
+ }
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKTypeProposalComputer.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKTypeProposalComputer.java
new file mode 100644
index 0000000..5e27ef8
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/editor/FocusedDLTKTypeProposalComputer.java
@@ -0,0 +1,41 @@
+package org.eclipse.mylyn.internal.dltk.ui.editor;
+
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *******************************************************************************/
+
+
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.dltk.ui.text.completion.ContentAssistInvocationContext;
+import org.eclipse.dltk.ui.text.completion.ScriptCompletionProposalCollector;
+import org.eclipse.dltk.ui.text.completion.ScriptCompletionProposalComputer;
+import org.eclipse.dltk.ui.text.completion.ScriptContentAssistInvocationContext;
+import org.eclipse.jface.text.templates.TemplateCompletionProcessor;
+
+
+public class FocusedDLTKTypeProposalComputer extends ScriptCompletionProposalComputer {
+
+ public FocusedDLTKTypeProposalComputer() {
+ FocusedDLTKProposalProcessor.getDefault().addMonitoredComputer(this);
+ }
+
+
+ public List computeCompletionProposals(ContentAssistInvocationContext context, IProgressMonitor monitor) {
+ List proposals = super.computeScriptCompletionProposals(context.getInvocationOffset(), (ScriptContentAssistInvocationContext) context, monitor);
+ return FocusedDLTKProposalProcessor.getDefault().projectInterestModel(this, proposals);
+ }
+
+
+ protected TemplateCompletionProcessor createTemplateProposalComputer(
+ ScriptContentAssistInvocationContext arg0) {
+ // TODO Auto-generated method stub
+ //return FocusedDLTKProposalProcessor.getDefault();
+ return null;
+ }
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/wizards/MylynPreferenceWizard.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/wizards/MylynPreferenceWizard.java
new file mode 100644
index 0000000..7665448
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/wizards/MylynPreferenceWizard.java
@@ -0,0 +1,130 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.mylyn.internal.dltk.ui.wizards;
+
+import org.eclipse.dltk.ui.DLTKUIPlugin;
+import org.eclipse.dltk.ui.PreferenceConstants;
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.mylyn.internal.context.ui.ContextUiPlugin;
+import org.eclipse.mylyn.internal.context.ui.TaskContextWorkingSetPage;
+import org.eclipse.mylyn.internal.dltk.MylynDLTKPlugin;
+import org.eclipse.mylyn.internal.dltk.MylynDLTKPrefConstants;
+import org.eclipse.mylyn.internal.dltk.ui.DLTKUiUtil;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.INewWizard;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkingSet;
+import org.eclipse.ui.IWorkingSetManager;
+import org.eclipse.ui.dialogs.IWorkingSetNewWizard;
+
+public class MylynPreferenceWizard extends Wizard implements INewWizard {
+
+ private MylynPreferenceWizardPage preferencePage;
+
+ public static final String MYLYN_FIRST_RUN = "org.eclipse.dltk.mylyn.ui.first.run";
+
+ private IPreferenceStore scriptPrefs = DLTKUIPlugin.getDefault()
+ .getPreferenceStore();
+
+ public void init() {
+ // setDefaultPageImageDescriptor(ContextUiImages.MYLYN);
+ setWindowTitle("Mylyn Recommended Preferences");
+ super.setDefaultPageImageDescriptor(MylynDLTKPlugin
+ .imageDescriptorFromPlugin(MylynDLTKPlugin.PLUGIN_ID,
+ "icons/wizban/banner-prefs.gif"));
+ preferencePage = new MylynPreferenceWizardPage(
+ "Automatic preference settings");
+ }
+
+ public MylynPreferenceWizard() {
+ super();
+ init();
+ }
+
+ public MylynPreferenceWizard(String htmlDocs) {
+ super();
+ init();
+ }
+
+ public boolean performFinish() {
+ setPreferences();
+ if (preferencePage.isOpenTaskList()) {
+ // TaskListView.openInActivePerspective();
+ }
+ return true;
+ }
+
+ private void setPreferences() {
+ boolean mylarContentAssist = preferencePage
+ .isMylynContentAssistDefault();
+ DLTKUiUtil.installContentAssist(scriptPrefs, mylarContentAssist);
+
+ if (preferencePage.isAutoFolding()) {
+ ContextUiPlugin.getDefault().getPreferenceStore().setValue(
+ MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED, true);
+ scriptPrefs.setValue(PreferenceConstants.EDITOR_FOLDING_ENABLED,
+ true);
+ // javaPrefs.setValue(PreferenceConstants.EDITOR_FOLDING_PROVIDER,
+ // DEFAULT_FOLDING_PROVIDER);
+ } else {
+ ContextUiPlugin.getDefault().getPreferenceStore().setValue(
+ MylynDLTKPrefConstants.ACTIVE_FOLDING_ENABLED, false);
+ }
+
+ if (preferencePage.closeEditors()) {
+ ContextUiPlugin.getDefault().getPreferenceStore().setValue(
+ MylynDLTKPrefConstants.AUTO_MANAGE_EDITORS, true);
+ } else {
+ ContextUiPlugin.getDefault().getPreferenceStore().setValue(
+ MylynDLTKPrefConstants.AUTO_MANAGE_EDITORS, false);
+ }
+
+ if (preferencePage.isCreateWorkingSet()) {
+ IWorkingSetManager workingSetManager = ContextUiPlugin.getDefault()
+ .getWorkbench().getWorkingSetManager();
+ IWorkingSetNewWizard wizard = workingSetManager
+ .createWorkingSetNewWizard(new String[] { "org.eclipse.mylyn.workingSetPage" });
+ if (wizard != null
+ && workingSetManager
+ .getWorkingSet(TaskContextWorkingSetPage.WORKING_SET_NAME) == null) {
+ WizardDialog dialog = new WizardDialog(Display.getCurrent()
+ .getActiveShell(), wizard);
+ dialog.create();
+ if (dialog.open() == Window.OK) {
+ IWorkingSet workingSet = wizard.getSelection();
+ if (workingSet != null) {
+ workingSetManager.addWorkingSet(workingSet);
+ }
+ }
+ }
+ } else {
+ IWorkingSetManager workingSetManager = ContextUiPlugin.getDefault()
+ .getWorkbench().getWorkingSetManager();
+ IWorkingSet workingSet = workingSetManager
+ .getWorkingSet(TaskContextWorkingSetPage.WORKING_SET_NAME);
+ if (workingSet != null) {
+ workingSetManager.removeWorkingSet(workingSet);
+ }
+ }
+ }
+
+ public void addPages() {
+ addPage(preferencePage);
+ }
+
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ }
+
+}
diff --git a/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/wizards/MylynPreferenceWizardPage.java b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/wizards/MylynPreferenceWizardPage.java
new file mode 100644
index 0000000..b9428f5
--- /dev/null
+++ b/mylyn/plugins/org.eclipse.dltk.mylyn/src/org/eclipse/mylyn/internal/dltk/ui/wizards/MylynPreferenceWizardPage.java
@@ -0,0 +1,273 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 University Of British Columbia and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * University Of British Columbia - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.dltk.ui.wizards;
+
+
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.wizard.WizardPage;
+//import org.eclipse.mylyn.internal.tasks.ui.TaskListColorsAndFonts;
+import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+import org.eclipse.ui.forms.events.IHyperlinkListener;
+import org.eclipse.ui.forms.widgets.Hyperlink;
+
+/**
+ * @author Shawn Minto
+ * @author Mik Kersten
+ */
+public class MylynPreferenceWizardPage extends WizardPage {
+
+ private static final String DESCRIPTION =
+ "Configures Mylyn preferences to the recommended defaults. To alter these\n"
+ + "re-invoke this wizard via the File -> New menu.";
+
+ private static final String AUTO_FOLDING = "Turn automatic editor folding on";
+
+ private static final String AUTO_CLOSE = "Automatically manage open editors to match task context";
+
+// private static final String WORKING_SET = "Add the \"active task context\" working set";
+
+ private static final String CONTENT_ASSIST = "Enable task-context ranked content assist, requires Eclipse restart.";
+
+ private static final String CONTENT_ASSIST_WARNING = "Toggle via Preferences-><Your DLTK Language>->Editor->Content Assist->Advanced ";
+
+ private static final String OPEN_TASK_LIST = "Open the " + TaskListView.LABEL_VIEW + " view";
+
+ private Button contentAssistButton;
+
+ private Button turnOnAutoFoldingButton;
+
+ private boolean autoFolding = true;
+
+// private Button addMylarActiveWorkingSetButton;
+
+ // TODO: remove
+ private boolean createWorkingSet = false;
+
+ private Button closeEditorsOnDeactivationButton;
+
+ private boolean closeEditors = true;
+
+ private Button openTaskListButton;
+
+ private boolean openTaskList = true;
+
+ protected MylynPreferenceWizardPage(String pageName) {
+ super(pageName);
+ setTitle(pageName);
+ setDescription(DESCRIPTION);
+ }
+
+ public void createControl(Composite parent) {
+
+ Composite containerComposite = new Composite(parent, SWT.NULL);
+ containerComposite.setLayout(new GridLayout());
+
+ Composite buttonComposite = new Composite(containerComposite, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ layout.makeColumnsEqualWidth = false;
+ buttonComposite.setLayout(layout);
+
+ contentAssistButton = new Button(buttonComposite, SWT.CHECK);
+ GridData gd = new GridData();
+ contentAssistButton.setLayoutData(gd);
+ contentAssistButton.setSelection(true);
+
+ Label label = new Label(buttonComposite, SWT.NONE);
+ label.setText(CONTENT_ASSIST);
+ label = new Label(buttonComposite, SWT.NONE);
+ label = new Label(buttonComposite, SWT.NONE);
+ label.setFont(JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT));
+ label.setText(CONTENT_ASSIST_WARNING);
+
+// label = new Label(buttonComposite, SWT.NONE);
+// label = new Label(buttonComposite, SWT.NONE);
+// label.setText("NOTE: if Mylar is uninstalled you must Restore Defaults on above page ");
+// label.setForeground(TaskListColorsAndFonts.COLOR_LABEL_CAUTION);
+
+ gd = new GridData();
+ label.setLayoutData(gd);
+
+ turnOnAutoFoldingButton = new Button(buttonComposite, SWT.CHECK);
+ gd = new GridData();
+ turnOnAutoFoldingButton.setLayoutData(gd);
+ turnOnAutoFoldingButton.setSelection(true);
+ turnOnAutoFoldingButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ autoFolding = turnOnAutoFoldingButton.getSelection();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // don't care about this event
+ }
+ });
+
+ label = new Label(buttonComposite, SWT.NONE);
+ label.setText(AUTO_FOLDING);
+ gd = new GridData();
+ label.setLayoutData(gd);
+ label = new Label(buttonComposite, SWT.NONE);
+ label = new Label(buttonComposite, SWT.NONE);
+ label.setFont(JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT));
+ label.setText("Toggle via toolbar button ");
+
+
+ closeEditorsOnDeactivationButton = new Button(buttonComposite, SWT.CHECK);
+ gd = new GridData();
+ closeEditorsOnDeactivationButton.setLayoutData(gd);
+ closeEditorsOnDeactivationButton.setSelection(true);
+ closeEditorsOnDeactivationButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ closeEditors = closeEditorsOnDeactivationButton.getSelection();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // don't care about this event
+ }
+ });
+
+ label = new Label(buttonComposite, SWT.NONE);
+ label.setText(AUTO_CLOSE);
+ gd = new GridData();
+ label.setLayoutData(gd);
+
+ label = new Label(buttonComposite, SWT.NONE);
+ label = new Label(buttonComposite, SWT.NONE);
+ label.setFont(JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT));
+ label.setText("Toggle via Mylyn preferences page ");
+
+// addMylarActiveWorkingSetButton = new Button(buttonComposite, SWT.CHECK);
+// gd = new GridData();
+// addMylarActiveWorkingSetButton.setSelection(true);
+// addMylarActiveWorkingSetButton.addSelectionListener(new SelectionListener() {
+//
+// public void widgetSelected(SelectionEvent e) {
+// workingSet = addMylarActiveWorkingSetButton.getSelection();
+// }
+//
+// public void widgetDefaultSelected(SelectionEvent e) {
+// // don't care about this event
+// }
+// });
+
+// label = new Label(buttonComposite, SWT.NONE);
+// label.setText(WORKING_SET);
+// gd = new GridData();
+// label.setLayoutData(gd);
+// setControl(buttonComposite);
+
+// label = new Label(buttonComposite, SWT.NONE);
+// label = new Label(buttonComposite, SWT.NONE);
+// label.setFont(JFaceResources.getFontRegistry().getItalic(JFaceResources.DEFAULT_FONT));
+// label.setText("Remove via Window->Working Sets ");
+
+ openTaskListButton = new Button(buttonComposite, SWT.CHECK);
+ gd = new GridData();
+ openTaskListButton.setLayoutData(gd);
+ openTaskListButton.setSelection(true);
+ openTaskListButton.addSelectionListener(new SelectionListener() {
+
+ public void widgetSelected(SelectionEvent e) {
+ openTaskList = openTaskListButton.getSelection();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ // don't care about this event
+ }
+ });
+
+ label = new Label(buttonComposite, SWT.NONE);
+ label.setText(OPEN_TASK_LIST);
+ gd = new GridData();
+ label.setLayoutData(gd);
+
+ Label spacer = new Label(buttonComposite, SWT.NONE);
+ spacer.setText(" ");
+ spacer = new Label(buttonComposite, SWT.NONE);
+ spacer.setText(" ");
+
+ Hyperlink hyperlink = new Hyperlink(containerComposite, SWT.NULL);
+ hyperlink.setUnderlined(true);
+ //hyperlink.setForeground(TaskListColorsAndFonts.COLOR_HYPERLINK_WIDGET);
+ //.COLOR_HYPERLINK);
+
+ hyperlink.setText("If this is your first time using Mylyn please watch the short Getting Started video");
+
+ label = new Label(containerComposite, SWT.NONE);
+ label.setText("For a legend of the icons used by Mylyn open: Help (menu) -> Mylar UI Legend");
+ gd = new GridData();
+ label.setLayoutData(gd);
+
+ hyperlink.addHyperlinkListener(new IHyperlinkListener() {
+
+ public void linkActivated(HyperlinkEvent e) {
+ //TasksUiUtil.openBrowser("http://eclipse.org/mylar/start.php");
+ }
+
+ public void linkEntered(HyperlinkEvent e) {
+ // ignore
+ }
+
+ public void linkExited(HyperlinkEvent e) {
+ // ignore
+ }
+
+
+ });
+
+// Composite browserComposite = new Composite(containerComposite, SWT.NULL);
+// browserComposite.setLayout(new GridLayout());
+// try {
+// Browser browser = new Browser(browserComposite, SWT.NONE);
+// browser.setText(htmlDocs);
+// GridData browserLayout = new GridData(GridData.FILL_HORIZONTAL);
+// browserLayout.heightHint = 100;
+// browserLayout.widthHint = 600;
+// browser.setLayoutData(browserLayout);
+// } catch (Throwable t) {
+// // fail silently if there is no browser
+// }
+
+ setControl(containerComposite);
+ }
+
+ public boolean isAutoFolding() {
+ return autoFolding;
+ }
+
+ public boolean closeEditors() {
+ return closeEditors;
+ }
+
+ public boolean isMylynContentAssistDefault() {
+ return contentAssistButton.getSelection();
+ }
+
+ public boolean isCreateWorkingSet() {
+ return createWorkingSet;
+ }
+
+ public boolean isOpenTaskList() {
+ return openTaskList;
+ }
+}