<!--{{{-->
<link rel='alternate' type='application/rss+xml' title='RSS' href='index.xml' />
<!--}}}-->
Background: #fff
Foreground: #000
PrimaryPale: #8cf
PrimaryLight: #18f
PrimaryMid: #04b
PrimaryDark: #014
SecondaryPale: #ffc
SecondaryLight: #fe8
SecondaryMid: #db4
SecondaryDark: #841
TertiaryPale: #eee
TertiaryLight: #ccc
TertiaryMid: #999
TertiaryDark: #666
Error: #f88
/*{{{*/
body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}

a {color:[[ColorPalette::PrimaryMid]];}
a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];}
a img {border:0;}

h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;}
h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];}
h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];}

.button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];}
.button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];}
.button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];}

.header {background:[[ColorPalette::PrimaryMid]];}
.headerShadow {color:[[ColorPalette::Foreground]];}
.headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];}
.headerForeground {color:[[ColorPalette::Background]];}
.headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];}

.tabSelected{color:[[ColorPalette::PrimaryDark]];
	background:[[ColorPalette::TertiaryPale]];
	border-left:1px solid [[ColorPalette::TertiaryLight]];
	border-top:1px solid [[ColorPalette::TertiaryLight]];
	border-right:1px solid [[ColorPalette::TertiaryLight]];
}
.tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];}
.tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];}
.tabContents .button {border:0;}

#sidebar {}
#sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];}
#sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];}
#sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];}

.wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];}
.wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;}
.wizard h2 {color:[[ColorPalette::Foreground]]; border:none;}
.wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];
	border:1px solid [[ColorPalette::PrimaryMid]];}
.wizardStep.wizardStepDone {background:[[ColorPalette::TertiaryLight]];}
.wizardFooter {background:[[ColorPalette::PrimaryPale]];}
.wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];}
.wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid;
	border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];}
.wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];}
.wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid;
	border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];}

.wizard .notChanged {background:transparent;}
.wizard .changedLocally {background:#80ff80;}
.wizard .changedServer {background:#8080ff;}
.wizard .changedBoth {background:#ff8080;}
.wizard .notFound {background:#ffff80;}
.wizard .putToServer {background:#ff80ff;}
.wizard .gotFromServer {background:#80ffff;}

#messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];}
#messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;}

.popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];}

.popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];}
.popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;}
.popup li.disabled {color:[[ColorPalette::TertiaryMid]];}
.popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;}
.popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;}
.popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
.listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];}

.tiddler .defaultCommand {font-weight:bold;}

.shadow .title {color:[[ColorPalette::TertiaryDark]];}

.title {color:[[ColorPalette::SecondaryDark]];}
.subtitle {color:[[ColorPalette::TertiaryDark]];}

.toolbar {color:[[ColorPalette::PrimaryMid]];}
.toolbar a {color:[[ColorPalette::TertiaryLight]];}
.selected .toolbar a {color:[[ColorPalette::TertiaryMid]];}
.selected .toolbar a:hover {color:[[ColorPalette::Foreground]];}

.tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];}
.selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];}
.tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];}
.tagging .button, .tagged .button {border:none;}

.footer {color:[[ColorPalette::TertiaryLight]];}
.selected .footer {color:[[ColorPalette::TertiaryMid]];}

.sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;}
.sparktick {background:[[ColorPalette::PrimaryDark]];}

.error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];}
.warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];}
.lowlight {background:[[ColorPalette::TertiaryLight]];}

.zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];}

.imageLink, #displayArea .imageLink {background:transparent;}

.annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];}

.viewer .listTitle {list-style-type:none; margin-left:-2em;}
.viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];}
.viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];}

.viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];}
.viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];}
.viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];}

.viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];}
.viewer code {color:[[ColorPalette::SecondaryDark]];}
.viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];}

.highlight, .marked {background:[[ColorPalette::SecondaryLight]];}

.editor input {border:1px solid [[ColorPalette::PrimaryMid]];}
.editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;}
.editorFooter {color:[[ColorPalette::TertiaryMid]];}
.readOnly {background:[[ColorPalette::TertiaryPale]];}

#backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];}
#backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; }
#backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];}
#backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;}
#backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;}
#backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];}
.backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];}
.backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];}
#backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity=60)';}
/*}}}*/
/*{{{*/
* html .tiddler {height:1%;}

body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;}

h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;}
h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;}
h4,h5,h6 {margin-top:1em;}
h1 {font-size:1.35em;}
h2 {font-size:1.25em;}
h3 {font-size:1.1em;}
h4 {font-size:1em;}
h5 {font-size:.9em;}

hr {height:1px;}

a {text-decoration:none;}

dt {font-weight:bold;}

ol {list-style-type:decimal;}
ol ol {list-style-type:lower-alpha;}
ol ol ol {list-style-type:lower-roman;}
ol ol ol ol {list-style-type:decimal;}
ol ol ol ol ol {list-style-type:lower-alpha;}
ol ol ol ol ol ol {list-style-type:lower-roman;}
ol ol ol ol ol ol ol {list-style-type:decimal;}

.txtOptionInput {width:11em;}

#contentWrapper .chkOptionInput {border:0;}

.externalLink {text-decoration:underline;}

.indent {margin-left:3em;}
.outdent {margin-left:3em; text-indent:-3em;}
code.escaped {white-space:nowrap;}

.tiddlyLinkExisting {font-weight:bold;}
.tiddlyLinkNonExisting {font-style:italic;}

/* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */
a.tiddlyLinkNonExisting.shadow {font-weight:bold;}

#mainMenu .tiddlyLinkExisting,
	#mainMenu .tiddlyLinkNonExisting,
	#sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;}
#sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;}

.header {position:relative;}
.header a:hover {background:transparent;}
.headerShadow {position:relative; padding:4.5em 0 1em 1em; left:-1px; top:-1px;}
.headerForeground {position:absolute; padding:4.5em 0 1em 1em; left:0px; top:0px;}

.siteTitle {font-size:3em;}
.siteSubtitle {font-size:1.2em;}

#mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;}

#sidebar {position:absolute; right:3px; width:16em; font-size:.9em;}
#sidebarOptions {padding-top:0.3em;}
#sidebarOptions a {margin:0 0.2em; padding:0.2em 0.3em; display:block;}
#sidebarOptions input {margin:0.4em 0.5em;}
#sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;}
#sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;}
#sidebarOptions .sliderPanel input {margin:0 0 0.3em 0;}
#sidebarTabs .tabContents {width:15em; overflow:hidden;}

.wizard {padding:0.1em 1em 0 2em;}
.wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0; margin:0.4em 0 0.2em;}
.wizardStep {padding:1em 1em 1em 1em;}
.wizard .button {margin:0.5em 0 0; font-size:1.2em;}
.wizardFooter {padding:0.8em 0.4em 0.8em 0;}
.wizardFooter .status {padding:0 0.4em; margin-left:1em;}
.wizard .button {padding:0.1em 0.2em;}

#messageArea {position:fixed; top:2em; right:0; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;}
.messageToolbar {display:block; text-align:right; padding:0.2em;}
#messageArea a {text-decoration:underline;}

.tiddlerPopupButton {padding:0.2em;}
.popupTiddler {position: absolute; z-index:300; padding:1em; margin:0;}

.popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;}
.popup .popupMessage {padding:0.4em;}
.popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0;}
.popup li.disabled {padding:0.4em;}
.popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;}
.listBreak {font-size:1px; line-height:1px;}
.listBreak div {margin:2px 0;}

.tabset {padding:1em 0 0 0.5em;}
.tab {margin:0 0 0 0.25em; padding:2px;}
.tabContents {padding:0.5em;}
.tabContents ul, .tabContents ol {margin:0; padding:0;}
.txtMainTab .tabContents li {list-style:none;}
.tabContents li.listLink { margin-left:.75em;}

#contentWrapper {display:block;}
#splashScreen {display:none;}

#displayArea {margin:1em 17em 0 14em;}

.toolbar {text-align:right; font-size:.9em;}

.tiddler {padding:1em 1em 0;}

.missing .viewer,.missing .title {font-style:italic;}

.title {font-size:1.6em; font-weight:bold;}

.missing .subtitle {display:none;}
.subtitle {font-size:1.1em;}

.tiddler .button {padding:0.2em 0.4em;}

.tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;}
.isTag .tagging {display:block;}
.tagged {margin:0.5em; float:right;}
.tagging, .tagged {font-size:0.9em; padding:0.25em;}
.tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;}
.tagClear {clear:both;}

.footer {font-size:.9em;}
.footer li {display:inline;}

.annotation {padding:0.5em; margin:0.5em;}

* html .viewer pre {width:99%; padding:0 0 1em 0;}
.viewer {line-height:1.4em; padding-top:0.5em;}
.viewer .button {margin:0 0.25em; padding:0 0.25em;}
.viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;}
.viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;}

.viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;}
.viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;}
table.listView {font-size:0.85em; margin:0.8em 1.0em;}
table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;}

.viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;}
.viewer code {font-size:1.2em; line-height:1.4em;}

.editor {font-size:1.1em;}
.editor input, .editor textarea {display:block; width:100%; font:inherit;}
.editorFooter {padding:0.25em 0; font-size:.9em;}
.editorFooter .button {padding-top:0px; padding-bottom:0px;}

.fieldsetFix {border:0; padding:0; margin:1px 0px;}

.sparkline {line-height:1em;}
.sparktick {outline:0;}

.zoomer {font-size:1.1em; position:absolute; overflow:hidden;}
.zoomer div {padding:1em;}

* html #backstage {width:99%;}
* html #backstageArea {width:99%;}
#backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em;}
#backstageToolbar {position:relative;}
#backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em;}
#backstageButton {display:none; position:absolute; z-index:175; top:0; right:0;}
#backstageButton a {padding:0.1em 0.4em; margin:0.1em;}
#backstage {position:relative; width:100%; z-index:50;}
#backstagePanel {display:none; z-index:100; position:absolute; width:90%; margin-left:3em; padding:1em;}
.backstagePanelFooter {padding-top:0.2em; float:right;}
.backstagePanelFooter a {padding:0.2em 0.4em;}
#backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;}

.whenBackstage {display:none;}
.backstageVisible .whenBackstage {display:block;}
/*}}}*/
/***
StyleSheet for use when a translation requires any css style changes.
This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which need larger font sizes.
***/
/*{{{*/
body {font-size:0.8em;}
#sidebarOptions {font-size:1.05em;}
#sidebarOptions a {font-style:normal;}
#sidebarOptions .sliderPanel {font-size:0.95em;}
.subtitle {font-size:0.8em;}
.viewer table.listView {font-size:0.95em;}
/*}}}*/
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
<!--{{{-->
<div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'>
<div class='headerShadow'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
<div class='headerForeground'>
<span class='siteTitle' refresh='content' tiddler='SiteTitle'></span>&nbsp;
<span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span>
</div>
</div>
<div id='mainMenu' refresh='content' tiddler='MainMenu'></div>
<div id='sidebar'>
<div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div>
<div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div>
</div>
<div id='displayArea'>
<div id='messageArea'></div>
<div id='tiddlerDisplay'></div>
</div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
To get started with this blank [[TiddlyWiki]], you'll need to modify the following tiddlers:
* [[SiteTitle]] & [[SiteSubtitle]]: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar)
* [[MainMenu]]: The menu (usually on the left)
* [[DefaultTiddlers]]: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened
You'll also need to enter your username for signing your edits: <<option txtUserName>>
These [[InterfaceOptions]] for customising [[TiddlyWiki]] are saved in your browser

Your username for signing your edits. Write it as a [[WikiWord]] (eg [[JoeBloggs]])

<<option txtUserName>>
<<option chkSaveBackups>> [[SaveBackups]]
<<option chkAutoSave>> [[AutoSave]]
<<option chkRegExpSearch>> [[RegExpSearch]]
<<option chkCaseSensitiveSearch>> [[CaseSensitiveSearch]]
<<option chkAnimate>> [[EnableAnimations]]

----
Also see [[AdvancedOptions]]
<<importTiddlers>>
/***
|''Name:''|AlternateBackupPlugin|
|''Version:''|1.0.2 (6-Mar-2006)|
|''Source:''||
|''Author:''|KyleHale|
|''Type:''|Plugin|
!Description
Hijacks core backupPath function, replacing the datetime naming system with a rotating set of backups (1 through 10 and then back to 1), whose number is limited by the user. Default number of backups is 10, but can be change by modifying the line ''backupFolder = "10"'' to what ever number you want.

!Issues/Todos
* Possible to insert an option into the AdvancedOptions Tiddler? That'd make editing the number of backups that much easier.
!Revision History
* 1.0.2 (6-Mar-2006)
** Wrote code, totally stole SimonBaird's documentation system
* 1.0.1 (3-Mar-2006)
** Wrote code

!Code
***/
{{{
        var MaxBackups = config.options.txtMaxBackups;
        if(!MaxBackups || MaxBackups == "")
                MaxBackups = "10";
if (!config.options.txtCurrentBackup)
config.options.txtCurrentBackup="1"; 

getBackupPath = function(localPath)
{
        var backSlash = true;
        var dirPathPos = localPath.lastIndexOf("\\");
        if(dirPathPos == -1)
                {
                dirPathPos = localPath.lastIndexOf("/");
                backSlash = false;
                }
        var backupFolder = config.options.txtBackupFolder;
        if(!backupFolder || backupFolder == "")
                backupFolder = ".";
        var backupPath = localPath.substr(0,dirPathPos) + (backSlash ? "\\" :
"/") + backupFolder + localPath.substr(dirPathPos);
        backupNum = config.options["txtCurrentBackup"];
        backupNum++;
        if (backupNum>MaxBackups) {
                backupNum=1;
        }
        backupPath = backupPath.substr(0,backupPath.lastIndexOf(".")) + "." +
backupNum + ".html";
        config.options["txtCurrentBackup"]=backupNum;
        saveOptionCookie("txtCurrentBackup");
        return backupPath;

}
}}}
<nowiki>Build 20031218

As described in bug 46332, the commit working copy operation should only lock 
the cu parent's folder and not the entire workspace.
</nowiki>
<nowiki>It appears there is contention for the lock on the changed compilation unit 
resulting in the deadlock. 
The JUnit thread has the lock on the CU and attempts a synchExec. The UI 
thread is waiting for the lock on the CU.

Full thread dump Java HotSpot(TM) Client VM (1.4.2-b28 mixed mode):

"Worker-254" prio=5 tid=0x0511c210 nid=0xd08 in Object.wait() 
[497f000..497fd94]

        at java.lang.Object.wait(Native Method)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:184)
        - locked <0x124fbd70> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob
(WorkerPool.java:21
0)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

"org.eclipse.jdt.internal.ui.text.JavaReconciler" daemon prio=2 tid=0x040d0188 
n
id=0xe48 in Object.wait() [617f000..617fd94]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:429)
        at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:149)
        - locked <0x109711f8> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.ui.internal.UISynchronizer.syncExec
(UISynchronizer.java:2
5)
        at org.eclipse.swt.widgets.Display.syncExec(Display.java:2628)
        at 
org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart.postSyncRunnable
(TestRunnerViewPart.java:685)
        at org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart.codeHasChanged
(T
estRunnerViewPart.java:1094)
        at 
org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart$DirtyListener.pr
ocessDelta(TestRunnerViewPart.java:285)
        at 
org.eclipse.jdt.internal.junit.ui.TestRunnerViewPart$DirtyListener.el
ementChanged(TestRunnerViewPart.java:260)
        at org.eclipse.jdt.internal.core.DeltaProcessor$2.run
(DeltaProcessor.jav
a:1388)
        at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatfo
rm.java:813)
        at org.eclipse.core.runtime.Platform.run(Platform.java:457)
        at org.eclipse.jdt.internal.core.DeltaProcessor.notifyListeners
(DeltaPro
cessor.java:1383)
        at org.eclipse.jdt.internal.core.DeltaProcessor.fireReconcileDelta
(Delta
Processor.java:1245)
        at org.eclipse.jdt.internal.core.DeltaProcessor.fire
(DeltaProcessor.java
:1203)
        at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperati
on.java:723)
        at org.eclipse.jdt.internal.core.JavaElement.runOperation
(JavaElement.ja
va:524)
        at org.eclipse.jdt.internal.core.CompilationUnit.reconcile
(CompilationUn
it.java:1050)
        at org.eclipse.jdt.internal.core.CompilationUnit.reconcile
(CompilationUn
it.java:1022)
        at 
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconci
le(JavaReconcilingStrategy.java:72)
        - locked <0x177f7f50> (a org.eclipse.jdt.internal.core.CompilationUnit)
        at 
org.eclipse.jdt.internal.ui.text.java.JavaReconcilingStrategy.reconci
le(JavaReconcilingStrategy.java:99)
        at org.eclipse.jface.text.reconciler.MonoReconciler.process
(MonoReconcil
er.java:76)
        at 
org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread
.run(AbstractReconciler.java:189)

"Worker-224" prio=5 tid=0x04058e28 nid=0x818 waiting on condition 
[60ff000..60ff
d94]
        at java.lang.Thread.sleep(Native Method)
        at org.eclipse.ui.internal.progress.AnimationManager.animateLoop
(Animati
onManager.java:321)
        at org.eclipse.ui.internal.progress.AnimationManager$3.run
(AnimationMana
ger.java:471)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:62)

"Java indexing" daemon prio=4 tid=0x00a2fd10 nid=0x1d4 in Object.wait() 
[387f000
..387fd94]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x126d3d70> (a 
org.eclipse.jdt.internal.core.search.indexi
ng.IndexManager)
        at java.lang.Object.wait(Object.java:429)
        at org.eclipse.jdt.internal.core.search.processing.JobManager.run
(JobMan
ager.java:327)
        - locked <0x126d3d70> (a 
org.eclipse.jdt.internal.core.search.indexing.I
ndexManager)
        at java.lang.Thread.run(Thread.java:534)

"Start Level Event Dispatcher" daemon prio=5 tid=0x00a478c0 nid=0xae4 in 
Object.
wait() [307f000..307fd94]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x124f0128> (a 
org.eclipse.osgi.framework.eventmgr.EventTh
read)
        at java.lang.Object.wait(Object.java:429)
        at org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent
(EventThr
ead.java:169)
        - locked <0x124f0128> (a 
org.eclipse.osgi.framework.eventmgr.EventThread
)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run
(EventThread.java:
120)

"Framework Event Dispatcher" daemon prio=5 tid=0x00a4ce78 nid=0x938 in 
Object.wa
it() [303f000..303fd94]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x124f0178> (a 
org.eclipse.osgi.framework.eventmgr.EventTh
read)
        at java.lang.Object.wait(Object.java:429)
        at org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent
(EventThr
ead.java:169)
        - locked <0x124f0178> (a 
org.eclipse.osgi.framework.eventmgr.EventThread
)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run
(EventThread.java:
120)

"Signal Dispatcher" daemon prio=10 tid=0x0003d408 nid=0x91c waiting on 
condition
 [0..0]

"Finalizer" daemon prio=9 tid=0x009c0120 nid=0xa68 in Object.wait() 
[2ccf000..2c
cfd94]
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x124f02a0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x009becf0 nid=0x7a8 in Object.wait() 
[2c
8f000..2c8fd94]
        at java.lang.Object.wait(Native Method)
        at java.lang.Object.wait(Object.java:429)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
        - locked <0x124f0308> (a java.lang.ref.Reference$Lock)

"main" prio=7 tid=0x00035260 nid=0x348 waiting for monitor entry [7f000..7fc3c]
        at 
org.eclipse.jdt.internal.ui.javaeditor.JavaEditor$MouseClickListener.
getCurrentTextRegion(JavaEditor.java:544)
        - waiting to lock <0x177f7f50> (a 
org.eclipse.jdt.internal.core.Compilat
ionUnit)
        at 
org.eclipse.jdt.internal.ui.javaeditor.JavaEditor$MouseClickListener.
mouseMove(JavaEditor.java:771)
        at org.eclipse.swt.widgets.TypedListener.handleEvent
(TypedListener.java:
144)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:847)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2311)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1992)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1506)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1482)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench
(Workbench.jav
a:246)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139)
        at org.eclipse.ui.internal.ide.IDEApplication.run
(IDEApplication.java:47
)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run
(PlatformAct
ivator.java:226)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.ja
va:85)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:279)
        at org.eclipse.core.launcher.Main.run(Main.java:742)
        at org.eclipse.core.launcher.Main.main(Main.java:581)

"VM Thread" prio=5 tid=0x009fb6e8 nid=0xad8 runnable

"VM Periodic Task Thread" prio=10 tid=0x0003fb58 nid=0xb40 waiting on condition

"Suspend Checker Thread" prio=10 tid=0x009c2590 nid=0x924 runnable
</nowiki>
<nowiki>Java Project, which includes a folder within CLASSPATH, which is linked to a
resource

--- excerpt from .project ---

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
        ...
	<linkedResources>
		<link>
			<name>localproperties</name>
			<type>2</type>
			<location>xxx_localproperties</location>
		</link>
	</linkedResources>
</projectDescription>


The folder "localproperties" will be used in CLASSPATH:

--- excerpt from .classpath ---

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="lib" path="localproperties"/>
    <classpathentry kind="src" path="src/java"/>
    ...
</classpath>


After using a NEW Eclipse installation with a NEW workspace (and new .metadata),
 I forgot to set the linked resource "xxx_localproperties" to a local directory.
BTW: Eclipse shows a warning (! icon) in package explorer, but no warning in
problem list...

Compile etc. works without any problems.

But, when trying to launch a program, there will an "internal error" with
following stack trace:

--- excerpt from .log ---

java.lang.NullPointerException
	at
org.eclipse.jdt.internal.launching.RuntimeClasspathEntry.resolveToOSPath(RuntimeClasspathEntry.java:485)
	at
org.eclipse.jdt.internal.launching.RuntimeClasspathEntry.getLocation(RuntimeClasspathEntry.java:469)
	at
org.eclipse.jdt.launching.JavaRuntime.resolveRuntimeClasspathEntry(JavaRuntime.java:741)
	at
org.eclipse.jdt.launching.StandardSourcePathProvider.resolveClasspath(StandardSourcePathProvider.java:56)
	at
org.eclipse.jdt.launching.JavaRuntime.resolveSourceLookupPath(JavaRuntime.java:630)
	at
org.eclipse.jdt.launching.sourcelookup.JavaSourceLocator.initializeDefaults(JavaSourceLocator.java:389)
	at
org.eclipse.jdt.debug.ui.JavaUISourceLocator.initializeDefaults(JavaUISourceLocator.java:280)
	at
org.eclipse.debug.internal.core.LaunchConfiguration.initializeSourceLocator(LaunchConfiguration.java:183)
	at
org.eclipse.debug.internal.core.LaunchConfiguration.launch(LaunchConfiguration.java:155)
	at
org.eclipse.debug.internal.ui.DebugUIPlugin.buildAndLaunch(DebugUIPlugin.java:740)
	at org.eclipse.debug.ui.DebugUITools.buildAndLaunch(DebugUITools.java:625)
	at org.eclipse.debug.ui.DebugUITools$3.run(DebugUITools.java:581)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:62)

Only after checking Eclipse sources, I could assign this exception to a problem
using linked resources. Took about 1h to identify this "misconfiguration".

It would be better, to have an warning/error, which indicates, that launching a
program would fail if CLASSPATH is not set correctly, or better, ignore
non-assigned source folders.

Bye, Jochen
</nowiki>
<nowiki>1) Launch new install (or just new workbench) of eclipse.
2) Create new simple java project
3) Open Java Browsing perspective
4) Select Window->Show View->Ant

observer: no ant view is displayed

however, if open the console view first the Ant view is displayed as expected. Follow this set of 
steps to see it work properly;

1) Launch new install (or just new workbench) of eclipse.
2) Create new simple java project
3) Open Java Browsing perspective
4) Select Window->Show View->Console
5) Select Window->Show View->Ant

observe: the Ant view is displayed as expected

I believe that this is platform neutral but I've not tested it on my PC yet.
</nowiki>
<nowiki>I20040120

Quite frequently I see an empty window on top of my editor.
See attached screenshot. In many cases it is difficult to get rid of it...
This is very annoying.
</nowiki>
<nowiki>The checkbox "Help me ..." and the other controls on this tab sheet do not use
the dialog font.
</nowiki>
<nowiki>If I have a pessimistic provider and I open an editor on file, modify it and 
commit it, the file will be reset to be read-only. When this occurs, the open 
editor will no longer allow the user to edit the file. To do so, the editor 
must be closed and reopened and then a another validateEdit will be performed. 
The problem is that the editor (the file buffer actually) keeps track of 
whether it has already been validated and does not revalidate. We either need 
to provide notification to the editor that it needs to revalidate or the 
editor (file buffer) needs to keep track of the result of the validate (OK or 
no-edit-allowed) and revalidate if the file becomes read-only again.
</nowiki>
<nowiki>Now that deltas can occur at any time, it is possible for a delta to occur 
between when a repository provider creates a team-private resource and when 
they mark it team-privte. This could be avoided if team-private could be 
specified as a flag on resource creation.
</nowiki>
<nowiki>Using latest JDT/Core code, the end positions for a line comment is located
between the \r and the \n.
The DOM positions are ok, but I think the length for a DOM block comment is one
caracter too far.
</nowiki>

Bug caused by fix to other bug
<nowiki>I just did some patching against a remote CVS. Eclipse was idle and in the
background when this occurred. OS is Windows Server 2003 Enterprise (Evaluation).

!MESSAGE Problems occurred when invoking code from plug-in:
"org.eclipse.core.runtime".
!STACK 0
java.lang.ArrayIndexOutOfBoundsException: 0
	at org.eclipse.compare.internal.patch.PatchWizard.setTargets(PatchWizard.java:73)
	at
org.eclipse.compare.internal.patch.InputPatchPage$5.selectionChanged(InputPatchPage.java:293)
	at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:159)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:813)
	at org.eclipse.core.runtime.Platform.run(Platform.java:457)
	at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:157)
	at
org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:1310)
	at
org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:666)
	at
org.eclipse.jface.viewers.CheckboxTreeViewer.handleSelect(CheckboxTreeViewer.java:261)
	at
org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:690)
	at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:178)
	at org.eclipse.jface.util.OpenStrategy.access$3(OpenStrategy.java:173)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:847)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2311)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1992)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:586)
	at org.eclipse.jface.window.Window.open(Window.java:566)
	at
org.eclipse.compare.internal.patch.CompareWithPatchAction.run(CompareWithPatchAction.java:65)
	at org.eclipse.compare.internal.BaseCompareAction.run(BaseCompareAction.java:26)
	at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:271)
	at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:509)
	at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:461)
	at
org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:408)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:847)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2311)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1992)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1506)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1482)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:246)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:47)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:226)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:85)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:279)
	at org.eclipse.core.launcher.Main.run(Main.java:742)
	at org.eclipse.core.launcher.Main.main(Main.java:581)
!ENTRY org.eclipse.ui 4 4 Feb 11, 2004 15:36:06.843
!MESSAGE Unhandled event loop exception
!ENTRY org.eclipse.ui 4 0 Feb 11, 2004 15:36:06.843
!MESSAGE java.lang.OutOfMemoryError
!STACK 0
java.lang.OutOfMemoryError
!SESSION ----------------------------------------------------------------------
!ENTRY org.eclipse.core.launcher 4 0 Feb 11, 2004 15:35:55.421
!MESSAGE Exception launching the Eclipse Platform:
!STACK
java.lang.OutOfMemoryError
</nowiki>
<nowiki>build 20040210
1) create the follong test case
public class Y {
  /**
   * @see
   * String @deprecated
   */
  void foo() {
  }
}
public class Z {
  void bar() {
    Y y = new Y();
    y.foo();
  }
}
foo() is marked as a deprecated, but @deprecated must be at the beginning of a 
line.

The behavior is the same with
public class Y {
  /**
   * @see String
   * String @deprecated
   */
  void foo() {
  }
}
But the error does not occur with
public class Y {
  /**
   * @see String String
   * String @deprecated
   */
  void foo() {
  }
}

see bug 50644.
</nowiki>


Fixes for this bug contain fixes for multiple other bugs, which were difficult to separate
<nowiki>2.0 20040211 16:00
I've enabled the new search view and find that often the search will complete 
and the window will be empty. Although I know that some matches should exist, 
I press the next button and items suddenly appear in view and are expanded.

Sorry for the lack of repeatable steps, but it does happen quite frequently.
</nowiki>
<nowiki>I have a custom task that has a property nested element whose sytax is 
different from the buil-in property task's syntax. The ant editor in M7 is 
reporting this as an error.

The editor should ignore all elements nested in a custom task. 

Currently, unrecognized tasks seem to be ignored, the editor could actually 
flag tasks that have not been declared as custom tasks.

Of course, I would not object if a way were probided to communicate to the 
editor the syntax of custom tasks (perhaps through XSD fragments).
</nowiki>
<nowiki>org.osgi.framework.BundleContext.getProperty( 
org.osgi.framework.Constants.FRAMEWORK_OS_NAME )
should return canonical OS name rather than alias.
So on Windows XP it should return "WindowsXP" rather than "Windows XP".

Am using M7 btw.
</nowiki>
<nowiki>Build 20040219 + latest JDT Core

Got the following NPE in indexer running the Java model tests:
java.lang.NullPointerException
	at 
org.eclipse.jdt.internal.core.search.indexing.IndexManager.recreateIndex
(IndexManager.java:340)
	at 
org.eclipse.jdt.internal.core.search.indexing.AddJarFileToIndex.execute
(AddJarFileToIndex.java:160)
	at org.eclipse.jdt.internal.core.search.processing.JobManager.run
(JobManager.java:344)
	at java.lang.Thread.run(Thread.java:534)
</nowiki>
<nowiki>Environment:
Eclipse 3.0 M7 on Windows

My views are instances of IPartListener2 and receive events when a view is 
shown or hidden.  It is expected that when a view is shown, the partVisible 
function will be called.  On the other hand, if a view is hidden, the 
partHidden function will be called.

Part Hidden/Visible events are received properly when a view is moved or 
stacked on top of one another.  However, when one of the views is maximized, 
covering all the other views in the perspective, no part hidden event is 
received for the views being covered.  

Part hidden events should be received whenever a view is no longer visible.
</nowiki>

This bug was involved in a huge rewrite, which made it impossible to identify which changes were related to fixing this bug, and which for others. This made the origins impossible to identify
<nowiki>The current perspective switching preferences are:
switch on launch - prompt
switch on suspend - never

So when the user launches, we offer to take them to the Debug perspective. Then when they 
suspend (possibly after going back to their development perspective), we don't do anything. This is 
backwards. Going to the Debug perspective on launch isn't interesting. The perspective only 
becomes interesting when your program suspends.
</nowiki>
<nowiki>The "Build All" and "Rebuild All" actions are run in the background, but 
the "Build Project" and "Rebuild Project" actions aren't. 

This is not consistent and I was surprised to get a modal dialog when 
performing a "Rebuild Project".
</nowiki>
<nowiki>when adding spaces after or vefore a comma for instance the filter doesnt work 
anymore properly - ie. doesnt apply the rest of the filter patterns after the 
space(s)
</nowiki>
<nowiki>We should see what the platform progress icon looks like
</nowiki>

This bug has very little description or context, and so it's difficult to see exactly what the issue is. I believe it might be a new feature, based on some other new class being available, which would give the commits an origin of Elsewhere, but since the fixes also seem to include unrelated changes, I really can't figure out what the origin was for most of them.
<nowiki>The plug-in preference scope registry needs to be aware of the comings and
goings of dynamic plug-ins. Some issues to be addressed:

- adding scopes to the registry
- removing scopes from the registry
- conversion of prefs from a previously non-existing scope to a newly added one
(currently exist as EclipsePrefs...create new instances and copy values?)
</nowiki>
<nowiki>Bundle-SymbolicName value now may contain attributes in addition to the bundle
identifier. Example:

Bundle-SymbolicName: org.eclipse.core.runtime; singleton=true

Please see bug 53288 for more details. Also, please see bug 53653 for a general
facility for parsing bundle manifests that can be used for parsing entries
containing attributes.
</nowiki>
<nowiki>List list = (List)new ArrayList();
</nowiki>
<nowiki>Counterpart of the API change in bug 46668
</nowiki>
<nowiki>Currently the color/font page uses the default definitions for determining
whether a color or font is set to the default value.  This is wrong - the
definitions needs to be the base definitions merged with teh theme overrides.
</nowiki>
<nowiki>I20040322:0800
I'm getting more graphic disposed in today's M8 warm up build. This one happened
opening an editor.

org.eclipse.swt.SWTException: Graphic is disposed
	at org.eclipse.swt.SWT.error(SWT.java:2625)
	at org.eclipse.swt.SWT.error(SWT.java:2555)
	at org.eclipse.swt.graphics.Image.getBounds(Image.java:950)
	at org.eclipse.swt.custom.CTabItem.preferredWidth(CTabItem.java:610)
	at org.eclipse.swt.custom.CTabFolder.setItemSize(CTabFolder.java:2685)
	at org.eclipse.swt.custom.CTabFolder.updateItems(CTabFolder.java:3364)
	at org.eclipse.swt.custom.CTabItem.setText(CTabItem.java:975)
	at
org.eclipse.ui.internal.presentations.EditorPresentation.initTab(EditorPresentation.java:191)
	at
org.eclipse.ui.internal.presentations.BasicStackPresentation.childPropertyChanged(BasicStackPresentation.java:270)
	at
org.eclipse.ui.internal.presentations.BasicStackPresentation$7.propertyChanged(BasicStackPresentation.java:153)
	at
org.eclipse.ui.internal.PresentableEditorPart$1.propertyChanged(PresentableEditorPart.java:32)
	at org.eclipse.ui.part.WorkbenchPart$1.run(WorkbenchPart.java:105)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:610)
	at org.eclipse.core.runtime.Platform.run(Platform.java:521)
	at org.eclipse.ui.part.WorkbenchPart.firePropertyChange(WorkbenchPart.java:103)
	at org.eclipse.ui.part.WorkbenchPart.setTitleImage(WorkbenchPart.java:259)
	at org.eclipse.compare.internal.CompareEditor.doSetInput(CompareEditor.java:126)
	at org.eclipse.compare.internal.CompareEditor.setInput(CompareEditor.java:103)
	at
org.eclipse.compare.internal.CompareUIPlugin.openCompareEditor(CompareUIPlugin.java:319)
	at org.eclipse.compare.CompareUI.reuseCompareEditor(CompareUI.java:140)
	at
org.eclipse.team.internal.ui.synchronize.actions.OpenInCompareAction.openCompareEditor(OpenInCompareAction.java:71)
	at
org.eclipse.team.internal.ui.synchronize.actions.OpenInCompareAction.run(OpenInCompareAction.java:51)
	at
org.eclipse.team.internal.ui.synchronize.actions.OpenWithActionGroup.openInCompareEditor(OpenWithActionGroup.java:101)
	at
org.eclipse.team.ui.synchronize.subscribers.SynchronizeViewerAdvisor.handleDoubleClick(SynchronizeViewerAdvisor.java:87)
	at
org.eclipse.team.ui.synchronize.TreeViewerAdvisor$1.doubleClick(TreeViewerAdvisor.java:210)
	at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:381)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:610)
	at org.eclipse.core.runtime.Platform.run(Platform.java:521)
	at
org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:379)
	at
org.eclipse.jface.viewers.StructuredViewer.handleDoubleSelect(StructuredViewer.java:598)
	at
org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:693)
	at
org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:187)
	at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:184)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:231)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:810)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2424)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2102)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1488)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1462)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:259)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:90)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:262)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:213)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:115)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:315)
	at org.eclipse.core.launcher.Main.run(Main.java:740)
	at org.eclipse.core.launcher.Main.main(Main.java:724)
</nowiki>
<nowiki>I20040322

After resizing a Fastview, the right handsize resize edge remained on the screen.
See attached screenshot.
Note: this seems to be a real widget (with clipping) because it won't go away if I select the text 
underneath it.
</nowiki>
<nowiki>build I20040323-0800

- new window in Java perspective
- Window > Show View > Other > Team > Synchronize
- no controls have focus

Focus should be given to the view.
</nowiki>
<nowiki>I 2004-03-24 + plugin-export

1) in a repositories view, drill down to TableItem.java in org.eclipse.set and
open the file from the repository.
2) right-click to get the context menu
3) observe: you get a context menu with two entries:  "Copy" and "Refactor".
4) go into the "Refactor" submenu
5) click somewhere else in the editor, thus closing the context menu
6) observe and exception:

java.lang.NullPointerException
at java.lang.Throwable.<init>(Throwable.java)
at java.lang.Throwable.<init>(Throwable.java)
at java.lang.NullPointerException.<init>(NullPointerException.java:60)
at
org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringActions.convertToEnclosingOrPrimaryType(RefactoringActions.java:50)
at
org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringActions.getEnclosingOrPrimaryType(RefactoringActions.java:40)
at
org.eclipse.jdt.ui.actions.ExtractInterfaceAction.canEnable(ExtractInterfaceAction.java:144)
at
org.eclipse.jdt.ui.actions.ExtractInterfaceAction.selectionChanged(ExtractInterfaceAction.java:137)
at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchSelectionChanged(SelectionDispatchAction.java:202)
at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.update(SelectionDispatchAction.java:114)
at
org.eclipse.jdt.ui.actions.RefactorActionGroup.refactorMenuShown(RefactorActionGroup.java:461)
at
org.eclipse.jdt.ui.actions.RefactorActionGroup.access$0(RefactorActionGroup.java:446)
at
org.eclipse.jdt.ui.actions.RefactorActionGroup$1.menuAboutToShow(RefactorActionGroup.java:401)
at org.eclipse.jface.action.MenuManager.fireAboutToShow(MenuManager.java:286)
at org.eclipse.jface.action.MenuManager.handleAboutToShow(MenuManager.java:370)
at org.eclipse.jface.action.MenuManager.access$0(MenuManager.java:367)
at org.eclipse.jface.action.MenuManager$2.menuShown(MenuManager.java:383)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java)
at org.eclipse.swt.widgets.Control.WM_INITMENUPOPUP(Control.java:3295)
at org.eclipse.swt.widgets.Control.windowProc(Control.java)
at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java)
at org.eclipse.swt.widgets.Display.windowProc(Display.java)
at org.eclipse.swt.internal.win32.OS.TrackPopupMenu(Native Method)
at org.eclipse.swt.widgets.Menu._setVisible(Menu.java:222)
at org.eclipse.swt.widgets.Display.runPopups(Display.java)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1541)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1515)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:257)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:90)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:288)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:232)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:116)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:41)
at java.lang.reflect.Method.invoke(Method.java:386)
at org.eclipse.core.launcher.Main.basicRun(Main.java:315)
at org.eclipse.core.launcher.Main.run(Main.java:740)
at org.eclipse.core.launcher.Main.main(Main.java:724)
</nowiki>
<nowiki>From the Java Main tab, have no project specified and click on Search...
Cancel the search.
The New and Delete buttons remain disabled from the Search.
</nowiki>
<nowiki>build I20040324-0800 + latest from HEAD

WorkbenchPlugin.initializeDefaultPreferences has been changed to have
		store.setDefault(IPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, true);

I previously changed it to 
		store.setDefault(IPreferenceConstants.SHOW_TRADITIONAL_STYLE_TABS, false);
so that RCP apps would get traditional tabs by default.
The IDE overrides the default in IDEWorkbenchAdvisor.preStartup.
</nowiki>
<nowiki>Build 20040325
I have a class in bundle A that is trying to load a resource from a fragment of
bundle B.  The URL to the resource is passed to bundle A, so it's doing a simple
URL.openStream().  I get the following exception:

java.lang.NullPointerException
	at
org.eclipse.osgi.framework.internal.protocol.bundleresource.Handler.findBundleEntry(Handler.java:45)
	at
org.eclipse.osgi.framework.adaptor.core.BundleResourceHandler.openConnection(BundleResourceHandler.java:162)
	at java.net.URL.openConnection(URL.java:896)
	at java.net.URL.openStream(URL.java:913)
	at com.bundleA.someClass

This used to work.  The NullPointer is the result of BundleFragment returning
null in its getBundleLoader() method.  Should this return the BundleHost's
BundleLoader?
</nowiki>
<nowiki>[TESTCASE INCLUDED @ THE END]

[ENVIRONMENT:]
Version SWT 3.044.
Platform PocketPC - Windows CE (PocketPC 2003) on ARM

[STEPS TO RECREATE:]
Create a Shell with style SWT.MIN or SWT.NONE.
Add the shell to a Display.
Do not setBounds on the Shell.
Open the shell.

[OBSERVATIONS:]
The shell appears maximised.
There is an X botton at the top right corner.
The title is different from that of the Shell (it is that of the prev window).
Tapping on the X does not minimize the window.
Selecting the Shell from the tasks list makes the Shell's title appear,
but the Shell can still not be minimized.  Tapping on the X button now
makes it disappear.
Trying to close the Shell from the tasks list makes the application hang,
and forces a PocketPC soft reboot.

[COMPARISON:]
In previous versions, tapping on the X button would minimize the Shell and 
closing it from the tasks list would trigger an SWT.Close event.

To be run on a PocketPC device:
[TESTCASE]

import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
public class SWTHelloWorld {
	public static void main(String[] args) {
		Display display = new Display();
		final Shell shell = new Shell(display, SWT.CLIP_CHILDREN | 
SWT.CLIP_SIBLINGS | SWT.MIN);
		shell.setText("Das erste Fenster");
		//shell.setBounds(0, 120, 160, 100);
		Button button = new Button(shell, SWT.PUSH);
		button.setText("Klick mich!");
		button.setBounds(0, 0, 120, 30);
		button.addSelectionListener(new SelectionListener() {
			public void widgetSelected(SelectionEvent e) {
				System.out.println("Danke");
				shell.dispose();
			}

			public void widgetDefaultSelected(SelectionEvent e) {
				// TODO Auto-generated method stub
				
			}
		});
		shell.addListener(SWT.Close, new Listener() {
			public void handleEvent(Event event) {
				System.out.println("Close event passed by!") ;
				try {
					Thread.sleep(1000) ;
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
		}) ;
		shell.addShellListener(new ShellListener() {

			public void shellActivated(ShellEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void shellClosed(ShellEvent e) {
				System.out.println("Shell Closed") ;
			}

			public void shellDeactivated(ShellEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void shellDeiconified(ShellEvent e) {
				// TODO Auto-generated method stub
				
			}

			public void shellIconified(ShellEvent e) {
				// TODO Auto-generated method stub
				
			}
			
		}) ;
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
		display.dispose();
	}
}
// Taken from http://www.3plus4software.de/sma/Ein_SWT_Tutorial.html

[JUSTIFICATION 4 PRIORITY]
Failing standards checks.
</nowiki>
<nowiki>On Windows XP, loading the IE control within Eclipse (using the default SWT Browser Widget) and calling 
a page with the Shockwave Plug-in causes the Workbench to crash. This was a bug in version 2.0, but 
was fixed. 

The version of the Shockwave Plug-in being used is 10.0 (most current version). We are passing an 
exported Macromedia Director (.dcr) file to the system. Using an external editor works fine (which is to 
be expected), but we cannot call within the workbench. 

This is a critical issue for our team as we are creating a hybrid thick client/web-based UI for an 
enterprise application.
</nowiki>
<nowiki>During the code review, I've noticed that preferences are loaded using the
SafeFileInputStream whereas SafeFileOutputStream is not used. Is it normal?
</nowiki>
<nowiki>When the Display view is closed during a session (hidden), we should persist its 
contents. This would allow us to let the debugger automatically open/close the 
Display view without worrying about losing state.
</nowiki>
<nowiki>Bug 57173 explains why activity filtering isn't working in the Breakpoints view right now. Unfortunately, 
the fix requires a plugin identifier, which aren't available for breakpoints.

Bug 58731 covers a possible solution from the platform.
</nowiki>
<nowiki>build I20040420-1300

- started eclipse in Java perspective
- I believe I selected a project in the packager explorer, then chose Window >
Preferences
- when the prefs dialog came up (with the Workbench page selected), I then got a
progress dialog
- it showed a waiting user operation and a waiting workspace build



Full thread dump Java HotSpot(TM) Client VM (1.4.2_01-b06 mixed mode):

"All Types Caching" prio=4 tid=0x21125410 nid=0x7cc in Object.wait()
[2266f000..2266fd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x11a81550> (a
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob)
        at
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob.joinRun(ImplicitJobs.java:122)
        - locked <0x11a81550> (a
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob)
        at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:295)
        at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:155)
        at
org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:95)
        at
org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1595)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1635)
        at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:744)
        at
org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:2605)
        at org.eclipse.jdt.core.JavaCore$5.run(JavaCore.java:3448)
        at
org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:34)
        at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1640)
        at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3262)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:3431)
        at
org.eclipse.pde.internal.core.ModelEntry.updateClasspathContainer(ModelEntry.java:109)
        at
org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:40)
        at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:1178)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:609)
        at org.eclipse.core.runtime.Platform.run(Platform.java:541)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1173)
        at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1841)
        at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1755)
        at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1727)
        at
org.eclipse.jdt.internal.core.search.JavaSearchScope.add(JavaSearchScope.java:78)
        at
org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.initialize(JavaWorkspaceScope.java:79)
        at
org.eclipse.jdt.internal.core.search.JavaSearchScope.<init>(JavaSearchScope.java:52)
        at
org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.<init>(JavaWorkspaceScope.java:30)
        at
org.eclipse.jdt.core.search.SearchEngine.createWorkspaceScope(SearchEngine.java:423)
        at
org.eclipse.jdt.internal.corext.util.AllTypesCache.search(AllTypesCache.java:502)
        at
org.eclipse.jdt.internal.corext.util.AllTypesCache$TypeCacher.doSearchTypes(AllTypesCache.java:180)
        at
org.eclipse.jdt.internal.corext.util.AllTypesCache$TypeCacher.run(AllTypesCache.java:149)

"Worker-4" prio=5 tid=0x211a3bf8 nid=0x7c4 in Object.wait() [2249f000..2249fd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x127c5690> (a
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob)
        at
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob.joinRun(ImplicitJobs.java:122)
        - locked <0x127c5690> (a
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob)
        at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:295)
        at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:155)
        at
org.eclipse.ui.views.markers.internal.MarkerView.internalRefresh(MarkerView.java:162)
        at
org.eclipse.ui.views.markers.internal.MarkerView.access$2(MarkerView.java:151)
        at
org.eclipse.ui.views.markers.internal.MarkerView$3.run(MarkerView.java:237)
        at
org.eclipse.ui.views.markers.internal.RestartableJob$2.run(RestartableJob.java:86)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:66)

"Worker-2" prio=5 tid=0x21c14458 nid=0x7bc in Object.wait() [223bf000..223bfd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x112015e0> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:209)
        - locked <0x112015e0> (a org.eclipse.core.internal.jobs.WorkerPool)
        at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:236)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java:59)

"Java indexing" daemon prio=4 tid=0x2110be20 nid=0x76c in Object.wait()
[222bf000..222bfd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x11be9bc8> (a
org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Object.wait(Object.java:429)
        at
org.eclipse.jdt.internal.core.search.processing.JobManager.run(JobManager.java:323)
        - locked <0x11be9bc8> (a
org.eclipse.jdt.internal.core.search.indexing.IndexManager)
        at java.lang.Thread.run(Thread.java:534)

"Start Level Event Dispatcher" daemon prio=5 tid=0x21137410 nid=0x7b0 in
Object.wait() [2124f000..2124fd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x10f90fb0> (a
org.eclipse.osgi.framework.eventmgr.EventThread)
        at java.lang.Object.wait(Object.java:429)
        at
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:149)
        - locked <0x10f90fb0> (a org.eclipse.osgi.framework.eventmgr.EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:107)

"Framework Event Dispatcher" daemon prio=5 tid=0x21025410 nid=0x7ac in
Object.wait() [2120f000..2120fd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x10f91000> (a
org.eclipse.osgi.framework.eventmgr.EventThread)
        at java.lang.Object.wait(Object.java:429)
        at
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:149)
        - locked <0x10f91000> (a org.eclipse.osgi.framework.eventmgr.EventThread)
        at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:107)

"Signal Dispatcher" daemon prio=10 tid=0x00970e90 nid=0x7a0 waiting on condition
[0..0]

"YJP CPU Sampler" daemon prio=5 tid=0x0023fdb0 nid=0x798 runnable [0..0]

"YJP RequestServer" daemon prio=5 tid=0x00970c18 nid=0x794 runnable
[20e6f000..20e6fd90]
        at java.net.PlainSocketImpl.socketAccept(Native Method)
        at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:353)
        - locked <0x10f911a8> (a java.net.PlainSocketImpl)
        at java.net.ServerSocket.implAccept(ServerSocket.java:448)
        at java.net.ServerSocket.accept(ServerSocket.java:419)
        at com.yourkit.runtime.RequestServer.startServerImpl(RequestServer.java:180)
        at com.yourkit.runtime.RequestServer.access$000(RequestServer.java:18)
        at com.yourkit.runtime.RequestServer$1.run(RequestServer.java:56)

"Finalizer" daemon prio=9 tid=0x0091e1e8 nid=0x790 in Object.wait()
[209ef000..209efd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x10f912c0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
        - locked <0x10f912c0> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x0091ce38 nid=0x78c in Object.wait()
[209af000..209afd90]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x10f91328> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:429)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
        - locked <0x10f91328> (a java.lang.ref.Reference$Lock)

"main" prio=7 tid=0x00234dc0 nid=0x780 runnable [6e000..6fc3c]
        at org.eclipse.swt.internal.win32.OS.WaitMessage(Native Method)
        at org.eclipse.swt.widgets.Display.sleep(Display.java:2896)
        at org.eclipse.jface.window.Window.runEventLoop(Window.java:671)
        at org.eclipse.jface.window.Window.open(Window.java:650)
        at
org.eclipse.ui.internal.OpenPreferencesAction.run(OpenPreferencesAction.java:72)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
        at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:550)
        at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:502)
        at
org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:435)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:769)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2592)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2270)
        at
org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.runEventLoop(EventLoopProgressMonitor.java:114)
        at
org.eclipse.ui.internal.dialogs.EventLoopProgressMonitor.isCanceled(EventLoopProgressMonitor.java:94)
        at
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob.isCanceled(ImplicitJobs.java:142)
        at
org.eclipse.core.internal.jobs.ImplicitJobs$ThreadJob.joinRun(ImplicitJobs.java:110)
        at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:295)
        at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:155)
        at
org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:95)
        at
org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1595)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1635)
        at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:744)
        at
org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:2605)
        at org.eclipse.jdt.core.JavaCore$5.run(JavaCore.java:3448)
        at
org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:34)
        at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
        at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1640)
        at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3262)
        at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:3431)
        at
org.eclipse.pde.internal.core.ModelEntry.updateUnknownClasspathContainer(ModelEntry.java:151)
        at
org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:38)
        at org.eclipse.jdt.core.JavaCore$1.run(JavaCore.java:1178)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:609)
        at org.eclipse.core.runtime.Platform.run(Platform.java:541)
        at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1173)
        at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1841)
        at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1755)
        at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1727)
        at
org.eclipse.jdt.internal.core.JavaProject.buildStructure(JavaProject.java:261)
        at org.eclipse.jdt.internal.core.Openable.generateInfos(Openable.java:183)
        at
org.eclipse.jdt.internal.core.JavaElement.openWhenClosed(JavaElement.java:567)
        at
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:304)
        at
org.eclipse.jdt.internal.core.JavaElement.getElementInfo(JavaElement.java:290)
        at
org.eclipse.jdt.internal.core.JavaElement.getChildren(JavaElement.java:245)
        at
org.eclipse.jdt.internal.core.JavaProject.getPackageFragmentRoots(JavaProject.java:1557)
        at
org.eclipse.jdt.ui.actions.OrganizeImportsAction.hasSourceFolders(OrganizeImportsAction.java:251)
        at
org.eclipse.jdt.ui.actions.OrganizeImportsAction.isEnabled(OrganizeImportsAction.java:237)
        at
org.eclipse.jdt.ui.actions.OrganizeImportsAction.selectionChanged(OrganizeImportsAction.java:150)
        at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchSelectionChanged(SelectionDispatchAction.java:200)
        at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.selectionChanged(SelectionDispatchAction.java:195)
        at org.eclipse.jface.viewers.Viewer$2.run(Viewer.java:159)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:609)
        at org.eclipse.core.runtime.Platform.run(Platform.java:541)
        at org.eclipse.jface.viewers.Viewer.fireSelectionChanged(Viewer.java:157)
        at
org.eclipse.jface.viewers.StructuredViewer.updateSelection(StructuredViewer.java:1310)
        at
org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:666)
        at
org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:690)
        at
org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:178)
        at org.eclipse.jface.util.OpenStrategy.access$3(OpenStrategy.java:173)
        at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:309)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:769)
        at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2592)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2270)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1437)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1408)
        at
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:244)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:140)
        at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:90)
        at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:280)
        at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:240)
        at
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:117)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:267)
        at org.eclipse.core.launcher.Main.run(Main.java:699)
        at org.eclipse.core.launcher.Main.main(Main.java:683)

"VM Thread" prio=5 tid=0x0095cd38 nid=0x788 runnable

"VM Periodic Task Thread" prio=10 tid=0x0095e168 nid=0x7a8 waiting on condition
"Suspend Checker Thread" prio=10 tid=0x00970d80 nid=0x79c runnable
</nowiki>
<nowiki>repro with Eclipse Platform

Version: 3.0.0
Build id: 200403261517

Create a java project and add a java class named C1 (using Java class Wizard).
Now try to create the second class with same name, different case (c1) in same 
package.
Actual: you get an error message : Creation Element Failed...
and exceptions in log.
Element will not get created

Same happens for other elements type (Interface, Java Package....)

Expected: this should be resticted by adding validation in class wizard for 
Name field so will not accept creating elements with same name different case 
in same location.
If .java file created without using th ewizard and error message should appear 
but no errors in log

See below the error log:
!ENTRY org.eclipse.jdt.ui 4 10001 Apr 28, 2004 09:33:29.911
!MESSAGE Internal Error
!STACK 1
Java Model Exception: Core Exception [code 275] A resource exists with a 
different case: /JavaPj/C1.java.
	at java.lang.Throwable.<init>(Throwable.java)
	at java.lang.Throwable.<init>(Throwable.java)
	at org.eclipse.core.runtime.CoreException.<init>(CoreException.java:35)
	at org.eclipse.jdt.core.JavaModelException.<init>
(JavaModelException.java:58)
	at org.eclipse.jdt.internal.core.JavaModelOperation.createFile
(JavaModelOperation.java:254)
	at 
org.eclipse.jdt.internal.core.CreateCompilationUnitOperation.executeOperation
(CreateCompilationUnitOperation.java:119)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:700)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1559)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation
(JavaModelOperation.java:744)
	at org.eclipse.jdt.internal.core.PackageFragment.createCompilationUnit
(PackageFragment.java:145)
	at org.eclipse.jdt.ui.wizards.NewTypeWizardPage.createType
(NewTypeWizardPage.java:1433)
	at org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard.finishPage
(NewClassCreationWizard.java:50)
	at org.eclipse.jdt.internal.ui.wizards.NewElementWizard$2.run
(NewElementWizard.java:100)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation
(BatchOperation.java:34)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:700)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1559)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3196)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3153)
	at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run
(WorkbenchRunnableAdapter.java:50)
	at org.eclipse.jface.operation.ModalContext.runInCurrentThread
(ModalContext.java:302)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:252)
	at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:756)
	at org.eclipse.jdt.internal.ui.wizards.NewElementWizard.performFinish
(NewElementWizard.java:107)
	at 
org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard.performFinish
(NewClassCreationWizard.java:70)
	at org.eclipse.jface.wizard.WizardDialog.finishPressed
(WizardDialog.java:606)
	at org.eclipse.jface.wizard.WizardDialog.buttonPressed
(WizardDialog.java:319)
	at org.eclipse.jface.dialogs.Dialog$1.widgetSelected(Dialog.java:413)
	at org.eclipse.swt.widgets.TypedListener.handleEvent
(TypedListener.java:89)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java)
	at org.eclipse.jface.window.Window.open(Window.java:650)
	at org.eclipse.ui.internal.ide.NewWizardShortcutAction.run
(NewWizardShortcutAction.java:98)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection
(ActionContributionItem.java:550)
	at org.eclipse.jface.action.ActionContributionItem.access$2
(ActionContributionItem.java:502)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent
(ActionContributionItem.java:435)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1562)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1536)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench
(Workbench.java:257)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139)
	at org.eclipse.ui.internal.ide.IDEApplication.run
(IDEApplication.java:90)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run
(PlatformActivator.java:277)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:239)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:117)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:84)
	at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:59)
	at java.lang.reflect.Method.invoke(Method.java:389)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:267)
	at org.eclipse.core.launcher.Main.run(Main.java:692)
	at org.eclipse.core.launcher.Main.main(Main.java:676)
Caused by: org.eclipse.core.internal.resources.ResourceException: A resource 
exists with a different case: /JavaPj/C1.java.
	at java.lang.Throwable.<init>(Throwable.java)
	at java.lang.Throwable.<init>(Throwable.java)
	at org.eclipse.core.runtime.CoreException.<init>(CoreException.java:35)
	at org.eclipse.core.internal.resources.ResourceException.<init>
(ResourceException.java:30)
	at org.eclipse.core.internal.resources.Resource.checkDoesNotExist
(Resource.java:270)
	at org.eclipse.core.internal.resources.File.create(File.java:110)
	at org.eclipse.jdt.internal.core.JavaModelOperation.createFile
(JavaModelOperation.java:248)
	at 
org.eclipse.jdt.internal.core.CreateCompilationUnitOperation.executeOperation
(CreateCompilationUnitOperation.java:119)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:700)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1559)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation
(JavaModelOperation.java:744)
	at org.eclipse.jdt.internal.core.PackageFragment.createCompilationUnit
(PackageFragment.java:145)
	at org.eclipse.jdt.ui.wizards.NewTypeWizardPage.createType
(NewTypeWizardPage.java:1433)
	at org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard.finishPage
(NewClassCreationWizard.java:50)
	at org.eclipse.jdt.internal.ui.wizards.NewElementWizard$2.run
(NewElementWizard.java:100)
	at org.eclipse.jdt.internal.core.BatchOperation.executeOperation
(BatchOperation.java:34)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run
(JavaModelOperation.java:700)
	at org.eclipse.core.internal.resources.Workspace.run
(Workspace.java:1559)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3196)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3153)
	at org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter.run
(WorkbenchRunnableAdapter.java:50)
	at org.eclipse.jface.operation.ModalContext.runInCurrentThread
(ModalContext.java:302)
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:252)
	at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:756)
	at org.eclipse.jdt.internal.ui.wizards.NewElementWizard.performFinish
(NewElementWizard.java:107)
	at 
org.eclipse.jdt.internal.ui.wizards.NewClassCreationWizard.performFinish
(NewClassCreationWizard.java:70)
	at org.eclipse.jface.wizard.WizardDialog.finishPressed
(WizardDialog.java:606)
	at org.eclipse.jface.wizard.WizardDialog.buttonPressed
(WizardDialog.java:319)
	at org.eclipse.jface.dialogs.Dialog$1.widgetSelected(Dialog.java:413)
	at org.eclipse.swt.widgets.TypedListener.handleEvent
(TypedListener.java:89)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java)
	at org.eclipse.jface.window.Window.open(Window.java:650)
	at org.eclipse.ui.internal.ide.NewWizardShortcutAction.run
(NewWizardShortcutAction.java:98)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection
(ActionContributionItem.java:550)
	at org.eclipse.jface.action.ActionContributionItem.access$2
(ActionContributionItem.java:502)
	at org.eclipse.jface.action.ActionContributionItem$5.handleEvent
(ActionContributionItem.java:435)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1562)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1536)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench
(Workbench.java:257)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:139)
	at org.eclipse.ui.internal.ide.IDEApplication.run
(IDEApplication.java:90)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run
(PlatformActivator.java:277)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:239)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:117)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:84)
	at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:59)
	at java.lang.reflect.Method.invoke(Method.java:389)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:267)
	at org.eclipse.core.launcher.Main.run(Main.java:692)
	at org.eclipse.core.launcher.Main.main(Main.java:676)
</nowiki>
<nowiki>1. Run the following testcase
2. Click on the label on the left side, and hold the button down
3. Move the button over the label on the right, without releasing the button
4. After a few seconds, release the button over the right label

Notice that the mouseEnter event isn't fired until the button is released.  I 
believe it should be fired regardless of whether the button is down (i.e. the 
second you cross over to the right label in step 3).

--- testcase ---
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseMoveListener;
import org.eclipse.swt.events.MouseTrackListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;

public class SWTTestMouseExitEnterEvents implements MouseTrackListener, 
MouseMoveListener{

	private Display	display;
	private Shell	shell;

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
	static public void main(String[] args) {
		new SWTTestMouseExitEnterEvents().runMain(args);
	}

//-------------------------------------------------------------------
//
//-------------------------------------------------------------------
	private void runMain(String[] args) {

		display = new Display();
	
		shell = new Shell(display);
		shell.setText(getClass().getName());
		shell.setLayout(new FillLayout());
		shell.setSize(300, 300);
		
		Label label1 = new Label(shell,SWT.BORDER);
		Label label2 = new Label(shell,SWT.BORDER);
		label1.setText("left");
		label2.setText("right");
		
		label1.addMouseTrackListener(this);
		label2.addMouseTrackListener(this);
		label1.addMouseMoveListener(this);
		label2.addMouseMoveListener(this);
		
		shell.open();
		while (!shell.isDisposed()) {
			if (!display.readAndDispatch()) {
				display.sleep();
			}
		}
	}


	public void mouseEnter(MouseEvent e) {
		System.out.println("mouseEntered " + e.widget);
	}

	public void mouseExit(MouseEvent e) {
		System.out.println("mouseExited " + e.widget);
	}

	public void mouseHover(MouseEvent e) {
	}

	public void mouseMove(MouseEvent e) {
		System.out.println("mouseMoved " + e.widget);
	}

}
</nowiki>
<nowiki>If the text on the buttons on the right is larger than the height of the image 
alone, then the buttons become cut off.  This can be easily seen by bumping up 
the font size on the OS.  It happens by default on my machine. 
 
This should be easy enough to fix, but has a fairly significant visual effect 
for Linux users.
</nowiki>
<nowiki>The package description is too brief and does not really explain to me why all
of these classes are together.  It could be much more detailed and give pointers
to specific classes that are defined here.

Warnings:
AbstractElementListSelectionDialog.java:72: warning - @param argument
"ignoreCase" is not a parameter name.
AbstractElementListSelectionDialog.java:72: warning - @param argument
"multipleSelection" is not a parameter name.
ISelectionValidator.java:23: warning - Tag @see: reference not found:
ContainerSelectionDialog
SelectionDialog.java:79: warning - @param argument "parent" is not a parameter name.
SelectionDialog.java:170: warning - @param argument "the" is not a parameter name.
SelectionDialog.java:189: warning - @param argument "Object[]" is not a
parameter name.
TwoPaneElementSelector.java:48: warning - @param argument "paren" is not a
parameter name.
TwoPaneElementSelector.java:48: warning - @param argument "qualifier" is not a
parameter name.
TypeFilteringDialog.java:66: warning - @param argument "Shell" is not a
parameter name.
TypeFilteringDialog.java:66: warning - @param argument "Collection" is not a
parameter name.
TypeFilteringDialog.java:80: warning - @param argument "Shell" is not a
parameter name.
TypeFilteringDialog.java:80: warning - @param argument "Collection" is not a
parameter name.
TypeFilteringDialog.java:80: warning - @param argument "String" is not a
parameter name.

FilteredList.FilterMatcher:
- Undocumented.

AbstractElementListSelectionDialog:
- create() undocumented.
- open() undocumented.

CheckedTreeSelectionDialog:
- create() undocumented.
- open() undocumented.
- updateOKStatus() undocumented.

ElementTreeSelectionDialog:
- access$setResult() undocumented.
- access$superButtonPressed() undocumented.
- create() undocumented.
- open() undocumented.
- updateOKStatus() undocumented.

ListDialog:
- getTableStyle() undocumented.
- getTableViewer() undocumented.
- setInput() undocumented.
- setContentProvider() undocumented.
- setLabelProvider() undocumented.
- setAddCancelButton() undocumented.

ListSelectionDialog:
- configureShell() undocumented.

PropertyPage:
- getElement() undocumented.

TypeFilteringDialog:
- configureShell() undocumented.
</nowiki>

This bug only contains changes to javadoc files, and there are really multiple separate bugs. In a number of cases, it'd actually be possible for the text approach to identify the origins, but as this evaluation ignores changes to comments, it can't.
<nowiki>build I20040505 2am.

there was an error in the java editor opening a file, however after this error 
occured we still try to give focus to this editor and get into an infinite 
loop.. .see stack trace below


	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160)
	at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599)
	at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037)
	at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447)
	at org.eclipse.jface.window.ApplicationWindow.run
(ApplicationWindow.java:610)
	at org.eclipse.ui.internal.WorkbenchWindow.run
(WorkbenchWindow.java:1678)
	at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit
(AbstractTextEditor.java:2155)
	at org.eclipse.ui.texteditor.AbstractTextEditor.init
(AbstractTextEditor.java:2173)
	at org.eclipse.ui.internal.EditorManager.createSite
(EditorManager.java:569)
	at org.eclipse.ui.internal.EditorManager.openInternalEditor
(EditorManager.java:633)
	at org.eclipse.ui.internal.EditorManager.access$7
(EditorManager.java:619)
	at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:604)
	at org.eclipse.core.runtime.Platform.run(Platform.java:545)
	at org.eclipse.ui.internal.EditorManager.busyRestoreEditor
(EditorManager.java:773)
	at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766)
	at org.eclipse.swt.custom.BusyIndicator.showWhile
(BusyIndicator.java:84)
	at org.eclipse.ui.internal.EditorManager.restoreEditor
(EditorManager.java:762)
	at org.eclipse.ui.internal.EditorManager$Editor.getEditor
(EditorManager.java:1136)
	at org.eclipse.ui.internal.EditorManager$Editor.getPart
(EditorManager.java:1128)
	at org.eclipse.ui.internal.PartPane.requestActivation
(PartPane.java:246)
	at org.eclipse.ui.internal.EditorPane.requestActivation
(EditorPane.java:150)
	at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160)
	at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599)
	at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037)
	at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447)
	at org.eclipse.jface.window.ApplicationWindow.run
(ApplicationWindow.java:610)
	at org.eclipse.ui.internal.WorkbenchWindow.run
(WorkbenchWindow.java:1678)
	at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit
(AbstractTextEditor.java:2155)
	at org.eclipse.ui.texteditor.AbstractTextEditor.init
(AbstractTextEditor.java:2173)
	at org.eclipse.ui.internal.EditorManager.createSite
(EditorManager.java:569)
	at org.eclipse.ui.internal.EditorManager.openInternalEditor
(EditorManager.java:633)
	at org.eclipse.ui.internal.EditorManager.access$7
(EditorManager.java:619)
	at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:604)
	at org.eclipse.core.runtime.Platform.run(Platform.java:545)
	at org.eclipse.ui.internal.EditorManager.busyRestoreEditor
(EditorManager.java:773)
	at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766)
	at org.eclipse.swt.custom.BusyIndicator.showWhile
(BusyIndicator.java:84)
	at org.eclipse.ui.internal.EditorManager.restoreEditor
(EditorManager.java:762)
	at org.eclipse.ui.internal.EditorManager$Editor.getEditor
(EditorManager.java:1136)
	at org.eclipse.ui.internal.EditorManager$Editor.getPart
(EditorManager.java:1128)
	at org.eclipse.ui.internal.PartPane.requestActivation
(PartPane.java:246)
	at org.eclipse.ui.internal.EditorPane.requestActivation
(EditorPane.java:150)
	at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160)
	at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599)
	at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037)
	at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447)
	at org.eclipse.jface.window.ApplicationWindow.run
(ApplicationWindow.java:610)
	at org.eclipse.ui.internal.WorkbenchWindow.run
(WorkbenchWindow.java:1678)
	at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit
(AbstractTextEditor.java:2155)
	at org.eclipse.ui.texteditor.AbstractTextEditor.init
(AbstractTextEditor.java:2173)
	at org.eclipse.ui.internal.EditorManager.createSite
(EditorManager.java:569)
	at org.eclipse.ui.internal.EditorManager.openInternalEditor
(EditorManager.java:633)
	at org.eclipse.ui.internal.EditorManager.access$7
(EditorManager.java:619)
	at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:604)
	at org.eclipse.core.runtime.Platform.run(Platform.java:545)
	at org.eclipse.ui.internal.EditorManager.busyRestoreEditor
(EditorManager.java:773)
	at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766)
	at org.eclipse.swt.custom.BusyIndicator.showWhile
(BusyIndicator.java:84)
	at org.eclipse.ui.internal.EditorManager.restoreEditor
(EditorManager.java:762)
	at org.eclipse.ui.internal.EditorManager$Editor.getEditor
(EditorManager.java:1136)
	at org.eclipse.ui.internal.EditorManager$Editor.getPart
(EditorManager.java:1128)
	at org.eclipse.ui.internal.PartPane.requestActivation
(PartPane.java:246)
	at org.eclipse.ui.internal.EditorPane.requestActivation
(EditorPane.java:150)
	at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160)
	at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599)
	at org.eclipse.swt.widgets.Control.setFocus(Control.java:2037)
	at org.eclipse.swt.widgets.Composite.setFocus(Composite.java:447)
	at org.eclipse.jface.window.ApplicationWindow.run
(ApplicationWindow.java:610)
	at org.eclipse.ui.internal.WorkbenchWindow.run
(WorkbenchWindow.java:1678)
	at org.eclipse.ui.texteditor.AbstractTextEditor.internalInit
(AbstractTextEditor.java:2155)
	at org.eclipse.ui.texteditor.AbstractTextEditor.init
(AbstractTextEditor.java:2173)
	at org.eclipse.ui.internal.EditorManager.createSite
(EditorManager.java:569)
	at org.eclipse.ui.internal.EditorManager.openInternalEditor
(EditorManager.java:633)
	at org.eclipse.ui.internal.EditorManager.access$7
(EditorManager.java:619)
	at org.eclipse.ui.internal.EditorManager$7.run(EditorManager.java:798)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:604)
	at org.eclipse.core.runtime.Platform.run(Platform.java:545)
	at org.eclipse.ui.internal.EditorManager.busyRestoreEditor
(EditorManager.java:773)
	at org.eclipse.ui.internal.EditorManager$6.run(EditorManager.java:766)
	at org.eclipse.swt.custom.BusyIndicator.showWhile
(BusyIndicator.java:84)
	at org.eclipse.ui.internal.EditorManager.restoreEditor
(EditorManager.java:762)
	at org.eclipse.ui.internal.EditorManager$Editor.getEditor
(EditorManager.java:1136)
	at org.eclipse.ui.internal.EditorManager$Editor.getPart
(EditorManager.java:1128)
	at org.eclipse.ui.internal.PartPane.requestActivation
(PartPane.java:246)
	at org.eclipse.ui.internal.EditorPane.requestActivation
(EditorPane.java:150)
	at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012)
!ENTRY org.eclipse.core.runtime 4 2 May 05, 2004 10:52:28.440
!MESSAGE Problems occurred when invoking code from plug-
in: "org.eclipse.core.runtime".
!STACK 0
java.lang.NullPointerException
	at 
org.eclipse.jdt.internal.ui.javaeditor.BasicJavaEditorActionContributor.setActi
veEditor(BasicJavaEditorActionContributor.java:242)
	at 
org.eclipse.jdt.internal.ui.javaeditor.BasicEditorActionContributor.setActiveEd
itor(BasicEditorActionContributor.java:83)
	at 
org.eclipse.jdt.internal.ui.javaeditor.CompilationUnitEditorActionContributor.s
etActiveEditor(CompilationUnitEditorActionContributor.java:59)
	at org.eclipse.ui.internal.EditorActionBars.partChanged
(EditorActionBars.java:291)
	at org.eclipse.ui.internal.WorkbenchPage$2.run(WorkbenchPage.java:474)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:604)
	at org.eclipse.core.runtime.Platform.run(Platform.java:545)
	at org.eclipse.ui.internal.WorkbenchPage.activatePart
(WorkbenchPage.java:466)
	at org.eclipse.ui.internal.WorkbenchPage.setActivePart
(WorkbenchPage.java:2596)
	at org.eclipse.ui.internal.WorkbenchPage.requestActivation
(WorkbenchPage.java:2307)
	at org.eclipse.ui.internal.PartPane.requestActivation
(PartPane.java:246)
	at org.eclipse.ui.internal.EditorPane.requestActivation
(EditorPane.java:150)
	at org.eclipse.ui.internal.PartPane.handleEvent(PartPane.java:226)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:801)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:913)
	at org.eclipse.swt.widgets.Control.sendFocusEvent(Control.java:1756)
	at org.eclipse.swt.widgets.Control.WM_SETFOCUS(Control.java:4120)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:3012)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160)
	at org.eclipse.swt.internal.win32.OS.SetFocus(Native Method)
	at org.eclipse.swt.widgets.Control.forceFocus(Control.java:599)
	at org.eclipse.swt.widgets.Control.setSavedFocus(Control.java:2262)
	at org.eclipse.swt.widgets.Decorations.restoreFocus
(Decorations.java:733)
	at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE
(Decorations.java:1477)
	at org.eclipse.swt.widgets.Shell.WM_ACTIVATE(Shell.java:1327)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:2949)
	at org.eclipse.swt.widgets.Decorations.windowProc
(Decorations.java:1449)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:3160)
	at org.eclipse.swt.internal.win32.OS.DestroyWindow(Native Method)
	at org.eclipse.swt.widgets.Control.destroyWidget(Control.java:504)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:369)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:371)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:486)
	at org.eclipse.jface.window.Window.close(Window.java:253)
	at org.eclipse.jface.dialogs.Dialog.close(Dialog.java:811)
	at 
org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.buttonPressed
(InternalErrorDialog.java:88)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:491)
	at org.eclipse.swt.widgets.TypedListener.handleEvent
(TypedListener.java:89)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2594)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2272)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:668)
	at org.eclipse.jface.window.Window.open(Window.java:648)
	at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.open
(InternalErrorDialog.java:71)
	at org.eclipse.ui.internal.ide.dialogs.InternalErrorDialog.openQuestion
(InternalErrorDialog.java:173)
	at org.eclipse.ui.internal.ide.IDEExceptionHandler.openQuestionDialog
(IDEExceptionHandler.java:151)
	at org.eclipse.ui.internal.ide.IDEExceptionHandler.handleException
(IDEExceptionHandler.java:83)
	at org.eclipse.ui.internal.ide.IDEWorkbenchAdvisor.eventLoopException
(IDEWorkbenchAdvisor.java:230)
	at org.eclipse.ui.internal.ExceptionHandler.handleException
(ExceptionHandler.java:53)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1357)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1324)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench
(Workbench.java:243)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:140)
	at org.eclipse.ui.internal.ide.IDEApplication.run
(IDEApplication.java:90)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run
(PlatformActivator.java:283)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:242)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:119)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:269)
	at org.eclipse.core.launcher.Main.run(Main.java:700)
	at org.eclipse.core.launcher.Main.main(Main.java:684)
</nowiki>
<nowiki>Eclipse 200405060200  on Solaris

When doing a build, you can't the details.   There is a drawing problem.  If 
you keep on pressing the details button, you will lose almost the whole dialog.
</nowiki>
<nowiki>Build 20040506

When some binary file references a non defined type, the compilation process 
is terminated, with an indication that there was an indirect reference from 
binaries. The problem is that there is no mention of the original portion of 
source which triggered to load these inconsistent binaries.

Highlighting the offending source would improve lisibility of these errors. 
There are cases where the classpath is simply broken, but it could just be 
that someone did accidentally expose some internal code through an API. In 
case the latter is true, it is really hard to figure the offending reference 
from sources.
</nowiki>
<nowiki>I got this exception. I think it was due to the fact I remove a method in which
I had a breakpoint.

org.eclipse.debug.core.DebugException: Breakpoint does not have an associated
marker.
at org.eclipse.debug.core.model.Breakpoint.ensureMarker(Breakpoint.java:264)
at
org.eclipse.jdt.internal.debug.core.breakpoints.JavaBreakpoint.isInstalled(JavaBreakpoint.java:710)
at
org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.computeBreakpointAdornmentFlags(JDIModelPresentation.java:868)
at
org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getJavaBreakpointImage(JDIModelPresentation.java:691)
at
org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getBreakpointImage(JDIModelPresentation.java:663)
at
org.eclipse.jdt.internal.debug.ui.JDIModelPresentation.getImage(JDIModelPresentation.java:634)
at
org.eclipse.debug.internal.ui.LazyModelPresentation.getImage(LazyModelPresentation.java:95)
at
org.eclipse.debug.internal.ui.DelegatingModelPresentation.getImage(DelegatingModelPresentation.java:141)
at org.eclipse.jface.viewers.TableViewer.doUpdateItem(TableViewer.java:215)
at
org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:120)
at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:607)
at org.eclipse.core.runtime.Platform.run(Platform.java:668)
at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:1249)
at org.eclipse.jface.viewers.TableViewer.internalRefresh(TableViewer.java:506)
at org.eclipse.jface.viewers.TableViewer.internalRefresh(TableViewer.java:449)
at org.eclipse.jface.viewers.StructuredViewer$7.run(StructuredViewer.java:848)
at
org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:788)
at
org.eclipse.jface.viewers.CheckboxTableViewer.preservingSelection(CheckboxTableViewer.java:283)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:846)
at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:808)
at
org.eclipse.debug.internal.ui.views.breakpoints.BreakpointsView.becomesVisible(BreakpointsView.java:264)
at
org.eclipse.debug.ui.AbstractDebugView$DebugViewPartListener.partVisible(AbstractDebugView.java:159)
at org.eclipse.ui.internal.PartListenerList2$7.run(PartListenerList2.java:139)
at org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:607)
at org.eclipse.core.runtime.Platform.run(Platform.java:668)
at
org.eclipse.ui.internal.PartListenerList2.firePartVisible(PartListenerList2.java:137)
at org.eclipse.ui.internal.WorkbenchPage$1.propertyChange(WorkbenchPage.java:137)
at org.eclipse.ui.internal.LayoutPart.setVisible(LayoutPart.java:248)
at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:259)
at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:625)
at
org.eclipse.ui.internal.presentations.PresentableViewPart.setVisible(PresentableViewPart.java:114)
at
org.eclipse.ui.internal.presentations.DefaultPartPresentation.selectPart(DefaultPartPresentation.java:777)
at
org.eclipse.ui.internal.PartStack.refreshPresentationSelection(PartStack.java:717)
at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:315)
at org.eclipse.ui.internal.ViewStack.createControl(ViewStack.java:99)
at
org.eclipse.ui.internal.PartSashContainer.createControl(PartSashContainer.java:392)
at org.eclipse.ui.internal.PerspectiveHelper.activate(PerspectiveHelper.java:156)
at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:718)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:2683)
at org.eclipse.ui.internal.WorkbenchPage.busySetPerspective(WorkbenchPage.java:728)
at org.eclipse.ui.internal.WorkbenchPage.access$8(WorkbenchPage.java:713)
at org.eclipse.ui.internal.WorkbenchPage$12.run(WorkbenchPage.java:2826)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
at org.eclipse.ui.internal.WorkbenchPage.setPerspective(WorkbenchPage.java:2824)
at
org.eclipse.ui.internal.PerspectiveBarContributionItem.select(PerspectiveBarContributionItem.java:124)
at
org.eclipse.ui.internal.PerspectiveBarContributionItem$3.widgetSelected(PerspectiveBarContributionItem.java:114)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:89)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2725)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2390)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1353)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1324)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:243)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:90)
at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:298)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:249)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:126)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.eclipse.core.launcher.Main.basicRun(Main.java:269)
at org.eclipse.core.launcher.Main.run(Main.java:722)
at org.eclipse.core.launcher.Main.main(Main.java:706)
</nowiki>
<nowiki>20040511-1600

When you close a LaunchView something is still holding onto a reerence to it/

STEPS
1) Open Debug perspective while looking at references (I am using OptimizeIt)
2) Close the Launch View and garbage collect
3) Still there
4) Open the Launch view again and close again
5) Second reference still there.
</nowiki>
<nowiki>Build id: 200405131200, and earlier ones.

If you choose a workspace that is in use, an error message appears, but you can
no longer choose a new workspace - even those that are not in use. You must
cancel and try again.

Steps:
1. Open Eclipse with Workspace A.
2. Open Eclipse, choose Workspace A. (Obviously in use)
3. Try to choose Workspace B, or create a new workspace - (which will create the
folder, but still doesn't work)
</nowiki>
<nowiki>The syntax coloring settings should provide a preview in the same way as the 
Java Editor Java>Editor>Syntax.

Also there should be support to leverage italic
</nowiki>
<nowiki>0517 integration bulid

- retrieve the org.eclipse.swt.gtk package from dev.eclipse.org
- open any of its contained libswt-*.so files in an editor
- type some garbage in, Save it
- select the project, Compare With -> Latest from Head
- in the resulting Synchronize view double-click the changed file and the 
Binary Compare will show "First bytes differ at position X"
- click in this Binary Compare and you'll have (at least on gtk) a massive top-
to-bottom insertion cursor, shown in the next attachment

I'm guessing that this is a Text being created with style SINGLE in order to 
vertically center its contents, but this shows a bad side effect of doing this.
</nowiki>
<nowiki>I200405171219 + ZRH smoke plugin-export 20040518_1115

After start and shutdown of the Buildmeister runtime I found the following
exception. It looks like getTextPreferenceKey() in
AbstractAnnotationHover#getHoverInfo() at line 83 returned null.

java.lang.NullPointerException
	at
org.eclipse.core.internal.preferences.EclipsePreferences.internalGet(EclipsePreferences.java:479)
	at
org.eclipse.core.internal.preferences.EclipsePreferences.get(EclipsePreferences.java:349)
	at
org.eclipse.core.internal.preferences.PreferenceForwarder.contains(PreferenceForwarder.java:181)
	at
org.eclipse.ui.plugin.AbstractUIPlugin$CompatibilityPreferenceStore.contains(AbstractUIPlugin.java:277)
	at
org.eclipse.ui.texteditor.ChainedPreferenceStore.getVisibleStore(ChainedPreferenceStore.java:525)
	at
org.eclipse.ui.texteditor.ChainedPreferenceStore.getBoolean(ChainedPreferenceStore.java:166)
	at
org.eclipse.jdt.internal.ui.text.java.hover.AbstractAnnotationHover.getHoverInfo(AbstractAnnotationHover.java:83)
	at
org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo(BestMatchHover.java:102)
	at
org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo(JavaEditorTextHoverProxy.java:69)
	at
org.eclipse.jface.text.TextViewerHoverManager$4.run(TextViewerHoverManager.java:161)
</nowiki>
<nowiki>I20040518-gtk M9 test pass

It's going to be hard to reconstruct what I did, but I ended up with nested
output folders (will attach a screenshot of the property page).

+/- Steps:

1. Create project JUnit
2. import junit.zip, no separate source and output folders
3. Using the context menu in the package explorer, add source folder "test"
4. info: the output will be set to "bin". Ok.
-> Note that the standard directory with my junit source is not a source folder
any longer
5. Open the project properties, Java build path
6. Add a source folder, choose the root (Project)
-> error, "cannot nest Junit/test into Junit"
7. exclude JUnit/test/ from JUnit source folder
(cool caption telling me to add a slash to fully exclude the folder!)

Everything ok up to now.

8. Enable output folders per source folder
9. Set the output folder for test to "Junit/bin"
10. Set the output folder for the root dir to "Junit/bin/test" (no complaint)
11. leave the property page

Hm, now I have a different problem: The folder JUnit/bin/test does not exist
-> error in problems view telling me that the project cannot be built because of
this

We'll continue this way, cannot reproduce the original set up.
12. Over the context menu, choose to create JUnit/bin/test
-> I get this in the log:

!ENTRY org.eclipse.jdt.core 4 4 May 18, 2004 19:19:49.409
!MESSAGE JavaBuilder handling ImageBuilderInternalException while building: JUnit
!STACK 1
org.eclipse.core.internal.resources.ResourceException: Resource /JUnit/bin/test
does not exist.
        at java.lang.Throwable.<init>(Throwable.java)
        at java.lang.Throwable.<init>(Throwable.java)
        at org.eclipse.core.runtime.CoreException.<init>(CoreException.java:37)
        at
org.eclipse.core.internal.resources.ResourceException.<init>(ResourceException.java:30)
        at org.eclipse.core.internal.resources.Resource.checkExists(Resource.java)
        at org.eclipse.core.internal.resources.Container.members(Container.java)
        at org.eclipse.core.internal.resources.Container.members(Container.java)
        at
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.cleanOutputFolders(BatchImageBuilder.java:112)
        at
org.eclipse.jdt.internal.core.builder.BatchImageBuilder.build(BatchImageBuilder.java:35)
        at
org.eclipse.jdt.internal.core.builder.JavaBuilder.buildAll(JavaBuilder.java:213)
        at
org.eclipse.jdt.internal.core.builder.JavaBuilder.build(JavaBuilder.java:145)
        at
org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:532)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java)
        at org.eclipse.core.runtime.Platform.run(Platform.java)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:148)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:225)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:178)
        at
org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:205)
        at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java)
        at org.eclipse.core.runtime.Platform.run(Platform.java)
        at
org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:208)
        at
org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:244)
        at
org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:273)
        at
org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:151)
        at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:198)
        at org.eclipse.core.internal.jobs.Worker.run(Worker.java)
!SUBENTRY 1 org.eclipse.core.resources 4 368 May 18, 2004 19:19:49.434
!MESSAGE Resource /JUnit/bin/test does not exist.
</nowiki>
<nowiki>The code formatter doesn't do anything on some files. There is no error message.
I'm using eclipse 3.0M8. It doesn't matter what code formatting profile I choose.

With some experimenting, the shortest file I could create that doesn't work is this:

import java.util.Vector;

public class EclipseFormatTest
{
	public static void main(String[] args)
	{
		Vector v2 = new Vector();
		{{{String a = ((String) v2.get(0)).trim(), b = (String)
		v2.get(1), c = (String) v2
		.get(2);}}
		}
	}
}
</nowiki>
<nowiki>Some javadoc contains invalid javadoc tags.
I will attach a patch for the API types.
</nowiki>

Bug contains only javadoc changes, and with more than one bug in each file
<nowiki>I am getting this while renaming any Java projects using Package Explorer's
Refactor->Rename action.

!ENTRY org.eclipse.ltk.ui.refactoring 4 10000 May 19, 2004 10:17:15.865
!MESSAGE Internal Error
!STACK 0
java.lang.reflect.InvocationTargetException
	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:283)
	at
org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.run(RefactoringWizardDialog2.java:282)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizard.internalPerformFinish(RefactoringWizard.java:533)
	at
org.eclipse.ltk.ui.refactoring.UserInputWizardPage.performFinish(UserInputWizardPage.java:153)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizard.performFinish(RefactoringWizard.java:599)
	at
org.eclipse.ltk.internal.ui.refactoring.RefactoringWizardDialog2.okPressed(RefactoringWizardDialog2.java:406)
	at org.eclipse.jface.dialogs.Dialog.buttonPressed(Dialog.java:365)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:505)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:89)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2716)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2382)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:668)
	at org.eclipse.jface.window.Window.open(Window.java:648)
	at
org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:121)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RefactoringStarter.activate(RefactoringStarter.java:40)
	at
org.eclipse.jdt.internal.ui.refactoring.UserInterfaceStarter.activate(UserInterfaceStarter.java:54)
	at
org.eclipse.jdt.internal.ui.refactoring.reorg.RenameUserInterfaceStarter.activate(RenameUserInterfaceStarter.java:113)
	at org.eclipse.jdt.ui.refactoring.RenameSupport.openDialog(RenameSupport.java:108)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RenameJavaElementAction.run(RenameJavaElementAction.java:175)
	at
org.eclipse.jdt.internal.ui.refactoring.actions.RenameJavaElementAction.run(RenameJavaElementAction.java:96)
	at org.eclipse.jdt.ui.actions.RenameAction.run(RenameAction.java:116)
	at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.dispatchRun(SelectionDispatchAction.java:212)
	at
org.eclipse.jdt.ui.actions.SelectionDispatchAction.run(SelectionDispatchAction.java:188)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
	at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:899)
	at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:850)
	at
org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:769)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:796)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2716)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2382)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1363)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1334)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:253)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:97)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:305)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:256)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:184)
	at org.eclipse.core.launcher.Main.run(Main.java:637)
	at org.eclipse.core.launcher.Main.main(Main.java:621)
Caused by: java.lang.NullPointerException
	at
org.eclipse.jdt.internal.debug.core.refactoring.JavaBreakpointTypeChange.createChangesForProjectRename(JavaBreakpointTypeChange.java:84)
	at
org.eclipse.jdt.internal.debug.core.refactoring.JavaBreakpointIJavaProjectRenameParticipant.createChange(JavaBreakpointIJavaProjectRenameParticipant.java:56)
	at
org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.createChange(ProcessorBasedRefactoring.java:183)
	at
org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:117)
	at
org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:182)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1677)
	at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:58)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
Root exception:
java.lang.NullPointerException
	at
org.eclipse.jdt.internal.debug.core.refactoring.JavaBreakpointTypeChange.createChangesForProjectRename(JavaBreakpointTypeChange.java:84)
	at
org.eclipse.jdt.internal.debug.core.refactoring.JavaBreakpointIJavaProjectRenameParticipant.createChange(JavaBreakpointIJavaProjectRenameParticipant.java:56)
	at
org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring.createChange(ProcessorBasedRefactoring.java:183)
	at
org.eclipse.ltk.core.refactoring.CreateChangeOperation.run(CreateChangeOperation.java:117)
	at
org.eclipse.ltk.core.refactoring.PerformChangeOperation.run(PerformChangeOperation.java:182)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1677)
	at
org.eclipse.ltk.internal.ui.refactoring.WorkbenchRunnableAdapter.run(WorkbenchRunnableAdapter.java:58)
	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
</nowiki>
<nowiki>20040518

When you do a synchronize job the message in the progress view has a percent 
done in it follwed by the string null.

I will attach a screenshot
</nowiki>
<nowiki>20040520

If you try and create the progress view with the setting set to High Contrast 
you will get the following exception:

STEPS
1) Go to the Control Panel and select Accessibility options
2) Select use High Contrast
3) Start Eclipse
4) Open the progress viewer.

java.lang.IllegalArgumentException: Argument not valid
	at org.eclipse.swt.SWT.error(SWT.java:2677)
	at org.eclipse.swt.SWT.error(SWT.java:2616)
	at org.eclipse.swt.SWT.error(SWT.java:2587)
	at org.eclipse.swt.graphics.Color.init(Color.java:244)
	at org.eclipse.swt.graphics.Color.<init>(Color.java:78)
	at org.eclipse.ui.internal.progress.NewProgressViewer.<init>
(NewProgressViewer.java:1119)
	at org.eclipse.ui.internal.progress.JobView.createPartControl
(JobView.java:47)
	at org.eclipse.ui.internal.PartPane$2.run(PartPane.java:119)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:608)
	at org.eclipse.core.runtime.Platform.run(Platform.java:758)
	at org.eclipse.ui.internal.PartPane.createChildControl(PartPane.java:115)
	at org.eclipse.ui.internal.ViewPane.createChildControl(ViewPane.java:140)
	at org.eclipse.ui.internal.ViewFactory$1.run(ViewFactory.java:281)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:608)
	at org.eclipse.core.runtime.Platform.run(Platform.java:758)
	at org.eclipse.ui.internal.ViewFactory.busyRestoreView
(ViewFactory.java:203)
	at org.eclipse.ui.internal.ViewFactory$2.run(ViewFactory.java:459)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.ViewFactory.restoreView(ViewFactory.java:457)
	at org.eclipse.ui.internal.ViewFactory$ViewReference.getPart
(ViewFactory.java:94)
	at org.eclipse.ui.internal.WorkbenchPage$1.propertyChange
(WorkbenchPage.java:130)
	at org.eclipse.ui.internal.LayoutPart.setVisible(LayoutPart.java:257)
	at org.eclipse.ui.internal.PartPane.setVisible(PartPane.java:289)
	at org.eclipse.ui.internal.ViewPane.setVisible(ViewPane.java:567)
	at org.eclipse.ui.internal.presentations.PresentableViewPart.setVisible
(PresentableViewPart.java:114)
	at 
org.eclipse.ui.internal.presentations.DefaultPartPresentation.selectPart
(DefaultPartPresentation.java:854)
	at org.eclipse.ui.internal.PartStack.refreshPresentationSelection
(PartStack.java:919)
	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:461)
	at org.eclipse.ui.internal.PartStack.createControl(PartStack.java:361)
	at org.eclipse.ui.internal.PartSashContainer.createControl
(PartSashContainer.java:427)
	at org.eclipse.ui.internal.PerspectiveHelper.activate
(PerspectiveHelper.java:156)
	at org.eclipse.ui.internal.Perspective.onActivate(Perspective.java:718)
	at org.eclipse.ui.internal.WorkbenchPage.onActivate
(WorkbenchPage.java:1984)
	at org.eclipse.ui.internal.WorkbenchWindow$4.run
(WorkbenchWindow.java:1787)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.WorkbenchWindow.setActivePage
(WorkbenchWindow.java:1774)
	at org.eclipse.ui.internal.WorkbenchWindow.restoreState
(WorkbenchWindow.java:1344)
	at org.eclipse.ui.internal.Workbench.restoreState(Workbench.java:1216)
	at org.eclipse.ui.internal.Workbench.access$10(Workbench.java:1183)
	at org.eclipse.ui.internal.Workbench$13.run(Workbench.java:1094)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:608)
	at org.eclipse.core.runtime.Platform.run(Platform.java:758)
	at org.eclipse.ui.internal.Workbench.restoreState(Workbench.java:1027)
	at org.eclipse.ui.internal.WorkbenchConfigurer.restoreState
(WorkbenchConfigurer.java:167)
	at org.eclipse.ui.application.WorkbenchAdvisor.openWindows
(WorkbenchAdvisor.java:652)
	at org.eclipse.ui.internal.Workbench.init(Workbench.java:817)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1311)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench
(Workbench.java:253)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:97)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run
(PlatformActivator.java:305)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:256)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run
(EclipseStarter.java:127)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:184)
	at org.eclipse.core.launcher.Main.run(Main.java:637)
	at org.eclipse.core.launcher.Main.main(Main.java:621)
</nowiki>
<nowiki>Given the following two classes:
---
package foo;

public abstract class Superclass {
    public int i;
    protected class Inner {
        void go() {
        	i = 1;
        }
    }
    public abstract void go(Inner param);
}
---
package bar;

import foo.Superclass;

public class Subclass extends Superclass {
	public void go(Inner param) {}
}
---

extracting Inner to a new file (with default settings) produces non-building
code, because:
- Subclass receives no 'import foo.Inner' (so, Inner can't be resolved)
- Inner is declared as package-visible, not public-visible (so, the import
wouldn't work anyway)

Eclipse 3.0M9
</nowiki>
<nowiki>Build: Eclipse 3.0 M9

I am attempting to tag a project in CVS from the workspace using the "Team -> 
Tag as Version" menu option.  It works fine if I *do not* check the "Move tag 
if it already exists" check box.  However, if I check this option it appears to 
do nothing at all (i.e. there is no output to the console, nothing shows up in 
the progress view, and nothing shows up in the workspace/.metadata/.log file).
</nowiki>
<nowiki>M9

Currently refactoring considers unprecise matches during searching and 
refactors them as well which can lead to unexpected results. Refactorings 
should inform the user about this.
</nowiki>
<nowiki>The replace dialog should leverage the new runInUI API
</nowiki>
<nowiki>From Rafael

Michael,

With new API from runtime, the following method in TeamPlugin:

	public static String getCharset(String name, InputStream stream) 
throws IOException {
		IContentDescription description = getContentDescription(name, 
stream);
		if (description != null) {
			byte[] bom = (byte[]) description.getProperty
(IContentDescription.BYTE_ORDER_MARK);
			if (bom != null) {
				if (bom == IContentDescription.BOM_UTF_8)
					return "UTF-8"; //$NON-NLS-1$
				else if (bom == 
IContentDescription.BOM_UTF_16BE || bom == IContentDescription.BOM_UTF_16LE)
					// UTF-16 will properly recognize the 
BOM
					return "UTF-16"; //$NON-NLS-1$
				else {
					// unknown BOM... ignore it	
			
				}
			}
			return (String) description.getProperty
(IContentDescription.CHARSET);
		}
		return null;
	}

Can be written as:

	public static String getCharset(String name, InputStream stream) 
throws IOException {
		IContentDescription description = getContentDescription(name, 
stream);
		return description == null ? null : description.getCharset();
	}

IContentDescription#getCharset (in for i200405271600) is a helper API that 
checks the BOM, and if none, the charset property.
</nowiki>
<nowiki>Hi,

Steps to reproduce:

- create a simple new text or java file 

- type in the letter a, followed by a line break

- open "find/replace" from the "edit" menu

- fill in "a" into the "find" text field

- fill in "ab" into the "replace" text field

- klick on "Backward"

- klick on "Find"

- klick on "Replace All"

Reproducable on two different Eclipse3.0M9 installations, both running Debian 
Linux on x86 and j2sdk 1.4.2 from Sun.
</nowiki>
<nowiki>When using the checkbox to enable/disable a breakpoint there is a noticeable 
delay when updating the breakpoint's image. The same problem does not seem to 
occurr when using the context menu enable/disable.
</nowiki>
<nowiki>3.0 RC1
The cvs remote quick diff provider logs exceptions in two cases: 
1. in the getReference()
2. and in the background fetching job.

Instead, it should throw the exception, and in the case of the job, fail
silently and let the next call to getReference throw the exception. This will
allow the quick diff infrastructure to consistently handle the exceptions.
</nowiki>
<nowiki>3.0RC1

- in the CU:
package org.test;
public class Test {
}
- set the cursor within "package"
- invoke twice Edit->Expand Selection To->Previous Element
-> results in the following exception:

java.lang.ArrayIndexOutOfBoundsException: -2
        at org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSele
ctPreviousAction.getPreviousNode(StructureSelectPreviousAction.java:69)
        at org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSele
ctPreviousAction.internalGetNewSelectionRange(StructureSelectPreviousAction.java
:53)
        at org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSele
ctionAction.getNewSelectionRange(StructureSelectionAction.java:108)
        at org.eclipse.jdt.internal.ui.javaeditor.selectionactions.StructureSele
ctionAction.run(StructureSelectionAction.java:85)
        at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
        at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:141)

        at org.eclipse.ui.internal.commands.Command.execute(Command.java:132)
        at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(Workben
chKeyboard.java:469)
        at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboar
d.java:887)
        at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(Workbe
nchKeyboard.java:928)
        at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindi
ngs(WorkbenchKeyboard.java:546)
        at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$2(WorkbenchKeyb
oard.java:494)
        at org.eclipse.ui.internal.keys.WorkbenchKeyboard$1.handleEvent(Workbenc
hKeyboard.java:259)
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
        at org.eclipse.swt.widgets.Display.filterEvent(Display.java:712)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:795)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:805)
        at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1724)
        at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1720)
        at org.eclipse.swt.widgets.Control.WM_SYSKEYDOWN(Control.java:4382)
        at org.eclipse.swt.widgets.Control.windowProc(Control.java:3022)
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:3282)
        at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
        at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1459)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2380)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1363)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1334)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.jav
a:253)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
        at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96
)
        at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformAct
ivator.java:334)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:273)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.ja
va:128)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
        at org.eclipse.core.launcher.Main.run(Main.java:638)
        at org.eclipse.core.launcher.Main.main(Main.java:622)
-2
</nowiki>
<nowiki>3.0RC1

- in the CU:
package org.test;

class Foo {
	void foo() {
		Object s= bar();
	
	}
	String bar() {
		return "";
	}
}
- set caret on "String"
- invoke Generalize Type
- choose Object
- click Ok
-> change is applied, but the dialog does not disappear
</nowiki>
<nowiki>Using 2.1.3 and RC1

* Create a new workspace in 2.1.3
* Create a HelloWorld program
* Create a breakpoint
* Debug to the breakpoint
* Shutdown
* Open the same workspace using 3.0RC1
* (will be some problems on startup - missing console view)
* Debug from the launch history again
-> breakpoint not hit

The breakpoint appears in the editor & ruler, but not the breakpoints view
</nowiki>
<nowiki>build I20040529-0105

- dock perspective bar on left
- Window > New Window
- open a different perspective
- it replaces the previous perspective icon in the bar (wrong)
- change the docking location
- it updates properly
</nowiki>
<nowiki>This below may be helpful to track some problems!?

This is the workspace\.metadata\.log when trying to close Eclipse.  This is
after a lot of selections of the top-level Edit menu and context (pop-up) menu
under various key scopes.

Closing Eclipse does not complete, must now be killed from the Task Manager.

!SESSION Jun 04, 2004 10:00:10.766 ---------------------------------------------
eclipse.buildId=I200405290105
java.fullversion=J2RE 1.4.1 IBM Windows 32 build cn1411-20040301a (JIT enabled:
jitc)
BootLoader constants: OS=win32, ARCH=x86, WS=win32, NL=en_CA
!ENTRY org.eclipse.core.runtime 4 2 Jun 04, 2004 10:00:10.766
!MESSAGE Problems occurred when invoking code from plug-in:
"org.eclipse.core.runtime".
!STACK 0
java.lang.NullPointerException
	at org.eclipse.ui.internal.commands.Command.removeCommandListener(Command.java:218)
	at
org.eclipse.ui.internal.commands.ws.CommandCallback.removePropertyChangeListener(CommandCallback.java:194)
	at
org.eclipse.jface.action.ActionContributionItem.handleWidgetDispose(ActionContributionItem.java:855)
	at
org.eclipse.jface.action.ActionContributionItem.access$1(ActionContributionItem.java:836)
	at
org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:780)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.releaseWidget(Widget.java:708)
	at org.eclipse.swt.widgets.Item.releaseWidget(Item.java:139)
	at org.eclipse.swt.widgets.MenuItem.releaseWidget(MenuItem.java:452)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java(Inlined Compiled Code))
	at org.eclipse.jface.action.MenuManager.update(MenuManager.java(Compiled Code))
	at org.eclipse.jface.action.MenuManager.updateAll(MenuManager.java:697)
	at org.eclipse.jface.action.MenuManager.update(MenuManager.java(Compiled Code))
	at org.eclipse.jface.action.MenuManager.updateAll(MenuManager.java:697)
	at
org.eclipse.ui.internal.Workbench.updateActiveWorkbenchWindowMenuManager(Workbench.java:1836)
	at org.eclipse.ui.internal.Workbench.access$0(Workbench.java:1826)
	at org.eclipse.ui.internal.Workbench$1.commandManagerChanged(Workbench.java:1793)
	at
org.eclipse.ui.internal.commands.MutableCommandManager.fireCommandManagerChanged(MutableCommandManager.java:248)
	at
org.eclipse.ui.internal.commands.MutableCommandManager.setActiveContextIds(MutableCommandManager.java:578)
	at
org.eclipse.ui.internal.commands.ws.WorkbenchCommandSupport.setActiveContextIds(WorkbenchCommandSupport.java:511)
	at org.eclipse.ui.internal.Workbench$2.contextManagerChanged(Workbench.java:1803)
	at
org.eclipse.ui.internal.contexts.AbstractContextManager.fireContextManagerChanged(AbstractContextManager.java:46)
	at
org.eclipse.ui.internal.contexts.ProxyContextManager$1.contextManagerChanged(ProxyContextManager.java:41)
	at
org.eclipse.ui.internal.contexts.AbstractContextManager.fireContextManagerChanged(AbstractContextManager.java:46)
	at
org.eclipse.ui.internal.contexts.MutableContextManager.setEnabledContextIds(MutableContextManager.java:260)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.processEnabledSubmissions(WorkbenchContextSupport.java:602)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.processEnabledSubmissions(WorkbenchContextSupport.java:488)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.access$1(WorkbenchContextSupport.java:487)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport$2.pageClosed(WorkbenchContextSupport.java:249)
	at org.eclipse.ui.internal.PageListenerList$2.run(PageListenerList.java:59)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:615)
	at org.eclipse.core.runtime.Platform.run(Platform.java:758)
	at
org.eclipse.ui.internal.PageListenerList.firePageClosed(PageListenerList.java:57)
	at org.eclipse.ui.internal.WorkbenchWindow.firePageClosed(WorkbenchWindow.java:799)
	at org.eclipse.ui.internal.WorkbenchWindow.closeAllPages(WorkbenchWindow.java:568)
	at org.eclipse.ui.internal.WorkbenchWindow.hardClose(WorkbenchWindow.java:983)
	at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:466)
	at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:448)
	at org.eclipse.ui.internal.WorkbenchWindow$1.run(WorkbenchWindow.java:536)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:534)
	at org.eclipse.jface.window.WindowManager.close(WindowManager.java:101)
	at org.eclipse.ui.internal.Workbench$10.run(Workbench.java:460)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:615)
	at org.eclipse.core.runtime.Platform.run(Platform.java:758)
	at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:457)
	at org.eclipse.ui.internal.Workbench.access$8(Workbench.java:399)
	at org.eclipse.ui.internal.Workbench$12.run(Workbench.java:571)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:569)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:545)
	at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:463)
	at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:448)
	at org.eclipse.ui.internal.WorkbenchWindow$1.run(WorkbenchWindow.java:536)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:534)
	at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:593)
	at org.eclipse.jface.window.Window$2.shellClosed(Window.java:544)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:158)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:805)
	at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1487)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java(Compiled Code))
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java(Compiled Code))
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java(Inlined Compiled
Code))
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java(Compiled Code))
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java(Compiled Code))
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1334)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:253)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:334)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:128)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:41)
	at java.lang.reflect.Method.invoke(Method.java:386)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
	at org.eclipse.core.launcher.Main.run(Main.java:638)
	at org.eclipse.core.launcher.Main.main(Main.java:622)
!ENTRY org.eclipse.core.runtime 4 2 Jun 04, 2004 10:00:10.891
!MESSAGE Problems occurred when invoking code from plug-in:
"org.eclipse.core.runtime".
!STACK 0
java.lang.NullPointerException
	at org.eclipse.ui.internal.commands.Command.removeCommandListener(Command.java:218)
	at
org.eclipse.ui.internal.commands.ws.CommandCallback.removePropertyChangeListener(CommandCallback.java:194)
	at
org.eclipse.jface.action.ActionContributionItem.handleWidgetDispose(ActionContributionItem.java:855)
	at
org.eclipse.jface.action.ActionContributionItem.access$1(ActionContributionItem.java:836)
	at
org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:780)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.releaseWidget(Widget.java:708)
	at org.eclipse.swt.widgets.Item.releaseWidget(Item.java:139)
	at org.eclipse.swt.widgets.MenuItem.releaseWidget(MenuItem.java:452)
	at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:673)
	at org.eclipse.swt.widgets.Menu.releaseWidget(Menu.java:1053)
	at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:673)
	at org.eclipse.swt.widgets.MenuItem.releaseWidget(MenuItem.java:450)
	at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:673)
	at org.eclipse.swt.widgets.Menu.releaseWidget(Menu.java:1053)
	at org.eclipse.swt.widgets.Widget.releaseResources(Widget.java:673)
	at org.eclipse.swt.widgets.Decorations.releaseWidget(Decorations.java:682)
	at org.eclipse.swt.widgets.Shell.releaseWidget(Shell.java:786)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:368)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:371)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:487)
	at org.eclipse.jface.window.Window.close(Window.java:253)
	at org.eclipse.jface.window.ApplicationWindow.close(ApplicationWindow.java:272)
	at org.eclipse.ui.internal.WorkbenchWindow.hardClose(WorkbenchWindow.java:988)
	at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:466)
	at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:448)
	at org.eclipse.ui.internal.WorkbenchWindow$1.run(WorkbenchWindow.java:536)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:534)
	at org.eclipse.jface.window.WindowManager.close(WindowManager.java:101)
	at org.eclipse.ui.internal.Workbench$10.run(Workbench.java:460)
	at
org.eclipse.core.internal.runtime.InternalPlatform.run(InternalPlatform.java:615)
	at org.eclipse.core.runtime.Platform.run(Platform.java:758)
	at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:457)
	at org.eclipse.ui.internal.Workbench.access$8(Workbench.java:399)
	at org.eclipse.ui.internal.Workbench$12.run(Workbench.java:571)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:569)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:545)
	at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:463)
	at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:448)
	at org.eclipse.ui.internal.WorkbenchWindow$1.run(WorkbenchWindow.java:536)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:534)
	at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:593)
	at org.eclipse.jface.window.Window$2.shellClosed(Window.java:544)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:158)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:805)
	at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1487)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java(Compiled Code))
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java(Compiled Code))
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java(Inlined Compiled
Code))
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java(Compiled Code))
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java(Compiled Code))
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1334)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:253)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:334)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:128)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:41)
	at java.lang.reflect.Method.invoke(Method.java:386)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
	at org.eclipse.core.launcher.Main.run(Main.java:638)
	at org.eclipse.core.launcher.Main.main(Main.java:622)
!ENTRY org.eclipse.ui 4 4 Jun 04, 2004 10:00:10.953
!MESSAGE Unhandled event loop exception
!ENTRY org.eclipse.ui 4 0 Jun 04, 2004 10:00:10.953
!MESSAGE java.lang.NullPointerException
!STACK 0
java.lang.NullPointerException
	at org.eclipse.jface.action.MenuManager.update(MenuManager.java(Compiled Code))
	at org.eclipse.jface.action.MenuManager.updateAll(MenuManager.java:697)
	at
org.eclipse.ui.internal.Workbench.updateActiveWorkbenchWindowMenuManager(Workbench.java:1836)
	at org.eclipse.ui.internal.Workbench.access$0(Workbench.java:1826)
	at org.eclipse.ui.internal.Workbench$1.commandManagerChanged(Workbench.java:1793)
	at
org.eclipse.ui.internal.commands.MutableCommandManager.fireCommandManagerChanged(MutableCommandManager.java:248)
	at
org.eclipse.ui.internal.commands.MutableCommandManager.setActiveContextIds(MutableCommandManager.java:578)
	at
org.eclipse.ui.internal.commands.ws.WorkbenchCommandSupport.setActiveContextIds(WorkbenchCommandSupport.java:511)
	at org.eclipse.ui.internal.Workbench$2.contextManagerChanged(Workbench.java:1803)
	at
org.eclipse.ui.internal.contexts.AbstractContextManager.fireContextManagerChanged(AbstractContextManager.java:46)
	at
org.eclipse.ui.internal.contexts.ProxyContextManager$1.contextManagerChanged(ProxyContextManager.java:41)
	at
org.eclipse.ui.internal.contexts.AbstractContextManager.fireContextManagerChanged(AbstractContextManager.java:46)
	at
org.eclipse.ui.internal.contexts.MutableContextManager.setEnabledContextIds(MutableContextManager.java:260)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.processEnabledSubmissions(WorkbenchContextSupport.java:602)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.processEnabledSubmissions(WorkbenchContextSupport.java:488)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.addEnabledSubmissions(WorkbenchContextSupport.java:369)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.checkWindowType(WorkbenchContextSupport.java:449)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport.access$0(WorkbenchContextSupport.java:383)
	at
org.eclipse.ui.internal.contexts.ws.WorkbenchContextSupport$1.handleEvent(WorkbenchContextSupport.java:209)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.WM_ACTIVATE(Decorations.java:1454)
	at org.eclipse.swt.widgets.Shell.WM_ACTIVATE(Shell.java:1320)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DestroyWindow(Native Method)
	at org.eclipse.swt.widgets.Control.destroyWidget(Control.java:504)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:369)
	at org.eclipse.swt.widgets.Decorations.dispose(Decorations.java:371)
	at org.eclipse.swt.widgets.Shell.dispose(Shell.java:487)
	at org.eclipse.jface.window.Window.close(Window.java:253)
	at org.eclipse.jface.dialogs.Dialog.close(Dialog.java:826)
	at
org.eclipse.jface.dialogs.ProgressMonitorDialog.close(ProgressMonitorDialog.java:283)
	at
org.eclipse.jface.dialogs.ProgressMonitorDialog.finishedRun(ProgressMonitorDialog.java:477)
	at
org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:400)
	at
org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:238)
	at
org.eclipse.ui.internal.ide.IDEWorkbenchAdvisor.disconnectFromWorkspace(IDEWorkbenchAdvisor.java:475)
	at
org.eclipse.ui.internal.ide.IDEWorkbenchAdvisor.postShutdown(IDEWorkbenchAdvisor.java:231)
	at org.eclipse.ui.internal.Workbench.shutdown(Workbench.java:1628)
	at org.eclipse.ui.internal.Workbench.busyClose(Workbench.java:468)
	at org.eclipse.ui.internal.Workbench.access$8(Workbench.java:399)
	at org.eclipse.ui.internal.Workbench$12.run(Workbench.java:571)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:569)
	at org.eclipse.ui.internal.Workbench.close(Workbench.java:545)
	at org.eclipse.ui.internal.WorkbenchWindow.busyClose(WorkbenchWindow.java:463)
	at org.eclipse.ui.internal.WorkbenchWindow.access$0(WorkbenchWindow.java:448)
	at org.eclipse.ui.internal.WorkbenchWindow$1.run(WorkbenchWindow.java:536)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69)
	at org.eclipse.ui.internal.WorkbenchWindow.close(WorkbenchWindow.java:534)
	at org.eclipse.jface.window.Window.handleShellCloseEvent(Window.java:593)
	at org.eclipse.jface.window.Window$2.shellClosed(Window.java:544)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:158)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java(Compiled Code))
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:805)
	at org.eclipse.swt.widgets.Decorations.WM_CLOSE(Decorations.java:1487)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java(Compiled Code))
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DefWindowProcW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DefWindowProc(OS.java(Inlined Compiled Code))
	at org.eclipse.swt.widgets.Shell.callWindowProc(Shell.java(Compiled Code))
	at org.eclipse.swt.widgets.Control.windowProc(Control.java(Compiled Code))
	at org.eclipse.swt.widgets.Decorations.windowProc(Decorations.java(Compiled Code))
	at org.eclipse.swt.widgets.Display.windowProc(Display.java(Compiled Code))
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java(Inlined Compiled
Code))
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java(Compiled Code))
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java(Compiled Code))
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1334)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:253)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:334)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:128)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:41)
	at java.lang.reflect.Method.invoke(Method.java:386)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
	at org.eclipse.core.launcher.Main.run(Main.java:638)
	at org.eclipse.core.launcher.Main.main(Main.java:622)
</nowiki>
<nowiki>Since RC1

When I call TableItem.setText(3, "blabla"), the table cell redraws. However,
the first 12 pixels or so are not redrawn. It looks like the Table thinks
the item has an image set? I don't use images for column three. The other
columns in my table that have images do redraw correctly.

Works fine with 3.0 build from May 25. Breaks in RC1

This is pure SWT, no jface
</nowiki>
<nowiki>20040609

From performace traces for bug 65435 I found that the DecoratorManager has the
habit to send out label provider changes even if not really needed/

- The label decorator fires 'label decorator changes' even if nothing changes
with the image or the text.
- It even creates a new Image out of a base image and all 'null' decorators
(array of 5 nulls) resulting in an image that is new but looks the same.

Sending out unnecessary labelProviderChanges is very costly:
The type hierarchy of 'Object' has thousand of elements. To find them in the
tree for the update is expensive as getParent is not implemented in the content
provider and we disabled the elementMap (I'm considering to enable it). 

I would suggest to move some code that is currently performed in the
'decorateText'/'decorateImage' methods to the background:
If there is no FullDecoratorDefinition for the element and no decorations from
the ILightweightLabelDecorator: Don't fire a labelProviderChange for this element.
</nowiki>
<nowiki>Build: I20040609 1200

If code that runs as a result of dispatching a command cancels, it is now
reported in the UI with an error dialog that says, "The command for the key you
pressed failed". Cancelation (signalled by OperationCanceledException) should
not be reported to the user as a failure. This seems to have only changed
recently (since RC1).  Here is the log entry that is created:

!ENTRY org.eclipse.ui 4 0 Jun 09, 2004 17:48:57.999
!MESSAGE The command for the key you pressed failed
!STACK 0
org.eclipse.core.runtime.OperationCanceledException
	at java.lang.Throwable.<init>(Throwable.java)
	at
org.eclipse.core.runtime.OperationCanceledException.<init>(OperationCanceledException.java:22)
	at org.eclipse.core.internal.jobs.ThreadJob.joinRun(ThreadJob.java:147)
	at org.eclipse.core.internal.jobs.ImplicitJobs.begin(ImplicitJobs.java:87)
	at org.eclipse.core.internal.jobs.JobManager.beginRule(JobManager.java:170)
	at org.eclipse.core.internal.resources.WorkManager.checkIn(WorkManager.java:95)
	at
org.eclipse.core.internal.resources.Workspace.prepareOperation(Workspace.java:1628)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1668)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:744)
	at org.eclipse.jdt.internal.core.JavaProject.setRawClasspath(JavaProject.java:2650)
	at org.eclipse.jdt.core.JavaCore$3.run(JavaCore.java:3433)
	at
org.eclipse.jdt.internal.core.BatchOperation.executeOperation(BatchOperation.java:34)
	at
org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:700)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:1673)
	at org.eclipse.jdt.core.JavaCore.run(JavaCore.java:3246)
	at org.eclipse.jdt.core.JavaCore.setClasspathContainer(JavaCore.java:3416)
	at
org.eclipse.pde.internal.core.ModelEntry.updateClasspathContainer(ModelEntry.java:109)
	at
org.eclipse.pde.internal.core.RequiredPluginsInitializer.initialize(RequiredPluginsInitializer.java:40)
	at
org.eclipse.jdt.internal.core.JavaModelManager.initializeContainer(JavaModelManager.java:1248)
	at
org.eclipse.jdt.internal.core.JavaModelManager.initializeAllContainers(JavaModelManager.java:1222)
	at
org.eclipse.jdt.internal.core.JavaModelManager.getClasspathContainer(JavaModelManager.java:833)
	at org.eclipse.jdt.core.JavaCore.getClasspathContainer(JavaCore.java:1184)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1888)
	at
org.eclipse.jdt.internal.core.JavaProject.getResolvedClasspath(JavaProject.java:1798)
	at
org.eclipse.jdt.internal.core.search.JavaSearchScope.add(JavaSearchScope.java:78)
	at
org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.initialize(JavaWorkspaceScope.java:80)
	at
org.eclipse.jdt.internal.core.search.JavaSearchScope.<init>(JavaSearchScope.java:52)
	at
org.eclipse.jdt.internal.core.search.JavaWorkspaceScope.<init>(JavaWorkspaceScope.java:31)
	at
org.eclipse.jdt.core.search.SearchEngine.createWorkspaceScope(SearchEngine.java:424)
	at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.run(OpenTypeAction.java:54)
	at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.run(OpenTypeAction.java:80)
	at org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:276)
	at org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:206)
	at org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:141)
	at org.eclipse.ui.internal.commands.Command.execute(Command.java:132)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:469)
	at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:887)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:928)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:546)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$2(WorkbenchKeyboard.java:494)
	at
org.eclipse.ui.internal.keys.WorkbenchKeyboard$1.handleEvent(WorkbenchKeyboard.java:259)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java)
	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:713)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:795)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:820)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:805)
	at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1725)
	at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:1721)
	at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:3049)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java)
	at org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
	at org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:1460)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2383)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1362)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1333)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:252)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:334)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:272)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:128)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:41)
	at java.lang.reflect.Method.invoke(Method.java:386)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
	at org.eclipse.core.launcher.Main.run(Main.java:638)
	at org.eclipse.core.launcher.Main.main(Main.java:622)
</nowiki>
<nowiki>I200406110010

Quite often I find this NPE in the log:


!ENTRY org.eclipse.ui 4 0 Jun 11, 2004 13:14:37.292
!MESSAGE java.lang.NullPointerException
!STACK 0
java.lang.NullPointerException
	at org.eclipse.swt.widgets.Control.kEventControlSetFocusPart(Control.java:1369)
	at org.eclipse.swt.widgets.Composite.kEventControlSetFocusPart(Composite.java:352)
	at org.eclipse.swt.widgets.Widget.controlProc(Widget.java:317)
	at org.eclipse.swt.widgets.Display.controlProc(Display.java:743)
	at org.eclipse.swt.internal.carbon.OS.DisposeWindow(Native Method)
	at org.eclipse.swt.widgets.Shell.destroyWidget(Shell.java:488)
	at org.eclipse.swt.widgets.Widget.dispose(Widget.java:482)
	at org.eclipse.jface.window.Window.close(Window.java:253)
	at org.eclipse.jface.dialogs.Dialog.close(Dialog.java:826)
	at org.eclipse.jface.preference.PreferenceDialog.close(PreferenceDialog.java:253)
	at org.eclipse.jface.preference.PreferenceDialog.cancelPressed(PreferenceDialog.java:233)
	at org.eclipse.jface.preference.PreferenceDialog.buttonPressed(PreferenceDialog.java:203)
	at 
org.eclipse.ui.internal.dialogs.WorkbenchPreferenceDialog.buttonPressed(WorkbenchPreferenceDialog.j
ava:75)
	at org.eclipse.jface.dialogs.Dialog$2.widgetSelected(Dialog.java:506)
	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:89)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1196)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1220)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1205)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2868)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2538)
	at org.eclipse.jface.window.Window.runEventLoop(Window.java:668)
	at org.eclipse.jface.window.Window.open(Window.java:648)
	at org.eclipse.ui.internal.OpenPreferencesAction.run(OpenPreferencesAction.java:72)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
	at 
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:
915)
	at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:866)
	at org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:
785)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1196)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1220)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1205)
	at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1053)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2868)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2538)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1362)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1333)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:252)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
	at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:334)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:272)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:128)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:185)
	at org.eclipse.core.launcher.Main.run(Main.java:638)
	at org.eclipse.core.launcher.Main.main(Main.java:622)
java.lang.NullPointerException
</nowiki>
<nowiki>StructureSelectionActions currently show a dialog "The resource is not on the
build path of a Java project.". We could do better and try to create an AST in
some cases:
- file not on build path
- editor opened from CVS Repository (bug 65246)

Furthermore, (cu.isStructureKnown() == false) should not imply that we can't do
anything. Should try to build an AST and do the job anyway as good as we can.
</nowiki>
<nowiki>I200406162000

1. Start on a new workspace
2. Create a new Java project
3. Search for '*' Type Declarations in Workspace
Observe: When the search is done, the Searching dialog is still up.

You have to press Run in background to dismiss it.
</nowiki>
<nowiki>Install a new feature.
Select to apply changes now, without restarting.
Open Configuration Manager and check the feature's status.
The status displays "ConfiguredSite is null"
</nowiki>
<nowiki>This is with 3.0 RC3

When I want to add a Java Exception Breakpoint for an Exception that in fact
*does* inherit from Exception, the dialog says "Selected type is not a subclass
of java.lang.Throwable". The Exception in question is org.xml.sax.SaxException
coming from xerces.jar (Xerces 1.4.4) within my project.
</nowiki>
<nowiki>3.0 RC3

Works correctly everywhere except motif.

Bring up the tooltip for the tab item on a CTabFolder.
The "yellow" filling does not extend all the way down to the black border.   
There is one row of pixels across the bottom that is in the default background 
colour.
</nowiki>
<nowiki>Hi,
   List<Integer> cont=new ArrayList<Integer>();
   for (Integer i:cont){
   	i.
   }
pressing ctrl-space afer i. says "No completions available"
</nowiki>
<nowiki>On the menu bar from the main Workbench panel, click File -> New -> Projects
Select Java Project
Click Next

In the Project Name put java-project
Click Finish

On the menu bar from the main Workbench panel, click Project
Click Properties
Select Javadoc Location

Even though I enlarge the window, the description and the right side buttons
(Browse, Validation, Apply) are truncated. 

See the attached screenshot.
</nowiki>
<nowiki>R3.0, and also in latest from head

- new simple project
- new file A.txt (A.txt is opened)
- new file B.txt (B.txt is opened)
- select tab for A.txt 
- shutdown/restart
- it comes up with B.txt as the active tab, but its contents is gray (the editor
is not actually instantiated)
- select tab for A.txt
- it's gray as well
- select tab for B.txt
- it's OK now
- select tab for A.txt
- it's OK now

It should come up with A.txt as the active tab, with the editor properly
instantiated.
</nowiki>
<nowiki>To: eclipse newsgroup
Subject: CVS access causes Eclipse 3.0.0 to freeze

Our Eclipse 3.0.0 installation locks up when we try to access a
CVS repository on the same Linux box.  

The simplest way to replicate this problem is:

* log on to the machine running our CVS repository, call it "bigboy".

* start Eclipse on a blank workspace

* click on File -> New -> Project

* in the New Project wizard, expand CVS, select "Checkout Projects From
	CVS", and click on "next".

* enter a host name ("bigboy"), repository path, valid user name, valid
	password, specify "extssh" as connection type; click on "use default
	port", then click on "next".

The progress bar makes it to about 5%, and then the Eclipse process
freezes and becomes completely unresponsive.  We have let it stay frozen for
a few hours without seeing any signs of progress.  (Alternately, you can
ask Eclipse's New Project wizard to show a list of valid CVS modules, in which
case Eclipse tries to query CVS and freezes at the 25% point.)

Michael Valenta requested that I post a stack trace for this problem in
Bugzilla.  (I originally reported it on the eclipse newsgroup on 19jul2004
at 17:46).  I generated two stack traces, and am including both of them
because they are different.  After the stack traces I am including a
description of the issue's misbehavior copied from the original newsgroup
posting.

Please let me know if there is other information I can provide to help
troubleshoot this.

Sincerely,


Christian Schreiner
caschrei@rockwellcollins.com

Stack dump #1 (generated via `kill -3 <java_pid>`):

1>  Full thread dump Java HotSpot(TM) Client VM (1.4.2_03-b02 mixed mode):
1> 
1> "ModalContext" prio=1 tid=0x08682650 nid=0x22df runnable
1> [4e617000..4e6178b8]
1>         at java.io.FileInputStream.readBytes(Native Method)
1>         at java.io.FileInputStream.read(FileInputStream.java:194)
1>         at java.io.BufferedInputStream.read1(BufferedInputStream.java:220)
1>         at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
1>         - locked <0x450e8138> (a java.io.BufferedInputStream)
1> 
1>         at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
1>         at java.io.BufferedInputStream.read1(BufferedInputStream.java:222)
1>         at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
1>         - locked <0x450e8158> (a java.io.BufferedInputStream)
1>         at
1>
sun.security.provider.SeedGenerator$URLSeedGenerator.getSeedByte(SeedGenerator.java:467)
1>         at
1> sun.security.provider.SeedGenerator.getSeedBytes(SeedGenerator.java:137)
1>         at
1> sun.security.provider.SeedGenerator.generateSeed(SeedGenerator.java:132)
1>         at
1> sun.security.provider.SecureRandom.engineGenerateSeed(SecureRandom.java:112)
1>         at
1> sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:169)
1>         - locked <0x450e81b8> (a sun.security.provider.SecureRandom)
1>         at java.security.SecureRandom.nextBytes(SecureRandom.java:381)
1>         - locked <0x450e8208> (a java.security.SecureRandom)
1>         at com.jcraft.jsch.jce.Random.fill(Unknown Source)
1>         at com.jcraft.jsch.Session.send_kexinit(Unknown Source)
1>         at com.jcraft.jsch.Session.receive_kexinit(Unknown Source)
1>         at com.jcraft.jsch.Session.connect(Unknown Source)
1>         at
1> org.eclipse.team.internal.ccvs.ssh2.JSchSession.getSession(JSchSession.java:306)
1>         at
1>
org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.internalOpen(CVSSSH2ServerConnection.java:117)
1>         at
1>
org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.open(CVSSSH2ServerConnection.java:99)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.Connection.open(Connection.java:127)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.createConnection(CVSRepositoryLocation.java:575)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:821)
1>         - locked <0x450de618> (a java.lang.Object)
1>         at
1> org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:142)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.validateConnection(CVSRepositoryLocation.java:956)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$2.run(ModuleSelectionPage.java:143)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
1> 
1> "ModalContext" prio=1 tid=0x08740448 nid=0x22de waiting for monitor entry
1> [4ce6e000..4ce6e8b8]
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:799)
1>         - waiting to lock <0x450de618> (a java.lang.Object)
1>         at
1> org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:142)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.validateConnection(CVSRepositoryLocation.java:956)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$2.run(ModuleSelectionPage.java:143)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
1> 
1> "Worker-1" prio=1 tid=0x08592c78 nid=0x22dd in Object.wait()
1> [4e386000..4e3868b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44e46348> (a
1>           org.eclipse.core.internal.jobs.WorkerPool)
1>         at
1> org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:166)
1>         - locked <0x44e46348> (a org.eclipse.core.internal.jobs.WorkerPool)
1>         at
1> org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:193)
1>         at org.eclipse.core.internal.jobs.Worker.run(Worker.java:59)
1> 
1> "Reference Cleaner - 2" prio=1 tid=0x08367540 nid=0x22d2 in Object.wait()
1> [4dd9b000..4dd9b8b8]
1>         at java.lang.Object.wait(Native Method)
1> 
1>         - waiting on <0x44f01b88> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
1>         - locked <0x44f01b88> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:207)
1> 
1> "Reference Cleaner - 1" prio=1 tid=0x08367248 nid=0x22d1 in Object.wait()
1> [4dd1a000..4dd1a8b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44f01bf8> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
1>         - locked <0x44f01bf8> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:207)
1> 
1> "Start Level Event Dispatcher" daemon prio=1 tid=0x08263420 nid=0x22cf in
1> Object.wait() [4cfff000..4cfff8b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44ccd160> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at java.lang.Object.wait(Object.java:429)
1>         at
1>
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:162)
1>         - locked <0x44ccd160> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at
1> org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)
1> 
1> "Framework Event Dispatcher" daemon prio=1 tid=0x0825db18 nid=0x22ce in
1> Object.wait() [4cf7e000..4cf7e8b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44cbf9d8> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at java.lang.Object.wait(Object.java:429)
1>         at
1>
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:162)
1>         - locked <0x44cbf9d8> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at
1> org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)
1> 
1> "Signal Dispatcher" daemon prio=1 tid=0x0809fda8 nid=0x22c9 waiting on
1> condition [0..0]
1> 
1> "Finalizer" daemon prio=1 tid=0x0808af38 nid=0x22c7 in Object.wait()
1> [4c952000..4c9528b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44c3a518> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
1>         - locked <0x44c3a518> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
1>         at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
1> 
1> "Reference Handler" daemon prio=1 tid=0x0808a378 nid=0x22c6 in Object.wait()
1> [4c8d1000..4c8d18b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44c3a580> (a java.lang.ref.Reference$Lock)
1>         at java.lang.Object.wait(Object.java:429)
1>         at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
1>         - locked <0x44c3a580> (a java.lang.ref.Reference$Lock)
1> 
1> "main" prio=1 tid=0x08052880 nid=0x22c3 in Object.wait()
1> [bfffc000..bfffd228]
1>         at java.lang.Object.wait(Native Method)
1>         at org.eclipse.swt.widgets.Display.sleep(Display.java:2867)
1>         - locked <0x48ae9878> (a java.lang.Class)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:137)
1> 
1>         at
1> org.eclipse.jface.operation.ModalContext.run(ModalContext.java:262)
1>         at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:752)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage.updateEnablements(ModuleSelectionPage.java:140)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$1.handleEvent(ModuleSelectionPage.java:70)
1>         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
1>         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
1>         at
1> org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
1>         at
1> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:136)
1>         at
1> org.eclipse.jface.operation.ModalContext.run(ModalContext.java:262)
1>         at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:752)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage.updateEnablements(ModuleSelectionPage.java:140)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$1.handleEvent(ModuleSelectionPage.java:70)
1>         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
1>         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
1>         at
1> org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
1>         at
1> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
1>         at org.eclipse.jface.window.Window.runEventLoop(Window.java:668)
1>         at org.eclipse.jface.window.Window.open(Window.java:648)
1>         at
1> org.eclipse.ui.actions.NewProjectAction.run(NewProjectAction.java:111)
1>         at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:915)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:866)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:785)
1>         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
1>         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
1>         at
1> org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
1>         at
1> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
1>         at
1> org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377)
1>         at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
1>         at
1> org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:254)
1>         at
1> org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
1>         at
1> org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
1>         at
1>
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335)
1>         at
1> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
1>         at
1> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
1>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
1>         at
1> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
1>         at
1>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
1>         at java.lang.reflect.Method.invoke(Method.java:324)
1>         at org.eclipse.core.launcher.Main.basicRun(Main.java:183)
1>         at org.eclipse.core.launcher.Main.run(Main.java:644)
1>         at org.eclipse.core.launcher.Main.main(Main.java:628)
1> 
1> "VM Thread" prio=1 tid=0x08087110 nid=0x22c5 runnable 
1> 
1> "VM Periodic Task Thread" prio=1 tid=0x080a24e8 nid=0x22cb waiting on
1> condition 
1> "Suspend Checker Thread" prio=1 tid=0x0809f450 nid=0x22c8 runnable 
1> 
1> caschrei@bigboi:502:~/proj/shade/eclipse_ws> kill -3 8899 2>&1 | tee foo2
1> Full thread dump Java HotSpot(TM) Client VM (1.4.2_03-b02 mixed mode):
1> 
1> "ModalContext" prio=1 tid=0x08682650 nid=0x22df runnable
1> [4e617000..4e6178b8]
1> 
1>         at java.io.FileInputStream.readBytes(Native Method)
1>         at java.io.FileInputStream.read(FileInputStream.java:194)
1>         at java.io.BufferedInputStream.read1(BufferedInputStream.java:220)
1>         at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
1>         - locked <0x450e8138> (a java.io.BufferedInputStream)
1>         at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
1>         at java.io.BufferedInputStream.read1(BufferedInputStream.java:222)
1>         at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
1>         - locked <0x450e8158> (a java.io.BufferedInputStream)
1>         at
1>
sun.security.provider.SeedGenerator$URLSeedGenerator.getSeedByte(SeedGenerator.java:467)
1>         at
1> sun.security.provider.SeedGenerator.getSeedBytes(SeedGenerator.java:137)
1>         at
1> sun.security.provider.SeedGenerator.generateSeed(SeedGenerator.java:132)
1>         at
1> sun.security.provider.SecureRandom.engineGenerateSeed(SecureRandom.java:112)
1>         at
1> sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:169)
1>         - locked <0x450e81b8> (a sun.security.provider.SecureRandom)
1>         at java.security.SecureRandom.nextBytes(SecureRandom.java:381)
1>         - locked <0x450e8208> (a java.security.SecureRandom)
1>         at com.jcraft.jsch.jce.Random.fill(Unknown Source)
1>         at com.jcraft.jsch.Session.send_kexinit(Unknown Source)
1>         at com.jcraft.jsch.Session.receive_kexinit(Unknown Source)
1>         at com.jcraft.jsch.Session.connect(Unknown Source)
1>         at
1> org.eclipse.team.internal.ccvs.ssh2.JSchSession.getSession(JSchSession.java:306)
1>         at
1>
org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.internalOpen(CVSSSH2ServerConnection.java:117)
1>         at
1>
org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.open(CVSSSH2ServerConnection.java:99)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.Connection.open(Connection.java:127)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.createConnection(CVSRepositoryLocation.java:575)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:821)
1>         - locked <0x450de618> (a java.lang.Object)
1>         at
1> org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:142)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.validateConnection(CVSRepositoryLocation.java:956)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$2.run(ModuleSelectionPage.java:143)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
1> 
1> "ModalContext" prio=1 tid=0x08740448 nid=0x22de waiting for monitor entry
1> [4ce6e000..4ce6e8b8]
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:799)
1>         - waiting to lock <0x450de618> (a java.lang.Object)
1>         at
1> org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:142)
1>         at
1>
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.validateConnection(CVSRepositoryLocation.java:956)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$2.run(ModuleSelectionPage.java:143)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
1> 
1> "Worker-1" prio=1 tid=0x08592c78 nid=0x22dd in Object.wait()
1> [4e386000..4e3868b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44e46348> (a
1>           org.eclipse.core.internal.jobs.WorkerPool)
1>         at
1> org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:166)
1>         - locked <0x44e46348> (a org.eclipse.core.internal.jobs.WorkerPool)
1>         at
1> org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:193)
1> 
1>         at org.eclipse.core.internal.jobs.Worker.run(Worker.java:59)
1> 
1> "Reference Cleaner - 2" prio=1 tid=0x08367540 nid=0x22d2 in Object.wait()
1> [4dd9b000..4dd9b8b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44f01b88> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
1>         - locked <0x44f01b88> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:207)
1> 
1> "Reference Cleaner - 1" prio=1 tid=0x08367248 nid=0x22d1 in Object.wait()
1> [4dd1a000..4dd1a8b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44f01bf8> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
1>         - locked <0x44f01bf8> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:207)
1> 
1> "Start Level Event Dispatcher" daemon prio=1 tid=0x08263420 nid=0x22cf in
1> Object.wait() [4cfff000..4cfff8b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44ccd160> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at java.lang.Object.wait(Object.java:429)
1>         at
1>
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:162)
1>         - locked <0x44ccd160> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at
1> org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)
1> 
1> "Framework Event Dispatcher" daemon prio=1 tid=0x0825db18 nid=0x22ce in
1> Object.wait() [4cf7e000..4cf7e8b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44cbf9d8> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at java.lang.Object.wait(Object.java:429)
1>         at
1>
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:162)
1>         - locked <0x44cbf9d8> (a
1>           org.eclipse.osgi.framework.eventmgr.EventThread)
1>         at
1> org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)
1> 
1> "Signal Dispatcher" daemon prio=1 tid=0x0809fda8 nid=0x22c9 waiting on
1> condition [0..0]
1> 
1> "Finalizer" daemon prio=1 tid=0x0808af38 nid=0x22c7 in Object.wait()
1> [4c952000..4c9528b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44c3a518> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
1>         - locked <0x44c3a518> (a java.lang.ref.ReferenceQueue$Lock)
1>         at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
1>         at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
1> 
1> "Reference Handler" daemon prio=1 tid=0x0808a378 nid=0x22c6 in Object.wait()
1> [4c8d1000..4c8d18b8]
1>         at java.lang.Object.wait(Native Method)
1>         - waiting on <0x44c3a580> (a java.lang.ref.Reference$Lock)
1>         at java.lang.Object.wait(Object.java:429)
1>         at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
1>         - locked <0x44c3a580> (a java.lang.ref.Reference$Lock)
1> 
1> 
1> "main" prio=1 tid=0x08052880 nid=0x22c3 in Object.wait()
1> [bfffc000..bfffd228]
1>         at java.lang.Object.wait(Native Method)
1>         at org.eclipse.swt.widgets.Display.sleep(Display.java:2867)
1>         - locked <0x48ae9878> (a java.lang.Class)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:137)
1>         at
1> org.eclipse.jface.operation.ModalContext.run(ModalContext.java:262)
1>         at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:752)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage.updateEnablements(ModuleSelectionPage.java:140)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$1.handleEvent(ModuleSelectionPage.java:70)
1>         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
1>         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
1>         at
1> org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
1>         at
1> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
1>         at
1>
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:136)
1>         at
1> org.eclipse.jface.operation.ModalContext.run(ModalContext.java:262)
1>         at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:752)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage.updateEnablements(ModuleSelectionPage.java:140)
1>         at
1>
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$1.handleEvent(ModuleSelectionPage.java:70)
1>         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
1>         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
1>         at
1> org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
1>         at
1> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
1>         at org.eclipse.jface.window.Window.runEventLoop(Window.java:668)
1>         at org.eclipse.jface.window.Window.open(Window.java:648)
1>         at
1> org.eclipse.ui.actions.NewProjectAction.run(NewProjectAction.java:111)
1>         at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:915)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:866)
1>         at
1>
org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:785)
1>         at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
1>         at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
1>         at
1> org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
1>         at
1> org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
1>         at
1> org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377)
1>         at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
1>         at
1> org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:254)
1>         at
1> org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
1>         at
1> org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
1>         at
1>
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335)
1>         at
1> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
1>         at
1> org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
1>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
1>         at
1> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
1>         at
1>
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
1>         at java.lang.reflect.Method.invoke(Method.java:324)
1>         at org.eclipse.core.launcher.Main.basicRun(Main.java:183)
1>         at org.eclipse.core.launcher.Main.run(Main.java:644)
1>         at org.eclipse.core.launcher.Main.main(Main.java:628)
1> 
1> "VM Thread" prio=1 tid=0x08087110 nid=0x22c5 runnable 
1> 
1> "VM Periodic Task Thread" prio=1 tid=0x080a24e8 nid=0x22cb waiting on
1> condition 
1> "Suspend Checker Thread" prio=1 tid=0x0809f450 nid=0x22c8 runnable 
1> 
1> 

Stack dump #2:

2> Full thread dump Java HotSpot(TM) Client VM (1.4.2_03-b02 mixed mode):
2> 
2> "ModalContext" prio=1 tid=0x081c9630 nid=0x2342 waiting for monitor entry
[4e4fb000..4e4fb8b8]
2> 	at
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:799)
2> 	- waiting to lock <0x44800000> (a java.lang.Object)
2> 	at org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:142)
2> 	at
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.validateConnection(CVSRepositoryLocation.java:956)
2> 	at
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$2.run(ModuleSelectionPage.java:143)
2> 	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
2> 
2> "ModalContext" prio=1 tid=0x081c9380 nid=0x2341 runnable [4e47a000..4e47a8b8]
2> 	at java.io.FileInputStream.readBytes(Native Method)
2> 	at java.io.FileInputStream.read(FileInputStream.java:194)
2> 	at java.io.BufferedInputStream.read1(BufferedInputStream.java:220)
2> 	at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
2> 	- locked <0x44782870> (a java.io.BufferedInputStream)
2> 	at java.io.BufferedInputStream.fill(BufferedInputStream.java:183)
2> 	at java.io.BufferedInputStream.read1(BufferedInputStream.java:222)
2> 	at java.io.BufferedInputStream.read(BufferedInputStream.java:277)
2> 	- locked <0x44782668> (a java.io.BufferedInputStream)
2> 	at
sun.security.provider.SeedGenerator$URLSeedGenerator.getSeedByte(SeedGenerator.java:467)
2> 	at sun.security.provider.SeedGenerator.getSeedBytes(SeedGenerator.java:137)
2> 	at sun.security.provider.SeedGenerator.generateSeed(SeedGenerator.java:132)
2> 	at sun.security.provider.SecureRandom.engineGenerateSeed(SecureRandom.java:112)
2> 	at sun.security.provider.SecureRandom.engineNextBytes(SecureRandom.java:169)
2> 	- locked <0x4477dc00> (a sun.security.provider.SecureRandom)
2> 	at java.security.SecureRandom.nextBytes(SecureRandom.java:381)
2> 	- locked <0x4477df58> (a java.security.SecureRandom)
2> 	at com.jcraft.jsch.jce.Random.fill(Unknown Source)
2> 	at com.jcraft.jsch.Session.send_kexinit(Unknown Source)
2> 	at com.jcraft.jsch.Session.receive_kexinit(Unknown Source)
2> 	at com.jcraft.jsch.Session.connect(Unknown Source)
2> 	at
org.eclipse.team.internal.ccvs.ssh2.JSchSession.getSession(JSchSession.java:306)
2> 	at
org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.internalOpen(CVSSSH2ServerConnection.java:117)
2> 	at
org.eclipse.team.internal.ccvs.ssh2.CVSSSH2ServerConnection.open(CVSSSH2ServerConnection.java:99)
2> 	at
org.eclipse.team.internal.ccvs.core.connection.Connection.open(Connection.java:127)
2> 	at
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.createConnection(CVSRepositoryLocation.java:575)
2> 	at
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.openConnection(CVSRepositoryLocation.java:821)
2> 	- locked <0x44800000> (a java.lang.Object)
2> 	at org.eclipse.team.internal.ccvs.core.client.Session.open(Session.java:142)
2> 	at
org.eclipse.team.internal.ccvs.core.connection.CVSRepositoryLocation.validateConnection(CVSRepositoryLocation.java:956)
2> 	at
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$2.run(ModuleSelectionPage.java:143)
2> 	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:101)
2> 
2> "Worker-1" prio=1 tid=0x086a1918 nid=0x233c in Object.wait() [4ce6e000..4ce6e8b8]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x44e46378> (a org.eclipse.core.internal.jobs.WorkerPool)
2> 	at org.eclipse.core.internal.jobs.WorkerPool.sleep(WorkerPool.java:166)
2> 	- locked <0x44e46378> (a org.eclipse.core.internal.jobs.WorkerPool)
2> 	at org.eclipse.core.internal.jobs.WorkerPool.startJob(WorkerPool.java:193)
2> 	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:59)
2> 
2> "Reference Cleaner - 2" prio=1 tid=0x080a9348 nid=0x2332 in Object.wait()
[4dd9b000..4dd9b8b8]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x44f01b88> (a java.lang.ref.ReferenceQueue$Lock)
2> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
2> 	- locked <0x44f01b88> (a java.lang.ref.ReferenceQueue$Lock)
2> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
2> 	at
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:207)
2> 
2> "Reference Cleaner - 1" prio=1 tid=0x080aa6c8 nid=0x2331 in Object.wait()
[4dd1a000..4dd1a8b8]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x44f01bf8> (a java.lang.ref.ReferenceQueue$Lock)
2> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
2> 	- locked <0x44f01bf8> (a java.lang.ref.ReferenceQueue$Lock)
2> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
2> 	at
org.eclipse.jface.action.ActionContributionItem$ImageCache$ReferenceCleanerThread.run(ActionContributionItem.java:207)
2> 
2> "Start Level Event Dispatcher" daemon prio=1 tid=0x08266898 nid=0x232f in
Object.wait() [4cfff000..4cfff8b8]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x44ccd160> (a org.eclipse.osgi.framework.eventmgr.EventThread)
2> 	at java.lang.Object.wait(Object.java:429)
2> 	at
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:162)
2> 	- locked <0x44ccd160> (a org.eclipse.osgi.framework.eventmgr.EventThread)
2> 	at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)
2> 
2> "Framework Event Dispatcher" daemon prio=1 tid=0x082490d8 nid=0x232e in
Object.wait() [4cf7e000..4cf7e8b8]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x44cbf9d8> (a org.eclipse.osgi.framework.eventmgr.EventThread)
2> 	at java.lang.Object.wait(Object.java:429)
2> 	at
org.eclipse.osgi.framework.eventmgr.EventThread.getNextEvent(EventThread.java:162)
2> 	- locked <0x44cbf9d8> (a org.eclipse.osgi.framework.eventmgr.EventThread)
2> 	at org.eclipse.osgi.framework.eventmgr.EventThread.run(EventThread.java:100)
2> 
2> "Signal Dispatcher" daemon prio=1 tid=0x0808eec0 nid=0x2329 waiting on
condition [0..0]
2> 
2> "Finalizer" daemon prio=1 tid=0x0808af38 nid=0x2327 in Object.wait()
[4c952000..4c9528b8]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x44c3a518> (a java.lang.ref.ReferenceQueue$Lock)
2> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:111)
2> 	- locked <0x44c3a518> (a java.lang.ref.ReferenceQueue$Lock)
2> 	at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:127)
2> 	at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
2> 
2> "Reference Handler" daemon prio=1 tid=0x0808a378 nid=0x2326 in Object.wait()
[4c8d1000..4c8d18b8]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x44c3a580> (a java.lang.ref.Reference$Lock)
2> 	at java.lang.Object.wait(Object.java:429)
2> 	at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:115)
2> 	- locked <0x44c3a580> (a java.lang.ref.Reference$Lock)
2> 
2> "main" prio=1 tid=0x08052880 nid=0x2323 in Object.wait() [bfffc000..bfffd228]
2> 	at java.lang.Object.wait(Native Method)
2> 	- waiting on <0x48ae9878> (a java.lang.Class)
2> 	at org.eclipse.swt.widgets.Display.sleep(Display.java:2867)
2> 	- locked <0x48ae9878> (a java.lang.Class)
2> 	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:137)
2> 	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:262)
2> 	at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:752)
2> 	at
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage.updateEnablements(ModuleSelectionPage.java:140)
2> 	at
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$1.handleEvent(ModuleSelectionPage.java:70)
2> 	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
2> 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
2> 	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
2> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
2> 	at
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:136)
2> 	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:262)
2> 	at org.eclipse.jface.wizard.WizardDialog.run(WizardDialog.java:752)
2> 	at
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage.updateEnablements(ModuleSelectionPage.java:140)
2> 	at
org.eclipse.team.internal.ccvs.ui.wizards.ModuleSelectionPage$1.handleEvent(ModuleSelectionPage.java:70)
2> 	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
2> 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
2> 	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
2> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
2> 	at org.eclipse.jface.window.Window.runEventLoop(Window.java:668)
2> 	at org.eclipse.jface.window.Window.open(Window.java:648)
2> 	at org.eclipse.ui.actions.NewProjectAction.run(NewProjectAction.java:111)
2> 	at org.eclipse.jface.action.Action.runWithEvent(Action.java:881)
2> 	at
org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:915)
2> 	at
org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:866)
2> 	at
org.eclipse.jface.action.ActionContributionItem$7.handleEvent(ActionContributionItem.java:785)
2> 	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82)
2> 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:954)
2> 	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:2595)
2> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2298)
2> 	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377)
2> 	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348)
2> 	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:254)
2> 	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141)
2> 	at org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96)
2> 	at
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335)
2> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273)
2> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129)
2> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
2> 	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
2> 	at java.lang.reflect.Method.invoke(Method.java:324)
2> 	at org.eclipse.core.launcher.Main.basicRun(Main.java:183)
2> 	at org.eclipse.core.launcher.Main.run(Main.java:644)
2> 	at org.eclipse.core.launcher.Main.main(Main.java:628)
2> 
2> "VM Thread" prio=1 tid=0x08087110 nid=0x2325 runnable 
2> 
2> "VM Periodic Task Thread" prio=1 tid=0x080a24e8 nid=0x232b waiting on condition 
2> "Suspend Checker Thread" prio=1 tid=0x0808e550 nid=0x2328 runnable 


Subject: cvs causes eclipse to freeze

Our Eclipse 3.0.0 installation locks up when we try to access a
CVS repository on the same Linux box.  I would appreciate help in 
narrowing down the problem.  I assume it is at least partially an
Eclipse problem because we can't replicate the problem with the CVS 
command line interface.

The simplest way to replicate this problem is:

* log on to the machine running our CVS repository, call it "bigboy".

* start Eclipse on a blank workspace

* click on File -> New -> Project

* in the New Project wizard, expand CVS, select "Checkout Projects From
	CVS", and click on "next".

* enter a host name ("bigboy"), repository path, valid user name, valid
	password, specify "extssh" as connection type; click on "use default
	port", then click on "next".


The progress bar makes it to about 5%, and then the Eclipse process
freezes and becomes completely unresponsive.  We have let it stay frozen for
a few hours without seeing any signs of progress.  (Alternately, you can
ask Eclipse's New Project wizard to show a list of valid CVS modules, in which
case Eclipse tries to query CVS and freezes at the 25% point.)

We have no trouble committing to our CVS repository from the cvs command line
client using ssh; we also have no trouble communicating with our CVS
repository from Eclipse processes runing on other Linux or Windows boxes.  We
have no trouble running ssh processes from bigboy to bigboy.

The behavior appears similar to what I'd expect for "bug 9295" mentioned
in the Eclipse 3.0.0 release notes, except that the problem does not go
away when we kill Eclipse and restart it, and the advertized workaround does
not affect the problem.

This does appear to be similar to the behavior in the news posting from Graham
Leggett dated 13jul2004 13:04.

Eclipse 3.0.0 _used_ to commit to and checkout from the CVS repository
correctly until last Thursday afternoon, when I had to kill Eclipse several
times in succession, due to other problems.  Eclipse finally came up and
worked, but then I tried commiting 4 files I'd been editing, and it locked up
at 25% through the commit.  Reverting to 3.0RC1 or 3.0M8 does not appear to
affect the problem.

When I bring Eclipse up in that same workspace I was using last Thursday
(instead of a blank one, as in the steps above), Eclipse freezes as soon as I
type the first character that would change any source file.  I infer from the
fact that Eclipse behaves differently in a clean workspace that the
metafiles in that first workspace are corrupted.

So far, I am proceeding on the assumptions that:

	* No significant Eclipse installation files is corrupted.
	(Date stamps show the only modified directory entry in our
	Eclipse installation tree is subdirectory

	<tree_root>/configuration/org.eclipse.core.runtime/.manager

	which is empty and its date stamp is about 24 hours after we started
	having trouble.

	* The problem is somehow related to Eclipse <--> CVS interaction.

	* The problem is not from Eclipse trying to read corrupted metafiles
	it got from CVS, because the freeze happens regardless of the
	project/module we select to check out.   Besides, other linux boxes
	can check out the Thursday project fine.  

Does anyone have an idea of further tests we can run to narrow this
problem down further?  Is there some documentation that I should be reading?
Is there a log file that should contain something useful?  (A detailed web 
search of the newsgroup postings and a cursory read of the Eclipse online
documentation isn't yielding much.)

Versions of the programs I'm using are:

Eclipse 3.0.0
Red Hat Linux 8.0
GTK2 2.0.6 (I know Eclipse 3.0.0 requires 2.2.1, but I assume that is
	irrelevant since GTK is a graphics library, not a networking/CVS 
	library)
CVS 1.11.2 


Thank you for your consideration,


Christian Schreiner
caschrei@rockwellcollins.com
</nowiki>
<nowiki>When attempting to recompile src libs, a stack overflow occurred when binding 
the supertype of the form Enum<FormattedFloatingDecimal$Form>.


java.lang.StackOverflowError
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.substitute
(ParameterizedTypeBinding.java:566)
	at org.eclipse.jdt.internal.compiler.lookup.Scope.substitute
(Scope.java:2384)
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.substitute
(ParameterizedTypeBinding.java:622)
	at 
org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding.boundCheck
(TypeVariableBinding.java:52)
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.resolve
(ParameterizedTypeBinding.java:512)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType
(BinaryTypeBinding.java:51)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.superclass
(BinaryTypeBinding.java:684)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isSuperclassOf
(ReferenceBinding.java:576)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isCompatibleWith
(ReferenceBinding.java:510)
	at 
org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding.boundCheck
(TypeVariableBinding.java:52)
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.resolve
(ParameterizedTypeBinding.java:512)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType
(BinaryTypeBinding.java:51)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.superclass
(BinaryTypeBinding.java:684)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isSuperclassOf
(ReferenceBinding.java:576)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isCompatibleWith
(ReferenceBinding.java:510)
	at 
org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding.boundCheck
(TypeVariableBinding.java:52)
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.resolve
(ParameterizedTypeBinding.java:512)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType
(BinaryTypeBinding.java:51)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.superclass
(BinaryTypeBinding.java:684)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isSuperclassOf
(ReferenceBinding.java:576)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isCompatibleWith
(ReferenceBinding.java:510)
	at 
org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding.boundCheck
(TypeVariableBinding.java:52)
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.resolve
(ParameterizedTypeBinding.java:512)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType
(BinaryTypeBinding.java:51)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.superclass
(BinaryTypeBinding.java:684)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isSuperclassOf
(ReferenceBinding.java:576)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isCompatibleWith
(ReferenceBinding.java:510)
	at 
org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding.boundCheck
(TypeVariableBinding.java:52)
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.resolve
(ParameterizedTypeBinding.java:512)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.resolveType
(BinaryTypeBinding.java:51)
	at 
org.eclipse.jdt.internal.compiler.lookup.BinaryTypeBinding.superclass
(BinaryTypeBinding.java:684)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isSuperclassOf
(ReferenceBinding.java:576)
	at 
org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding.isCompatibleWith
(ReferenceBinding.java:510)
	at 
org.eclipse.jdt.internal.compiler.lookup.TypeVariableBinding.boundCheck
(TypeVariableBinding.java:52)
	at 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding.resolve
(ParameterizedTypeBinding.java:512)
</nowiki>
<nowiki>R3.0

I used Program.findProgram("html") to find the browser and null was returned
even though Mozilla is registered to open html documents.

I debugged the code and my registry and found that I had no default command in
my registry and hence the following code in
org.eclipse.swt.program.Program.getProgram(String) fails/returns null:

1)  String defaultCommand = getKeyValue (key + DEFAULT_COMMAND, true);
2)  if (defaultCommand == null) defaultCommand = "open"; //$NON-NLS-1$

Reason: after 1) defaultCommand is "" and not null hence defaultCommand is not
set to "open" in 2). Either getKeyValue(...) should return null or the if should
read:
  if (defaultCommand == null || defaultCommand.length == 0)
    defaultCommand = "open"; //$NON-NLS-1$
</nowiki>
<nowiki>1 Tear off the package explorer and give it the focus 
2 Refresh a project via the package explorer, causing the progress box to appear.
3 Wait for the progress box to close on its own.

At this point click on the title, menu, or shortcut bars has no effect, and does
not change the focus.  I have to click on one of the main window views first to
gain focus, then on the menu or shortcut item I'm interested in.
</nowiki>
<nowiki>1) enable semantic highlighting
2) enable deprecated highlighting
  -> the default color is black and no default style
There should be a reasonable default style.
My first choice would be strikethrough which we currently cannot do.
Some dark yellow for "warning" would be my second choice
</nowiki>
<nowiki>I20040817080

I selected 3 projects for check out. I got a dialog and a log entry (see below)
saying that 1 of 3 operations failed. It doesn't tell me which operation (or
better for which project(s) it) failed  and hence it doesn't help me much to
know that 1 of 3 failed.


!ENTRY org.eclipse.team.cvs.ui 4 0 Aug 24, 2004 16:57:47.314
!MESSAGE Errors occured in 1 of 3 operations.
!SUBENTRY 1 org.eclipse.team.cvs.core 4 0 Aug 24, 2004 16:57:47.314
!MESSAGE I/O exception occurred: Pipe broken
!STACK 0
java.io.IOException: Pipe broken
	at java.io.PipedInputStream.read(PipedInputStream.java:224)
	at java.io.PipedInputStream.read(PipedInputStream.java:274)
	at java.io.FilterInputStream.read(FilterInputStream.java:111)
	at
org.eclipse.team.internal.core.streams.TimeoutInputStream.readUntilDone(TimeoutInputStream.java:269)
	at
org.eclipse.team.internal.core.streams.TimeoutInputStream.runThread(TimeoutInputStream.java:218)
	at
org.eclipse.team.internal.core.streams.TimeoutInputStream.access$0(TimeoutInputStream.java:216)
	at
org.eclipse.team.internal.core.streams.TimeoutInputStream$1.run(TimeoutInputStream.java:65)
	at java.lang.Thread.run(Thread.java:534)
</nowiki>
<nowiki>Build I20040824: Searching method declaration references does not work with 
classes having type parameters.

Stack trace:
java.lang.ClassCastException: 
org.eclipse.jdt.internal.compiler.lookup.ParameterizedTypeBinding
	at 
org.eclipse.jdt.internal.core.search.matching.MethodLocator.reportDeclaration
(MethodLocator.java:192)
	at 
org.eclipse.jdt.internal.core.search.matching.MethodLocator.matchReportReferenc
e(MethodLocator.java:154)
	at 
org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching
(MatchLocator.java:1408)
	at 
org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching
(MatchLocator.java:1643)
	at 
org.eclipse.jdt.internal.core.search.matching.MatchLocator.reportMatching
(MatchLocator.java:1498)
	at org.eclipse.jdt.internal.core.search.matching.MatchLocator.process
(MatchLocator.java:1162)
	at 
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches
(MatchLocator.java:766)
	at 
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches
(MatchLocator.java:805)
	at 
org.eclipse.jdt.internal.core.search.matching.MatchLocator.locateMatches
(MatchLocator.java:921)
	at 
org.eclipse.jdt.internal.core.search.JavaSearchParticipant.locateMatches
(JavaSearchParticipant.java:94)
	at org.eclipse.jdt.core.search.SearchEngine.searchDeclarations
(SearchEngine.java:1066)
	at 
org.eclipse.jdt.core.search.SearchEngine.searchDeclarationsOfSentMessages
(SearchEngine.java:1300)
	at 
org.eclipse.jdt.internal.corext.refactoring.structure.ReferenceFinderUtil.getMe
thodReferencesIn(ReferenceFinderUtil.java:112)
	at 
org.eclipse.jdt.internal.corext.refactoring.structure.ReferenceFinderUtil.getMe
thodReferencesIn(ReferenceFinderUtil.java:104)
	at 
org.eclipse.jdt.internal.corext.refactoring.structure.ReferenceFinderUtil.getMe
thodsReferencedIn(ReferenceFinderUtil.java:95)

aso.
</nowiki>
<nowiki>Folks,
  Eclipse-3.x provides an IContentManager and extension
points to identify a type, great.

But for the a C/C++ environment where filenames are more
dynamic say; "cstdio", "iostream", it is not possible
to define __all__ filenames in /usr/include
and also users can change things; adding new files.

CDT provides a way to deal with this, but we
can not hook up to the IContentType stuff since when
the IContentDescriber is call we do not get the filename
but only the inputstream.
</nowiki>

Contains fixes for multiple bugs which could not be separated, along with other unrelated formatting changes
<nowiki>When I have the string "Windows" selected in:

    public static final boolean IS_OS_WINDOWS = getOSMatches("Windows");

Right-click/Refactor does not let me extract "Windows" as a static.
Version 3.1.M1.
</nowiki>
<nowiki>There were 4 failures in the nightly build similar to this:

expected:<...> but was:<...foo> 

junit.framework.ComparisonFailure: expected:<...> but was:<...foo>
at org.eclipse.jdt.debug.tests.core.ArgumentTests.testOutput
(ArgumentTests.java:309)
at org.eclipse.jdt.debug.tests.core.ArgumentTests.testWithVMArg
(ArgumentTests.java:255)
at org.eclipse.jdt.debug.tests.core.ArgumentTests.testVMArgSingle
(ArgumentTests.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke
(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
(DelegatingMethodAccessorImpl.java:25)
at org.eclipse.jdt.debug.tests.DebugSuite$1.run(DebugSuite.java:53)
at java.lang.Thread.run(Thread.java:534)

The test was expecting "foo" and got something prefixed by foo. It looks like 
it could have received the output twice - i.e. "foofoo". The reason for this 
is that the stream listener asks for the contents of the stream, and then adds 
itself as a listener for stream appends. It would be possible for the listener 
to get the contents and the append notification for the same text as the 
stream monitor is not synchronized in this area.
</nowiki>
<nowiki>I20040920

Tests failing, such as:

junit.framework.AssertionFailedError: Wrong number of lines expected:<10> but
was:<11>
	at junit.framework.Assert.fail(Assert.java:47)
	at junit.framework.Assert.failNotEquals(Assert.java:282)
	at junit.framework.Assert.assertEquals(Assert.java:64)
	at junit.framework.Assert.assertEquals(Assert.java:201)
	at
org.eclipse.jdt.debug.tests.core.LineTrackerTests.testNoPrintln(LineTrackerTests.java:102)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at org.eclipse.jdt.debug.tests.DebugSuite$1.run(DebugSuite.java:53)
	at java.lang.Thread.run(Thread.java:534)



junit.framework.AssertionFailedError: Wrong number of lines expected:<10000> but
was:<10664>
	at junit.framework.Assert.fail(Assert.java:47)
	at junit.framework.Assert.failNotEquals(Assert.java:282)
	at junit.framework.Assert.assertEquals(Assert.java:64)
	at junit.framework.Assert.assertEquals(Assert.java:201)
	at
org.eclipse.jdt.debug.tests.core.LineTrackerTests.testFlood(LineTrackerTests.java:133)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at org.eclipse.jdt.debug.tests.DebugSuite$1.run(DebugSuite.java:53)
	at java.lang.Thread.run(Thread.java:534)



junit.framework.AssertionFailedError: Wrong number of lines expected:<10000> but
was:<14240>
	at junit.framework.Assert.fail(Assert.java:47)
	at junit.framework.Assert.failNotEquals(Assert.java:282)
	at junit.framework.Assert.assertEquals(Assert.java:64)
	at junit.framework.Assert.assertEquals(Assert.java:201)
	at
org.eclipse.jdt.debug.tests.core.LineTrackerTests.testFlood(LineTrackerTests.java:133)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:324)
	at junit.framework.TestCase.runTest(TestCase.java:154)
	at junit.framework.TestCase.runBare(TestCase.java:127)
	at junit.framework.TestResult$1.protect(TestResult.java:106)
	at junit.framework.TestResult.runProtected(TestResult.java:124)
	at junit.framework.TestResult.run(TestResult.java:109)
	at junit.framework.TestCase.run(TestCase.java:118)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at junit.framework.TestSuite.run(TestSuite.java:203)
	at junit.framework.TestSuite.runTest(TestSuite.java:208)
	at org.eclipse.jdt.debug.tests.DebugSuite$1.run(DebugSuite.java:53)
	at java.lang.Thread.run(Thread.java:534)
</nowiki>
<nowiki>3.1 M2:

Code Formatter > White Space > Parameterized type > Parameterized type
Preview: "Map<String, Element> map = new<String, Element> HashMap();" is wrong.

BTW, in tree double "Parameterized type" is ugly, why not use something like "Type" on the second 
level.
</nowiki>
<nowiki>I200409212000

- New > Java Interface
- Beside the entry for Package: there is the string (default), but the closing
parenthesis is cut off
</nowiki>
<nowiki>Go to download page of eclipse and click to download a build. Nothing happens.
</nowiki>
<nowiki>After consulation with Nick we have decided that we will add a command line 
option -orientation with one of two parameters = rtl or ltr. These values will 
override the implied values in IDEWorkbenchAdapter
</nowiki>
<nowiki>3.1 M3

These actions no longer appears in the UI, as of 3.0.
</nowiki>
<nowiki>I've recently downloaded the AIX-Motif version of the eclipse and tried to run 
my plugin only to see it fail with "no more handles" error.

Checking the error I've discovered that the Browser class c'tor does:

public Browser(Composite parent, int style) { 
	super(parent,style | SWT.EMBEDDED);
	
	if (!IsLinux) {
		dispose();
		SWT.error(SWT.ERROR_NO_HANDLES);		
	}
....

Being on AIX this code will always fail.

If a Browser class exists for AIX the file should be replaced in the packages 
available for download.
If not, at least change the message to "not supported" at least. "no more 
handles" was an extremly puzzling error ...
</nowiki>
<nowiki>SWT Text widget displays the different characters from the typed characters, 
if addModifyListener is called.

os: RedHat Enterprise Linux 3.0 Update 3.0.
ws: gtk
</nowiki>
Files can have one of the following origin classifications:

; Single 
: The file has a single origin revision in the same file. A bug caused by the relationship between 2 parts is caused by the later of these 2 parts
; Elsewhere
: The file has a definite origin, but caused by a change to another file
; Multiple
: The file contains multiple instances of a bug, with separate origins
; Unrelated
: The file is entirely unrelated to the bug in question
; Related
: The file is related to the bug, but cannot be said to have an origin
; Unclear
: It was not possible to determine the origin

Approaches can have one of the following outcomes:
; Correct
: The set of origins returned by the approach is entirely the same as the ones determined
; Subset
: The approach returns a subset of the correct origins
; Superset
: The approach returns a superset of the correct origins
; Incorrect
: The approach returns an entirely incorrect set of results
; Nothing
: The approach returns nothing
; Unclear
: It was not possible to determine what the approach returns

In all cases, a count of the correct/incorrect origins will be kept

There are three approaches:
; TA
: All comment and formatting changes will be noted, but ignored in calculating results
; DA
: Intra-procedural version. Will not consider dependencies onto other classes/objects. Will consider try/catch blocks as changing dependencies but this will be noted
; DA+
: Inter-procedural version. Will consider dependencies onto other classes/objects. Will consider try/catch blocks as changing dependencies but this will be noted
* Update to existing fix [[Commit 1.89|Commit 1.89|/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java]]
* Contains unrelated changes
* Think DAs will get confused by extraction to temporary variable, therefore seeing it as a dependencies being changed
* Change required to pass through new method parameter to other class
* For TA, recognising guard clause would give Correct

* Origin due to fixing another bug
* All approaches would return 1.07
* Contains only formatting changes
* Contains fixes to multiple other bugs.
* Appears to only contain changes for other bugs
* Changed due to added constructor parameter, but set as null in this class
* There was an intervening change where the type of a variable changed. Think DA would see this as being different lines, and therefore dependencies as being changed
* For TA, most recent would give Incorrect, most frequent would give Correct
* One of the lines removed had a reference to a static variable defined elsewhere, which was changed in an intervening version. I think DA would actually ignore this, and so get this right, while DA+ would get confused by it.
* For TA, most recent would give Incorrect, most frequent would give Correct
* Bug only relates to javadoc comments
* Multiple comments, all added in same revision
* Change is to use a ternary expression, which means the actual dependencies are unaltered
* Slightly dubious about the origin of this one. It's possible it was caused by a change made elsewhere
* Considering guard clause would give Incorrect for TA
* Only contains changes to javadoc

* This is really a new feature
* Contains unrelated changes
* Impossible to separate which changes are made to fix Bug 83004, and which are for Bug 72796
* Only contains changes to javadoc
* Only change is to String literal
* Supect DAs would return nothing, as only changes made are to import statements and fields
* Bug only relates to javadoc comments
* Multiple comments, all added in same revision
* Bug only relates to javadoc comments
* Multiple comments, all added in same revision
* For TA, most recent would give Correct, most frequent would give Correct
* Added new methods (one of which was moved from ProgressManager.java), for use by other classes
* New methods have no dependencies on existing parts of the class, so DA+ would return Nothing
* Fixed by removing a chained method call. Assuming DA will see the two lines as not mapping, meaning it'll go with whenever the line was added.

* Method has been moved around class twice (not just by changes in whitespace). Think DA would cope with this, as the name has stayed constant
* Only contains changes to javadoc
* Multiple comments, added in same version
* Only contains changes to javadoc

* Bug only relates to javadoc comments
* Multiple comments, all added in same release
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Ternary expression added, but no new dependencies, so think this would return nothing
* Think dependency approach would return 1.135, when method was added
* Only added lines, so text approach would return nothing
* Contains fixes for multiple other bugs
* Only contains changes to javadoc

* Related changes due to parameter changes elsewhere

* The line goes from using //e// to //e.getStatus()//, back to just //e//. I think DA would see this as being data-dependent on //e// the entire time, and so actually get this correct, while DA+ might not do the same

* Only contains changes to javadoc
* Only contains changes to javadoc
* New methods due to interface change
* Only contains changes to javadoc

* Although there are multiple bugs, all originate in 1.2, which was in fact the first revision
* For TA, most recent would give Incorrect, most frequent would give Correct
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Only added lines, so TA would return nothing
* I think DA would return 1.1
* Fairly difficult to guess origin
* All changes just uncomment commented out lines of code, therefore assuming TA treats these as adds, and does nothing

* Ternary expression added, but only added dependency is onto a static method in another class, so think DA would return nothing while DA+ returned something
* Origin 1.1 & 1.98
* Contains unrelated changes due to refactoring
* Complicated by moving methods between 1.1 and 1.2
* Text approach would return 1.98, 1.1
* I think dependency approach would return 1.140, since in that revision a try-catch block was added before a call to runOperation, adding the control-dependence which was removed in 1.156
* For TA, most frequent and most recent would both give Subset (Different results)
* Type of object has changed. Assuming DA wouldn't map the statements to one another, and therefore would get the correct version
* The file appears to have been removed and re-added at one point. (Shows up as entire delete/entire add) . Results assume approaches would cope with this

* Type of object has changed. Assuming DA wouldn't map the statements to one another, and therefore would get the correct version
* Contains unrelated changes
* Related changes due to parameter changes elsewhere
* Only contains changes to javadoc
* Change required to pass through new method parameter to other class
* Change required to pass through new method parameter to other class
* New clause added to if statement, which don't think DA will pick up on
* Update to existing fix in [[Commit 1.14|Commit 1.14|/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/WebKit.java]]
* Possible new feature, caused by new API introduced in another class
* Might contain unrelated changes
* For TA, most frequent would give Correct, most recent would give Incorrect
*Update to existing fix in [[Commit 1.11|Commit 1.11|/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/part/PageBookView.java]]
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect

* Only change adds clauses to existing if-statement, so suspect DA would map lines as one-another and return nothing
* New methods due to interface change
* Actually 2 bugs: Switch on launch is wrong, Switch on suspend is wrong
* //Think// DA+ might return something, but the only change is a data-dependency on a static variable in another class
* Only new fields added
* Change required to pass through new method parameter to other class

* Bug is about showing the wrong code in the preview, so although this is in a similar area, I don't think it's actually related

* Contains only formatting changes
* Only contains changes to javadoc
* Appears to be update to existing fix [[Commit 1.14|Commit 1.14|/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/PerspectiveSwitcher.java]]
* New predicate added to if-statement. Think DAs would see these lines as mapping to one another and therefore dependencies are unchanged
* Bug report confirms changes were not related to bug, and bug is in fact invalid
* New file created, as this is really a new feature
* New file created, as this is really a new feature
* New clause added to if statement, which don't think DA will pick up on
* Contains unrelated changes - Extraction to constants
* Think DA would return correct answer, assuming it could track moved methods
* For TA, most frequent would give Correct, most recent would give Incorrect

* Strange one, appears to be turned on off by changing two boolean flags that emulate behaviour from another bug
* Changes only in fields, so don't think DA would return anything
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Only change is to add a synchronised block around a block of code. Assuming that the DAs see this as no change to the control dependencies, and only as an added data dependency on the monitor variable
* Considering guard clause would give Superset for TA

* Only contains changes to javadoc
* Multiple comments, all changed in same versions


* Only added code, so TA would return nothing
* Only added lines, so TA would return nothing
* I think DA would return 1.21, when the containing method was created
* Only change is  to add a new line with a control-dependency on an if-block, which DA will use as the (incorrect) origin


* New clause added to if statement, which don't think DA will pick up on





* Change required to pass through new method parameter to other class

* Bug report confirms changes were not related to bug, and bug is in fact invalid
* Think DA would get confused by extraction to temporary variable
* Bug claims this was caused by changes to behaviour in other class
* Only contains comment changes, so no approach would return anything
* Sort of a new feature, so maybe could be considered Related

* Change required to pass through new method parameter to other class
* Change required to pass through new method parameter to other class
* Bug report confirms changes were not related to bug, and bug is in fact invalid
* This could really be seen as a new feature, but it's moving functionality from the IDEWorkbenchAdvisor to the more general Workbench, and expanding on it
* New line added which will have control dependency on method entry, which was last changed in 1.229
* All added methods, and only dependencies are onto static fields/methods of other classes, so no idea what DA+ will do
* Changes due to refactoring
* Both approaches would return something
* Change required to pass through new method parameter to other class

* Think both DA's would see dependencies as unchanged
* Changes due to refactoring
* Both approaches would return something
* The fix applied here is actually wrong, as every change is undone by [[Commit 1.29|/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java]]
* Only change is to add a synchronised block around a block of code. Assuming that the DAs see this as no change to the control dependencies, and only as an added data dependency on the monitor variable
* The monitor being used is a field, so DA will see no dependency changes
* Considering guard clause would give Superset for TA
* Sort of a new feature, so maybe could be considered Related

* Correction of the change in [[Commit 1.28|Commit 1.28|/org.eclipse.debug.core/core/org/eclipse/debug/internal/core/OutputStreamMonitor.java]]
* Only change is to make methods synchronizes, and to remove some synchronized blocks added in the last version, which will confuse DA
* For TA, most frequent would give Incorrect, most recent would give Incorrect

* Contains only changes to javadoc comments

* Only contains changes to javadoc
* Only contains changes to javadoc
* Only contains changes to javadoc
* Only contains changes to javadoc
* Multiple comments, all added in same version
* Think both DA's would see dependencies as unchanged
* Again, DA depends on how statement mapping works
* I think this is a new feature
* Contains unrelated changes

* Change required to pass through new method parameter to other class

* Contains fixes for multiple bugs
* Deleted line/dependency that was introduced in 1.18 would confuse both approaches
* For TA, most frequent would give Incorrect, most recent would give Incorrect
* Again, this could have been around earlier, but it was only at 1.11 that a LaunchViewContextListener became associated with a single LaunchView, and therefore started leaking
* Only added dependency starting at static method, so not sure if DA+ could return anything
* Contains unrelated changes
* Think the only dependencies removed are data-dependencies on the scope variable, all of which seem to have been there since first version
* For TA, most frequent would give Incorrect, most recent would give Incorrect
* Changed due to added constructor parameter, but set as null in this class
* Change required to pass through new method parameter to other class
* DA result based on the fact lines are very different, so would be seen as control dependency removed

* Change required to pass through new method parameter to other class


* New method due to data being set elsewhere
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Only contains changes to javadoc
* I think this is a new feature.
* DA response depends on statement mapping
* Change required to pass through new method parameter to other class
* Change required to pass through new method parameter to other class
* Knock-on changes caused by API changes elsewhere
* I think both approaches would say 1.8, when line was changed to String from 1-entry String[]
* Change required to pass through new method parameter to other class
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect



* This is really a new feature
* Intervening version changed dependencies on static methods, but don't think this is taken into consideration at this stage of the algorithm, only "when was the line added"
* For TA, most frequent would give Correct, most recent would give Incorrect
* Adds a synchronized keyword to the method, which I think only adds a data dependency on method entry to the object itself, which surely it must already be considered as having. Treating this as unchanged
* There is an additional change which would mean it would return 1.1

* Adds a synchronized keyword to the method, which I think only adds a data dependency on method entry to the object itself, which surely it must already be considered as having. Treating this as unchanged
* There is an additional change which would mean it would return 1.1

* Impossible to separate which changes are made to fix Bug 83004, and which are for Bug 72796
* Origin due to fixing another bug
* All approaches would return 1.39

* TA should see added if clause as added line, and return nothing
* Considering guard clause would give Correct for TA

* Sort of a new feature, so maybe could be considered Related
* Change required to pass through new method parameter to other class
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* I think this is a new feature
* Seems to contain unrelated changes
* This potentially could be a new feature, so origin of Related, but I think it's 1.1
* TA would return 1.1 and 1.3, possibly others
* DA would return 1.2, due to removed dependency on monitor
* For TA, most frequent would give Correct, most recent would give Incorrect

* Suspect this is really a new feature
* Considering guard clause would make no difference
* For every revision up to about 30-odd, contains no line-breaks, so entire file is seen as one line which changes every revision
* This appears to be a change to the fix made in [[Commit 1.42|Commit 1.42|/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/display/DisplayView.java]], in order to work around another bug, 60039
* Impossible to separate which changes are made to fix Bug 83004, and which are for Bug 72796
* Blocks of code surrounded by try-catch blocks
* Assuming whitespace is ignored, TA will see this as adds and return nothing
* Assuming the try block to do not remove any dependencies, the catch blocks add a dependency on one of the method parameters, dating back to when the method was created
* Considering guard clause would give Superset for TA
* Only contains changes to javadoc

* This is functionality that was removed from here and generalised
* Method extracted to another class, and modified slightly, and change due to method renamed in other class
* For TA, most frequent would give Incorrect. most recent would give Incorrect
* DA assumes that DA+ will see dependency change from one static variable to another, but DA won't
* Only contains changes to javadoc
* Contains unrelated changes
* For TA, most frequent would give Correct, most recent would give Incorrect


* Contains only formatting changes
* DA result assumes that extraction to temporary variable is seen as adding new data dependency




* Think DA+ would return something, since it's a new method, and has dependencies on object attributes
* Bug only relates to javadoc comments
* Only contains comment change
* The fix to the bug involved moving code from JavaElement.java to here, modifying it in the process
* Contains unrelated changes
* All 3 approaches would return something, although haven't checked what
* Only contains comment changes, so neither approach would return anything
* Change required to pass through new method parameter to other class
* Fairly sure the error was in 1.46. Fix was to remove an else block added in 1.51, but prior to the else block being there, the same code would have been executed anyway
* Think that 1.51 was an unsuccessful attempt to fix a similar bug

* TA would say 1.2
* DA would I think say 1.1
* Complicated by the method containing the call being moved between 1.1 and 1.2. A text approach which correctly mapped these lines (which is possible) should return 1.1
* Two instances of bug, but origin in same revision
* Contains unrelated changes


* New methods due to interface change
* Fairly sure TA will get this right. There's a number of changes, but they're all whitespace/formatting
* Only contains changes to javadoc
* Change required to pass through new method parameter to other class

* Not sure this fix is actually the same bug, as the commit comment doesn't really match up with the comments in the bug report
* Quite a lot of changes, TA would report about 6 versions
* For TA, most frequent would give Correct, most recent would give Incorrect

* Origin difficult to determine, a few sections changed, but think it's regressions caused by deletion of if clause in 1.53
* DA result depends on whether it considers entirely deleted methods. Think it would be incorrect, but DA+ Correct
* For TA, most frequent would give Incorrect, most recent would give Correct
* Lots of whitespace changes, for about 10 consecutive revisions. 
* For TA, most frequent would give Correct, most recent would give Incorrect
* Bug appears to have been introduced in 1.47, when Runnable was changed from being ran asynchronously to being synchronous
* Text approach would say 1.11 and 1.47
* I think dependency approach would say 1.47. There are in effect two methods being changed, one inside an  anonymous inner class inside the other one.
* For TA, most frequent would give Incorrect, most recent would give Correct
* Only change is an added call to a superclass method


* Not sure this is really related to bug. This is essentially client code that was updated to use the new API, a bit oddly as the old method was not removed
* All approaches would return something
* Interestingly, only change was to comment out a line, so approaches would have to be careful by what they mean by "ignore comment changes". Assuming this is treated by both as if the lines were removed
* I think DA wouldn't map lines, so would see this as control dependency removed
* Bug only relates to javadoc comments
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Not entirely sure this is related
* Changed to call different method on an instance of another object, so think DAs would see these as unmapped, and got to when the control dependency was added

* Caused by changing the format of a String in another class
* Only contains changes to javadoc
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Changed due to added constructor parameter, but set as null in this class
* Utility code moved to ProgressManagerUtil for use elsewhere
* For TA, most frequent would give Incorrect, most recent would give Incorrect
* Change required to pass through new method parameter to other class
* Contains unrelated changes
* Knock-on changes caused by API changes elsewhere
* Changed due to added constructor parameter, but set as null in this class
* TA will ignore the whitespace, and see this as lines added
* Considering guard clause would give Correct for TA
* This is really a new feature
* Intervening version changed dependencies on static methods, but don't think this is taken into consideration at this stage of the algorithm, only "when was the line added"
* For TA, most frequent would say Incorrect, most recent would say Incorrect
* This is really a new feature
* Intervening version changed dependencies on static methods, but don't think this is taken into consideration at this stage of the algorithm, only "when was the line added"
* For TA, most frequent would say Incorrect, most recent would say Incorrect
* Contains only formatting changes
* Method split in 2, but the bug is really located in the clients that need to call these methods
* Change is within a ternary expression, but it appears the dependencies of the line are unaltered
* This looks like an update to the fix [[Commit 1.4|Commit 1.4|/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java]],
* Bug only relates to javadoc comments
* I think this is a new feature
* Caused by changing the format of a String in another class
* Update to existing fix [[Commit 1.69|Commit 1.69|/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Browser.java]]


* Knock-on changes caused by API changes elsewhere
* Caused by unrelated change to remove unused method parameters
* Changes due to refactoring
* Both approaches would return something

* Additions of constants for use elsewhere
* Only contains added fields, so neither approach would return anything
* Changes due to refactoring
* Both approaches would return something
* Seems to be a minor fix to an exception message, but it's not entirely clear if it has anything to do with the bug in question. Certainly it's not fixing the problem raised
* Changes due to refactoring
* Both approaches would return something

* New methods due to data being needed elsewhere
* Caused by changes to superclass constructor
* Caused by changes to superclass constructor
* Caused by changes to superclass constructor

* Considering guard clause would give Correct for TA
* Considering guard clause would give Correct for TA
* Ternary expression added, but only added dependency is onto a static method in another class, so think DA would return nothing while DA+ returned something
* Changed method call to use one constant instead of another. Think this would mean that data dependency would be removed  and traced back in DA+, but not in DA
* New abstract method added for use by other class
* Static helper method which was moved as part of the fix. Bug can't really be said to have existed here, since it was up to each individual caller to lock correctly
* Entire method deleted, so don't think DA would return anything
* I think origin is 1.60, when advanced tab was added
* TA would say 1.63 & 1.4
* DA would say 1.63


* Change required to pass through new method parameter to other class
* This potentially could be a new feature, so origin of Related, but otherwise it's 1.1
* I think all approaches would return 1.1
* It's possible this bug existed earlier, but at 1.72 the variable went from being static to non-static, so can't really say there was a leak before that
* Contains unrelated variable rename
* DA should get 1.2, as only change is new control dependency on method entry
* DA+ should be able to cope with the rename I think, since it'll map the line 
* For TA, most frequent would say Incorrect, most recent would say Incorrect
* Entire methods deleted, so think DAs would do nothing
* Only added lines, so TA returns nothing
* Adds dependency on exception in catch block, suspect DA would return 1.7
* Contains only formatting changes
* New interface method due to data being needed elsewhere
* Being used to store variable between method calls in Scribe.java
* Change required to pass through new method parameter to other class
* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Contains only javadoc changes
* Added method, although not sure where it's called from
* Think this is a bug caused by a change elsewhere, although can't say where
* New method added to interface, unsure where it's used
* Contains only whitespace changes
* Blocks of code surrounded by try-catch blocks
* Assuming whitespace is ignored, TA will see this as adds and return nothing
* Assuming the try block to do not remove any dependencies, the catch blocks add a dependency on one of the method parameters, dating back to when the method was created
* Considering guard clause would give Superset for TA
* Changes due to refactoring
* Both approaches would return something

* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Doesn't seem to be related to bug
* Both approaches would return something
* Change required to pass through new method parameter to other class
* For TA, most frequent would give Correct, most recent would give Incorrect
* TA would give 1.4, 1.6, 1.7, 1.8, DA would give 1.8
* Knock-on changes caused by API changes elsewhere
* Contains fixes to multiple other bugs. 
* Difficult to determine what changes are for what bug fix, but it appears to be the removal of 'this.kind == DOM_PARSER' from several of the if-clauses, each of which was added in Revision 1.2
* For TA, most frequent would give Incorrect, most recent would give Incorrect
* Only contains changes to javadoc
* Multiple comments, both added in same version
* Possible new feature, caused when new API was introduced in another class

* Massive rewrite, fixing lots of bugs. Impossible to tell which is which, and what approaches would return, although changes are TA would be Superset and DA Incorrect
* Only new method added, for use by other class
* Depends on object methods, so DA+ would return something
/***
<<tiddler CookieManager>>
***/
/***
!!![[Portable cookies:|CookieSaverPlugin]] {{fine{<<option chkPortableCookies>>enable <<option chkMonitorCookieJar>>monitor}}}
^^This section is ''//__automatically maintained__//'' by [[CookieSaverPlugin]].  To block specific cookies, see [[CookieSaverPluginConfig]].^^
***/
//{{{
if (config.options.txtUserName=="spd" && config.options.chkPortableCookies) {
	config.options["txtCurrentBackup"]="1";
	config.options["txtSavedStory"]="[[Commit 1.56|/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ViewPane.java]] [[Commit 1.5|/org.eclipse.update.core/src/org/eclipse/update/internal/model/BundleManifest.java]] [[Commit 1.62|/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/launchConfigurations/LaunchConfigurationsDialog.java]] [[Commit 1.6|/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaTextSelection.java]] [[Commit 1.6|/org.eclipse.swt/Eclipse SWT Browser/win32/org/eclipse/swt/browser/WebSite.java]] [[Commit 1.6|/org.eclipse.update.configurator/src/org/eclipse/update/internal/configurator/BundleManifest.java]] [[Commit 1.70|/org.eclipse.swt/Eclipse SWT Browser/carbon/org/eclipse/swt/browser/Browser.java]] [[Commit 1.71|/org.eclipse.jdt.core/formatter/org/eclipse/jdt/internal/formatter/Scribe.java]] [[Commit 1.76|/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/keys/WorkbenchKeyboard.java]] [[Commit 1.89|/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java]] [[Commit 1.9|/org.eclipse.search/search/org/eclipse/search/internal/ui/text/ReplaceDialog2.java]] [[TiddlerTweaker]]";
}
//}}}
// // /% end portable cookies %/
/***
!!![[Baked cookies:|CookieManagerPlugin]]
^^Press {{smallform{<<cookieManager button>>}}} to save the current browser cookies... then hand-edit this section to customize the results.^^
***/

// The following settings are applied as defaults for all users:           //
//{{{
	config.options["txtMaxEditRows"]=25;
	config.options["txtTiddlerLinkTootip"]="%0 - %2 (%3 bytes) - %4";

	if (!config.options.txtTheme.length) config.options.txtTheme='StyleSheet';

	// Make sure FAQ panels are *always* closed on startup (so load-on-demand can be used later on):
	config.options.chkSliderWelcomeShowFAQ=false;
	saveOptionCookie('chkSliderWelcomeShowFAQ');
	config.options.chkSliderMainMenu_faq=false;
	saveOptionCookie('chkSliderMainMenu_faq');
	config.options.chkSliderSiteMenu_faq=false;
	saveOptionCookie('chkSliderSiteMenu_faq');

	config.options["chkAutoSave"]=true;
	config.options["chkBackstage"]=true;
	config.options["chkSaveStory"]=true;
	config.options["chkSliderMainMenu_faq"]=false;
	config.options["chkSliderSiteMenu_faq"]=false;
	config.options["chkSliderWelcomeShowFAQ"]=false;
	config.options["chkStoryAllowAdd"]=false;
	config.options["chkStoryClose"]=false;
	config.options["chkStoryFold"]=false;
	config.options["chkStoryTop"]=false;
	config.options["txtBackupFolder"]="backups";
	config.options["txtCurrentBackup"]="7";
	config.options["txtMainTab"]="Tags";
	config.options["txtSavedStory"]="[[CookieJar]]";
	config.options["txtUserName"]="spd";
//}}}

// 0 cookies saved on Tuesday, February 1st 2011 at 10:11:13 by spd//
//^^(edit/remove username check and/or individual option settings as desired)^^//
//{{{
if (config.options.txtUserName=="spd") {
}
//}}}
/***
|Name|CookieManagerPlugin|
|Source|http://www.TiddlyTools.com/#CookieManagerPlugin|
|Version|2.4.1|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|view/add/delete browser-based cookies and "bake" cookies to CookieJar tiddler for 'sticky' settings|
!!!!!Usage
<<<
This plugin provides an interactive control panel that lets you select, view, modify, or delete any of the current values for TiddlyWiki options that have been stored as local, private, //browser cookies//.  You can also use the control panel to "bake cookies", which generates a set of javascript statements that assign hard-coded option values to the TiddlyWiki internal variables that correspond to the current browser cookie settings.  These hard-coded values are then stored in the [[CookieJar]] tiddler, which is tagged with<<tag systemConfig>> so that each time the document is loaded, the baked cookie settings will be automatically applied.

When a set of baked cookies is added to the [[CookieJar]], it is automatically surrounded by a conditional test so that the hard-coded settings will only be applied for the username that was in effect when they were initially generated.  In this way, if you publish or share your document with others, //your// particular baked cookie settings are not automatically applied to others, so that their own browser-based cookie settings (if defined) will be applied as usual.

Whenever you "bake cookies", new hard-coded javascript assignment statements are *appended* to the end of the [[CookieJar]].  However, any baked cookies that were previously generated and stored in the [[CookieJar]] are not automatically removed from the tiddler.  As a result, because the most recently baked cookie settings in the [[CookieJar]] are always the last to be processed, the values assigned by older baked cookies are immediately overridden by the values from the newest baked cookies, so that the newest values will be in effect when the CookieJar startup processing is completed.

Each time you bake a new batch of cookies, it is recommended that you should review and hand-edit the [[CookieJar]] to remove any "stale cookies" or merge the old and new sets of baked cookies into a single block to simplify readability (as well as saving a little tiddler storage space).  Of course, you can also hand-edit the [[CookieJar]] tiddler at any time simply to remove a few individual //baked cookies// if they are no longer needed, and you can even delete the entire [[CookieJar]] tiddler and start fresh, if that is appropriate.  Please note that changing or deleting a baked cookie does not alter the current value of the corresponding option setting, and any changes you make to the [[CookieJar]] will only be applied after you have saved and reloaded the document in your browser.
<<<
!!!!!Examples
<<<
{{{<<cookieManager>>}}}
{{smallform small center{
@@display:block;width:35em;<<cookieManager>>@@}}}
<<<
!!!!!Configuration
<<<
<<option chkAllowBrowserCookies>> store ~TiddlyWiki option settings using private browser cookies
<<option chkMonitorBrowserCookies>> monitor browser cookie activity (show a message whenever a cookie is set or deleted)
<<option chkCookieManagerAddToAdvancedOptions>> display [[CookieManager]] in [[AdvancedOptions]]
//note: this setting does not take effect until you reload the document//
<<<
!!!!!Revisions
<<<
2011.01.16 2.4.1 in init(), corrected double addition of CookieManager to backstage
2009.08.05 2.4.0 changed CookieJar output format to support odd symbols in option names (e.g. '@')
2008.09.14 2.3.2 fixed handling for blocked cookies (was still allowing some blocked cookies to be set)
2008.09.12 2.3.1 added blocked[] array and allowBrowserCookie() test function for selective blocking of changes to browser cookies based on cookie name
2008.09.08 2.3.0 extensive code cleanup: defined removeCookie(), renamed cookies, added 'button' param for stand-alone "bake cookies" button, improved init of shadow [[CookieManager]] and [[CookieJar]] tiddlers for compatibility with new [[CookieSaverPlugin]]. 
2008.07.11 2.2.1 fixed recursion error in hijack for saveOptionCookie()
2008.06.26 2.2.0 added chkCookieManagerNoNewCookies option
2008.06.05 2.1.3 replaced hard-coded definition for "CookieJar" title with option variable
2008.05.12 2.1.2 add "cookies" task to backstage (moved from BackstageTasks)
2008.04.09 2.1.0 added options: chkCookieManagerAddToAdvancedOptions
2008.04.08 2.0.1 automatically include CookieManager control panel in AdvancedOptions shadow tiddler
2007.08.02 2.0.0 converted from inline script
2007.04.29 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.CookieManagerPlugin= {major: 2, minor: 4, revision: 1, date: new Date(2011,1,16)};
//}}}
//{{{
config.macros.cookieManager = {
	target:
		config.options.txtCookieJar||"CookieJar",
	blockedCookies:
		[],
	allowBrowserCookie: function(name) {
		return true;
	},
	displayStatus: function(msg) {
		if (config.options.chkMonitorBrowserCookies && !startingUp)
			displayMessage("CookieManager: "+msg);
	},
	init: function() {
		if (config.options.txtCookieJar===undefined)
			config.options.txtCookieJar=this.target;
		if (config.options.chkAllowBrowserCookies===undefined)
			config.options.chkAllowBrowserCookies=true;
		if (config.options.chkMonitorBrowserCookies===undefined)
			config.options.chkMonitorBrowserCookies=false;

		config.shadowTiddlers.CookieManager=
			 "/***\n"
			+"!!![[Browser cookies:|CookieManagerPlugin]] "
			+"{{fine{<<option chkAllowBrowserCookies>>enable <<option chkMonitorBrowserCookies>>monitor}}}\n"
			+"^^Review, modify, or delete browser cookies..."
			+"To block specific cookies, see [[CookieManagerPluginConfig]].^^\n"
			+"@@display:block;width:30em;{{smallform small{\n<<cookieManager>>}}}@@\n"
			+"***/\n";

		// add CookieManager to shadow CookieJar
		var h="/***\n<<tiddler CookieManager>>\n***/\n";
		var t=(config.shadowTiddlers[this.target]||"").replace(new RegExp(h.replace(/\*/g,'\\*'),''),'')
		config.shadowTiddlers[this.target]=h+t;

		if (config.options.chkCookieManagerAddToAdvancedOptions===undefined)
			config.options.chkCookieManagerAddToAdvancedOptions=true;
		if (config.options.chkCookieManagerAddToAdvancedOptions)
			config.shadowTiddlers.AdvancedOptions+="\n!!CookieManager\n><<tiddler CookieManager>>";

		// add "cookies" backstage task
		if (config.tasks && !config.tasks.cookies) { // for TW2.2b3 or above
			config.tasks.cookies = {
				text: "cookies",
				tooltip: "manage cookie-based option settings",
				content: "{{groupbox{<<tiddler [["+this.target+"]]>>}}}"
			}
			config.backstageTasks.push("cookies");
		}
	},
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,"span");
		span.innerHTML=(params[0]&&params[0].toLowerCase()=="button")?this.button:this.panel;
		this.setList(span.firstChild.list);
	},
	panel: '<form style="display:inline;margin:0;padding:0" onsubmit="return false"><!--\
		--><select style="width:99%" name="list" \
			onchange="this.form.val.value=this.value.length?config.options[this.value]:\'\';"><!--\
		--></select><br>\
		<input type="text" style="width:98%;margin:0;" name="val" title="enter an option value"><br>\
		<input type="button" style="width:33%;margin:0;" value="get" title="refresh list" \
			onclick="config.macros.cookieManager.setList(this.form.list);"><!--\
		--><input type="button" style="width:33%;margin:0;" value="set" title="save cookie value" \
			onclick="var cmc=config.macros.cookieManager;\
				var opt=this.form.list.value; var v=this.form.val.value; \
				var msg=opt+\' is a blocked cookie.  OK to proceed?\';\
				if ((!cmc.blockedCookies.contains(opt) && cmc.allowBrowserCookie(opt))||confirm(msg)) {\
					config.options[opt]=opt.substr(0,3)==\'txt\'?v:(v.toLowerCase()==\'true\'); \
					saveOptionCookie(opt);config.macros.cookieManager.setList(this.form.list);\
				}"><!--\
		--><input type="button" style="width:33%;margin:0;" value="del" title="remove cookie" \
			onclick="var cmc=config.macros.cookieManager; var opt=this.form.list.value; \
				var msg=opt+\' is a blocked cookie.  OK to proceed?\';\
				if ((!cmc.blockedCookies.contains(opt) && cmc.allowBrowserCookie(opt))||confirm(msg)) {\
					removeCookie(this.form.list.value,true); \
					cmc.setList(this.form.list);\
				}"><br>\
		<input type="button" style="width:50%;margin:0;" value="bake cookies" \
			title="save current cookie-based option values into a tiddler" \
			onclick="return config.macros.cookieManager.bake(this,false)"><!--\
		--><input type="button" style="width:50%;margin:0;" value="bake all options" \
			title="save ALL option values (including NON-COOKIE values) into a tiddler" \
			onclick="return config.macros.cookieManager.bake(this,true)"><!--\
		--></form>\
	',
	button: '<form style="display:inline;margin:0;padding:0" onsubmit="return false"><!--\
		--><input type="button" style="margin:0;" value="bake cookies" \
			title="save current browser-based cookie values into a tiddler" \
			onclick="return config.macros.cookieManager.bake(this,false)"><!--\
		--></form>\
	',
	getCookieList: function() {
		var cookies = { };
		if (document.cookie != "") {
			var p = document.cookie.split("; ");
			for (var i=0; i < p.length; i++) {
				var pos=p[i].indexOf("=");
				if (pos==-1) cookies[p[i]]="";
				else cookies[p[i].substr(0,pos)]=unescape(p[i].slice(pos+1));
			}
		}
		var opt=new Array(); for (var i in config.options) if (cookies[i]) opt.push(i); opt.sort();
		return opt;
	},
	setList: function(list) {
		if (!list) return false;
		var opt=this.getCookieList();
		var sel=list.selectedIndex;
		while (list.options.length > 1) { list.options[1]=null; } // clear list (except for header item)
		list.options[0]=new Option("There are "+opt.length+" cookies...","",false,false);
		if (!opt.length) { list.form.val.value=""; return; } // no cookies
		var c=1;
		for(var i=0; i<opt.length; i++) {
			var txt="";
			if  (opt[i].substr(0,3)=="chk")
				txt+="["+(config.options[opt[i]]?"\u221A":"_")+"] ";
			txt+=opt[i];
			list.options[c++]=new Option(txt,opt[i],false,false);
		}
		list.selectedIndex=sel>0?sel:0;
		list.form.val.value=sel>0?config.options[list.options[sel].value]:"";
	},
	header:
		"/***\n"
		+"!!![[Baked cookies:|CookieManagerPlugin]]\n"
		+"^^Press {{smallform{<<cookieManager button>>}}} to save the current browser cookies... "
		+"then hand-edit this section to customize the results.^^\n"
		+"***/\n",
	format: function(name) {
		if (name.substr(0,3)=='chk')
			return '\tconfig.options["'+name+'"]='+(config.options[name]?'true;':'false;');
		return '\tconfig.options["'+name+'"]="'+config.options[name]+'";';
	},
	bake: function(here,all) {
		if (story.isDirty(this.target)) return false; // target is being hand-edited... do nothing
		var text=store.getTiddlerText(this.target);
		if (text.indexOf(this.header)==-1) {
			text+=this.header;
			displayMessage("CookieManager: added 'Baked Cookies' section to CookieJar");
		}
		var who=config.options.txtUserName;
		var when=new Date();
		var tags=['systemConfig'];
		var tid=store.getTiddler(this.target)||store.saveTiddler(this.target,this.target,text,who,when,tags,{});
		if (!tid) return false; // if no target... do nothing
		if (all) { 
			var opts=new Array();
			for (var i in config.options) if (i.substr(0,3)=='chk'||i.substr(0,3)=='txt') opts.push(i);
			opts.sort();
		}
		else var opts=this.getCookieList();
		var t=tid.text;
		if (t.indexOf(this.header)==-1) t+=this.header;
		t+='\n// '+opts.length+(all?' options':' cookies')+' saved ';
		t+=when.formatString('on DDD, MMM DDth YYYY at 0hh:0mm:0ss');
		t+=' by '+who+'//\n';
		t+='//^^(edit/remove username check and/or individual option settings as desired)^^//\n';
		t+='//{{{\n';
		t+='if (config.options.txtUserName=="'+who+'") {\n';
		for (i=0; i<opts.length; i++) t+=config.macros.cookieManager.format(opts[i])+"\n";
		t+='}\n//}}}\n';
		store.saveTiddler(this.target,this.target,t,who,when,tags,tid?tid.fields:{});
		story.displayTiddler(story.findContainingTiddler(this),this.target);
		story.refreshTiddler(this.target,null,true);
		var msg=opts.length+(all?' options':' cookies')+' have been saved in '+this.target+'.  ';
		msg+='Please review all stored settings.';
		displayMessage(msg);
		return false;
	}
}
//}}}
//{{{
// Hijack saveOptionCookie() to add cookie blocking and monitoring messages
config.macros.cookieManager.saveOptionCookie=saveOptionCookie;
window.saveOptionCookie=function(name,force)
{
	var cmc=config.macros.cookieManager; // abbrev
	if (force || ((config.options.chkAllowBrowserCookies || name=="chkAllowBrowserCookies")
		&& !cmc.blockedCookies.contains(name) && cmc.allowBrowserCookie(name))) {
		cmc.saveOptionCookie.apply(this,arguments);
		cmc.displayStatus(name+"="+config.options[name]);
	} else cmc.displayStatus("setting of '"+name+"' is blocked");
}

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

// ... and then hijack it to add cookie blocking and monitoring messages
config.macros.cookieManager.removeCookie=removeCookie;
window.removeCookie=function(name,force)
{
	var cmc=config.macros.cookieManager; // abbrev
	if (!cmc.getCookieList().contains(name))
		return; // not a current cookie!
	if (force || ((config.options.chkAllowBrowserCookies || name=="chkAllowBrowserCookies")
		&& !cmc.blockedCookies.contains(name) && cmc.allowBrowserCookie(name))) {
		cmc.removeCookie.apply(this,arguments);
		cmc.displayStatus("deleted "+name);
	} else cmc.displayStatus("deletion of '"+name+"' is blocked");
}
//}}}
/***
|Name|CookieManagerPluginConfig|
|Source|http://www.TiddlyTools.com/#CookieManagerPluginConfig|
|Requires|CookieManagerPlugin|
|Description|custom settings for [[CookieManagerPlugin]]|
!!!!!Browser Cookie Configuration:
***/
// // <<option chkAllowBrowserCookies>> store ~TiddlyWiki option settings using private browser cookies
// // <<option chkMonitorBrowserCookies>> monitor browser cookie activity (shows a message whenever a cookie is updated)
//{{{
// default settings:
config.options.chkAllowBrowserCookies=true;	// if FALSE, this blocks *all* cookies
config.options.chkMonitorBrowserCookies=false;
//}}}

// // Individual cookie names can be prevented from being created, modified, or deleted in your browser's stored cookies by adding them to the {{{config.macros.cookieManager.blockedCookies}}} array: 
//{{{
var bc=config.macros.cookieManager.blockedCookies; // abbreviation
bc.push("txtMainTab");			// TiddlyWiki:  SideBarTabs
bc.push("txtTOCSortBy");		// TiddlyTools: TableOfContentsPlugin
bc.push("txtCatalogTab");		// TiddlyTools: CatalogTabs
//}}}
// // You can also define a javascript test function that determines whether or not any particular cookie name should be blocked or allowed.  The following function should return FALSE if the browser cookie should be blocked, or TRUE if changes to the cookie should be allowed:
//{{{
config.macros.cookieManager.allowBrowserCookie=function(name) {
	// add tests based on specific cookie names and runtime conditions
	return true;
}
//}}}
/***
|Name|CookieSaverPlugin|
|Source|http://www.TiddlyTools.com/#CookieSaverPlugin|
|Version|1.1.0|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|automatically save TiddlyWiki cookie options to [[CookieJar]] tiddler for portable settings|
!!!!!Usage
<<<
Whenever TiddlyWiki option settings are changed, a browser-based cookie value is added, removed, or changed.  Each time this occurs, the CookieSaverPlugin generates an equivalent ''portable cookie'': a single line of javascript code that assigns a stored value directly to the specific TiddlyWiki internal config.options.* variable corresponding to the browser cookie with the same name.

The portable cookies are automatically written into a tiddler named [[CookieJar]] that is tagged with<<tag systemConfig>>so that their values will be applied as soon as the document is saved and reloaded.  You can change or delete an individual portable cookie by editing the contents of the [[CookieJar]] and removing the appropriate line of javascript from the tiddler source code.  Note: editing the portable cookie definitions does not alter the values of any corresponding browser cookies, nor does it update the internal value that is in use within the current TiddlyWiki document session.  Changes made directly to the [[CookieJar]] are only applied after saving and reloading the document.  In any case, whenever a browser cookie value is updated, any modifications you made to the equivalent portable cookie are immediately rewritten to reflect the current browser cookie value.

Browser cookies are, obviously, stored with your browser... and are kept separate from the document itself.  In contrast, because your portable cookies are stored in a [[CookieJar]] within the document, they remain part of that document.

When the document is copied and shared with others, each copy includes the [[CookieJar]] containing //your// stored portable cookies.  Fortunately, CookieSaverPlugin can generate and maintain several separate sets of portable cookies in the same [[CookieJar]] tiddler, where each set is associated with a different TiddlyWiki username.  As long as other readers have not chosen the same username, your portable cookie values will not be automatically applied when they are reading the document.  Rather, as they interact with the document, a new set of portable cookies, associated with //their// username, will be automatically added to the [[CookieJar]].

In addition to tracking and applying separate portable cookies for each user, CookieSaverPlugin can also be configured so that sensitive data (such as internal URLs, email addresses, login IDs and passwords, etc.) will never be inadvertently stored in the [[CookieJar]].  To achieve this, you can selectively prevent specific cookienames from being used as portable cookies by placing a special javascript function definition in a tiddler named [[CookieSaverPluginConfig]], tagged with 'systemConfig':
{{{
config.macros.cookieSaver.allowPortableCookie=function(name){
	if ( ... some test using 'name' ...) return false;
	if ( ... another test with 'name' ...) return true;
	etc.
	return true;  // default=allow
}
}}}
The allowPortableCookie() function offers a flexible method for plugin developers and other technically skilled document authors to implement their own custom-defined, application-specific cookie data protection by applying sophisticated logic for deciding which cookies should be allowed or blocked based on variety of different conditions.  The basic operation of this function is to accept a cookie name as text input, apply some tests based on that cookie name (combined with any other useful criteria), and then return //true// if saving the portable cookie should be permitted, or //false// if the cookie should be excluded from the [[CookieJar]].

Unfortunately, although the technical expertise needed to write this test function is relatively minor, the level of programming ability that is needed can nonetheless be beyond the skills that many people possess.  To help address this, CookieSaverPlugin also supports an alternative syntax that allows you to define a simple array of cookie names that is used by the plugin to automatically block the indicated names from being included as portable cookies in the [[CookieJar]].  The array definition syntax looks like this:
{{{
// define a complete set of blocked cookie names
config.macros.cookieSaver.blockedCookies=['cookie','cookie','cookie',etc...];
}}}
or
{{{
// add individual cookies names to the current set of blocked cookies
config.macros.cookieSaver.blockedCookies.push('cookie');
config.macros.cookieSaver.blockedCookies.push('cookie');
etc...
}}}
Note: the allowPortableCookie() function and the blockedCookies[] array are only used to limit the creation of portable cookies within the [[CookieJar]], and are //not// applied when creating normal browser cookies.  Thus, regardless of whether or not a given portable cookie has been excluded or permitted, all the usual TiddlyWiki settings and internal state data can still be saved as secure, private, local browser cookies that are never made visible to others, even when the document is shared.
<<<
!!!!!Configuration
<<<
<<option chkPortableCookies>> allow ~CookieSaver to store //''portable cookies''// in [[CookieJar]] tiddler
<<option chkMonitorCookieJar>> monitor ~CookieSaver activity (show messages whenever [[CookieJar]] is updated)
<<option chkCookieJarAddToAdvancedOptions>> display [[CookieJar]] in [[AdvancedOptions]]
^^//note: changing this setting does not take effect until you reload the document//^^
<<<
!!!!!Revisions
<<<
2009.08.05 [1.1.0] changed CookieJar output format to support odd symbols in option names (e.g. '@')
2008.09.11 [1.0.2] automatically add portable cookies header to existing CookieJar (if any).  Also, added chkMonitorCookieJar option to display CookieJar activity messages
2008.09.10 [1.0.1] documentation, code cleanup, improvements in 'allowPortableCookie()' function handling
2008.09.09 [1.0.0] initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.CookieSaverPlugin= {major: 1, minor: 1, revision: 0, date: new Date(2009,8,5)};

config.macros.cookieSaver = {
	target:
		config.options.txtCookieJar||"CookieJar",
	init: function() {
		if (config.options.chkPortableCookies===undefined)
			config.options.chkPortableCookies=false;
		if (config.options.txtCookieJar===undefined)
			config.options.txtCookieJar=this.target;
		if (config.options.chkCookieJarAddToAdvancedOptions===undefined)
			config.options.chkCookieJarAddToAdvancedOptions=true;
		if (config.options.chkCookieJarAddToAdvancedOptions)
			config.shadowTiddlers.AdvancedOptions+="\n!!%0\n><<tiddler [[%0]]>>".format([this.target]);
		if (config.options.chkMonitorCookieJar===undefined)
			config.options.chkMonitorCookieJar=false;

		// add empty Portable Cookies section to shadow CookieJar
		var h="/***\n<<tiddler CookieManager>>\n***/\n";
		var t=(config.shadowTiddlers[this.target]||"").replace(new RegExp(h.replace(/\*/g,'\\*'),''),'')
		config.shadowTiddlers[this.target]=this.header+this.footer+t;

		// add empty Portable Cookies section to real CookieJar (if one exists)
		if (store.tiddlerExists(this.target) && !readOnly) {
			var tid=this.get(this.target);
			var t=tid.text;
			if (t.indexOf(this.header)==-1){
				t=this.header+this.footer+t.replace(new RegExp(h.replace(/\*/g,'\\*'),''),'');
				var who=config.options.chkForceMinorUpdate?tid.modifier:config.options.txtUserName;
				var when=config.options.chkForceMinorUpdate?tid.modified:new Date();
				store.saveTiddler(tid.title,tid.title,t,who,when,tid.tags,tid.fields);
				displayMessage("CookieSaver: added 'Portable Cookies' section to CookieJar");
			}
		}

		// add "cookies" backstage task
		if (config.tasks && !config.tasks.cookies) { // for TW2.2b3 or above
			config.tasks.cookies = {
				text: "cookies",
				tooltip: "manage cookie-based option settings",
				content: "{{groupbox{<<tiddler CookieManager>><<tiddler [[%0]]>>}}}".format([this.target])
			}
			config.backstageTasks.push("cookies");
		}
	},
	header:
		 "/***\n<<tiddler CookieManager>>\n***/\n"
		+"/***\n"
		+"!!![[Portable cookies:|CookieSaverPlugin]] "
		+"{{fine{<<option chkPortableCookies>>enable <<option chkMonitorCookieJar>>monitor}}}\n"
		+"^^This section is ''//__automatically maintained__//'' by [[CookieSaverPlugin]].  "
		+"To block specific cookies, see [[CookieSaverPluginConfig]].^^\n"
		+"***/\n",
	startUser:
		 "//{{{\n"
		+"if (config.options.txtUserName==\"%0\" && config.options.chkPortableCookies) {",
	endUser:
		"\n}\n//}}}\n",
	footer:
		"// // /% end portable cookies %/\n",
	get: function(tid) { // create or retrieve tiddler
		if (story.isDirty(tid)) return null; // tiddler is being hand-edited... leave it alone.
		var text=config.shadowTiddlers[this.target];
		var who=config.options.txtUserName;
		var when=new Date();
		var tags=['systemConfig'];
		return store.getTiddler(tid)||store.saveTiddler(tid,tid,text,who,when,tags,{});
	},
	format: function(name) {
		if (name.substr(0,3)=='chk')
			return '\tconfig.options["'+name+'"]='+(config.options[name]?'true;':'false;');
		return '\tconfig.options["'+name+'"]="'+config.options[name]+'";';
	},
	blockedCookies: [],
	allowPortableCookie: function(name) {
		return true;
	},
	set: function(name) {
		if (!name||!name.trim().length) return;
		if (name=='txtUserName' || this.blockedCookies.contains(name) || !this.allowPortableCookie(name)) {
			if (config.options.chkMonitorCookieJar && !startingUp)
				displayMessage("CookieJar: blocked '"+name+"'");
			return false; // don't save excluded cookies
		}
		var tid=this.get(this.target);
		if (!tid) return false; // if no tiddler... do nothing
		var t=tid.text;
		if (t.indexOf(this.header)==-1) {  // re-add Portable Cookies section if it was deleted by hand edit
			var h="/***\n<<tiddler CookieManager>>\n***/\n";
			t=this.header+this.footer+t.replace(new RegExp(h.replace(/\*/g,'\\*'),''),'');
		}
		var who=config.options.txtUserName;
		var when=new Date();
		var startmark=this.startUser.format([who]);
		var endmark=this.endUser;
		var startpos=t.indexOf(startmark);
		if (startpos==-1) { // insert new user (just before footer)
			if (config.options.chkMonitorCookieJar && !startingUp)
				displayMessage("CookieJar: added new user '"+who+"'");
			var addpos=t.indexOf(this.footer); if (addpos==-1) addpos=t.length;
			t=t.substr(0,addpos)+startmark+endmark+t.substr(addpos);
			startpos=addpos;
		}
		startpos+=startmark.length;
		var endpos=t.indexOf(endmark,startpos);
		var pre=t.substr(0,startpos);
		var lines=t.substring(startpos,endpos).split('\n');
		var post=t.substr(endpos);
		var code=this.format(name);
		var match='\tconfig.options["'+name+'"]=';
		var found=false; var changed=false;
		for (var i=0; i<lines.length; i++) { // find and replace existing setting
			if (lines[i].substr(0,match.length)==match) {
				found=true;
				if (changed=lines[i]!=code) lines[i]=code; // replace value
				if (config.options.chkMonitorCookieJar && !startingUp && changed)
					displayMessage("CookieJar: "+code);
			}
		}
		if (!found && code.length) { // OR, add new setting
			lines[lines.length]=code;
			if (config.options.chkMonitorCookieJar && !startingUp)
				displayMessage("CookieJar: "+code);
		}
		if (found && !changed) return; // don't alter tiddler unless necessary
		t=pre+lines.join('\n')+post;
		var who=config.options.chkForceMinorUpdate?tid.modifier:config.options.txtUserName;
		var when=config.options.chkForceMinorUpdate?tid.modified:new Date();
		store.saveTiddler(this.target,this.target,t,who,when,tid.tags,tid.fields);
		story.refreshTiddler(this.target,null,true);
	},
	remove: function(name) {
		if (!name||!name.trim().length) return;
		var who=config.options.txtUserName;
		var when=new Date();
		var tid=store.getTiddler(this.target);
		if (!tid) return false; // if no tiddler... do nothing
		var t=tid.text;
		var who=config.options.txtUserName
		var startmark=this.startUser.format([who]);
		var endmark=this.endUser;
		var startpos=t.indexOf(startmark);
		if (startpos==-1) return false; // no such user... do nothing
		startpos+=startmark.length;
		var endpos=t.indexOf(endmark,startpos);
		var pre=t.substr(0,startpos);
		var lines=t.substring(startpos,endpos).split('\n');
		var post=t.substr(endpos);
		var match='\tconfig.options["'+name+'"]';
		var found=false; var changed=false;
		for (var i=0; i<lines.length; i++) { // find and remove setting
			if (lines[i].substr(0,match.length)==match) {
				lines.splice(i,1);
				changed=true;
				if (config.options.chkMonitorCookieJar && !startingUp)
					displayMessage("CookieJar: deleted '"+name+"'");
				break;
			}
		}
		if (!changed) return; // not found... do nothing
		t=pre+lines.join('\n')+post;
		if (lines.length==1) { // no cookies left, remove user
			t=pre.substr(0,pre.length-startmark.length)+post.substr(endmark.length);
			if (config.options.chkMonitorCookieJar && !startingUp)
				displayMessage("CookieJar: removed user '"+who+"'");
		}
		var who=config.options.chkForceMinorUpdate?tid.modifier:config.options.txtUserName;
		var when=config.options.chkForceMinorUpdate?tid.modified:new Date();
		store.saveTiddler(this.target,this.target,t,who,when,tid.tags,tid.fields);
		story.refreshTiddler(this.target,null,true);
	}
}
//}}}
//{{{
// Hijack saveOptionCookie() to add CookieSaver processing
config.macros.cookieSaver.saveOptionCookie=saveOptionCookie;
window.saveOptionCookie=function(name)
{
	config.macros.cookieSaver.saveOptionCookie.apply(this,arguments);
	if (!readOnly && (config.options.chkPortableCookies || name=="chkPortableCookies"))
		config.macros.cookieSaver.set(name);
}
// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}
// ... and then hijack it to also remove any corresponding PortableCookie
config.macros.cookieSaver.removeCookie=removeCookie;
window.removeCookie=function(name)
{
	if (config.options.chkPortableCookies && !readOnly)
		config.macros.cookieSaver.remove(name);
	config.macros.cookieSaver.removeCookie.apply(this,arguments);
}
//}}}
/***
|Name|CookieSaverPluginConfig|
|Source|http://www.TiddlyTools.com/#CookieSaverPluginConfig|
|Requires|CookieSaverPlugin|
|Description|custom settings for [[CookieSaverPlugin]]|
!!!!!Portable Cookie Configuration:
***/
// // <<option chkPortableCookies>> allow ~CookieSaver to store //''portable cookies''// in [[CookieJar]] tiddler
// // <<option chkMonitorCookieJar>> monitor ~CookieSaver activity (show messages whenever [[CookieJar]] is updated)
//{{{
// default to these settings:
// config.options.chkPortableCookies=false;	// when FALSE this blocks ALL portable cookies
// config.options.chkMonitorCookieJar=false;
//}}}

// // Individual cookie names can be added to the {{{config.macros.cookieSaver.blockedCookies}}} array to prevent them from being stored in the [[CookieJar]].
//{{{
var bc=config.macros.cookieSaver.blockedCookies;
bc.push("chkBackstage");		// core
bc.push("txtMainTab");			// TiddlyWiki: SideBarTabs
bc.push("txtTOCSortBy");		// TiddlyTools: TableOfContentsPlugin
bc.push("txtCatalogTab");		// TiddlyTools: CatalogTabs
bc.push("txtUploadFilename");		// BidiX: UploadPlugin
bc.push("txtUploadDir");		// BidiX: UploadPlugin
bc.push("pasPassword");			// BidiX: UploadPlugin
bc.push("pasUploadPassword");		// BidiX: UploadPlugin
//}}}
// // You can also define a javascript test function that determines whether or not any particular cookie name should be stored in the [[CookieJar]].  The following function should return FALSE if the portable cookie should be blocked, or TRUE if the cookie should be allowed:
//{{{
config.macros.cookieSaver.allowPortableCookie=function(name) {
	// add tests based on specific cookie names and runtime conditions
	if (name.substr(0,9)=="chkSlider") 	return false;	// NestedSlidersPlugin
	if (name.substr(0,13)=="txtFirstVisit")	return false;	// VisitCounter
	if (name.substr(0,12)=="txtLastVisit")	return false;	// VisitCounter
	if (name.substr(0,13)=="txtVisitCount")	return false;	// VisitCounter
	return true;
}
//}}}

<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::EditToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='editor' macro='edit title'></div>
<div macro='annotations'></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Summary</span>: <span macro='edit summary wikified'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Description</span>: <span macro='edit description'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Date</span>: <span macro='edit datesubmitted'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Status</span>: <span macro='edit status'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Priority</span>: <span macro='edit priority'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Severity</span>: <span macro='edit severity'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Category</span>: <span macro='edit category'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Type</span>: <span macro='edit type'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">File</span>: <span macro='edit file wikified'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Revision</span>: <span macro='edit revision wikified'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Message</span>: <span macro='edit message'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Date</span>: <span macro='edit date'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Origin Class</span>: <span macro='edit originclass'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">TA</span>: <span macro='edit taresult'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">TA Class</span>: <span macro='edit ta'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">DA</span>: <span macro='edit daresult'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">DA Class</span>: <span macro='edit da'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">DA+ Class</span>: <span macro='edit daplus'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Origin</span>: <span macro='edit origin wikified'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Born</span>: <span macro='edit born'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Age</span>: <span macro='edit age'></span></div>
<div macro="showWhenTagged ta-Superset"><span class="fieldHeader">Most Frequent</span>: <span macro='edit frequent'></span></div>
<div macro="showWhenTagged ta-Superset"><span class="fieldHeader">Most Recent</span>: <span macro='edit recent'></span></div>
<div class='editor' macro='edit text'></div>
<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser excludeLists'></span></div>
<!--}}}-->
{{{
FieldToTagPlugin = {};
FieldToTagPlugin.blacklist = [
  'changecount',
  'server.page.revision',
  'server.host',
  'server.type',
  'summary',
  'description',
  'datesubmitted',
  'file',
  'revision',
  'message',
  'date',
  'origin',
  'born',
  'age',
  'taresult',
  'daresult',
  'frequent',
  'recent'
];
FieldToTagPlugin.assign = Tiddler.prototype.assign;
Tiddler.prototype.assign = function(title,text,modifier,modified,tags,created,fields,creator) {
  if(fields != undefined && tags != undefined){
    tags = (typeof tags == "string") ? tags.readBracketedList() : tags;
    outer: 
    for(var propertyName in fields) {
      for(var j=0; j<FieldToTagPlugin.blacklist.length; j++){
        if(propertyName == FieldToTagPlugin.blacklist[j]) continue outer;
      }
            
      for(var i=0; i<tags.length; i++){
        tag = tags[i];
        if(tag.indexOf(propertyName)==0){
          tags.splice(i,1);
        }
      }
      if(fields[propertyName]){
        tags.splice(0,0,propertyName+'-'+fields[propertyName]);
      }
    }
  }
  FieldToTagPlugin.assign.call(this, title,text,modifier,modified,tags,created,fields,creator);
};
}}}
/***
|Name|GotoPlugin|
|Source|http://www.TiddlyTools.com/#GotoPlugin|
|Documentation|http://www.TiddlyTools.com/#GotoPluginInfo|
|Version|1.9.2|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|view any tiddler by entering it's title - displays list of possible matches|
''View a tiddler by typing its title and pressing //enter//.''  As you type, a list of possible matches is displayed.  You can scroll-and-click (or use arrows+enter) to select/view a tiddler, or press escape to close the listbox to resume typing.  When the listbox is not displayed, pressing //escape// clears the current input.
!!!Documentation
>see [[GotoPluginInfo]]
!!!Configuration
<<<
*Match titles only after {{twochar{<<option txtIncrementalSearchMin>>}}} or more characters are entered.<br>Use down-arrow to start matching with shorter input.  //Note: This option value is also set/used by [[SearchOptionsPlugin]]//.
*To set the maximum height of the listbox, you can create a tiddler tagged with <<tag systemConfig>>, containing:
//{{{
config.macros.gotoTiddler.listMaxSize=10;  // change this number
//}}}
<<<
!!!Revisions
<<<
2009.05.22 [1.9.2] use reverseLookup() for IncludePlugin
|please see [[GotoPluginInfo]] for additional revision details|
2006.05.05 [0.0.0] started
<<<
!!!Code
***/
//{{{
version.extensions.GotoPlugin= {major: 1, minor: 9, revision: 2, date: new Date(2009,5,22)};

// automatically tweak shadow SideBarOptions to add <<gotoTiddler>> macro above <<search>>
config.shadowTiddlers.SideBarOptions=config.shadowTiddlers.SideBarOptions.replace(/<<search>>/,"{{button{goto}}}\n<<gotoTiddler>><<search>>");

if (config.options.txtIncrementalSearchMin===undefined) config.options.txtIncrementalSearchMin=3;

config.macros.gotoTiddler= { 
	listMaxSize: 10,
	listHeading: 'Found %0 matching title%1...',
	searchItem: "Search for '%0'...",
	handler:
	function(place,macroName,params,wikifier,paramString,tiddler) {
		var quiet	=params.contains("quiet");
		var showlist	=params.contains("showlist");
		var search	=params.contains("search");
		params = paramString.parseParams("anon",null,true,false,false);
		var instyle	=getParam(params,"inputstyle","");
		var liststyle	=getParam(params,"liststyle","");
		var filter	=getParam(params,"filter","");
		var html=this.html;
		var keyevent=window.event?"onkeydown":"onkeypress"; // IE event fixup for ESC handling
		html=html.replace(/%keyevent%/g,keyevent);
		html=html.replace(/%search%/g,search);
		html=html.replace(/%quiet%/g,quiet);
		html=html.replace(/%showlist%/g,showlist);
		html=html.replace(/%display%/g,showlist?'block':'none');
		html=html.replace(/%position%/g,showlist?'static':'absolute');
		html=html.replace(/%instyle%/g,instyle);
		html=html.replace(/%liststyle%/g,liststyle);
		html=html.replace(/%filter%/g,filter);
		if (config.browser.isIE) html=this.IEtableFixup.format([html]);
		var span=createTiddlyElement(place,'span');
		span.innerHTML=html; var form=span.getElementsByTagName("form")[0];
		if (showlist) this.fillList(form.list,'',filter,search,0);
	},
	html:
	'<form onsubmit="return false" style="display:inline;margin:0;padding:0">\
		<input name=gotoTiddler type=text autocomplete="off" accesskey="G" style="%instyle%"\
			title="Enter title text... ENTER=goto, SHIFT-ENTER=search for text, DOWN=select from list"\
			onfocus="this.select(); this.setAttribute(\'accesskey\',\'G\');"\
			%keyevent%="return config.macros.gotoTiddler.inputEscKeyHandler(event,this,this.form.list,%search%,%showlist%);"\
			onkeyup="return config.macros.gotoTiddler.inputKeyHandler(event,this,%quiet%,%search%,%showlist%);">\
		<select name=list style="display:%display%;position:%position%;%liststyle%"\
			onchange="if (!this.selectedIndex) this.selectedIndex=1;"\
			onblur="this.style.display=%showlist%?\'block\':\'none\';"\
			%keyevent%="return config.macros.gotoTiddler.selectKeyHandler(event,this,this.form.gotoTiddler,%showlist%);"\
			onclick="return config.macros.gotoTiddler.processItem(this.value,this.form.gotoTiddler,this,%showlist%);">\
		</select><input name="filter" type="hidden" value="%filter%">\
	</form>',
	IEtableFixup:
	"<table style='width:100%;display:inline;padding:0;margin:0;border:0;'>\
		<tr style='padding:0;margin:0;border:0;'><td style='padding:0;margin:0;border:0;'>\
		%0</td></tr></table>",
	getItems:
	function(list,val,filter) {
		if (!list.cache || !list.cache.length || val.length<=config.options.txtIncrementalSearchMin) {
			// starting new search, fetch and cache list of tiddlers/shadows/tags
			list.cache=new Array();
			if (filter.length) {
				var fn=store.getMatchingTiddlers||store.getTaggedTiddlers;
				var tiddlers=store.sortTiddlers(fn.apply(store,[filter]),'title');
			} else 
				var tiddlers=store.reverseLookup('tags','excludeLists');
			for(var t=0; t<tiddlers.length; t++) list.cache.push(tiddlers[t].title);
			if (!filter.length) {
				for (var t in config.shadowTiddlers) list.cache.pushUnique(t);
				var tags=store.getTags();
				for(var t=0; t<tags.length; t++) list.cache.pushUnique(tags[t][0]);
			}
		}
		var found = [];
		var match=val.toLowerCase();
		for(var i=0; i<list.cache.length; i++)
			if (list.cache[i].toLowerCase().indexOf(match)!=-1) found.push(list.cache[i]);
		return found;
	},
	getItemSuffix:
	function(t) {
		if (store.tiddlerExists(t)) return "";  // tiddler
		if (store.isShadowTiddler(t)) return " (shadow)"; // shadow
		return " (tag)"; // tag 
	},
	fillList:
	function(list,val,filter,search,key) {
		if (list.style.display=="none") return; // not visible... do nothing!
		var indent='\xa0\xa0\xa0';
		var found = this.getItems(list,val,filter); // find matching items...
		found.sort(); // alpha by title
		while (list.length > 0) list.options[0]=null; // clear list
		var hdr=this.listHeading.format([found.length,found.length==1?"":"s"]);
		list.options[0]=new Option(hdr,"",false,false);
		for (var t=0; t<found.length; t++) list.options[list.length]=
			new Option(indent+found[t]+this.getItemSuffix(found[t]),found[t],false,false);
		if (search)
			list.options[list.length]=new Option(this.searchItem.format([val]),"*",false,false);
		list.size=(list.length<this.listMaxSize?list.length:this.listMaxSize); // resize list...
		list.selectedIndex=key==38?list.length-1:key==40?1:0;
	},
	keyProcessed:
	function(ev) { // utility function
		ev.cancelBubble=true; // IE4+
		try{event.keyCode=0;}catch(e){}; // IE5
		if (window.event) ev.returnValue=false; // IE6
		if (ev.preventDefault) ev.preventDefault(); // moz/opera/konqueror
		if (ev.stopPropagation) ev.stopPropagation(); // all
		return false;
	},
	inputEscKeyHandler:
	function(event,here,list,search,showlist) {
		if (event.keyCode==27) {
			if (showlist) { // clear input, reset list
				here.value=here.defaultValue;
				this.fillList(list,'',here.form.filter.value,search,0);
			}
			else if (list.style.display=="none") // clear input
				here.value=here.defaultValue;
			else list.style.display="none"; // hide list
			return this.keyProcessed(event);
		}
		return true; // key bubbles up
	},
	inputKeyHandler:
	function(event,here,quiet,search,showlist) {
		var key=event.keyCode;
		var list=here.form.list;
		var filter=here.form.filter;
		// non-printing chars bubble up, except for a few:
		if (key<48) switch(key) {
			// backspace=8, enter=13, space=32, up=38, down=40, delete=46
			case 8: case 13: case 32: case 38: case 40: case 46: break; default: return true;
		}
		// blank input... if down/enter... fall through (list all)... else, and hide or reset list
		if (!here.value.length && !(key==40 || key==13)) {
			if (showlist) this.fillList(here.form.list,'',here.form.filter.value,search,0);
			else list.style.display="none";
			return this.keyProcessed(event);
		}
		// hide list if quiet, or below input minimum (and not showlist)
		list.style.display=(!showlist&&(quiet||here.value.length<config.options.txtIncrementalSearchMin))?'none':'block';
		// non-blank input... enter=show/create tiddler, SHIFT-enter=search for text
		if (key==13 && here.value.length) return this.processItem(event.shiftKey?'*':here.value,here,list,showlist);
		// up or down key, or enter with blank input... shows and moves to list...
		if (key==38 || key==40 || key==13) { list.style.display="block"; list.focus(); }
		this.fillList(list,here.value,filter.value,search,key);
		return true; // key bubbles up
	},
	selectKeyHandler:
	function(event,list,editfield,showlist) {
		if (event.keyCode==27) // escape... hide list, move to edit field
			{ editfield.focus(); list.style.display=showlist?'block':'none'; return this.keyProcessed(event); }
		if (event.keyCode==13 && list.value.length) // enter... view selected item
			{ this.processItem(list.value,editfield,list,showlist); return this.keyProcessed(event); }
		return true; // key bubbles up
	},
	processItem:
	function(title,here,list,showlist) {
		if (!title.length) return;
		list.style.display=showlist?'block':'none';
		if (title=="*")	{ story.search(here.value); return false; } // do full-text search
		if (!showlist) here.value=title;
		story.displayTiddler(null,title); // show selected tiddler
		return false;
	}
}
//}}}
/***
|Name:|HideWhenPlugin|
|Description:|Allows conditional inclusion/exclusion in templates|
|Version:|3.1 ($Rev: 3919 $)|
|Date:|$Date: 2008-03-13 02:03:12 +1000 (Thu, 13 Mar 2008) $|
|Source:|http://mptw.tiddlyspot.com/#HideWhenPlugin|
|Author:|Simon Baird <simon.baird@gmail.com>|
|License:|http://mptw.tiddlyspot.com/#TheBSDLicense|
For use in ViewTemplate and EditTemplate. Example usage:
{{{<div macro="showWhenTagged Task">[[TaskToolbar]]</div>}}}
{{{<div macro="showWhen tiddler.modifier == 'BartSimpson'"><img src="bart.gif"/></div>}}}
***/
//{{{

window.hideWhenLastTest = false;

window.removeElementWhen = function(test,place) {
	window.hideWhenLastTest = test;
	if (test) {
		removeChildren(place);
		place.parentNode.removeChild(place);
	}
};


merge(config.macros,{

	hideWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( eval(paramString), place);
	}},

	showWhen: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !eval(paramString), place);
	}},

	hideWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTagged: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAny(params), place);
	}},

	showWhenTaggedAny: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAny(params), place);
	}},

	hideWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.tags.containsAll(params), place);
	}},

	showWhenTaggedAll: { handler: function (place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !tiddler.tags.containsAll(params), place);
	}},

	hideWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0]), place);
	}},

	showWhenExists: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !(store.tiddlerExists(params[0]) || store.isShadowTiddler(params[0])), place);
	}},

	hideWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title == params[0], place);
	}},

	showWhenTitleIs: { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( tiddler.title != params[0], place);
	}},

	'else': { handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		removeElementWhen( !window.hideWhenLastTest, place);
	}}

});

//}}}

/***
|Name|InlineJavascriptPlugin|
|Source|http://www.TiddlyTools.com/#InlineJavascriptPlugin|
|Documentation|http://www.TiddlyTools.com/#InlineJavascriptPluginInfo|
|Version|1.9.6|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|Insert Javascript executable code directly into your tiddler content.|
''Call directly into TW core utility routines, define new functions, calculate values, add dynamically-generated TiddlyWiki-formatted output'' into tiddler content, or perform any other programmatic actions each time the tiddler is rendered.
!!!!!Documentation
>see [[InlineJavascriptPluginInfo]]
!!!!!Revisions
<<<
2010.12.15 1.9.6 allow (but ignore) type="..." syntax
|please see [[InlineJavascriptPluginInfo]] for additional revision details|
2005.11.08 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.InlineJavascriptPlugin= {major: 1, minor: 9, revision: 6, date: new Date(2010,12,15)};

config.formatters.push( {
	name: "inlineJavascript",
	match: "\\<script",
	lookahead: "\\<script(?: type=\\\"[^\\\"]*\\\")?(?: src=\\\"([^\\\"]*)\\\")?(?: label=\\\"([^\\\"]*)\\\")?(?: title=\\\"([^\\\"]*)\\\")?(?: key=\\\"([^\\\"]*)\\\")?( show)?\\>((?:.|\\n)*?)\\</script\\>",
	handler: function(w) {
		var lookaheadRegExp = new RegExp(this.lookahead,"mg");
		lookaheadRegExp.lastIndex = w.matchStart;
		var lookaheadMatch = lookaheadRegExp.exec(w.source)
		if(lookaheadMatch && lookaheadMatch.index == w.matchStart) {
			var src=lookaheadMatch[1];
			var label=lookaheadMatch[2];
			var tip=lookaheadMatch[3];
			var key=lookaheadMatch[4];
			var show=lookaheadMatch[5];
			var code=lookaheadMatch[6];
			if (src) { // external script library
				var script = document.createElement("script"); script.src = src;
				document.body.appendChild(script); document.body.removeChild(script);
			}
			if (code) { // inline code
				if (show) // display source in tiddler
					wikify("{{{\n"+lookaheadMatch[0]+"\n}}}\n",w.output);
				if (label) { // create 'onclick' command link
					var link=createTiddlyElement(w.output,"a",null,"tiddlyLinkExisting",wikifyPlainText(label));
					var fixup=code.replace(/document.write\s*\(/gi,'place.bufferedHTML+=(');
					link.code="function _out(place,tiddler){"+fixup+"\n};_out(this,this.tiddler);"
					link.tiddler=w.tiddler;
					link.onclick=function(){
						this.bufferedHTML="";
						try{ var r=eval(this.code);
							if(this.bufferedHTML.length || (typeof(r)==="string")&&r.length)
								var s=this.parentNode.insertBefore(document.createElement("span"),this.nextSibling);
							if(this.bufferedHTML.length)
								s.innerHTML=this.bufferedHTML;
							if((typeof(r)==="string")&&r.length) {
								wikify(r,s,null,this.tiddler);
								return false;
							} else return r!==undefined?r:false;
						} catch(e){alert(e.description||e.toString());return false;}
					};
					link.setAttribute("title",tip||"");
					var URIcode='javascript:void(eval(decodeURIComponent(%22(function(){try{';
					URIcode+=encodeURIComponent(encodeURIComponent(code.replace(/\n/g,' ')));
					URIcode+='}catch(e){alert(e.description||e.toString())}})()%22)))';
					link.setAttribute("href",URIcode);
					link.style.cursor="pointer";
					if (key) link.accessKey=key.substr(0,1); // single character only
				}
				else { // run script immediately
					var fixup=code.replace(/document.write\s*\(/gi,'place.innerHTML+=(');
					var c="function _out(place,tiddler){"+fixup+"\n};_out(w.output,w.tiddler);";
					try	 { var out=eval(c); }
					catch(e) { out=e.description?e.description:e.toString(); }
					if (out && out.length) wikify(out,w.output,w.highlightRegExp,w.tiddler);
				}
			}
			w.nextMatch = lookaheadMatch.index + lookaheadMatch[0].length;
		}
	}
} )
//}}}

// // Backward-compatibility for TW2.1.x and earlier
//{{{
if (typeof(wikifyPlainText)=="undefined") window.wikifyPlainText=function(text,limit,tiddler) {
	if(limit > 0) text = text.substr(0,limit);
	var wikifier = new Wikifier(text,formatter,null,tiddler);
	return wikifier.wikifyPlain();
}
//}}}

// // GLOBAL FUNCTION: $(...) -- 'shorthand' convenience syntax for document.getElementById()
//{{{
if (typeof($)=='undefined') { function $(id) { return document.getElementById(id.replace(/^#/,'')); } }
//}}}
/***
|''Name:''|IntelliTaggerPlugin|
|''Version:''|1.0.2 (2007-07-25)|
|''Type:''|plugin|
|''Source:''|http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin|
|''Author:''|Udo Borkowski (ub [at] abego-software [dot] de)|
|''Documentation:''|[[IntelliTaggerPlugin Documentation]]|
|''~SourceCode:''|[[IntelliTaggerPlugin SourceCode]]|
|''Licence:''|[[BSD open source license (abego Software)]]|
|''~CoreVersion:''|2.0.8|
|''Browser:''|Firefox 1.5.0.2 or better|
***/
/***
!Version History
* 1.0.2 (2007-07-25): 
** Feature: "Return" key may be used to accept first tag suggestion (beside "Alt-1")
** Bugfix: Keyboard shortcuts (Alt+3 etc.) shifted
* 1.0.1 (2007-05-18): Improvement: Speedup when using TiddlyWikis with many tags
* 1.0.0 (2006-04-26): Initial release
***/
/***
!Source Code
***/
//{{{
// Ensure the Plugin is only installed once.
//
if (!version.extensions.IntelliTaggerPlugin) {

// Ensure the global abego namespace is set up.
if (!window.abego) window.abego = {};
if (!abego.internal) abego.internal = {};

// Opens an alert with the given string and throws an exception 
// with the same string after the alert is closed.
//
abego.alertAndThrow = function(s) {
	alert(s);
	throw s;
};

if (version.major < 2) {
	abego.alertAndThrow("Use TiddlyWiki 2.0.8 or better to run the IntelliTagger Plugin.");
}

version.extensions.IntelliTaggerPlugin = {
	major: 1, minor: 0, revision: 2,
	date: new Date(2007, 6, 25),
	type: 'plugin',
	source: "http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin",
	documentation: "[[IntelliTaggerPlugin Documentation]]",
	sourcecode: "[[IntelliTaggerPlugin SourceCode]]",
	author: "Udo Borkowski (ub [at] abego-software [dot] de)",
	licence: "[[BSD open source license (abego Software)]]",
	tiddlywiki: "Version 2.0.8 or better",
	browser: "Firefox 1.5.0.2 or better"
};
//}}}
//#startOf: MainCode
//{{{
// ========================================================================
// Utilities ==============================================================
// ========================================================================

// ========================================================================
// Popup 
// 
// A Popup is an HTML element floating on top of the main HTML page. 
// 
// The HTML element (typically a "div" element) is added as a direct child 
// of the document.body.
//
// A Popup element should respect the following style conventions:
//
//		position = "absolute";	// required.
//		left = aDimension;		// required. E.g. "10px"
//								// When not defined the Popup is not displayed.
//		top = aDimension;		// required. E.g. "10px"
//								// When not defined the Popup is not displayed.
// 		background = aColor; 	// optional. E.g. "white"
//								// When not defined the Popup is transparent.
// 		border = aBorderSpec;	// optional. E.g. "1px solid DarkGray"
//		width = aDimension;		// optional. E.g. "200px"
//								// When not defined the width is calculated 
//								// automatically.
//		height = aDimension;	// optional. E.g. "200px"
//								// When not defined the height is calculated 
//								// automatically.
// ========================================================================


abego.createEllipsis = function(place) {
	var e = createTiddlyElement(place,"span");
	e.innerHTML = "&hellip;";
};

// Returns true iff the given element is "opened as a popup", 
// i.e. a direct child of the document.body.
//
// @param element [may be null/undefined] 
//				an HTML element
//
abego.isPopupOpen = function(element) {
	return element && element.parentNode == document.body;
};

// Opens the given element as a popup.
// 
// @param element 
//				an HTML element
//
abego.openAsPopup = function(element) {
	if (element.parentNode != document.body)
		document.body.appendChild(element);
};


// Closes the given popup.
// Does nothing when the element is not a popup or not open.
//
// @param element [may be null/undefined] 
//				an HTML element
//
abego.closePopup = function(element) {
	if (abego.isPopupOpen(element)) 
		document.body.removeChild(element);
};

// Returns the rectangle of the (browser) window
//
// @return {left,top,height,width}
// 
abego.getWindowRect = function() {
	return {
		left: findScrollX(),
		top: findScrollY(),
		height: findWindowHeight(),
		width: findWindowWidth()
	};
};

// Moves the given element to the given position (in pixel).
//
abego.moveElement = function(element, left, top) {
	element.style.left = left + "px";
	element.style.top = top + "px";
};

// Centers the given element on the window.
//
// The element must have absolute position
// 
abego.centerOnWindow = function(element) {
	if (element.style.position != "absolute") 
		throw "abego.centerOnWindow: element must have absolute position"; 
		
	var winRect = abego.getWindowRect();

	abego.moveElement(
			element,
			winRect.left + (winRect.width - element.offsetWidth) / 2,
			winRect.top + (winRect.height - element.offsetHeight) / 2);
};

// Returns true if e is either self or a descendant (child, grandchild,...) of self.
//
// @param self DOM:Element
// @param e DOM:Element [may be null]
//
abego.isDescendantOrSelf = function(self, e) {
	while (e) {
		if (self == e) return true;
		e = e.parentNode;
	}
	return false;
};

// Returns a set containing the items of the array. 
// 
// It is an object that has a property for every item of the array.
// The name of the property is the "toString" representation of 
// the item. The value of the property is "true".
//
// Duplicate items are removed.
//
abego.toSet = function(array) {
	var result = {};
	for (var i = 0; i < array.length; i++)
		result[array[i]] = true;
	return result;
};

// Returns an array with all strings from strings that match the filterRE.
//
// @param maxCount [optional] if defined at most maxCount strings are returned.
abego.filterStrings = function(strings, filterRE, maxCount) {
	var result =[];
	for (var i = 0; i < strings.length && (maxCount === undefined || result.length < maxCount); i++) {
		var s = strings[i];
		if (s.match(filterRE)) 
			result.push(s);
	}
	return result;
};

// @param a [may be null/undefined] Object[] 
// @param b [may be null/undefined] Object[] 
abego.arraysAreEqual = function(a,b) {
	if (!a)
		return !b;
	if (!b)
		return false;
		
	var n = a.length;
	if (n != b.length) 
		return false;
	for (var i = 0; i < n; i++) 
		if (a[i] != b[i])
			return false;
	return true;
};

// Adjusts the element's position to appear below the anchorElement, 
// and ensures the element fits into the window.
//
abego.moveBelowAndClip = function(element, anchorElement) {
	if (!anchorElement) 
		return;
	
    // Position the result below the anchor and resize it if necessary.
	var anchorLeft = findPosX(anchorElement);
	var anchorTop = findPosY(anchorElement);
	var anchorHeight = anchorElement.offsetHeight;
	var elementLeft = anchorLeft;
	var elementTop = anchorTop + anchorHeight;

	// Make sure the result is not wider than the window
	var winWidth = findWindowWidth();
	if (winWidth < element.offsetWidth) {
		element.style.width = (winWidth - 100)+"px";
	}

	// Ensure that the left and right of the result are not
	// clipped by the window. Move it to the left or right, if necessary.	
	var elementWidth = element.offsetWidth;
	if(elementLeft + elementWidth > winWidth)
		elementLeft = winWidth - elementWidth-30;
	if (elementLeft < 0) 
		elementLeft = 0;
	
	// Do the actual moving
	element.style.left = elementLeft + "px";
	element.style.top = elementTop + "px";
	element.style.display = "block";
};

abego.compareStrings = function(a, b) {
	return (a == b) ? 0 : (a < b) ? -1 : 1;
};

// Sorts the given array alphabetically, ignoring the case.
//
abego.sortIgnoreCase = function(arr) {
	var result =[];
	
	// To avoid toLowerCase to be called twice for every comparison
	// we convert the strings once and sort the lowercase.
	// After sorting we replace them with the cased ones.
	//
	// Benchmarks have shown that this is significantly faster 
	// than the ad hoc solution, even for small arrays 
	// (like 5 Strings (10 chars each))
	
	var n = arr.length;
	for (var i = 0; i < n; i++) {
		var s = arr[i];
		result.push([s.toString().toLowerCase(),s]);
	}
	result.sort(function(a,b) {
		return (a[0] == b[0]) ? 0 : (a[0] < b[0]) ? -1 : 1;
	});
	
	for (i = 0; i < n; i++) 
		arr[i] = result[i][1];
};

// Returns the specified field (input or textarea element), otherwise the first edit field it finds 
// or null if it found no edit field at all
//
abego.getTiddlerField = function(story,title,field) {
	var tiddler = document.getElementById(story.idPrefix + title);
	var e = null;
	if (tiddler != null)	{
		var children = tiddler.getElementsByTagName("*");
		for (var t=0; t<children.length; t++) {
			var c = children[t];
			if(c.tagName.toLowerCase() == "input" || c.tagName.toLowerCase() == "textarea")	{
				if(!e)
					e = c;
				if(c.getAttribute("edit") == field)
					e = c;
					// break; // adding this break would not be 100% compatible to <= TW 2.0.9. when a 
			}
		}
	}
	return e;
};

abego.setRange = function(element, start, end) {
// adapted from TaskMacroPlugin by LukeBlanshard. 
// http://labwiki.sourceforge.net/#CopyrightAndLicense.
	if (element.setSelectionRange) { // Mozilla
		element.setSelectionRange(start, end);
		// Damn mozilla doesn't scroll to visible.  Approximate.
		var max = 0.0 + element.scrollHeight;
		var len = element.textLength;
		var top = max*start/len, bot = max*end/len;
		element.scrollTop = Math.min(top, (bot+top-element.clientHeight)/2);
	} else if (element.createTextRange != undefined) { // IE
		var range = element.createTextRange();
		range.collapse();
		range.moveEnd("character", end);
		range.moveStart("character", start);
		range.select();
	} else // Other? Too bad, just select the whole thing.
		element.select();
};
				
				
// TiddlerSet: an object with one property per tiddler in the set. 
// The name of the property corresponds to the tiddler name, 
// the value is "not false" (e.g. true or a non-zero number).
//
// TagMap<X>: an object that maps a tag to an object of type X (access through properties)
//
abego.internal.TagManager = function() {
	var tagReferences = null; // TagMap<{count: natural, tiddlers: TiddlerSet}>

	var ensureTagsAreLoaded = function() {
		if (tagReferences)
			return;
			
		tagReferences = {};
		store.forEachTiddler(function(title,tiddler) {
			for(var i=0; i<tiddler.tags.length; i++) {
				var tag = tiddler.tags[i];
				var refedBy = tagReferences[tag];
				if (!refedBy) {
					refedBy = tagReferences[tag] = {count:0, tiddlers: {}};
				}
				refedBy.tiddlers[tiddler.title] = true;
				refedBy.count += 1;
			}
		});
	};
	
	// When any tags are changed reset the TagManager.
	// 
	var oldTiddlyWikiSaveTiddler = TiddlyWiki.prototype.saveTiddler;
	TiddlyWiki.prototype.saveTiddler = function(title,newTitle,newBody,modifier,modified,tags) {
		var tiddler = this.fetchTiddler(title);
		var oldTags = tiddler ? tiddler.tags : [];
		var newTags = (typeof tags == "string") ? tags.readBracketedList() : tags;

		oldTiddlyWikiSaveTiddler.apply(this, arguments);
		
		if (!abego.arraysAreEqual(oldTags, newTags))
			abego.internal.getTagManager().reset();
	};

	// When a tiddler is removed that had tags reset the TagManager.
	//
	var oldTiddlyWikiRemoveTiddler = TiddlyWiki.prototype.removeTiddler;
	TiddlyWiki.prototype.removeTiddler = function(title) {
		var tiddler = this.fetchTiddler(title);
		var resetTagManager = tiddler && tiddler.tags.length > 0;
		
		oldTiddlyWikiRemoveTiddler.apply(this, arguments);
		
		if (resetTagManager) 
			abego.internal.getTagManager().reset();
	};

	// Resets the TagManager, thus ensures that cached tagging 
	// information is discarded and the most recent tag state is used.
	// 
	this.reset = function () {
		tagReferences = null;
	};
	
	
	// Returns a TiddlerSet with all tiddlers that have the given tag, 
	// or null when the tag is not used in any tiddler.
	//
	// @return [may be null]
	//
	this.getTiddlersWithTag = function(tag) {
		ensureTagsAreLoaded();

		var tagInfo = tagReferences[tag];
		return tagInfo ? tagInfo.tiddlers : null;
	};
	
	// Returns an array with the names of all tags defined 
	// plus the (optional) extraTags. 
	//
	// The tags are sorted alphabetically (caseinsensitive).
	//
	// @params [optional] an array of tags to be added to the list
	//
	//
	this.getAllTags = function(extraTags) {
		ensureTagsAreLoaded();
			
		var result =[];
		for (var i in tagReferences) 
			result.push(i);
			
		for (i = 0; extraTags && i < extraTags.length; i++) 
			result.pushUnique(extraTags[i], true);
			
		abego.sortIgnoreCase(result);
		
		return result;
	};
	
	// An array with two items per tag
	// result[i][0] : the tag name
	// result[i][1] : TiddlerSet, with tiddlers that are tagged with that tag
	// 
	this.getTagInfos = function() {
		ensureTagsAreLoaded();
	
		var result = [];
		for (var tiddler in tagReferences) {
			result.push([tiddler, tagReferences[tiddler]]);
		}
		return result;
	};
	
	var compareTiddlerCountAndTagName = function(a,b) {
			var a1 = a[1];
			var b1 = b[1];
			var d = b[1].count - a[1].count;
			return d != 0 ? d : abego.compareStrings(a[0].toLowerCase(), b[0].toLowerCase());
	};
	
	this.getSortedTagInfos = function() {
		ensureTagsAreLoaded();

		var result = this.getTagInfos();
		
		result.sort(compareTiddlerCountAndTagName);
		
		return result;
	};
	
	// @return an array of the tags that "partner" the activeTags,
	// sorted by the number of conjoint occurances.
	//
	this.getPartnerRankedTags = function(activeTags) {
		var partnerTagCounts = {};
		for (var i = 0; i < activeTags.length; i++) {
			var tiddlersWithTag = this.getTiddlersWithTag(activeTags[i]);
			for (var name in tiddlersWithTag) {
				var tiddler = store.getTiddler(name);
				// It may happen that a tiddler is "gone" in the meantime
				if (!(tiddler instanceof Tiddler)) 
					continue;
					
				for(var j=0; j<tiddler.tags.length; j++) {
					var tag = tiddler.tags[j];
					var c = partnerTagCounts[tag];
					partnerTagCounts[tag] = c ? c+1 : 1;
				}
			}
		}
		var currentTagSet = abego.toSet(activeTags);
		var result = [];
		for (var n in partnerTagCounts) {
			if (!currentTagSet[n])
				result.push(n);
		}
		// Sort the tags by their partner tag count, then alphabetically
		result.sort(function (a,b) {
			var d = partnerTagCounts[b] - partnerTagCounts[a];
			return d != 0 ? d : abego.compareStrings(a.toLowerCase(), b.toLowerCase());
		});

		return result;
	};
}; // of abego.internal.TagManager

abego.internal.getTagManager = function() {
	if (!abego.internal.gTagManager) abego.internal.gTagManager = new abego.internal.TagManager();
	return abego.internal.gTagManager;
};

// ========================================================================
// IntelliTagger ==========================================================
// ========================================================================


(function(){
	var PADDING = 2;
	var BORDERWIDTH = 1;
	var MAX_FAVORITE_TAGS = 30;

	var	fSuggestionPopup; // DOM:Element
	var	fAnchorElement; // DOM:Element
	var fOnTagSelected; // function(e) {...}
	var	fSuggestedTags; // [Tag]
	var	fActiveTagSet; // TagSet
	var	fFavoriteTags; // array of Tags, [optional]
	
	if (!abego.IntelliTagger) abego.IntelliTagger = {};

	var getAnchorElement = function() {
		return fAnchorElement;
	};
	
	var isCurrentTag = function(tag) {
		return fActiveTagSet[tag];
	};
	
	var removeLastWord = function(s) {
		var i = s.lastIndexOf(" ");
		return (i >= 0) ? s.substr(0,i) : "";
	};
	
	var lastWordIsFilter = function(inputField) {
		var s = inputField.value;
		var len = s.length;		
		return (len > 0 && s[len-1] != ' ');
	};

	var ensureFieldEndsWithSpace = function(field) {
		var s = field.value;
		var len = s.length;
		if (len > 0 && s[len-1] != ' ') {
			field.value += ' ';
		}
	};
	
	var updateTag = function(tag, inputField, tiddler) {
		if (lastWordIsFilter(inputField)) 
			inputField.value = removeLastWord(inputField.value);
			
		story.setTiddlerTag (tiddler.title,tag,0);
		ensureFieldEndsWithSpace(inputField);
		
		abego.IntelliTagger.assistTagging(inputField, tiddler);
	};
	
	// returns the n-th suggestion, first counting the favorites, then the normal suggestions
	//
	// @param n zero-based.
	// @return [may be null]
	var getNthSuggestion = function(n) {
		if (fFavoriteTags && fFavoriteTags.length > n)
			return fFavoriteTags[n];
		
		return (fSuggestedTags && fSuggestedTags.length > n)
				? fSuggestedTags[n] 
				: null;
	};

	var useNthSuggestion = function(n, inputField, tiddler) {
		var suggestion = getNthSuggestion(n);
		if (suggestion)
			updateTag(suggestion, inputField, tiddler);
	};


	var getFilter = function(inputField) {
		var pos = inputField.value.lastIndexOf(" ");
		var filter = (pos >= 0) ? inputField.value.substr(++pos,inputField.value.length) : inputField.value;
		return new RegExp(filter.escapeRegExp(),"i");
	};


	var countExpectedTags = function(tags, expectedTagsAsProperties) {
		var result = 0;
		for (var i = 0; i<tags.length;i++) 
			if (expectedTagsAsProperties[tags[i]])
				result++;
		return result;
	};
	
	// Returns the number tags that have the same count of tiddlers
	// as the index-th tagInfo. 
	// 
	// The index-th tag is included in the returned number.
	// 
	// @param sortedTagInfo Array of TagInfos, sorted by count of tiddlers.
	//
	var getNumberOfTagsWithSameCount = function(sortedTagInfos, index, filterRE) {
		var result = 1;
		var c = sortedTagInfos[index];
		for (var i = index+1; i < sortedTagInfos.length; i++) 
			if (sortedTagInfos[i][1].count == c) {
				if (sortedTagInfos[i][0].match(filterRE))
					result++;
			} else
				break;
		return result;
	};
	
	var getInitialTagSuggestions = function(filterRE, maxCount) {
		var tagInfos = abego.internal.getTagManager().getSortedTagInfos();
		var result =[];
		var lastCount = 0;
		for (var i = 0; i < tagInfos.length; i++) {
			var c = tagInfos[i][1].count;
			
			// Stop adding tags to the result if not all tags with that count of tiddlers would fit into the result.
			if (c != lastCount) {
				if (maxCount && (result.length + getNumberOfTagsWithSameCount(tagInfos, i, filterRE) > maxCount)) 
					break;
				lastCount = c;
			}
			// Don't add tags that are only used in one tiddler.
			if (c == 1) 
				break;
			var s = tagInfos[i][0];
			if (s.match(filterRE))
				result.push(s);
		}
		return result;
	};
	
	var getAllFilteredTags = function(filterRE, extraTags) {
		return abego.filterStrings(
				abego.internal.getTagManager().getAllTags(extraTags),
				filterRE);
	};

	// Refreshes the tagSuggestions window
	//
	var refreshPopup = function() {
		if (!fSuggestionPopup) 
			return;
	
		// Load the template for the YourSearchResult
		var html = store.getTiddlerText("IntelliTaggerMainTemplate");
		if (!html) 
			html = "<b>Tiddler IntelliTaggerMainTemplate not found</b>";
		fSuggestionPopup.innerHTML = html;
	
		// Expand the template macros etc.
		applyHtmlMacros(fSuggestionPopup,null);
		refreshElements(fSuggestionPopup,null);
	};
	
	var onTagClicked = function(e) {	
		if (!e) var e = window.event;
		var tag = this.getAttribute("tag");
		if (fOnTagSelected)
			fOnTagSelected.call(this,tag, e);
			
		return false;
	};

	var addSeparator = function(place) {
		createTiddlyElement(place,"span",null,"tagSeparator", " | ");
	};
	
	var appendTags = function(place, tags, suggestionIndex, excludeTags, maxCount) {
		if (!tags)
			return;
			
		var excludeTagSet = excludeTags ? abego.toSet(excludeTags) : {};
		var n = tags.length;
		var c = 0;
		for (var i = 0; i < n; i++) {
			var tag = tags[i];
			if (excludeTagSet[tag])
				continue;
				
			if (c > 0) 
				addSeparator(place);
				
			if (maxCount && c >= maxCount) {
				abego.createEllipsis(place);
				break;
			}
			c++;
			
			var shortcutText = "";
			var placeForButton = place;
			if (suggestionIndex < 10) {
				// create a wrapping span that ensures the number and the text are not linebreaked.
				placeForButton = createTiddlyElement(place,"span",null,"numberedSuggestion");
				
				suggestionIndex++;
				var key = suggestionIndex < 10 ? ""+(suggestionIndex) : "0";
				createTiddlyElement(placeForButton,"span",null,"suggestionNumber", key+") ");
				var fastKeyText = suggestionIndex == 1 ? "Return or " : "";
				shortcutText = " (Shortcut: %1Alt-%0)".format([key, fastKeyText]);
			}

			var shiftClickToolTip = config.views.wikified.tag.tooltip.format([tag]);
			var normalClickToolTip = (isCurrentTag(tag) ? "Remove tag '%0'%1" : "Add tag '%0'%1").format([tag,shortcutText]);
			var tooltip = "%0; Shift-Click: %1".format([normalClickToolTip, shiftClickToolTip]);
			var btn = createTiddlyButton(
					placeForButton,
					tag,
					tooltip, 
					onTagClicked, 
					isCurrentTag(tag) ? "currentTag" : null);
			btn.setAttribute("tag",tag);
		}
	};
	
	var scrollVisible = function() {
		// Scroll the window to make the fSuggestionPopup page (and the anchorElement) visible.
		if (fSuggestionPopup) window.scrollTo(0,ensureVisible(fSuggestionPopup));
		if (getAnchorElement()) window.scrollTo(0,ensureVisible(getAnchorElement()));
	};

	// Close the suggestions window when the user clicks on the document
	// (and not into the getAnchorElement or in the suggestions window)
	//
	var onDocumentClick = function(e) {
		if (!e) var e = window.event;
		if (!fSuggestionPopup) 
			return;
		
		var target = resolveTarget(e);
		if (target == getAnchorElement()) return; 
		if (abego.isDescendantOrSelf(fSuggestionPopup, target)) return; 
		
		abego.IntelliTagger.close();
	};
	addEvent(document,"click",onDocumentClick);
	
	// We added a space to the tags edit field. To avoid that the 
	// tiddler is marked as "changed" just because of that we trim
	// the field value
	//
	var oldGatherSaveFields = Story.prototype.gatherSaveFields;
	Story.prototype.gatherSaveFields = function(e,fields) {
		oldGatherSaveFields.apply(this, arguments);
		var tags = fields.tags;
		if (tags) 
			fields.tags = tags.trim();
	};
	

	var focusTagsField = function(title) {
		story.focusTiddler(title,"tags");
		var tags = abego.getTiddlerField(story, title, "tags");
		if (tags) {
			var len = tags.value.length;
			abego.setRange(tags, len, len);
			window.scrollTo(0,ensureVisible(tags));
		}
	};
	

	// Attach the assistTagging to the "tags" edit field.
	//
	var oldEditHandler = config.macros.edit.handler;
	config.macros.edit.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
		oldEditHandler.apply(this, arguments);
		var field = params[0];
		if((tiddler instanceof Tiddler) && field == "tags") {
			// Just added the "edit tags" field. 
			// Attach it to the "Tag Suggestions" feature.
			var inputField = place.lastChild;
			inputField.onfocus = function(e) {
				abego.IntelliTagger.assistTagging(inputField, tiddler);
				setTimeout(
						function() {
							focusTagsField(tiddler.title);
						}, 100);

			};
			inputField.onkeyup = function(e) {
				if (!e) var e = window.event;
				if (e.altKey && !e.ctrlKey && !e.metaKey && (e.keyCode >= 48 && e.keyCode <= 57)) {
					useNthSuggestion(e.keyCode == 48 ? 9 : e.keyCode-49, inputField, tiddler);
 				} else if (e.ctrlKey && e.keyCode == 32) {
					useNthSuggestion(0, inputField, tiddler);
				} if (!e.ctrlKey && (e.keyCode == 13 || e.keyCode == 10)) {
					useNthSuggestion(0, inputField, tiddler);
				}
 
				setTimeout(
					function() {
						abego.IntelliTagger.assistTagging(inputField, tiddler);
					}, 100);
				return false;
			};
			
			// ensure that the tags text ends with a space 
			// (otherwise the last word is used as a filter when the field gets the focus)
			ensureFieldEndsWithSpace(inputField);
		}
	};
	
	var onEditTags = function(e) {
		if (!e) var e = window.event;
		var target = resolveTarget(e);
		
		var title = target.getAttribute("tiddler");
		if (title) {
			story.displayTiddler(target,title,"IntelliTaggerEditTagsTemplate", false);
			focusTagsField(title);
		}
		return false;
	};
	
	// Add an "[edit]" button to the "tags" field that is displayed with the tiddler in the ViewTemplate.
	// Pressing the button allows editing the tags only, with the text still being displayed in wikified form.
	//
	var oldTagsHandler = config.macros.tags.handler;
	config.macros.tags.handler = function(place,macroName,params,wikifier,paramString,tiddler) {
		oldTagsHandler.apply(this, arguments);

		abego.IntelliTagger.createEditTagsButton(tiddler, createTiddlyElement(place.lastChild,"li"));
	};
	
	// close the Suggestion Window when the tiddler is no longer edited
	// (i.e. the tag edit inputfield is gone.)
	// 
	// (Note: we must poll this condition since onblur on the input field 
	// cannot be used since every click into the suggestion window results
	// in a lost focus/blur)
	//
	var closeIfAnchorElementIsHidden = function() {
		if (fSuggestionPopup && fAnchorElement && !abego.isDescendantOrSelf(document, fAnchorElement)) 
			abego.IntelliTagger.close();
	};
	setInterval(closeIfAnchorElementIsHidden, 100);
	
//----------------------------------------------------------------------------
// The public API
//----------------------------------------------------------------------------
	
	// @param suggestedTags 
	//				array of strings representing the tags to be suggested.
	//
	// @param activeTags 
	//				array of strings representing the tags currently "active".
	//
	// @param favoriteTags [optional] 
	//				a subset of the suggested tags that are "favorites". 
	//				I.e. They should be presented first etc.
	//
	// @param anchorElement [optional]
	//				when defined the suggestions are displayed "close" to the anchorElement. 
	//				The page is scrolled to make the anchorElement visible.
	//				When the anchorElement is not defined the suggestions are displayed in the
	//				center of the window.
	//
	// @param onTagSelected [optional]
	// 				function(tag, e) to be called when a tag is selected.
	//
	abego.IntelliTagger.displayTagSuggestions = function(suggestedTags, activeTags, favoriteTags, anchorElement, onTagSelected) {
		fSuggestedTags = suggestedTags;
		fActiveTagSet = abego.toSet(activeTags);
		fFavoriteTags = favoriteTags;
		fAnchorElement = anchorElement;
		fOnTagSelected = onTagSelected;
	
		if (!fSuggestionPopup) {
			fSuggestionPopup = createTiddlyElement(document.body,"div",null,"intelliTaggerSuggestions");
			fSuggestionPopup.style.position = "absolute";
		}
	
		refreshPopup();
		abego.openAsPopup(fSuggestionPopup);
		
		if (getAnchorElement()) {
			var w = getAnchorElement().offsetWidth;
			if (fSuggestionPopup.offsetWidth < w) {
				fSuggestionPopup.style.width = (w-2*(PADDING+BORDERWIDTH)) + "px";
			}
			abego.moveBelowAndClip(fSuggestionPopup, getAnchorElement());
		} else {
			abego.centerOnWindow(fSuggestionPopup);
		}

		scrollVisible();
	};
	
	// Shows the Tag Suggestion Popup for the given tiddler, below the specified inputField.
	//
	abego.IntelliTagger.assistTagging = function(inputField, tiddler) {
		var filterRE = getFilter(inputField);
		var s = inputField.value;
		if (lastWordIsFilter(inputField)) 
			s = removeLastWord(s);
		var activeTags = s.readBracketedList();
		var favoriteTags = activeTags.length > 0 
				? abego.filterStrings(abego.internal.getTagManager().getPartnerRankedTags(activeTags), filterRE, MAX_FAVORITE_TAGS)
				: getInitialTagSuggestions(filterRE, MAX_FAVORITE_TAGS);
		abego.IntelliTagger.displayTagSuggestions(
				getAllFilteredTags(filterRE,activeTags), 
				activeTags,
				favoriteTags, 
				inputField,
				function(tag, e) {
					if (e.shiftKey) {
						onClickTag.call(this,e);
					} else
						updateTag(tag, inputField, tiddler);
				});
	};
	
	// Closes the Tag Suggestions Popup
	//
	abego.IntelliTagger.close = function() {
		abego.closePopup(fSuggestionPopup);
		fSuggestionPopup = null;
		return false;
	};

	// Creates an TiddlyButton at the given place to edit the tags of the given tiddler.
	//
	abego.IntelliTagger.createEditTagsButton = function(tiddler, place, text, tooltip, className, id, accessKey) {
		if (!text) text = "[edit]";
		if (!tooltip) tooltip = "Edit the tags";
		if (!className) className = "editTags";
		
		var editButton = createTiddlyButton(place,text,tooltip, onEditTags, className, id, accessKey);
		editButton.setAttribute("tiddler", (tiddler instanceof Tiddler) ? tiddler.title : String(tiddler));
		
		return editButton;
	};

	abego.IntelliTagger.getSuggestionTagsMaxCount = function() {
		return 100;
	};
//----------------------------------------------------------------------------
// Macros
//----------------------------------------------------------------------------

// ====Macro intelliTagger ================================================

	config.macros.intelliTagger = {
		// Standard Properties
		label: "intelliTagger",

		handler : function(place,macroName,params,wikifier,paramString,tiddler) {
						var namesAndValues = paramString.parseParams("list",null, true);
						var actions = namesAndValues[0]["action"];
						for (var i = 0; actions && i < actions.length; i++) {
							var actionName = actions[i];
							var action = config.macros.intelliTagger.subhandlers[actionName];
								
							if (!action) 
								abego.alertAndThrow("Unsupported action '%0'".format([actionName]));
								
							action(place,macroName,params,wikifier,paramString,tiddler);
						}
					},
			
		subhandlers: {
			
			showTags : function(place,macroName,params,wikifier,paramString,tiddler) {
						appendTags(place, fSuggestedTags, fFavoriteTags ? fFavoriteTags.length : 0, fFavoriteTags,abego.IntelliTagger.getSuggestionTagsMaxCount());
					},
			
			showFavorites : function(place,macroName,params,wikifier,paramString,tiddler) {
						appendTags(place, fFavoriteTags, 0);
					},
			
			closeButton : function(place,macroName,params,wikifier,paramString,tiddler) {
						var button = createTiddlyButton(place, "close", "Close the suggestions", abego.IntelliTagger.close);
					},

			version : function(place) {
						var t = "IntelliTagger %0.%1.%2".format(
								[version.extensions.IntelliTaggerPlugin.major, 
								 version.extensions.IntelliTaggerPlugin.minor, 
								 version.extensions.IntelliTaggerPlugin.revision]);
						var e = createTiddlyElement(place, "a");
						e.setAttribute("href", "http://tiddlywiki.abego-software.de/#IntelliTaggerPlugin");
						e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">'+t+'<font>';
					},

			copyright : function(place) {
						var e = createTiddlyElement(place, "a");
						e.setAttribute("href", "http://tiddlywiki.abego-software.de");
						e.innerHTML = '<font color="black" face="Arial, Helvetica, sans-serif">&copy; 2006-2007 <b><font color="red">abego</font></b> Software<font>';
					}
		}
	};
	
})();
//}}}

//#endOf: MainCode
//{{{
config.shadowTiddlers["IntelliTaggerStyleSheet"] = 
			"/***\n"+
			"!~IntelliTagger Stylesheet\n"+
			"***/\n"+
			"/*{{{*/\n"+
			".intelliTaggerSuggestions {\n"+
			"\tposition: absolute;\n"+
			"\twidth: 600px;\n"+
			"\n"+
			"\tpadding: 2px;\n"+
			"\tlist-style: none;\n"+
			"\tmargin: 0;\n"+
			"\n"+
			"\tbackground: #eeeeee;\n"+
			"\tborder: 1px solid DarkGray;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .currentTag   {\n"+
			"\tfont-weight: bold;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .suggestionNumber {\n"+
			"\tcolor: #808080;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .numberedSuggestion{\n"+
			"\twhite-space: nowrap;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .intelliTaggerFooter {\n"+
			"\tmargin-top: 4px;\n"+
			"\tborder-top-width: thin;\n"+
			"\tborder-top-style: solid;\n"+
			"\tborder-top-color: #999999;\n"+
			"}\n"+
			".intelliTaggerSuggestions .favorites {\n"+
			"\tborder-bottom-width: thin;\n"+
			"\tborder-bottom-style: solid;\n"+
			"\tborder-bottom-color: #999999;\n"+
			"\tpadding-bottom: 2px;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .normalTags {\n"+
			"\tpadding-top: 2px;\n"+
			"}\n"+
			"\n"+
			".intelliTaggerSuggestions .intelliTaggerFooter .button {\n"+
			"\tfont-size: 10px;\n"+
			"\n"+
			"\tpadding-left: 0.3em;\n"+
			"\tpadding-right: 0.3em;\n"+
			"}\n"+
			"\n"+
			"/*}}}*/\n";

config.shadowTiddlers["IntelliTaggerMainTemplate"] = 
			"<!--\n"+
			"{{{\n"+
			"-->\n"+
			"<div class=\"favorites\" macro=\"intelliTagger action: showFavorites\"></div>\n"+
			"<div class=\"normalTags\" macro=\"intelliTagger action: showTags\"></div>\n"+
			"<!-- The Footer (with the Navigation) ============================================ -->\n"+
			"<table class=\"intelliTaggerFooter\" border=\"0\" width=\"100%\" cellspacing=\"0\" cellpadding=\"0\"><tbody>\n"+
			"  <tr>\n"+
			"\t<td align=\"left\">\n"+
			"\t\t<span macro=\"intelliTagger action: closeButton\"></span>\n"+
			"\t</td>\n"+
			"\t<td align=\"right\">\n"+
			"\t\t<span macro=\"intelliTagger action: version\"></span>, <span macro=\"intelliTagger action: copyright \"></span>\n"+
			"\t</td>\n"+
			"  </tr>\n"+
			"</tbody></table>\n"+
			"<!--\n"+
			"}}}\n"+
			"-->\n";
			
config.shadowTiddlers["IntelliTaggerEditTagsTemplate"] = 
			"<!--\n"+
			"{{{\n"+
			"-->\n"+
			"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+
			"<div class='title' macro='view title'></div>\n"+
			"<div class='tagged' macro='tags'></div>\n"+
			"<div class='viewer' macro='view text wikified'></div>\n"+
			"<div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler'></div>\n"+
			"<div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div>\n"+
			"<!--\n"+
			"}}}\n"+
			"-->\n";
			
config.shadowTiddlers["BSD open source license (abego Software)"] = "See [[Licence|http://tiddlywiki.abego-software.de/#%5B%5BBSD%20open%20source%20license%5D%5D]].";
config.shadowTiddlers["IntelliTaggerPlugin Documentation"] = "[[Documentation on abego Software website|http://tiddlywiki.abego-software.de/doc/IntelliTagger.pdf]].";
config.shadowTiddlers["IntelliTaggerPlugin SourceCode"] = "[[Plugin source code on abego Software website|http://tiddlywiki.abego-software.de/archive/IntelliTaggerPlugin/Plugin-IntelliTagger-src.1.0.2.js]]\n";
			
			
//}}}

//{{{
(function() {
	var oldRestart = restart;
	restart = function() {
setStylesheet(store.getTiddlerText('IntelliTaggerStyleSheet'),'IntelliTaggerStyleSheet');
		oldRestart.apply(this,arguments);
	}
})();

//}}}
			
//{{{
} // of single install
//}}}

/%<<list filter [tag[bug]]>>%/
/%<<list filter [tag[Bug]]>>%/

/%
[[Bug 49561]] - 1
[[Bug 49708]]
[[Bug 49891]]
[[Bug 49970]]
[[Bug 50316]]
[[Bug 50549]] - 6
[[Bug 50699]]
[[Bug 50965]]
[[Bug 51363]]
[[Bug 51593]]
[[Bug 51626]] - 11
[[Bug 51670]]
[[Bug 52040]]
[[Bug 52444]]
[[Bug 52619]]
[[Bug 53320]] - 16
[[Bug 53554]]
[[Bug 53582]]
[[Bug 53873]]
[[Bug 54086]]
[[Bug 54282]] - 21
[[Bug 54538]]
[[Bug 54763]]
[[Bug 54851]] 
[[Bug 55243]]
[[Bug 55539]] - 26
[[Bug 55640]]
[[Bug 55816]]
[[Bug 55845]]
[[Bug 56070]]
[[Bug 56097]] - 31
[[Bug 56279]]
[[Bug 56667]]
[[Bug 57225]]
[[Bug 57670]]
[[Bug 57853]] - 36
[[Bug 58933]]
[[Bug 59782]]
[[Bug 60246]]
[[Bug 60635]]
[[Bug 60768]] - 41
[[Bug 60789]]
[[Bug 61063]]
[[Bug 61337]]
[[Bug 61706]]
[[Bug 61898]] - 46
[[Bug 61928]]
[[Bug 62185]]
[[Bug 62237]]
[[Bug 62545]]
[[Bug 62612]] - 51
[[Bug 62713]]
[[Bug 62737]]
[[Bug 62769]]
[[Bug 62932]]
[[Bug 63005]] - 56
[[Bug 63216]]
[[Bug 63519]]
[[Bug 63753]]
[[Bug 63908]]
[[Bug 64187]] - 61
[[Bug 64435]]
[[Bug 64531]]
[[Bug 64940]]
[[Bug 64967]]
[[Bug 65063]] - 66
[[Bug 65254]]
[[Bug 65351]]
[[Bug 65354]]
[[Bug 65716]]
[[Bug 65759]] - 71
[[Bug 66318]]
[[Bug 66436]]
[[Bug 66653]]
[[Bug 66681]]
[[Bug 67612]] - 76
[[Bug 67912]]
[[Bug 67981]]
[[Bug 68070]]
[[Bug 69598]]
[[Bug 70111]] - 81
[[Bug 70362]]
[[Bug 70445]]
[[Bug 70656]]
[[Bug 71228]]
[[Bug 71600]] - 86
[[Bug 71784]]
[[Bug 72508]]
[[Bug 72772]]
[[Bug 72796]]
[[Bug 72912]] - 91
[[Bug 74229]]
[[Bug 74308]]
[[Bug 74614]]
[[Bug 74666]]
[[Bug 75390]] - 96
[[Bug 76671]]
[[Bug 77486]]
[[Bug 79881]]
[[Bug 81695]] %/

/***
|Name|MatchTagsPlugin|
|Source|http://www.TiddlyTools.com/#MatchTagsPlugin|
|Documentation|http://www.TiddlyTools.com/#MatchTagsPluginInfo|
|Version|2.0.4|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|'tag matching' with full boolean expressions (AND, OR, NOT, and nested parentheses)|
!!!!!Documentation
> see [[MatchTagsPluginInfo]]
!!!!!Revisions
<<<
2010.08.11 2.0.4 in getMatchingTiddlers(), fixed sorting for descending order (e.g, "-created")
| please see [[MatchTagsPluginInfo]] for additional revision details |
2008.02.28 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.MatchTagsPlugin= {major: 2, minor: 0, revision: 4, date: new Date(2010,8,11)};

// store.getMatchingTiddlers() processes boolean expressions for tag matching
//    sortfield (optional) sets sort order for tiddlers - default=title
//    tiddlers (optional) use alternative set of tiddlers (instead of current store)
TiddlyWiki.prototype.getMatchingTiddlers = function(tagexpr,sortfield,tiddlers) {

	var debug=config.options.chkDebug; // abbreviation
	var cmm=config.macros.matchTags; // abbreviation
	var r=[]; // results are an array of tiddlers
	var tids=tiddlers||store.getTiddlers();
	if (tids && sortfield) tids=store.sortTiddlers(tids,sortfield);
	if (debug) displayMessage(cmm.msg1.format([tids.length]));

	// try simple lookup to quickly find single tags or tags that
	// contain boolean operators as literals, e.g. "foo and bar"
	for (var t=0; t<tids.length; t++)
		if (tids[t].isTagged(tagexpr)) r.pushUnique(tids[t]);
	if (r.length) {
		if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
		return r;
	}
	
	// convert expression into javascript code with regexp tests,
	// so that "tag1 AND ( tag2 OR NOT tag3 )" becomes
	// "/\~tag1\~/.test(...) && ( /\~tag2\~/.test(...) || ! /\~tag3\~/.test(...) )"

	// normalize whitespace, tokenize operators, delimit with "~"
	var c=tagexpr.trim(); // remove leading/trailing spaces
	c = c.replace(/\s+/ig," "); // reduce multiple spaces to single spaces
	c = c.replace(/\(\s?/ig,"~(~"); // open parens
	c = c.replace(/\s?\)/ig,"~)~"); // close parens
	c = c.replace(/(\s|~)?&&(\s|~)?/ig,"~&&~"); // &&
	c = c.replace(/(\s|~)AND(\s|~)/ig,"~&&~"); // AND
	c = c.replace(/(\s|~)?\|\|(\s|~)?/ig,"~||~"); // ||
	c = c.replace(/(\s|~)OR(\s|~)/ig,"~||~"); // OR
	c = c.replace(/(\s|~)?!(\s|~)?/ig,"~!~"); // !
	c = c.replace(/(^|~|\s)NOT(\s|~)/ig,"~!~"); // NOT
	c = c.replace(/(^|~|\s)NOT~\(/ig,"~!~("); // NOT(
	// change tag terms to regexp tests
	var terms=c.split("~"); for (var i=0; i<terms.length; i++) { var t=terms[i];
		if (/(&&)|(\|\|)|[!\(\)]/.test(t) || t=="") continue; // skip operators/parens/spaces
		if (t==config.macros.matchTags.untaggedKeyword)
			terms[i]="tiddlertags=='~~'"; // 'untagged' tiddlers
		else
			terms[i]="/\\~"+t+"\\~/.test(tiddlertags)";
	}
	c=terms.join(" ");
	if (debug) { displayMessage(cmm.msg2.format([tagexpr])); displayMessage(cmm.msg3.format([c])); }

	// scan tiddlers for matches
	for (var t=0; t<tids.length; t++) {
	 	// assemble tags from tiddler into string "~tag1~tag2~tag3~"
		var tiddlertags = "~"+tids[t].tags.join("~")+"~";
		try { if(eval(c)) r.push(tids[t]); } // test tags
		catch(e) { // error in test
			displayMessage(cmm.msg2.format([tagexpr]));
			displayMessage(cmm.msg3.format([c]));
			displayMessage(e.toString());
			break; // skip remaining tiddlers
		}
	}
	if (debug) displayMessage(cmm.msg4.format([r.length,tagexpr]));
	return r;
}
//}}}
//{{{
config.macros.matchTags = {
	msg1: "scanning %0 input tiddlers",
	msg2: "looking for '%0'",
	msg3: "using expression: '%0'",
	msg4: "found %0 tiddlers matching '%1'",
	noMatch: "no matching tiddlers",
	untaggedKeyword: "-",
	untaggedLabel: "no tags",
	untaggedPrompt: "show tiddlers with no tags",
	defTiddler: "MatchingTiddlers",
	defTags: "",
	defFormat: "[[%0]]",
	defSeparator: "\n",
	reportHeading: "Found %0 tiddlers tagged with: '{{{%1}}}'\n----\n",
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var mode=params[0]?params[0].toLowerCase():'';
		if (mode=="inline")
			params.shift();
		if (mode=="report" || mode=="panel") {
			params.shift();
			var target=params.shift()||this.defTiddler;
		}
		if (mode=="popup") {
			params.shift();
			if (params[0]&&params[0].substr(0,6)=="label:") var label=params.shift().substr(6);
			if (params[0]&&params[0].substr(0,7)=="prompt:") var prompt=params.shift().substr(7);
		} else {
			var fmt=(params.shift()||this.defFormat).unescapeLineBreaks();
			var sep=(params.shift()||this.defSeparator).unescapeLineBreaks();
		}
		var sortBy="+title";
		if (params[0]&&params[0].substr(0,5)=="sort:") sortBy=params.shift().substr(5);
		var expr = params.join(" ");
		if (mode!="panel" && (!expr||!expr.trim().length)) return;
		if (expr==this.untaggedKeyword)
			{ var label=this.untaggedLabel; var prompt=this.untaggedPrompt };
		switch (mode) {
			case "popup": this.createPopup(place,label,expr,prompt,sortBy); break;
			case "panel": this.createPanel(place,expr,fmt,sep,sortBy,target); break;
			case "report": this.createReport(target,this.defTags,expr,fmt,sep,sortBy); break;
			case "inline": default: this.createInline(place,expr,fmt,sep,sortBy); break;
		}
	},
	formatList: function(tids,fmt,sep) {
		var out=[];
		for (var i=0; i<tids.length; i++) { var t=tids[i];
			var title=t.title;
			var who=t.modifier;
			var when=t.modified.toLocaleString();
			var text=t.text;
			var first=t.text.split("\n")[0];
			var desc=store.getTiddlerSlice(t.title,"description");
			desc=desc||store.getTiddlerSlice(t.title,"Description");
			desc=desc||store.getTiddlerText(t.title+"##description");
			desc=desc||store.getTiddlerText(t.title+"##Description");
			var tags=t.tags.length?'[['+t.tags.join(']] [[')+']]':'';
			out.push(fmt.format([title,who,when,text,first,desc,tags]));
		}
		return out.join(sep);
	},
	createInline: function(place,expr,fmt,sep,sortBy) {
		wikify(this.formatList(store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy),fmt,sep),place);
	},
	createPopup: function(place,label,expr,prompt,sortBy) {
		var btn=createTiddlyButton(place,
			(label||expr).format([expr]),
			(prompt||config.views.wikified.tag.tooltip).format([expr]),
			function(ev){ return config.macros.matchTags.showPopup(this,ev||window.event); });
		btn.setAttribute("sortBy",sortBy);
		btn.setAttribute("expr",expr);
	},
	showPopup: function(here,ev) {
		var p=Popup.create(here); if (!p) return false;
		var tids=store.getMatchingTiddlers(here.getAttribute("expr"));
		store.sortTiddlers(tids,here.getAttribute("sortBy"));
		var list=[]; for (var t=0; t<tids.length; t++) list.push(tids[t].title);
		if (!list.length) createTiddlyText(p,this.noMatch);
		else {
			var b=createTiddlyButton(createTiddlyElement(p,"li"),
				config.views.wikified.tag.openAllText,
				config.views.wikified.tag.openAllTooltip,
				function() {
					var list=this.getAttribute("list").readBracketedList();
					story.displayTiddlers(null,tids);
				});
			b.setAttribute("list","[["+list.join("]] [[")+"]]");
			createTiddlyElement(p,"hr");
		}
		var out=this.formatList(tids," &nbsp;[[%0]]&nbsp; ","\n"); wikify(out,p);
		Popup.show();
		ev.cancelBubble=true;
		if(ev.stopPropagation) ev.stopPropagation();
		return false;
	},
	createReport: function(target,tags,expr,fmt,sep,sortBy) {
		var tids=store.sortTiddlers(store.getMatchingTiddlers(expr),sortBy);
		if (!tids.length) { displayMessage('no matches for: '+expr); return false; }
		var msg=config.messages.overwriteWarning.format([target]);
		if (store.tiddlerExists(target) && !confirm(msg)) return false;
		var out=this.reportHeading.format([tids.length,expr])
		out+=this.formatList(tids,fmt,sep);
		store.saveTiddler(target,target,out,config.options.txtUserName,new Date(),tags,{});
		story.closeTiddler(target); story.displayTiddler(null,target);
	},
	createPanel: function(place,expr,fmt,sep,sortBy,tid) {
		var s=createTiddlyElement(place,"span"); s.innerHTML=store.getTiddlerText("MatchTagsPlugin##html");
		var f=s.getElementsByTagName("form")[0];
		f.expr.value=expr; f.fmt.value=fmt; f.sep.value=sep.escapeLineBreaks();
		f.tid.value=tid; f.tags.value=this.defTags;
	}
};
//}}}
/***
//{{{
!html
<form style='display:inline;white-space:nowrap'>
<input type='text'    name='expr' style='width:50%' title='tag expression'><!--
--><input type='text'    name='fmt'  style='width:10%' title='list item format'><!--
--><input type='text'    name='sep'  style='width:5%'  title='list item separator'><!--
--><input type='text'    name='tid'  style='width:12%' title='target tiddler title'><!--
--><input type='text'    name='tags' style='width:10%' title='target tiddler tags'><!--
--><input type='button'  name='go'   style='width:8%'  value='go' onclick="
	var expr=this.form.expr.value;
	if (!expr.length) { alert('Enter a boolean tag expression'); return false; }
	var fmt=this.form.fmt.value;
	if (!fmt.length) { alert('Enter the list item output format'); return false; }
	var sep=this.form.sep.value.unescapeLineBreaks();
	var tid=this.form.tid.value;
	if (!tid.length) { alert('Enter a target tiddler title'); return false; }
	var tags=this.form.tags.value;
	config.macros.matchTags.createReport(tid,tags,expr,fmt,sep,'title');
	return false;">
</form>
!end
//}}}
***/
//{{{
// SHADOW TIDDLER for displaying default panel input form
config.shadowTiddlers.MatchTags="<<matchTags panel>>";
//}}}
//{{{
// TWEAK core filterTiddlers() for enhanced boolean matching in [tag[...]] syntax:
// use getMatchingTiddlers instead getTaggedTiddlers
var fn=TiddlyWiki.prototype.filterTiddlers;
fn=fn.toString().replace(/getTaggedTiddlers/g,"getMatchingTiddlers");
eval("TiddlyWiki.prototype.filterTiddlers="+fn);
//}}}
//{{{
// REDEFINE core handler for enhanced boolean matching in tag:"..." paramifier
// use filterTiddlers() instead of getTaggedTiddlers() to get list of tiddlers.
config.paramifiers.tag = {
	onstart: function(v) {
		var tagged = store.filterTiddlers("[tag["+v+"]]");
		story.displayTiddlers(null,tagged,null,false,null);
	}
};
//}}}
/***
|Name|StorySaverPlugin|
|Source|http://www.TiddlyTools.com/#StorySaverPlugin|
|Documentation|http://www.TiddlyTools.com/#StorySaverPluginInfo|
|Version|1.8.3|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Requires|MarkupPostBody|
|Description|save/restore current tiddler view between browser sessions|
Automatically save a list of currently viewed tiddlers (the 'story') in a local cookie, {{{txtSavedStory}}} and then open those tiddlers when the document is reloaded, so you can resume working from the same place you left off!!  Also, use {{{<<saveStory>>}}} and {{{<<openStory>>}}} macros to quickly save/re-display stories stored in tiddlers, using a command link, droplist, or popup display.
!!!!!Documentation
>see [[StorySaverPluginInfo]]
!!!!!Configuration
<<<
<<option chkSaveStory>> use automatic story cookie (reopens tiddlers on startup)
<<option chkStoryAllowAdd>>include 'add a story' command in droplist/popup
<<option chkStoryFold>>fold story tiddlers when opening a story (see [[CollapseTiddlersPlugin]])
<<option chkStoryClose>>close other tiddlers when opening a story
<<option chkStoryTop>>open story tiddlers at top of column
<<option chkStoryBottom>>open story tiddlers at bottom of column
<<<
!!!!!Revisions
<<<
2009.10.20 1.8.3 fix handling for 'add' item in popup menu
|please see [[StorySaverPluginInfo]] for additional revision details|
2007.10.05 1.0.0 initial release. Moved [[SetDefaultTiddlers]] inline script and rewrote as a {{{<<saveStory>>}}} macro.
<<<
!!!!!Code
***/
//{{{
version.extensions.StorySaverPlugin= {major: 1, minor: 8, revision: 3, date: new Date(2009,10,20)};

var defaults={
	chkSaveStory:		false,
	chkStoryFold:		true,
	chkStoryClose:		true,
	chkStoryAllowAdd:	true,
	chkStoryTop:		true,
	chkStoryBottom:		false
};
for (var id in defaults) if (config.options[id]===undefined)
	config.options[id]=defaults[id];

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

// save or clear story cookie on exit
if (window.coreTweaks_confirmExit==undefined) {
	window.coreTweaks_confirmExit=window.confirmExit;
	window.confirmExit=function() {
		if (config.options.chkSaveStory) { // save cookie
			var links=[];
			story.forEachTiddler(function(title,element){links.push('[['+title+']]');});
			config.options.txtSavedStory=links.join(' ');
			saveOptionCookie('txtSavedStory');
		} else removeCookie('txtSavedStory');
		return window.coreTweaks_confirmExit.apply(this,arguments);
	}
}
//}}}
/***
''apply saved story on startup:'' //important note: the following code is actually located in [[MarkupPostBody]].  This is because it needs to supercede the core's getParameters() function, which is called BEFORE plugins are loaded, preventing the normal plugin-based hijack method from working, while code loaded into [[MarkupPostBody]] will be processed as soon as the document is read, even before the TW main() function is invoked.//
<<tiddler MarkupPostBody>>
***/
//{{{
config.macros.saveStory = {
	label: 'set default tiddlers',
	defaultTiddler: 'DefaultTiddlers',
	prompt: 'store a list of currently displayed tiddlers in another tiddler',
	askMsg: 'Enter the name of a tiddler in which to save the current story:',
	tag: 'story',
	excludeTag: 'excludeStory',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var tid=params.shift()||'DefaultTiddlers';
		var label=params.shift()||this.label;
		var tip=params.shift()||this.prompt;
		var btn=createTiddlyButton(place,label,tip,this.setTiddler,'button');
		btn.setAttribute('tid',tid);
		btn.setAttribute('extratags','[['+params.join(']] [[')+']]');
	},
	setTiddler: function() {
		var cms=config.macros.saveStory; // abbrev
		// get list of current open tiddlers
		var tids=[];
		story.forEachTiddler(function(title,element){
			var t=store.getTiddler(title);
			if (!t || !t.isTagged(cms.excludeTag)) tids.push('[['+title+']]');
		});
		// get target tiddler
		var tid=this.getAttribute('tid');
		if (!tid || tid=='ask') {
			tid=prompt(cms.askMsg,cms.defaultTiddler);
			if (!tid || !tid.length) return false; // cancelled by user
		}
		if(store.tiddlerExists(tid) && !confirm(config.messages.overwriteWarning.format([tid])))
			return false;
		tids=tids.join('\n');
		var t=store.getTiddler(tid); var tags=t?t.tags:[];
		var extratags=(this.getAttribute('extratags')||'').readBracketedList();
		for (var i=0; i<extratags.length; i++) tags.pushUnique(extratags[i]);
		tags.pushUnique(cms.tag);
		store.saveTiddler(tid,tid,tids,config.options.txtUserName,new Date(),tags,t?t.fields:null);
		story.displayTiddler(null,tid);
		story.refreshTiddler(tid,null,true);
		displayMessage(tid+' has been '+(t?'updated':'created'));
		return false;
	}
}
//}}}
//{{{
config.macros.openStory = {
	label: 'open story: %0',
	prompt: 'open the set of tiddlers listed in: %0',
	popuplabel: 'stories',
	popupprompt: 'view a set of tiddlers',
	tag: 'story',
	selectprompt: 'select a story...',
	optionsprompt: 'viewing options...',
	foldcmd: '[%0] fold story',
	foldprompt: 'fold story tiddlers when opening a story',
	closecmd: '[%0] close others',
	closeprompt: 'close other tiddlers when opening a story',
	topcmd: '[%0] open at top',
	topprompt: 'open story tiddlers at top of column',
	bottomcmd: '[%0] open at bottom',
	bottomprompt: 'open story tiddlers at bottom of column',
	addcmd: 'add a story...',
	addprompt: 'create a new story',
	excludeTag: 'excludeStory',
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		if (params[0].toLowerCase()=='list') return this.createList(place,params);
		else if (params[0].toLowerCase()=='popup') return this.createPopup(place,params);
		else this.createButton(place,params);
	},
	showStory: function(tid,fold) {
		var co=config.options; // abbrev
		var tids=[];
		var t=store.getTiddler(tid);
		var tagged=store.getTaggedTiddlers(tid,'title');
		if (tagged.length) // if tiddler IS a tag, use tagged tiddlers as story
			for (var i=0; i<tagged.length; i++) tids.push(tagged[i].title);
		else if (t) { // get tiddler list from content
			if (!t.linksUpdated) t.changed();
			for (var i=0; i<t.links.length; i++) {
				var tid=store.getTiddler(t.links[i]);
				if (tid && !tid.isTagged(this.excludeTag))
					tids.push(t.links[i]);
			}
		}
		var template=null;
		if (fold||co.chkStoryFold) template='CollapsedTemplate'; // see [[CollapseTiddlersPlugin]]
		if (!store.tiddlerExists('CollapsedTemplate')) template=null;
		if (co.chkStoryClose) story.closeAllTiddlers();
		var pos='top'; var first=tids[0];
		if (!story.isEmpty() && co.chkStoryBottom) { pos='bottom'; tids=tids.reverse(); }
		story.displayTiddlers(pos,tids,template);
		var cmd='var t=story.getTiddler("'+first+'");if(t)window.scrollTo(0,t.offsetTop);';
		var delay=config.options.chkAnimate?config.animDuration+100:0;
		setTimeout(cmd,delay);
	},
	createButton: function(place,params) {
		var tid=params[0]||'';
		var label=params[1]||this.label; label=label.format([tid]);
		var tip=params[2]||this.prompt; tip=tip.format([tid]);
		var fold=(params[3]&&(params[3].toLowerCase()=='fold'))||config.options.chkStoryFold;
		var fn=function(){config.macros.openStory.showStory(this.getAttribute('tid'),this.getAttribute('fold')); return false; };
		var btn=createTiddlyButton(place,label,tip,fn,'button');
		btn.setAttribute('tid',tid);
		if (fold) btn.setAttribute('fold',fold);
	},
	createPopup: function(place,params) {
		params.shift(); // discard 'popup' keyword
		var label=params.shift()||this.popuplabel;
		var tip=params.shift()||this.popupprompt;
		var btn=createTiddlyButton(place,label,tip,this.showPopup,'button');
		btn.setAttribute('filter',params.shift()||config.macros.openStory.tag);
	},
	showPopup: function(ev) { var e=ev||window.event;
		var co=config.options; // abbrev
		var cmo=config.macros.openStory; // abbrev
		var indent='\xa0\xa0';
		var p=Popup.create(this); if (!p) return false;
		createTiddlyText(createTiddlyElement(p,'li'),cmo.selectprompt);
		var stories=store.filterTiddlers('[tag['+this.getAttribute('filter')+']]');
		for (var s=0; s<stories.length; s++) {
			var label=indent+stories[s].title;
			var tip=cmo.prompt.format([stories[s].title]);
			var fn=function(){config.macros.openStory.showStory(this.getAttribute('tid'));return false;};
			var btn=createTiddlyButton(createTiddlyElement(p,'li'),label,tip,fn,'button');
			btn.setAttribute('tid',stories[s].title);
		}
		createTiddlyText(createTiddlyElement(p,'li'),cmo.optionsprompt);
		if (store.tiddlerExists('CollapsedTemplate')) {
			var label=indent+cmo.foldcmd.format([co.chkStoryFold?'x':'\xa0\xa0']);
			var tip=cmo.foldprompt;
			var fn=function(){ config.macros.option.propagateOption(
				'chkStoryFold','checked',!config.options.chkStoryFold,'input'); return false; };
			var btn=createTiddlyButton(createTiddlyElement(p,'li'),label,tip,fn,'button');
		}
		var label=indent+cmo.closecmd.format([co.chkStoryClose?'x':'\xa0\xa0']);
		var tip=indent+cmo.closeprompt;
		var fn=function(){ config.macros.option.propagateOption(
			'chkStoryClose','checked',!config.options.chkStoryClose,'input'); return false; };
		var btn=createTiddlyButton(createTiddlyElement(p,'li'),label,tip,fn,'button');
		if (!co.chkStoryClose) {
			var label=indent+cmo.topcmd.format([co.chkStoryTop?'x':'\xa0\xa0']);
			var tip=indent+cmo.topprompt;
			var fn=function(){
				config.macros.option.propagateOption(
					'chkStoryTop','checked',!config.options.chkStoryTop,'input');
				config.macros.option.propagateOption(
					'chkStoryBottom','checked',!config.options.chkStoryTop,'input');
				return false;
			};
			var btn=createTiddlyButton(createTiddlyElement(p,'li'),label,tip,fn,'button');
			var label=indent+cmo.bottomcmd.format([co.chkStoryBottom?'x':'\xa0\xa0']);
			var tip=indent+cmo.botprompt;
			var fn=function(){
				config.macros.option.propagateOption(
					'chkStoryBottom','checked',!config.options.chkStoryBottom,'input');
				config.macros.option.propagateOption(
					'chkStoryTop','checked',!config.options.chkStoryBottom,'input');
				return false;
			};
			var btn=createTiddlyButton(createTiddlyElement(p,'li'),label,tip,fn,'button');
		}
		if (!readOnly && co.chkStoryAllowAdd) {
			var label=cmo.addcmd;
			var tip=cmo.addprompt;
			var fn=config.macros.saveStory.setTiddler;
			createTiddlyElement(createTiddlyElement(p,'li'),'hr');
			var btn=createTiddlyButton(createTiddlyElement(p,'li'),label,tip,fn,'button');
		}
		Popup.show();
		e.cancelBubble=true;if(e.stopPropagation)e.stopPropagation();
		return false;
	},
	createList: function(place,params) {
		var cmo=config.macros.openStory; // abbrev
		var s=createTiddlyElement(place,'select',null,'storyListbox');
		s.size=1;
		s.onchange=function() {
			if (this.value=='_fold') {
				config.macros.option.propagateOption('chkStoryFold','checked',
					!config.options.chkStoryFold,'input');
				cmo.refreshList();
			} else if (this.value=='_close') {
				config.macros.option.propagateOption('chkStoryClose','checked',
					!config.options.chkStoryClose,'input');
				cmo.refreshList();
			} else if (this.value=='_top') {
				config.macros.option.propagateOption('chkStoryTop','checked',
					!config.options.chkStoryTop,'input');
				cmo.refreshList();
			} else if (this.value=='_bottom') {
				config.macros.option.propagateOption('chkStoryBottom','checked',
					!config.options.chkStoryBottom,'input');
				cmo.refreshList();
			} else if (this.value=='_add')
				config.macros.saveStory.setTiddler.apply(this,arguments);
			else cmo.showStory(this.value);
		}
		params.shift(); // discard 'list' keyword
		s.setAttribute('filter',params.shift()||cmo.tag);
		setStylesheet('.storyListbox { width:100%; }', 'StorySaverStyles');
		store.addNotification(null,this.refreshList); this.refreshList();
		return;
	},
	refreshList: function() {
		var cmo=config.macros.openStory; // abbrev
		var indent='\xa0\xa0\xa0\xa0';
		var lists=document.getElementsByTagName('select');
		for (var i=0; i<lists.length; i++) { if (lists[i].className!='storyListbox') continue;
			var here=lists[i];
			var stories=store.filterTiddlers('[tag['+here.getAttribute('filter')+']]');
			while (here.length) here.options[0]=null; // remove current list items
			here.options[here.length]=new Option(cmo.selectprompt,'',true,true);
			for (var s=0; s<stories.length; s++)
				here.options[here.length]=new Option(indent+stories[s].title,stories[s].title);
			if (!readOnly && config.options.chkStoryAllowAdd)
				here.options[here.length]=new Option(cmo.addcmd,'_add');
			here.options[here.length]=new Option(cmo.optionsprompt,'');
			if (store.tiddlerExists('CollapsedTemplate')) {
				var msg=cmo.foldcmd.format([config.options.chkStoryFold?'x':'\xa0\xa0']);
				here.options[here.length]=new Option(indent+msg,'_fold');
			}
			var msg=cmo.closecmd.format([config.options.chkStoryClose?'x':'\xa0\xa0']);
			here.options[here.length]=new Option(indent+msg,'_close',false,false);
			if (!config.options.chkStoryClose) {
				var msg=cmo.topcmd.format([config.options.chkStoryTop?'x':'\xa0\xa0']);
				here.options[here.length]=new Option(indent+msg,'_top',false,false);
				var msg=cmo.bottomcmd.format([config.options.chkStoryBottom?'x':'\xa0\xa0']);
				here.options[here.length]=new Option(indent+msg,'_bottom',false,false);
			}
		}
	}
}
//}}}
span.fieldHeader {font-weight: bold}
.tagged {float:right; clear:both;}
.tagging {float: right;}
#mainMenu { text-align: left;}
/*{{{*/
@media print {
#mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton, #backstageArea, .header, .tagged {display: none !important;}
#displayArea {margin: 1em 1em 0em;}
noscript {display:none;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */
}
/*}}}*/
/***
|Name|TiddlerTweakerPlugin|
|Source|http://www.TiddlyTools.com/#TiddlerTweakerPlugin|
|Version|2.4.5|
|Author|Eric Shulman|
|License|http://www.TiddlyTools.com/#LegalStatements|
|~CoreVersion|2.1|
|Type|plugin|
|Description|select multiple tiddlers and modify author, created, modified and/or tag values|
~TiddlerTweaker is a 'power tool' for TiddlyWiki authors.  Select multiple tiddlers from a listbox and 'bulk modify' the creator, author, created, modified and/or tag values of those tiddlers using a compact set of form fields.  The values you enter into the fields simultaneously overwrite the existing values in all tiddlers you have selected.
!!!!!Usage
<<<
{{{<<tiddlerTweaker>>}}}
{{smallform{<<tiddlerTweaker>>}}}
By default, any tags you enter into the TiddlerTweaker will //replace// the existing tags in all the tiddlers you have selected.  However, you can also use TiddlerTweaker to quickly filter specified tags from the selected tiddlers, while leaving any other tags assigned to those tiddlers unchanged:
>Any tag preceded by a '+' (plus) or '-' (minus), will be added or removed from the existing tags //instead of replacing the entire tag definition// of each tiddler (e.g., enter '-excludeLists' to remove that tag from all selected tiddlers.  When using this syntax, care should be taken to ensure that //every// tag is preceded by '+' or '-', to avoid inadvertently overwriting any other existing tags on the selected tiddlers.  (note: the '+' or '-' prefix on each tag value is NOT part of the tag value, and is only used by TiddlerTweaker to control how that tag value is processed)
Important Notes:
* TiddlerTweaker is a 'power user' tool that can make changes to many tiddlers at once.  ''You should always have a recent backup of your document (or 'save changes' just *before* tweaking the tiddlers), just in case you accidentally 'shoot yourself in the foot'.''
* The date and author information on any tiddlers you tweak will ONLY be updated if the corresponding checkboxes have been selected.  As a general rule, after using TiddlerTweaker, always ''//remember to save your document//'' when you are done, even though the tiddler timeline tab may not show any recently modified tiddlers.
* Selecting and updating all tiddlers in a document can take a while.  Your browser may warn about an 'unresponsive script'.  Usually, if you allow it to continue, it should complete the processing... eventually.  Nonetheless, be sure to save your work before you begin tweaking lots of tiddlers, just in case something does get stuck.
<<<
!!!!!Revisions
<<<
2011.01.21 2.4.5 auto-selection: use "-" for untagged tiddlers.  Also, added 'opened', 'invert'
2009.09.15 2.4.4 added 'edit' button. moved html definition to separate section
2009.09.13 2.4.3 in settiddlers(), convert backslashed chars (\n\b\s\t) in replacement text
2009.06.26 2.4.2 only add brackets around tags containing spaces
2009.06.22 2.4.1 in setFields(), add brackets around all tags shown tweaker edit field
2009.03.30 2.4.0 added 'sort by modifier'
2009.01.22 2.3.0 added support for text pattern find/replace
2008.10.27 2.2.3 in setTiddlers(), fixed Safari bug by replacing static Array.concat(...) with new Array().concat(...)
2008.09.07 2.2.2 added removeCookie() function for compatibility with [[CookieManagerPlugin]]
2008.05.12 2.2.1 replace built-in backstage tweak task with tiddler tweaker control panel (moved from BackstageTweaks)
2008.01.13 2.2.0 added 'auto-selection' links: all, changed, tags, title, text
2007.12.26 2.1.0 added support for managing 'creator' custom field (see [[CoreTweaks]])
2007.11.01 2.0.3 added config.options.txtTweakerSortBy for cookie-based persistence of list display order preference setting.
2007.09.28 2.0.2 in settiddlers() and deltiddlers(), added suspend/resume notification handling (improves performance when operating on multiple tiddlers)
2007.08.03 2.0.1 added shadow definition for [[TiddlerTweaker]] tiddler for use as parameter references with {{{<<tiddler>>, <<slider>> or <<tabs>>}}} macros.
2007.08.03 2.0.0 converted from inline script
2006.01.01 1.0.0 initial release
<<<
!!!!!Code
***/
//{{{
version.extensions.TiddlerTweakerPlugin= {major: 2, minor: 4, revision: 5, date: new Date(2011,1,21)};

// shadow tiddler
config.shadowTiddlers.TiddlerTweaker='<<tiddlerTweaker>>';

// defaults
if (config.options.txtTweakerSortBy==undefined) config.options.txtTweakerSortBy='modified';

// backstage task
if (config.tasks) { // for TW2.2b3 or above
	config.tasks.tweak.tooltip='review/modify tiddler internals: dates, authors, tags, etc.';
	config.tasks.tweak.content='{{smallform small groupbox{<<tiddlerTweaker>>}}}';
}

// if removeCookie() function is not defined by TW core, define it here.
if (window.removeCookie===undefined) {
	window.removeCookie=function(name) {
		document.cookie = name+'=; expires=Thu, 01-Jan-1970 00:00:01 UTC; path=/;'; 
	}
}

config.macros.tiddlerTweaker = {
	handler: function(place,macroName,params,wikifier,paramString,tiddler) {
		var span=createTiddlyElement(place,'span');
		span.innerHTML=store.getTiddlerText('TiddlerTweakerPlugin##html');
		this.init(span.getElementsByTagName('form')[0],config.options.txtTweakerSortBy);
	},
	init: function(f,sortby) { // set form controls
		if (!f) return; // form might not be rendered yet...
		while (f.list.options[0]) f.list.options[0]=null; // empty the list
		var tids=store.getTiddlers(sortby);
		if (sortby=='size') // descending order
			tids.sort(function(a,b) {return a.text.length > b.text.length ? -1 : (a.text.length == b.text.length ? 0 : +1);});
		var who='';
		for (i=0; i<tids.length; i++) { var t=tids[i];
			var label=t.title; var value=t.title;
			switch (sortby) {
				case 'modified':
				case 'created':
					var t=tids[tids.length-i-1]; // reverse order
					var when=t[sortby].formatString('YY.0MM.0DD 0hh:0mm ');
					label=when+t.title;
					value=t.title;
					break;
				case 'size':
					label='['+t.text.length+'] '+label;
					break;
				case 'modifier':
				case 'creator':
					if (who!=t[sortby]) {
						who=t[sortby];
						f.list.options[f.list.length]=new Option('by '+who+':','',false,false);
					}
					label='\xa0\xa0\xa0'+label; // indent
					break;
			}
			f.list.options[f.list.length]=new Option(label,value,false,false);
		}
		f.title.value=f.who.value=f.creator.value=f.tags.value='';
		f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
		f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
		f.stats.disabled=f.set.disabled=f.del.disabled=f.edit.disabled=f.display.disabled=true;
		f.settitle.disabled=false;
		config.options.txtTweakerSortBy=sortby;
		f.sortby.value=sortby; // sync droplist
		if (sortby!='modified') saveOptionCookie('txtTweakerSortBy');
		else removeCookie('txtTweakerSortBy');
	},
	enablefields: function(here) { // enables/disables inputs based on #items selected
		var f=here.form; var list=f.list;
		var c=0; for (i=0;i<list.length;i++) if (list.options[i].selected) c++;
		if (c>1) f.title.disabled=true;
		if (c>1) f.settitle.checked=false;
		f.set.disabled=(c==0);
		f.del.disabled=(c==0);
		f.edit.disabled=(c==0);
		f.display.disabled=(c==0);
		f.settitle.disabled=(c>1);
		f.stats.disabled=(c==0);
		var msg=(c==0)?'select tiddlers':(c+' tiddler'+(c!=1?'s':'')+' selected');
		here.previousSibling.firstChild.firstChild.nextSibling.innerHTML=msg;
		if (c) clearMessage(); else displayMessage('no tiddlers selected');
	},
	setfields: function(here) { // set fields from first selected tiddler
		var f=here.form;
		if (!here.value.length) {
			f.title.value=f.who.value=f.creator.value=f.tags.value='';
			f.cm.value=f.cd.value=f.cy.value=f.ch.value=f.cn.value='';
			f.mm.value=f.md.value=f.my.value=f.mh.value=f.mn.value='';
			return;
		}
		var tid=store.getTiddler(here.value); if (!tid) return;
		f.title.value=tid.title;
		f.who.value=tid.modifier;
		f.creator.value=tid.fields['creator']||''; // custom field - might not exist
		f.tags.value=tid.tags.map(function(t){return String.encodeTiddlyLink(t)}).join(' ');
		var c=tid.created; var m=tid.modified;
		f.cm.value=c.getMonth()+1;
		f.cd.value=c.getDate();
		f.cy.value=c.getFullYear();
		f.ch.value=c.getHours();
		f.cn.value=c.getMinutes();
		f.mm.value=m.getMonth()+1;
		f.md.value=m.getDate();
		f.my.value=m.getFullYear();
		f.mh.value=m.getHours();
		f.mn.value=m.getMinutes();
	},
	selecttiddlers: function(here,callback) {
		var f=here; while (f&&f.nodeName.toLowerCase()!='form')f=f.parentNode;
		for (var t=f.list.options.length-1; t>=0; t--)
			f.list.options[t].selected=callback(f.list.options[t]);
		config.macros.tiddlerTweaker.enablefields(f.list);
		return false;
	},
	settiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		var cdate=new Date(f.cy.value,f.cm.value-1,f.cd.value,f.ch.value,f.cn.value);
		var mdate=new Date(f.my.value,f.mm.value-1,f.md.value,f.mh.value,f.mn.value);
		if (tids.length>1 && !confirm('Are you sure you want to update these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			var title=!f.settitle.checked?tid.title:f.title.value;
			var who=!f.setwho.checked?tid.modifier:f.who.value;
			var text=tid.text;
			if (f.replacetext.checked) {
				var r=f.replacement.value.replace(/\\t/mg,'\t').unescapeLineBreaks();
				text=text.replace(new RegExp(f.pattern.value,'mg'),r);
			}				
			var tags=tid.tags;
			if (f.settags.checked) { 
				var intags=f.tags.value.readBracketedList();
				var addtags=[]; var deltags=[]; var reptags=[];
				for (i=0;i<intags.length;i++) {
					if (intags[i].substr(0,1)=='+')
						addtags.push(intags[i].substr(1));
					else if (intags[i].substr(0,1)=='-')
						deltags.push(intags[i].substr(1));
					else
						reptags.push(intags[i]);
				}
				if (reptags.length)
					tags=reptags;
				if (addtags.length)
					tags=new Array().concat(tags,addtags);
				if (deltags.length)
					for (i=0;i<deltags.length;i++)
						{ var pos=tags.indexOf(deltags[i]); if (pos!=-1) tags.splice(pos,1); }
			}
			if (!f.setcdate.checked) cdate=tid.created;
			if (!f.setmdate.checked) mdate=tid.modified;
			store.saveTiddler(tid.title,title,text,who,mdate,tags,tid.fields);
			if (f.setcreator.checked) store.setValue(tid.title,'creator',f.creator.value); // set creator
			if (f.setcdate.checked) tid.assign(null,null,null,null,null,cdate); // set create date
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	displaytiddlers: function(here,edit) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0; i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		story.displayTiddlers(story.findContainingTiddler(f),tids,edit?DEFAULT_EDIT_TEMPLATE:null);
	},
	deltiddlers: function(here) {
		var f=here.form; var list=f.list;
		var tids=[];
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		if (!confirm('Are you sure you want to delete these tiddlers:\n\n'+tids.join(', '))) return;
		store.suspendNotifications();
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			if (tid.tags.contains('systemConfig')) {
				var msg=tid.title+' is tagged with systemConfig.'
					+'\n\nRemoving this tiddler may cause unexpected results.  Are you sure?';
				if (!confirm(msg)) continue;
			}
			store.removeTiddler(tid.title);
			story.closeTiddler(tid.title);
		}
		store.resumeNotifications();
		this.init(f,f.sortby.value);
	},
	stats: function(here) {
		var f=here.form; var list=f.list; var tids=[]; var out=''; var tot=0;
		var target=f.nextSibling;
		for (i=0;i<list.length;i++) if (list.options[i].selected) tids.push(list.options[i].value);
		if (!tids.length) { alert('please select at least one tiddler'); return; }
		for (t=0;t<tids.length;t++) {
			var tid=store.getTiddler(tids[t]); if (!tid) continue;
			out+='[['+tid.title+']] '+tid.text.length+'\n'; tot+=tid.text.length;
		}
		var avg=tot/tids.length;
		out=tot+' bytes in '+tids.length+' selected tiddlers ('+avg+' bytes/tiddler)\n<<<\n'+out+'<<<\n';
		removeChildren(target);
		target.innerHTML="<hr><font size=-2><a href='javascript:;' style='float:right' "
			+"onclick='this.parentNode.parentNode.style.display=\"none\"'>close</a></font>";
		wikify(out,target);
		target.style.display='block';
	}
};
//}}}
/***
//{{{
!html
<style>
.tiddlerTweaker table,
.tiddlerTweaker table tr,
.tiddlerTweaker table td
	{ padding:0;margin:0;border:0;white-space:nowrap; }
</style><form class='tiddlerTweaker'><!--
--><table style="width:100%"><tr valign="top"><!--
--><td style="text-align:center;width:99%;"><!--
	--><font size=-2><div style="text-align:left;"><span style="float:right"><!--
	-->&nbsp; <a href="javascript:;" 
		title="select all tiddlers"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return opt.value.length;
		});">all</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers currently displayed in the story column"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return story.getTiddler(opt.value);
		});">opened</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers that are new/changed since the last file save"
		onclick="var lastmod=new Date(document.lastModified);
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tid.modified>lastmod;
			});
		">changed</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers with at least one matching tag"
		onclick="var t=prompt('Enter space-separated tags (match one or more).  Use \x22-\x22 to match untagged tiddlers');
			if (!t||!t.length) return false;
			var tags=t.readBracketedList();
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tid=store.getTiddler(opt.value);
				return tid&&tags[0]=='-'?!tid.tags.length:tid.tags.containsAny(tags);
			});
		">tags</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers whose titles include matching text"
		onclick="var t=prompt('Enter a title (or portion of a title) to match');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				return opt.value.indexOf(t)!=-1;
			});
		">titles</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="select tiddlers containing matching text"
		onclick="var t=prompt('Enter tiddler text (content) to match');
			if (!t||!t.length) return false;
			return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
				var tt=store.getTiddlerText(opt.value,'');
				return tt.indexOf(t)!=-1;
			});
		">text</a><!--
	-->&nbsp; <a href="javascript:;" 
		title="reverse selection of all list items"
		onclick="return config.macros.tiddlerTweaker.selecttiddlers(this,function(opt){
			return !opt.selected;
		});">invert</a><!--
	--></span><span>select tiddlers</span><!--
	--></div><!--
	--></font><select multiple name=list size="11" style="width:99.99%" 
		title="use click, shift-click and/or ctrl-click to select multiple tiddler titles" 
		onclick="config.macros.tiddlerTweaker.enablefields(this)" 
		onchange="config.macros.tiddlerTweaker.setfields(this)"><!--
	--></select><br><!--
	-->show<input type=text size=1 value="11" 
		onchange="this.form.list.size=this.value; this.form.list.multiple=(this.value>1);"><!--
	-->by<!--
	--><select name=sortby size=1 
		onchange="config.macros.tiddlerTweaker.init(this.form,this.value)"><!--
	--><option value="title">title</option><!--
	--><option value="size">size</option><!--
	--><option value="modified">modified</option><!--
	--><option value="created">created</option><!--
	--><option value="modifier">modifier</option><!--
	--></select><!--
	--><input type="button" value="refresh" 
		onclick="config.macros.tiddlerTweaker.init(this.form,this.form.sortby.value)"<!--
	--> <input type="button" name="stats" disabled value="totals..." 
		onclick="config.macros.tiddlerTweaker.stats(this)"><!--
--></td><td style="width:1%"><!--
	--><div style="text-align:left"><font size=-2>&nbsp;modify values</font></div><!--
	--><table style="width:100%;"><tr><!--
	--><td style="padding:1px"><!--
		--><input type=checkbox name=settitle unchecked 
			title="allow changes to tiddler title (rename tiddler)" 
			onclick="this.form.title.disabled=!this.checked">title<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=title size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcreator unchecked 
			title="allow changes to tiddler creator" 
			onclick="this.form.creator.disabled=!this.checked">created by<!--
	--></td><td style="padding:1px;"><!--
		--><input type=text name=creator size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setwho unchecked 
			title="allow changes to tiddler author" 
			onclick="this.form.who.disabled=!this.checked">modified by<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=who size=35 style="width:98%" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setcdate unchecked 
			title="allow changes to created date" 
			onclick="var f=this.form;
				f.cm.disabled=f.cd.disabled=f.cy.disabled=f.ch.disabled=f.cn.disabled=!this.checked"><!--
		-->created on<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=cm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cd size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=cy size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> at <input type=text name=ch size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=cn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=setmdate unchecked 
			title="allow changes to modified date" 
			onclick="var f=this.form;
				f.mm.disabled=f.md.disabled=f.my.disabled=f.mh.disabled=f.mn.disabled=!this.checked"><!--
		-->modified on<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=mm size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=md size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> / <input type=text name=my size=4 style="width:3em;padding:0;text-align:center" disabled><!--
		--> at <input type=text name=mh size=2 style="width:2em;padding:0;text-align:center" disabled><!--
		--> : <input type=text name=mn size=2 style="width:2em;padding:0;text-align:center" disabled><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=replacetext unchecked
			title="find/replace matching text" 
			onclick="this.form.pattern.disabled=this.form.replacement.disabled=!this.checked">replace text<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=pattern size=15 value="" style="width:40%" disabled 
			title="enter TEXT PATTERN (regular expression)"> with<!--
		--><input type=text name=replacement size=15 value="" style="width:40%" disabled 
			title="enter REPLACEMENT TEXT"><!--
	--></td></tr><tr><td style="padding:1px"><!--
		--><input type=checkbox name=settags checked 
			title="allow changes to tiddler tags" 
			onclick="this.form.tags.disabled=!this.checked">tags<!--
	--></td><td style="padding:1px"><!--
		--><input type=text name=tags size=35 value="" style="width:98%" 
			title="enter new tags or use '+tag' and '-tag' to add/remove tags from existing tags"><!--
	--></td></tr></table><!--
	--><div style="text-align:center"><!--
	--><nobr><input type=button name=display disabled style="width:24%" value="display" 
		title="show selected tiddlers"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,false)"><!--
	--> <input type=button name=edit disabled style="width:23%" value="edit" 
		title="edit selected tiddlers"
		onclick="config.macros.tiddlerTweaker.displaytiddlers(this,true)"><!--
	--> <input type=button name=del disabled style="width:24%" value="delete" 
		title="remove selected tiddlers"
		onclick="config.macros.tiddlerTweaker.deltiddlers(this)"><!--
	--> <input type=button name=set disabled style="width:24%" value="update" 
		title="update selected tiddlers"
		onclick="config.macros.tiddlerTweaker.settiddlers(this)"></nobr><!--
	--></div><!--
--></td></tr></table><!--
--></form><span style="display:none"><!--content replaced by tiddler "stats"--></span>
!end
//}}}
***/
 
|~ViewToolbar|closeTiddler closeOthers editTiddler > fields syncing permalink references jump|
|~EditToolbar|+saveTiddler -cancelTiddler deleteTiddler|
<!--{{{-->
<div class='toolbar' macro='toolbar [[ToolbarCommands::ViewToolbar]]'></div>
<div class='title' macro='view title'></div>
<div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div>
<div class='tagging' macro='tagging'></div>
<div class='tagged' macro='tags'></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Summary</span>: <span macro='view summary wikified'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Description</span>: <span macro='view description'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Date</span>: <span macro='view datesubmitted'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Status</span>: <span macro='view status'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Priority</span>: <span macro='view priority'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Severity</span>: <span macro='view severity'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Category</span>: <span macro='view category'></span></div>
<div macro="showWhenTagged bug"><span class="fieldHeader">Type</span>: <span macro='view type'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">File</span>: <span macro='view file wikified'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Revision</span>: <span macro='view revision wikified'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Message</span>: <span macro='view message'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Date</span>: <span macro='view date'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Origin Class</span>: <span macro='view originclass'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">TA</span>: <span macro='view taresult'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">TA Class</span>: <span macro='view ta'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">DA</span>: <span macro='view daresult'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">DA Class</span>: <span macro='view da'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">DA+ Class</span>: <span macro='view daplus'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Origin</span>: <span macro='view origin wikified'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Born</span>: <span macro='view born'></span></div>
<div macro="showWhenTagged commit"><span class="fieldHeader">Age</span>: <span macro='view age'></span></div>
<div macro="showWhenTagged ta-Superset"><span class="fieldHeader">Most Frequent</span>: <span macro='view frequent'></span></div>
<div macro="showWhenTagged ta-Superset"><span class="fieldHeader">Most Recent</span>: <span macro='view recent'></span></div>
<div class='viewer' macro='view text wikified'></div>
<div class='tagClear'></div>
<!--}}}-->