History log of /sdk/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/uimodel/UiElementNode.java
Revision Date Author Comments
1fb460987f7d832adf12290f41448d0c16a95972 20-Sep-2012 Siva Velusamy <vsiva@google.com> Move some utility functions from AdtUtils to common

Change-Id: Ia6f5c55e07c7f60712472c8e850b7c4595c46671
12d4581faa6438941e65a9dc83213be34c6ca970 13-Sep-2012 Tor Norbye <tnorbye@google.com> Constants refactoring.

This changeset moves most constants into the SdkConstants
class, and gets rid of AndroidConstants and LintConstants.
It also migrates all non-ADT specific constants from
AdtConstants into SdkConstants. It furthermore moves various
other constants (such as those in XmlUtils and ValuesDescriptors)
into the constants class. It also fixes the modifier order
to be the canonical modifier order (JLS 8.x).

Finally, it removes redundancy and combines various constant
aliases such that we don't have both NAME_ATTR and ATTR_NAME
pointing to "name", etc.

Change-Id: Ifd1755016f62ce2dd80e5c76130d6de4b0e32161
81cefe2a26dd6db8a878e30874d12cdcbff0e83b 11-Aug-2012 Xavier Ducrohet <xav@android.com> More refactoring.

Move stuff out of sdklib into common and ide_common.
Remove androidprefs and move the one class into common.

Change-Id: I71d126a13cf2ba413692e29616f4968a37d7b33a
85e4a1a9dd133abb879ec211ce8dd385004edf22 08-Aug-2012 Xavier Ducrohet <xav@android.com> Refactor common.jar

Move resources and com.android.util.Pair into layoutlib_api
where they belong since layoutlib depends on them and we need
to control the API.

Made a copy of Pair to stay in common.jar but moved it to
com.android.utils.Pair (the one in com.android.util.Pair is
marked as deprecated to prevent usage where applicable).

Also moved XmlUtil and PositionXmlParser to com.android.utils
to match Pair.

Change-Id: I21d7057d3f2ce604f86a3bb1fa3c130948c93b89
a881b0b34678ad76c9f5eba62fac7a00a22ac606 20-May-2012 Tor Norbye <tnorbye@google.com> Move XML code to the common library

The ManifestMerger library needs to look up the prefix to use for the
Android namespace, and the Document.lookupPrefix method is not
implemented by the Eclipse DOM implementation (which throws an
exception). However, we have an implementation of this in the ADT
plugin.

This changeset creates a new XmlUtils class in the common/ library
(which is accessible by both ADT and the manifest merger, and the
anttasks where the manifest merger is used), and moves the namespace
prefix lookup code in there. It also moves the XML escape methods
into that class. It also adds a new method to the ManifestMerger for
merging directly from documents (rather than files), and makes sure
that all the merging code goes via the prefix utility method rather
than calling the document.lookupPrefix method.

Finally, it moves the various string constants associated with XML
namespaces into the single XmlUtils class, since these were spread
across several different classes before (and many of them are needed
in the XmlUtils class).

The vast majority of the diffs in this changeset are related to simple
import statement changes to reflect the new locations of these
constants.

Change-Id: Ib8f3d0e5c89e47e61ea509a23925af7b6580abee
6681db8624e514030730e3c52192330aec5279a9 10-May-2012 Tor Norbye <tnorbye@google.com> Fix issue 30529: Ensure that XML editor uses platform line separators

Change-Id: I5c4fa6273ce14f4682e9e7fa9a8fbe9f8cdc8d46
57f1244facb6c3de1fe8011ab66cdc3dd9ce0b61 26-Apr-2012 Tor Norbye <tnorbye@google.com> Make XML code completion work for custom views & attributes

This changeset improves the custom view handling such that XML code
completion offers any custom attributes (along with documentation
tooltips and type information). This is done by finding any
declare-styleable attributes defined in the project defining the
custom view. In particular, this will also work for the GridLayout
library project shipped as part of the android.support package.

The fix is not tied to completion; it's improving the metadata
descriptors computed for custom views, so this fix for example also
makes these custom attributes show up in the property sheet in the
layout editor.

Finally, this changeset fixes a couple of bugs in this area:
- One initialization path was not looking up custom views for unknown
descriptors, this might be the fix for
http://code.google.com/p/android/issues/detail?id=23020
- There was a bug in the code which looks up the namespace prefix to
use for a given namespace URI: it would return the default Android
prefix for some non-Android URIs.
- Small performance tweak to avoid regexp construction in a loop where
it's not needed

Change-Id: I55dfcea6e6ea9d7c38e18a47b757678176facbd2
9bd06947302ca6ca3e0b90eef894e553c6c3e067 05-Apr-2012 Tor Norbye <tnorbye@google.com> Add support for the WindowBuilder Property Sheet

This reverts commit 27dac06bfc4297dc9a018edc534f44ecf96cd724.

Change-Id: I6708bd4091f0cb677484669479357d479b9db5fa
27dac06bfc4297dc9a018edc534f44ecf96cd724 03-Apr-2012 Tor Norbye <tnorbye@google.com> Revert "Add support for the WindowBuilder Property Sheet"

This reverts commit a7621238bf0202419677380ee3a268142358df83.
a7621238bf0202419677380ee3a268142358df83 20-Mar-2012 Tor Norbye <tnorbye@google.com> Add support for the WindowBuilder Property Sheet

The WindowBuilder propertysheet has been extracted and added as a
library in external/eclipse-windowbuilder/.

This changeset removes the old propertysheet code (which used the
builtin Eclipse property sheet page), and replaces it with the
WindowBuilder one, along with new code to aggregate the properties
into some categories, as well as tagging some of the properties as
advanced. (This was computed by running the same analysis scripts used
to produce the most-frequent attributes (sdk/attribute_stats) and
instead computing which attributes are used very infrequently or not
at all in some representative sample code.)

The WindowBuilder propertysheet gives us the following new features:
- Highlighting (bold) of important attributes
- Masking (and when included, shown in gray italic) of advanced
attributes
- "Complex" attributes with nesting, used to for example aggregate all
the layout parameters into a single node, and the margin layout
attributes within those
- Tooltips over the attribute names, not values, so they never obscure
content

In addition, this changeset adds custom implementations of properties,
property editors and property dialogs for the core Android property
types (XML strings, flags and booleans), which adds the following new
features:

- Preview rendering of color and image resources inline

- Display of -default- attributes (those not specified in XML) using
the layoutlib facility getDefaultProperties() to render the implied
attributes. For example, if you look at a Button, it will show you
that the implied value of "Text Color Link" is
"@android:color/holo_blue_light" even though it is not set.

NOTE: This only happens for attributes that were actually queried by
the widget during rendering. Attributes that are not used by the
widget have no (displayed) value. Thus, EditText-specific attributes
in a TextView are not shown when a non-EditText TextView is
selected.

- Evaluation of the attributes. In the above example, in addition to
showing @android:color/holo_blue_light, it will chase down the value
of this to for example render a blue square next to the value. For
drawables it will render a thumbnail, and for String resources it
will display the actual value in parentheses.

- Field completion in text fields, completing all resource strings
(@string, @android:string, etc), as well as flag values. Enum values
are chosen in a dropdown.

- Checkbox support for boolean values, allowing you to click through
the three values true, false and null.

- Our custom version of the Property Sheet Page allows you to
expand/collapse all properties, and it also has an option letting
you switch between Alphabetical Sort (where all attributes are in a
flat table, sorted alphabetically by property value), or
hierarchical sorted "by category". Currently the categories are
simply the defining views, plus 2 more (layout parameters and
deprecated attributes). When we get more metadata, it would be nice
to switch these to more logical categories, such as "text",
"scrolling", "focus", etc. (There is some preliminary support for
this in the code, but since the defining-view categories seem to
work better those are used instead right now.)

Change-Id: Ie4959a3a2c36c083dcc1ba19a70f24b33739fe2f
61684adfd7345f1a0df24bcf9176e6f528295bbb 22-Mar-2012 Tor Norbye <tnorbye@google.com> Change AttributeInfo.getFormats() to returning an EnumSet<Format>

This changeset changes the signature of AttributeInfo.getFormats()
from returning a Format[] to returning an EnumSet<Format>.
Furthermore, it defines a number of constants for the various common
format sets such that they can be reused.

Nearly all uses of the getFormats() method was really just trying to
see "is format X among the formats", so using enumsets is more natural
since it has a contains method. This also lets us replace some
attribute init code which was building up a set from the array for
this exact same purpose just reuse the format set directly.

In the attribute parser, rather than computing the uppercase version
of each format string ("dimension"=>"DIMENSION") and then doing a
Format.valueOf("DIMENSION"), we now compute a map for all the format
constants as lowercase to the corresponding format instance, and use
that map when parsing the attrs.xml file.

Note that there is a small semantic change from having an array of
formats to using an enumset: The format specified an
ordering. However, it does not look like any code depended on this,
and it's also not clear that the ordering in attrs.xml is
intentional. For example, it contains both "color|reference" and
"reference|color", and in both cases the intent is that the attribute
can specify an actual color or a reference to a color. Now with an
enum set, the order used when traversing the formats will always be in
their natural order, and for this purpose the REFERENCE type is moved
to the end since it's the least specific.

Change-Id: I1170cff48086f5cc13e4b70a35deea1f9979c883
6b09013b6cb0fdcb48350a60bb3ed924ac9f562d 22-Mar-2012 Tor Norbye <tnorbye@google.com> Speed up Android Target Data loading

This changeset optimizes the handling of AttributeDescriptors during
the SDK target loading phase. From some simple benchmarks, this
speeds up target loading about 40%. (On an low-load machine, loading
two targets took on average 9.11s with standard deviation 1.86 for 13
runs; after the fix the same target loading took on average 6.359s
with standard deviation 0.944s for 17 runs -- so the speedup is 1.43).

The most important fix is to make the computation of the tooltip text
and the UI name (which performs various lowercase to uppercase
conversions, in some cases involving regular expressions, and many
string concatentations) be evaluated lazily. This is a big win since
most attributes never have their UI names or tooltips displayed, and
when they are, usually just a small number.

Since tooltips and UI names are now computed lazily from the
AttributeInfo, the constructor for the TextAttributeDescriptor and its
subclasses no longer take a UI name or tooltip; instead, there is an
explicit setter for the cases where you have a specific tooltip you
want to hardcode (as with the builtin descriptors such as the ones for
drawables).

The actual formatting method for UI names was also optimized a bit,
such as avoiding regexp replacements except for cases where they are
likely needed, preallocating a larger character buffer, etc.

Change-Id: I7004e403fcf696e18bd89a29c6cfd27b61c1e9f8
3e75d4f79a8328ed18505830c786402369082efa 06-Mar-2012 Tor Norbye <tnorbye@google.com> Make GridLayout support work with the support library

Also fix the paste operation to target the parent if
the paste target does not accept children.

Change-Id: Id084db376e5ff9b4a374e6d2145bc890a925a078
69067f399231dc28f4ff0aa02b60153ffd2d5831 06-Feb-2012 Tor Norbye <tnorbye@google.com> Add support for suppressing lint via XML attributes

This changeset adds support for suppressing in XML files:

(1) Lint will ignore errors found in attributes and elements if the
element (or any surrounding parent elements) specifies a
tools:ignore="id-list" attribute where the id-list matches the id
of the reported issue (or "all"). The "tools" prefix can be any
prefix bound to the namespace "http://schemas.android.com/tools"

(2) There's a new quickfix shown for XML lint warnings which offers to
add a lint suppress attribute for a given lint warning (setting
the id to the id of the warning, and adding the tools namespace
binding if necessary).

(3) The XML formatter now handles namespaces a bit better: after the
preferred attributes (id, name, style, layout params, etc) have
been handled, attributes are sorted by namespace prefix before
they are sorted by local name -- which effectively will sort any
new tools:ignore attributes to the end.

Change-Id: Id7474cde5665d9bd29bdd4e0d0cc89ed4d422aea
bc083393e77f8139a436683644065e396646d671 21-Jan-2012 Raphael <raphael@google.com> ADT: Refactor editors.xml and editors.resources.

This renames:
- xml.XmlEditor to otherxml.OtherXmlEditor,
- resources.ResourcesEditor to values.ValuesEditor

The change to rename Resources to Values matches
the folder name being /res/values.

That's just a trivial refactoring with no logic change.

Change-Id: I68bfa760f254fbbd3f2d5e3801a5092308e92f7f
91069c28195ca0ed5e64f36714cf359f63743710 18-Jan-2012 Raphael <raphael@google.com> ADT: adjust default-editor id for existing legacy editors.

Note that this changes the "default editor" id associated
by a file but not actually close an existing editor (trying
to do so from the editor fails.) Also, unless the editor
is put in focus, it is not initialized and thus will not
change.

To compensate, when opening a project we'll visit all the
XML files from the /res folder and associate them to our
new editor ID.
On top of that, we'll try to find existing open editors
using a legacy id and close/reopen them using the new
common editor id. We only do that when upgrading a project
via fixEditorAssiociations, which means if the user then
manually forces a file to open using a legacy editor
by using the Open With > Other, it will keep using the
old editor id and we won't open/close it a second time.

Change-Id: Ia5f7e960515500a0ad07d401124578477ed70859
4c07263da057b6014342089097a3a4c6ebe993d2 10-Jan-2012 Raphael <raphael@google.com> ADT: single base class for XML editors.

This re-architecture the way the various XML editors are
handled by ADT.

Before, we had various classes all deriving from AndroidXmlEditor,
all listed in the plugin.xml as handled the "xml" extension. The
right one was set by AdtPlugin when monitoring changed resources.

The new structure is to have a single AndroidXmlCommonEditor.
This derives from AndroidXmlEditor right now, but in phase 2 will
merge them back in a single class.

Each XML editor implements an XmlEditDelegate. The
delegator iterates through the delegates to find the correct
one that can handle a given file and then uses it.

After this CL, we'll need a few extra passes:
- Understand what all editors delegates are doing
and merge it in the base class. There's currently a bit
of code duplicationg we could avoid.
- Change the ManifestEditor to the new structure.
- Change LayoutEditor to the new structure (already prepared
but in a different CL)

Change-Id: I6cb045a8fa39386fcc0ce854b45fa8580fae411e
18bce12c5916331971b2e8108f8485cc56b696d3 06-Jan-2012 Tor Norbye <tnorbye@google.com> Fix locale handling of uppercase/lowercase

This changeset fixes issue
23747: i and İ character problem in turkish operating Systems...
and probably many other bugs in the Turkish locale.

Basically, we had a lot of String.toLowerCase() and
String.toUpperCase() calls. This performs locale sensitive
conversions, which in many cases is NOT what we want; for "machine
readable" conversions we should be using Locale.US which performs no
special cases.

For more, see
http://developer.android.com/reference/java/util/Locale.html#default_locale

Change-Id: I996b0e70fb377e8dae484c5811deb8bc9afb684c
ab36f4e7488358dea4ab6b54ee2b7bef3da0232b 21-Dec-2011 Tor Norbye <tnorbye@google.com> Update SDK codebase to JDK 6

This changeset makes the SDK codebase compile with source=1.6 (which
means it also requires JDK 6). This means that methods implementing an
interface requires @Override's. It also means we can start using APIs
like the ArrayDeque class and methods like String#isEmpty().

This changeset looks big but the change is trivial: it's basically
adding @Override in all the places that need it, along with some other
automatic Eclipse cleanup in certain files (such as reordering imports
where they were incorrectly ordered (because older versions of Eclipse
didn't always handle inner classes right)), as well as cleaning up
trailing whitespace and removing some $NON-NLS-1$ markers on lines
where there aren't any string literals anymore.

This changeset also sets the source and target JDK level to 6 in the
Eclipse compiler .settings file, and synchronizes this file to all the
other Eclipse SDK projects.

Change-Id: I6a9585aa44c3dee9a5c00739ab22fbdbcb9f8275
556f4bc4717cad7d116d85fe41301bc57feec7eb 24-Nov-2011 Tor Norbye <tnorbye@google.com> Fix for custom view rendering with auto-format, revisited

This changeset revisits
http://code.google.com/p/android/issues/detail?id=21750
"Layout editor auto-formatting breaks rendering of custom views"

The bug described in the issue is that dragging custom views into the
canvas does not trigger a render until you save the file. My initial
bug fix noted that we actually would get *two* render requests, and
the second render was blank, so I fixed the model notifications such
that only a single notification (triggering a render) was sent.

However, collapsing the two changeModel calls into the DOM model
turned out to have some adverse effects when auto-format was enabled,
so I turned off auto-format until I could track the bug down.

In this changeset I'm turning it back on, and fixing the root cause
which made the custom view not appear: in the XML DOM to UI Model
sync, no descriptor was found for the custom view so the node simply
wasn't added to the model.

We still don't want multiple notifications (and therefore renders), so
I'm also changing the notifications structure a bit. Now a single
notification is made after all the edit hooks are run, and after the
edit lock has been released (it grabs a read lock instead for the
duration of the notification phase).

Change-Id: I2281dc936bf0442e2d38ac2750e81a8f120a924e
567a8dbd43e9885fc66aed463121c05cd3d17e5d 09-Nov-2011 Tor Norbye <tnorbye@google.com> Remove "unknown element" logging message

If you open the Error Log, and then go to (for example) a layout XML
file and type in a new tag, character by character, you will see that
the error log quickly fills up with messages of the form:

!ENTRY com.android.ide.eclipse.adt 2 0 2011-11-08 16:33:10.773
!MESSAGE AndroidManifest: Ignoring unknown 'Li' XML element

!ENTRY com.android.ide.eclipse.adt 2 0 2011-11-08 16:33:10.885
!MESSAGE AndroidManifest: Ignoring unknown 'Line' XML element

!ENTRY com.android.ide.eclipse.adt 2 0 2011-11-08 16:33:11.372
!MESSAGE AndroidManifest: Ignoring unknown 'Linear' XML element

What's happening is that on each keystroke, the UI model is updated,
and it complains if it sees element names that it does not recognize
from the descriptors. However, during an interactive edit it's normal
to have incomplete tag names, so we shouldn't complain -- aapt will do
that when the file is finally saved and processed.

Change-Id: Ib314ed0e1e17e69e35f05858ced5043fca2c29f3
150f02bff38df2320a954c20b4d0f5b41dd50e79 20-Oct-2011 Tor Norbye <tnorbye@google.com> Handle node identity changes

This changeset fixes a bug where sometimes dropping a new widget into
a layout would cause lots of other widget to be selected as well.

The root cause is that Eclipse's DOM *sometimes* decides to throw away
and replace all the children of a node, even when most of the children
just had attribute changes. In particular, this happens in some
GridLayout scenarios where a drop causes many attribute changes on the
children (to update row and column indices etc).

The workaround has two parts:

(1) The old implementation would find out which nodes were added by a
drop handler by storing a list of all the children before the
drop, then getting the list after the drop and removing the ones
that were present before.

This doesn't work when node ids change since *all* the children
would get marked as "new".

To address this, I made tracking created nodes more explicit:
rather than "diffing" the lists, there's a NodeCreationListener
interface you can hook into which (while you're listening) will
tell you about *all* nodes created by any parent. In the drop
handler we add a listener and make a list of all newly added nodes
that have the drop target node as a parent.

(2) Even with an explicit list of which nodes were added, there's the
problem that the nodes that were added have changed their
identities, so we cannot look up a "view rectangle" for them and
select them in the layout editor. To do this we need ot map from
the previous children of a parent node to its new children. We
cannot make the comparison based on equality (since the reason
we're getting into this trouble in the first place is that the
various children are touched by the drop handler when setting
attributes on them) so instead we use the sibling index. Since we
track all the additions and removals of nodes within our drop
target node, we can know exactly that the 4th node before Eclipse
reparses will correspond to the 4th node after, and so on.

Therefore, the "NodeCreationListener" interface passes not just
the nodes that were added and removed, but also the exact *index*
at which the node was added or removed. We then use this in the
code which looks up CanvasViewInfos from nodes to look up nodes
that can't be identified using the normal path.

Change-Id: Ibbf651b27ede7edfa40452de07bf1dbce02cd21e
eb9180e92c97624d7d78607d61bcb0343a4db129 12-Aug-2011 Tor Norbye <tnorbye@google.com> Fix and turn on the auto-format XML option

This changeset turns on the option to "Automatically format the XML
edited by the visual layout editor" by default.

It also fixes several issues related to it:

- First, the auto-format code was previously hooked up to synchronous
insert and delete node events, which meant during a larger edit it
would apply formatting repeatedly and before the edit was complete
(which made the DOM model keep reparsing to update document based
back into its internal model).

- Another problem was that the auto format only applied to added and
removed nodes; attribute edits were not considered (which made sense
given that the old formatter did not support reordering of
attributes, but now that it does attribute changes requires
reformatting as well.)

- The old reformatter was trying to work with the Eclipse XML
formatter, which does not handle partial document formats well
(there were a bunch of workarounds, and even with those there were
some problems). The new formatter does not, so I've changed the
option to be tied to the custom formatter; the automatic formatting
of layout editor changes is now enabled only when the custom editor
is enabled.

This also takes advantage of the new formatter's ability to only
format the attributes section of a document, so if you just tweak
the attribute of a node, the children's formatting is not affected.

- The formatter would apply to more than just the layout editor; any
UI editor which used UiElementNodes would be affected. I've added a
method, by default false, where each UI editor can opt into this.
I'd like to get Raphael's feedback on the manifest editor before
possibly adding it for that editor as well (and updating the option
name to something more generic).

- The mechanism for ignoring XML document changes (already used for
refactoring) is now also connected to reformatting, so when the
formatter runs it sets an "ignore" flag such that there is no
second XML model loading when the changes are just as a result
of a formatting option.

This changeset also tweaks the formatting behavior of comments;
instead of -always- adding a blank line before line comments (other
than suffix comments), it now considers the previous document and
preserves the spacing used there (though it will collapse multiple
lines into one).

Change-Id: I04c2b80836c4d9874dca789c2f2cbc8c8c7cfa76
f47a94df281ac0a65ff77cc9fd8f4787c2bb9080 18-Aug-2011 Raphael Moll <ralf@android.com> ADT: Fix issue 18689 (can't edit/save minSdkVersion)

This actually fixes the issue directly, not by a side effect.
For some weird reason, I was always creating UI nodes for
unknown attributes with a setDirty(true). That's obviously
wrong, the attribute should not be set dirty when created
but only when a value is assigned to it, if needed.

Change-Id: I4d4b6dbbc0ab7e837a772994b3e6bf6c2236de65
2914952cf3b5bad8292c0ce161a70baccfea9c3a 29-Jul-2011 Tor Norbye <tnorbye@google.com> Add a new XML formatter, new options, and format on save

This changeset adds a custom XML formatter for the Android XML
editors.

There is an option for turning off this formatter and using the
standard XML formatter instead.

The new custom formatter offers the following features:

* By default, it formats files following the Android conventions for
XML formatting. This means not only that it indents with 4 space
characters (instead of the Eclipse default of one tab character),
but it places attributes on a line of their own, it adds blank
lines in certain places, and so on.

* It sorts attributes (logically, alphabetically, or none)

* It formats files with different styles depending on the context.
For example, in layout files it always places a single blank line
between view elements, whereas in manifest files it only places
blank lines between elements of different types such that for
example the <uses-permission> elements all form a logical group,
separated from <uses-sdk> and so on.

The fact that strings.xml and layout.xml are usually formatted with
different flavors is one of the reasons setting up the old Eclipse
XML formatter to do the right thing was not possible.

In addition, there are various user options added to the Editors
preference page where you can tweak the behavior of the formatter,
such as turning off blank lines completely, controlling whether there
is a space before the > or /> closing characters, and you can also
tell the formatter to use Eclipse's indentation setting (indentation
size and whether to use spaces or tabs).

Finally, there is a new "Format on Save" option which behaves just
like Format on Save for Java files: when you press Ctrl-S to save a
file, the XML content will be formatted before the file is saved.

Change-Id: Ic6f05c768ab063b09f6f0248f60fbe8722fb149d
271993a2368361fb1f67ea9c1388a352e9df43f5 15-Jul-2011 Tor Norbye <tnorbye@google.com> Sort XML attributes logically

This changeset modifies the layout editor such that it writes
attributes in a certain order:

* id
* style
* layout_width
* layout_height
* other layout_ attributes, sorted alphabetically
* other attributes, sorted alphabetically

The layout editor will produce attributes in this order when
- New widgets are dragged into the layout
- Widgets are moved in the layout
- It will also insert attributes in the right place when they are set
as the result of (for example) using the context menu actions.

Note that this ordering is applied unconditionally - there is no user
setting to turn it off. However, note that the current behavior is
random - moving a view for example will scramble the attributes (in an
order which is related to hashkeys in a map), so the option would be
"sort attributes logically" versus "sort attributes randomly"; if we
want an option to "leave attribute order alone" that will need to be
implemented.

Limitations:
- This does not yet modify the formatter to reorganize attributes.
Thus, Ctrl-Shift-F to reformat the XML will not change attribute
order.
- It does not fix the problem that the XML model updater does not
respect the formatting settings (such as one newline per attribute)
when manipulating attributes.

This will be addressed/worked around in subsequent CLs.

Implementation Note:
The Eclipse XML model updater will unconditionally *append* any new
attributes. We take advantage of this to perform attribute sorting by
ensuring that we always insert new attributes in the right order. We
also check for existing attributes and any which fall
lexicographically later than the new attributes are removed and
reinserted in the right sequence. In order to avoid performing these
removals and additions repeatedly on a node when we set multiple
attributes, and to avoid flushing attribute changes *immediately*
(which was the case until this), we now queue up all pending attribute
values in the nodes and apply them at the end when all attribute
changes for a given node are known.
Change-Id: If39f8c29f26e281f7c6622a31e11ba49724d274a
61ba58e35e896b82cefea29ab3d5e8914ac3c823 13-Jul-2011 Tor Norbye <tnorbye@google.com> Support XML closed elements

When you create new elements (by for example dragging a view into a
layout), ADT would *always* create an open element, e.g.
<Button ...></Button>

This CL uses the element descriptors to create closed elements like
this:
<Button .../>

For elements that support children it will continue to create open
elements:
<LinearLayout ...></LinearLayout>

Change-Id: I885fc4bb2611e20d511a3a40c81e202de00b7ac2
86618cc78fb2f207c477527b4413ff234f474431 05-Jul-2011 Raphael Moll <ralf@android.com> Integrate unknown attributes in the normal UiElementNode workflow.

Somehow this should have been the default.
There's a few cases where this will allow us to simplify the code
and that will be for another CL.

Also fixes http://code.google.com/p/android/issues/detail?id=17762

Change-Id: Ieccd36f5f4042f414311f09339ed18fc73d7b122
42b2f34604a3f8e8ac191831d8f01a0498760d38 09-Jun-2011 Tor Norbye <tnorbye@google.com> Fix various warnings

I ran the latest version of findbugs on our codebase and fixed some
(not all!) of the warnings.

I also ran with Eclipse 3.7 RC3 and updated our compiler warning
settings for the new warnings that are available.

I also fixed some DOS line endings in some files (formatted with CRLF
instead of LF).

Change-Id: I9a9d34a9b60f2cb609245793815d96a4587007b0
80d9301c2e874b29889c41adb0623666cf534fa0 10-Apr-2011 Tor Norbye <tnorbye@google.com> Resize & Guideline Support

RelativeLayout now has both drop/move and resize guidelines, and
existing constraints are visualized for the selection.

LinearLayout resizing now uses weights to change the size of nodes
rather than setting width/height.

All resize operations offer guidelines to snap to their "wrap_content"
size.

Various bug fixes in related areas as well.

Change-Id: I817e34c6e67ce61cfb137eb067076d91f69f99e9
cd05e93b1194c89fe9eca1ee4b999d2991334f4b 15-May-2011 Tor Norbye <tnorbye@google.com> Basic fragment support

This changeset adds preliminary support for fragments:

* Add <fragment> to the palette, along with a drop handler which pops
up a class chooser to pick the Fragment class; all project
implementations of android.app.Fragment and
android.support.v4.app.Fragment are listed.

* Adds a fragment descriptor such that code completion works for
<fragment> elements

* Fix project callback such that it does not complain about a missing
class "fragment".

* Fix outline to display the name of the fragment rather than the
fragment tag name.

* This changeset also centers the label in MockViews since those are
still used to render fragments

Conflicts:

eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/LayoutDescriptors.java

Change-Id: I6f39f0c29a0cf21799fa8a55406eeae1e3beb57f
9718ea331bfc609927b1ec2a2e7453579666fa4d 13-May-2011 Tor Norbye <tnorbye@google.com> Custom View handling improvements

First and foremost, allow custom views to accept children such that
you can drag & drop children into the custom view in the outline.

Second, prevent an NPE which can occur if you drag into a layout where
the root element is a custom view.

Third, handle <view> (not <View>) better: provide a custom icon, and
inline the view class name in the outline label.

Fourth, allow double clicks (in addition to ctrl-click which is already
supported) on the custom views in the palette to allow jumping to the
custom view code.

Change-Id: I13c2bf2f4169185c9fcc893ce487f2abdac46802

Conflicts:

eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/LayoutDescriptors.java
46d0ebd2126fad6b1480fa5c8121e4638c463c73 15-May-2011 Tor Norbye <tnorbye@google.com> Basic fragment support

This changeset adds preliminary support for fragments:

* Add <fragment> to the palette, along with a drop handler which pops
up a class chooser to pick the Fragment class; all project
implementations of android.app.Fragment and
android.support.v4.app.Fragment are listed.

* Adds a fragment descriptor such that code completion works for
<fragment> elements

* Fix project callback such that it does not complain about a missing
class "fragment".

* Fix outline to display the name of the fragment rather than the
fragment tag name.

* This changeset also centers the label in MockViews since those are
still used to render fragments

Change-Id: I6e062970b335d9c95870f181ed408960978c423e
ec22f92d53f4bb74313b91aa491acbfbbb6dc9ce 13-May-2011 Tor Norbye <tnorbye@google.com> Custom View handling improvements

First and foremost, allow custom views to accept children such that
you can drag & drop children into the custom view in the outline.

Second, prevent an NPE which can occur if you drag into a layout where
the root element is a custom view.

Third, handle <view> (not <View>) better: provide a custom icon, and
inline the view class name in the outline label.

Fourth, allow double clicks (in addition to ctrl-click which is already
supported) on the custom views in the palette to allow jumping to the
custom view code.

Change-Id: I13c2bf2f4169185c9fcc893ce487f2abdac46802
87269bec9ec19e7308d2dc958235228dbd52827b 10-Mar-2011 Tor Norbye <tnorbye@google.com> XML code completion improvements

First, fix code completion for @android: resources such that if you
type @android: the various resource types (@android:drawable/,
@android:layout/, etc) are offered.

Second, fix completion for the @android: token itself such that if you
type "@a" then "@android:" is offered as a completion.

Finally, make resource name completion work even for attributes that
aren't marked in the metadata as allowing resource references. This
will not be done for empty completion context, but if the user
-explicitly- types a "@" in the value field, then resource completion
will work. This is necessary for some attributes where our metadata is
wrong, such as android:minHeight, where code completion currently
refuses to complete a @dimen/ completion prefix.

Change-Id: I175c8f7230d56987b9a945a2b791a2eb3e018a7c
21f09980161e25938619f614e768745247258657 11-Mar-2011 Raphael Moll <ralf@android.com> Avoid repeating manifest element names.

In the manifest form tree, avoid repeating element names
in the tree labels. E.g. "MyActivity (Activity)" can just
be "MyActivity".

Change-Id: I8de481aabcbc33e830e18c528cb10a0b2a14138a
e7abbed2fe84c25bcd6d68cef4140963c10a1e5d 31-Jan-2011 Tor Norbye <tnorbye@google.com> Add palette variations of widgets

This changeset adds new items to the palette which are just variations
of an existing widget but with different initial attributes. In
particular:

* Instead of just LinearLayout there are two versions of it:
LinearLayout (Vertical) and LinearLayout (Horizontal)

* The ProgressBar has 3 variations: Large, Small, and Horizontal. The
horizontal ProgressBar looks like the SeekBar, without at thumb, so
the SeekBar is moved next to the progress bar.

* There is a new palette category, "Text Fields", which contains a
number of different initializations of the EditText's "inputType"
attribute - for textual and numeric passwords, for names and e-mail
and postal addresses, for phone numbers, for negative and decimal
numbers, etc.

* Since LinearLayout is so common, the outline handles it specially to
ensure that we show a horizontal or a vertical icon depending on the
orientation attribute of the specific element rather than the
generic descriptor icon.

There are various changes to the palette icon preview and drag preview
etc to handle these changes. In particular, the category
initialization code had to be rewritten to be able to handle
variations (since for example the text field appears in multiple
categories, so the old assumption that each view had an assigned
category was no longer true.)

This changeset also extracts a constant for the "android:" literal
used in many places in the code, and renames the existing "android"
namespace constant.

Change-Id: Ibbc3dbd34c551594421c3de034cdccea6a66eba0
0757ce4af2764e4dd564acc0b1a013e910abc8da 18-Feb-2011 Tor Norbye <tnorbye@google.com> More refactoring work: Convert hierarchy, and change type

A lot of work on the "Change Layout" refactoring to improve conversion
to a Relative Layout. First, add a "Flatten Hierarchy" option which
can take an entire hierarchy of layout widgets and flatten it down to
a single top level RelativeLayout where the constraints attempt to
reflect the original layout. (This isn't always possible, since some
layout managers offer features not possible to express in
RelativeLayout, such as a LinearLayout with multiple different
weights) but it often works or is at least a good start. (This work
is ongoing, but since my changeset is getting large I want to check in
this snapshot since the functionality is better than what is in the
trunk.)

This changeset also adds a new refactoring: Change Widget Type. This
can be applied to a selection of elements, and it will convert the
widget type to the new target widget type. It will also remove any
attributes that are not valid for the new layout.

It also improves the wizards which display the possible target types.
For Change Widget Type, it will first offer "related" widgets, so for
an AnalogClock it will first offer Digital Clock, for a checkbox it
will offer a checked text view and a radio button, etc.

In addition, it will list Views and Layouts that it finds in any
library jars (except for the builtin Android ones), and any custom
view classes in the project.

There is also now some preliminary support for refactoring unit
tests. These tests must be run as Eclipse plugin tests, since they
utilize the XML model (and the XML model cannot be mocked). The test
infrastructure reads source XML files, applies the refactoring change
list to them, and diffs the output with the known expected output
(also stored as result XML files in the test project).

Finally, there are a number of fixes and improvements to the shared
refactoring code.

Change-Id: I0974653e530dfb4feb625e0eef8257c29d50614b
85126d918d1ea7e707f7179cd74131ff1cef6af7 11-Jan-2011 Tor Norbye <tnorbye@google.com> Changes to widget text and id format

This changeset changes the default text and id attributes of newly
dropped widgets in the following ways:

1. Use the node class name rather than the id as the initial text. In
other words, the default label for a button is "Button" rather than
"@+id/Button01". This is a more common convention in other GUI
builders, and you typically don't want the actual label to be
"@+id"-something, you want it to be "@string"-something, so the @id
prefix is slightly confusing for beginners.

2. The id uses method name capitalization rather than class name
capitalization, e.g. "checkBox" rather than "CheckBox". This seems
to be the convention I see in handwritten layouts, which makes
sense given that the reference will be compiled to and referenced
as a Java field.

3. In the case of conflicts, don't use a leading 0; in other words,
rather than button01, button02, button03 we have button1, button2,
button3. It's unlikely that the user will have ten or more unnamed
widgets (and if they do the leading zero still isn't needed.) The
code which looks for name conflicts now also performs case
insensitive comparisons.

Change-Id: Ie7f2c5dd8e9852acec2c2e154ee20142b8ece9a6
1f34a9b0c5cdd41dad23719898d5f71f3ee57394 05-Jan-2011 Tor Norbye <tnorbye@google.com> Improve the Outline contents

1. Make the outline use StyledStrings such that we can use different
colors for different elements in the outline. Use the decorations
color for the element type that follows the id.

2. For elements that define a "text" property, include the text (or a
prefix of it if it is long) in the outline. Thus, for a Button you
might see something like "Button01 - "Submit Order").

3. For elements that define a "src" property, show the
source. Therefore, for an ImageView you might see "ImageView - logo".

4. For <include> elements, show the name of the included layout.

Change-Id: Ibd4c8339ea0e03c969ccaec1a67bc64436ed67af
a18a523fa3e21c78320fadd031716963b3a1c501 04-Jan-2011 Tor Norbye <tnorbye@google.com> Add "Extract As Include" refactoring

Add an "Extract As Include" action to the context menu which lets you
extract a set of selected views and move them into a separate layout
file of their own, and insert an <include> reference to the new view
in place.

You can select multiple items as well (provided they are adjacent
siblings) and in that case the newly extracted layout will use the
<merge> tag as the root element.

This changeset also adds a name validator for resource names, used
both in the new-name entry field for extracted include layouts, as
well as in the New XML File wizard. It enforces that the name (except
for the .xml suffix) is a valid Java identifier name (since otherwise
the R file will have compilation errors.)

This changeset also extracts various inlined String constants like
"xmlns", "android" (as used in namespace prefixes), "@id/" etc and
replaces them with constants.

Change-Id: I3eca8b6afd23f22ca9299ff22c614b4ffd3299bf
3f6c2e7d3f6417985aac9eb65fa0f3b5a31b2578 22-Dec-2010 Tor Norbye <tnorbye@google.com> Add Move Up/Down Actions

This changeset adds "Move Up" and "Move Down" context menu items to
the outline, as well as keyboard shortcuts for these: + and -. The
actions apply only when the Outline window has focus. Thus, to reorder
an item you can select it, then press + repeatedly to move it down in
the hierarchy or - to move it back up.

In addition, this changeset fixes a selection syncing issue which also
affected drag & drop: It will now correctly always select the target
dropped tree items after a drag or reorder.

Change-Id: I11ce4fd302e537b86a614a7cbe59f1ac47f61aa5
3dfd8112f7137821ef9191bfdd82a7f30ae52dc6 23-Nov-2010 Raphael Moll <ralf@android.com> ADT: ensure <application> is last in manifest.

ADT descriptors have no notion of XML ordering.
We modify the concept of "mandatory" descriptor to
have normal mandatory descriptors versus "mandatory last" ones.
("mandatory" elements are virtual reserved slots that are
always present in the UiModel even if they have no real
counterpart in the XML model. These elements ensure they can
be manipulated in the UI even before their XML is created.)

Then we try our best to ensure the "last" ones remain at the
end of the UiNode model. There are 2 cases:
- in UiElementNode, when constructing the UINode model when
parsing an existing XML model, we try to reorder the nodes
at the end if possible.
- in UiActions, when adding a new element to the UiModel, we
try to place it before the first "mandatory last" element.

SDK Bug 3197310

Change-Id: I6a7d9502a95ebe92ff82e07f3f3249a0d25c2154
c4f75630aa293ec4027216ae0bfd2d9e6782e209 22-Nov-2010 Tor Norbye <tnorbye@google.com> Fix live manipulation of <include> elements

This changeset fixes bugs related to dragging included views around in
the canvas:

First, the <include> tag would get rewritten to <null>. This happened
because the layout editor treats the FQCN and the XML node name as
equivalent, but in the case of the include tag the FQCN was set to
null instead of "include".

Second, the "layout" attribute would not get copied because it is NOT
in the Android namespace, and the code to copy attributes ended up
with an empty-string namespace which was not handled correctly.

Third, when copied the "layout" attribute would end up with the
namespace "ns:" because the code to create attribute nodes always
created namespaced attribute nodes rather than a plain attribute node
when the namespace is null.

Change-Id: Ibd34212517615aa8ec79abe14bca765cdca525f6
f85ad3e3e3f3686d0bdaa3177ed10348cf72375e 16-Nov-2010 Raphael Moll <ralf@android.com> ADT: Extract AttrsXmlParser in com.android.ide.common

This is a pure-refactoring CL that moves AttrsXmlParser
into an ide.common.resources.platform package. In a next CL,
the parser should be cleanup to remove some references to
external classes (e.g. adtplugin is only used for logging so
it will become an ILog reference.)

The goal of the resources.platform package is to allow other IDEs
to parse the manifest schema. An utility class would be provided
here that would then be used by AndroidTargetParser. The rest of the
data parsing (widgets, resources, etc.) is a non-goal. Maybe later.

Change-Id: I4fb8eb5d168b75ef8bfab57d0b2883aea85b6167
3bd8ee3a9447003224d34bf19328209d6b14d9ad 05-Nov-2010 Tor Norbye <tnorbye@google.com> Add autoformatting of XML, and improved manual formatting

This changeset improves the formatting of XML edited by the layout
editor in two ways:

(1) It improves the way the layout editor handles insertion and
deletion into the XML document; it looks up the indentation of the
sibling and parent elements and attempts to correctly indent new
elements based on the existing surrounding formatting, and it also
attempts to clean things up correctly on element deletion.

(2) It adds a new user option for turning on automatic XML
formatting. When this is on, it will invoke the Eclipse XML formatter
on portions of the XML after each edit. This will ensure that the
document adheres to the user's preferred formatting settings (maximum
line width, tabs versus spaces, line breaks before attributes, etc.

Change-Id: I74f9a4240a8c5ca4295c01f3b55751ef10b1c1b0
71cd1869db92b5411f1a3c2dadb2f369863db0ee 05-Nov-2010 Tor Norbye <tnorbye@google.com> Remove deprecated UiElementNode "editData" property

As requested in another review (#18753) the editData property on
UiElementNodes is obsolete (it was used by GLE1) and should be
removed. While there I also updated the naming style of local vars in
that class from underline to camelcase.

Change-Id: Ic5c50d07abedb1177cd018c866901f1e54cd0ec5
2a6dd1206b3cec798d3c78a78261986635b31973 04-Nov-2010 Tor Norbye <tnorbye@google.com> Fix XML editing whitespace handling

This changeset fixes three problems related to the way whitespace is
handled by the visual editor.

(1) The editor would insert a newline text node after a newly inserted
element, but this element was appended rather than inserted
immediately after the element, which meant that if you inserted your
element anywhere in the *middle* of the child list, you would
accumulate blank lines at the end of the parent's element and have no
separator before the current element.

The fix is simple - use insertBefore() rather than appendChild() when
inserting the new node.

(2) On deletion, no XML text nodes were deleted. This means that if
you inserted 4 elements, then deleted them, you would end up with 4
blank text nodes.

The fix here is to look at the sibling when we are about to delete,
and if it looks like a pure whitespace node, remove it as well.

(3) When nested content (like a LinearLayout) was inserted, there
would be no newline inserted before the child, so that first element
would end up on the same line as the parent.

The fix here is to detect this scenario (when we are inserting an
element into an element that has no children) and insert a newline
*before* the element (as well as after, as is the case for all newly
inserted elements).

Longer term we should do more advanced things with formatting, such as
indenting nested content, and making sure that when we insert and
remove whitespace nodes we always adjust the indentation
correctly. But for now, this changeset makes the XML generated by the
editor much more readable and consistent.
Change-Id: I2e65152568092a775074a606e3f5e54c680611c6
0433222f1351b565d78952e1bb8809528c0e352a 27-Oct-2010 Tor Norbye <tnorbye@google.com> Add dictionary to codebase

Eclipse has the ability to spellcheck comments, and it ships with an
English dictionary. However, many valid terms in our codebase is not
in this dictionary. This checkin adds a dictionary file which contains
many of the valid spelling words used in our codebase.

(Unfortunately, Eclipse does not support "project dictionaries" like
some other IDEs where individual user dictionaries are merged with
shared project dictionaries. However, this new dictionary should be
useful for developers who use a dedicated workspace for Android
development.)

This changeset also fixes some typos.

Change-Id: Ied6647f6cb550460c0087498f8c94fa6624e3b4e
2be70bde5a6dcd6447c32ef55866020be372f96c 18-Oct-2010 Tor Norbye <tnorbye@google.com> Port layout rules to Java

We had a number of layout implementations in the tool written in
Groovy; these were hard to deal with because of lack of good tool
support (debugging didn't work, refactoring didn't work, code
completion didn't (always) work, go to declaration didn't work,
semantic checks like unused code didn't work, etc. etc.)

Since these layout helpers are only getting larger, replace them by
equivalent Java code to make development easier.

This checkin also moves the API classes formerly used by Groovy
scripts into a new package (next to the Java layout rules) under
com.android.ide.common (api and layout) since this code isn't Eclipse
specific and could be used by other IDE vendors.

These interfaces were left identical (only the package statements and
directory location changed), with two exceptions: I added a new method
called "in" to IAttributeInfo.java, and I added a parameter to
IViewRule's onInitialize method.

The Groovy code was kept as close to the original as possible; I
copied in the Groovy code, and then replaced the Groovy-specific
constructs (closure-iteration on collections, literal map syntax, etc)
with equivalent Java code. The only tricky part was ensuring that
Groovy's handling of the == and != operators were translated into
.equals calls.

Change-Id: Idf7660ddea3766eac0a4a65ce6524d3f5119f7b2
13bbd4f3631ee307bad27b0a6332997386dc9ba3 08-Sep-2010 Raphael Moll <ralf@android.com> GLE2: perform all context menu edits in the same undo session.

Change-Id: I9516066edaa1704725ab234f1a65664d5eabfb39
d784a5000d432260f9efe0ce5f62177f38dba6be 21-Jul-2010 Raphael Moll <ralf@android.com> ADT GLE2: Properly handle empty documents, including drag'n'drop.

This makes it possible to drop into empty documents.

Change-Id: I512d8ff5e8747e4d3f5e27900308157e75cacd57
f6ad088e2c38b663fd1b0408ca78a05bd4852f05 02-Jul-2010 Raphael Moll <ralf@android.com> ADT: Fix NPE in resource editor on Eclipse 3.6

SDK Bug: 2814467

The fix is a workaround around Eclipse issue
https://bugs.eclipse.org/bugs/show_bug.cgi?id=318108

Change-Id: I5684db244d5663ffa47407bd356a5bd233578612
c4e3431fab6279bf4d7a2a0a9dac79a35d457c65 11-Jun-2010 Raphael Moll <ralf@android.com> ADT: Refactor AndroidEditor into AndroidXmlEditor.

Next we'll introduce a new AndroidTextEditor base class.

Change-Id: I2cdf4c7cb7a2eec03f7c523294a14f98bfd072f8
953aeea61efb31402198b969478d1bda5dcbe613 09-Jun-2010 Raphael Moll <ralf@android.com> ADT GLE2: Access AttributeInfo from groovy scripts.

This CL extracts IAttributeInfo from DeclareStyleable -- this used
to be the metadata extracted from an attribute declared in attrs.xml.

The interface that is now available to groovy scripts lets them
check whether an attribute is a reference, a string, etc. For an
enum or flag that means having access to the defined values too.

In the case of the AbsoluteLayout drop, we use this info to check if
an attribute is a reference. For example when duplicating a
RelativeLayout dropped in an AbsoluteLayout, we need to create new
ids and the RelativeLayout is prone to have inner self-references
that can be automatically adjusted that way.

A large part of the CL is about refactoring the various manually-created
attributes in the Descriptors for resources, XML, and such. In this
case the IAttributeInfo that is made available via the AttributeDescriptor
is not used, but it made sense to keep this consistent in case we want
to expose it later and to avoid having to care about special cases.

Change-Id: Ic02f69bc16f0e549fcac3956ae93b86651c5be3c
c2b0492f49775b23072032d639879a77b41b1392 01-Jun-2010 Raphael Moll <ralf@android.com> ADT GLE2: Script for AbsoluteLayout for new canvas drag API.

Most of the changes concern the supporting API (INode and co)
to be able to recreate and mofiy the XML elements.

Change-Id: I9ab62b3fe125faed1b647f1735f8ff0afd33a5d9
6845b5679bbd6480eac600d56458517bcbbad609 16-Mar-2010 Raphael <raphael@google.com> ADT fix: Manifest editor doesn't reload properly on SDK change.

Cause: typo due to autocompletion.

SDK Bug 2517314

Change-Id: I81b285b5d5c7781ea0c4e18e500a5d72fb29d994
6f49708d1896bcde13ce6bea0b2a704a5de115df 13-Mar-2010 Raphael <raphael@google.com> ADT GLE: treat all unknown layout XML nodes as base View objects.

This adds an interface that UIElementNode queries when it needs
to treat an unknown XML local name. The default is to create
ElementDescriptors, but layout overrides this to deal with
custom view and to create base View descriptors by default.

Change-Id: I639fb169a6b1b53b28715c88f9a037426d7ca88f
c938e18817f661db5734b72f37740295631d0fcf 27-Feb-2010 Raphael <raphael@google.com> ADT GLE2: Support for drop on RelativeLayout children.

Change-Id: I6ed9f1d89f61caf6141f23708854a01247ab5518
d4963dc4347c871be5faa76920709001490e1d2a 24-Feb-2010 The Android Open Source Project <initial-contribution@android.com> snapshot
e13151727c63786342cddc3ea355425582bd4e7a 13-Jan-2010 The Android Open Source Project <initial-contribution@android.com> android-2.1_r1 snapshot
4b26e04436587890f9245eda631f643d21f28d0d 26-Dec-2009 Raphael <raphael@google.com> ADT GRE (Groovy Rules Engine), part 1.

This CL adds the new "Groovy Rules Engine" (GRE) to the GLE2.

The rules engine can load groovy files located in the ADT
namespace or the project associated with the current GLE2.
Each groovy file defines a class with callbacks invoked
by the LayoutCanvas.
Project rules are reloaded when they change.

Change-Id: I168234da739b2120374d3eb4552169f7dd36439d
312c9ed171a7fff530b3b7a4e6a87ead9b0d6522 13-Nov-2009 Jean-Baptiste Queru <jbq@google.com> eclair snapshot
370938d215696af14c7a7673b66b0092434b16e7 01-Oct-2009 Raphael <raphael@google.com> ADT Manifest Editor: Fix for uses-sdk dup that won't go away.

It was a display issue only, meaning the actual XML node was
being deleted but the Ui model was not updated properly. The
actual cause is that this is a mandatory node, and mandatory
nodes must stay as "fake nodes" in the Ui model. However
only one such node needs to stay in the hierarchy.

SDK BUG 2147112

Change-Id: I68e3d343bb95169865ad8dcad77004cbd51fafc3
f6317f204522a2e491e3f83131b3e901e662df81 02-Sep-2009 Raphael <raphael@google.com> ADT GLE: change error display to a separate sash.

This allows GEP to display both the latest error and the latest
successful rendering. The error still needs an icon and the
canvas will need to be grayed or something.

Also the LayoutCanvas will directly use the ILayoutResult and we
won't need to custom EditData in UiElementNode so the correspond
method is @deprecated (but obviously still supported for GLE1.)

Change-Id: Ia3afed836755dbd84a4511eaed0782c85a383ac9
69425d803b34589309a69eddc53a338e1409b30c 14-May-2009 Xavier Ducrohet <xav@android.com> ADT: Move more packages into internal:

editors -> adt.internal.editors.

This also marks the final refactoring of combining previous editors/common
plugin under the adt package.