ADT: Refactor in ViewElementDescriptor.

This changes the member "CanonicalClassName" into "FullClassName"
since the value is the FQCN of the java View.

Change-Id: Idbfcf665c12c598f680fdf58ecb0ae7820da8bdb
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/WidgetPullParser.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/WidgetPullParser.java
index 50d259f..4343ce7 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/WidgetPullParser.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/WidgetPullParser.java
@@ -19,17 +19,21 @@
 import com.android.ide.eclipse.adt.AndroidConstants;
 import com.android.ide.eclipse.adt.internal.editors.layout.descriptors.ViewElementDescriptor;
 import com.android.layoutlib.api.IXmlPullParser;
+import com.android.layoutlib.api.ILayoutResult.ILayoutViewInfo;
 import com.android.sdklib.SdkConstants;
 
 import org.xmlpull.v1.XmlPullParserException;
 
 /**
  * {@link IXmlPullParser} implementation to render android widget bitmap.
- * <p/>The parser emulates a layout that contains just one widget, described by the
+ * <p/>
+ * The parser emulates a layout that contains just one widget, described by the
  * {@link ViewElementDescriptor} passed in the constructor.
+ * <p/>
+ * This pull parser generates {@link ILayoutViewInfo}s which key is a {@link ViewElementDescriptor}.
  */
 public class WidgetPullParser extends BasePullParser {
-    
+
     private final ViewElementDescriptor mDescriptor;
     private String[][] mAttributes = new String[][] {
             { "text", null },
@@ -39,8 +43,8 @@
 
     public WidgetPullParser(ViewElementDescriptor descriptor) {
         mDescriptor = descriptor;
-        
-        String[] segments = mDescriptor.getCanonicalClassName().split(AndroidConstants.RE_DOT);
+
+        String[] segments = mDescriptor.getFullClassName().split(AndroidConstants.RE_DOT);
         mAttributes[0][1] = segments[segments.length-1];
     }
 
@@ -57,7 +61,7 @@
         if (index < mAttributes.length) {
             return mAttributes[index][0];
         }
-        
+
         return null;
     }
 
@@ -74,7 +78,7 @@
         if (index < mAttributes.length) {
             return mAttributes[index][1];
         }
-        
+
         return null;
     }
 
@@ -86,7 +90,7 @@
                 }
             }
         }
-        
+
         return null;
     }
 
@@ -118,7 +122,7 @@
         if (mParsingState == START_TAG) {
             return true;
         }
-        
+
         throw new XmlPullParserException("Call to isEmptyElementTag while not in START_TAG",
                 this, null);
     }
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/CustomViewDescriptorService.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/CustomViewDescriptorService.java
index b765abd..be844cc 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/CustomViewDescriptorService.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/CustomViewDescriptorService.java
@@ -45,13 +45,13 @@
  * associated {@link ElementDescriptor} object.
  * <p/>
  * If the custom class does not exist, no monitoring is put in place to avoid having to listen
- * to all class changes in the projects. 
- * 
+ * to all class changes in the projects.
+ *
  */
 public final class CustomViewDescriptorService {
 
     private static CustomViewDescriptorService sThis = new CustomViewDescriptorService();
-    
+
     /**
      * Map where keys are the project, and values are another map containing all the known
      * custom View class for this project. The custom View class are stored in a map
@@ -67,10 +67,10 @@
      */
     @SuppressWarnings("unused")
     private ICustomViewDescriptorListener mListener;
-    
+
     /**
      * Classes which implements this interface provide a method that deal with modifications
-     * in custom View class triggering a change in its associated {@link ViewClassInfo} object. 
+     * in custom View class triggering a change in its associated {@link ViewClassInfo} object.
      */
     public interface ICustomViewDescriptorListener {
         /**
@@ -81,14 +81,14 @@
          */
         public void updatedClassInfo(IProject project, String className, ElementDescriptor descriptor);
     }
-    
+
     /**
      * Returns the singleton instance of {@link CustomViewDescriptorService}.
      */
     public static CustomViewDescriptorService getInstance() {
         return sThis;
     }
-    
+
     /**
      * Sets the listener receiving custom View class modification notifications.
      * @param listener the listener to receive the notifications.
@@ -99,7 +99,7 @@
     public void setListener(ICustomViewDescriptorListener listener) {
         mListener = listener;
     }
-    
+
     /**
      * Returns the {@link ElementDescriptor} for a particular project/class.
      * <p/>
@@ -108,51 +108,51 @@
      * established, a monitoring for that particular class is initiated. Any change will
      * trigger a notification to the {@link ICustomViewDescriptorListener}.
      * @param project the project containing the class.
-     * @param fqClassName the fully qualified name of the class.
+     * @param fqcn the fully qualified name of the class.
      * @return a <code>ElementDescriptor</code> or <code>null</code> if the class was not
      * a custom View class.
      */
-    public ElementDescriptor getDescriptor(IProject project, String fqClassName) {
+    public ElementDescriptor getDescriptor(IProject project, String fqcn) {
         // look in the map first
         synchronized (mCustomDescriptorMap) {
             HashMap<String, ElementDescriptor> map = mCustomDescriptorMap.get(project);
-            
+
             if (map != null) {
-                ElementDescriptor descriptor = map.get(fqClassName);
+                ElementDescriptor descriptor = map.get(fqcn);
                 if (descriptor != null) {
                     return descriptor;
                 }
             }
-        
+
             // if we step here, it looks like we haven't created it yet.
             // First lets check this is in fact a valid type in the project
-            
+
             try {
                 // We expect the project to be both opened and of java type (since it's an android
                 // project), so we can create a IJavaProject object from our IProject.
                 IJavaProject javaProject = JavaCore.create(project);
-                
+
                 // replace $ by . in the class name
-                String javaClassName = fqClassName.replaceAll("\\$", "\\."); //$NON-NLS-1$ //$NON-NLS-2$
-        
+                String javaClassName = fqcn.replaceAll("\\$", "\\."); //$NON-NLS-1$ //$NON-NLS-2$
+
                 // look for the IType object for this class
                 IType type = javaProject.findType(javaClassName);
                 if (type != null && type.exists()) {
                     // the type exists. Let's get the parent class and its ViewClassInfo.
-                    
+
                     // get the type hierarchy
                     ITypeHierarchy hierarchy = type.newSupertypeHierarchy(
                             new NullProgressMonitor());
-                    
+
                     ElementDescriptor parentDescriptor = getDescriptor(
                             hierarchy.getSuperclass(type), project, hierarchy);
-                    
+
                     if (parentDescriptor != null) {
                         // we have a valid parent, lets create a new ElementDescriptor.
 
-                        ViewElementDescriptor descriptor = new ViewElementDescriptor(fqClassName,
-                                fqClassName, // ui_name
-                                fqClassName, // canonical class name
+                        ViewElementDescriptor descriptor = new ViewElementDescriptor(fqcn,
+                                fqcn, // ui_name
+                                fqcn, // canonical class name
                                 null, // tooltip
                                 null, // sdk_url
                                 getAttributeDescriptor(type, parentDescriptor),
@@ -166,12 +166,12 @@
                                 map = new HashMap<String, ElementDescriptor>();
                                 mCustomDescriptorMap.put(project, map);
                             }
-                        
-                            map.put(fqClassName, descriptor);
+
+                            map.put(fqcn, descriptor);
                         }
-                        
+
                         //TODO setup listener on this resource change.
-                        
+
                         return descriptor;
                     }
                 }
@@ -183,12 +183,12 @@
 
         return null;
     }
-    
+
     /**
      * Computes (if needed) and returns the {@link ElementDescriptor} for the specified type.
-     * 
-     * @param type 
-     * @param project 
+     *
+     * @param type
+     * @param project
      * @param typeHierarchy
      * @return A ViewElementDescriptor or null if type or typeHierarchy is null.
      */
@@ -209,19 +209,19 @@
             return null;
         }
 
-        String canonicalName = type.getFullyQualifiedName();
-        
+        String fqcn = type.getFullyQualifiedName();
+
         if (builtInList != null) {
             for (ElementDescriptor desc : builtInList) {
                 if (desc instanceof ViewElementDescriptor) {
                     ViewElementDescriptor viewDescriptor = (ViewElementDescriptor)desc;
-                    if (canonicalName.equals(viewDescriptor.getCanonicalClassName())) {
+                    if (fqcn.equals(viewDescriptor.getFullClassName())) {
                         return viewDescriptor;
                     }
                 }
             }
         }
-        
+
         // it's not a built-in class? Lets look if the superclass is built-in
         // give up if there's no type
         if (typeHierarchy == null) {
@@ -232,43 +232,43 @@
         if (parentType != null) {
             ViewElementDescriptor parentDescriptor = getDescriptor(parentType, project,
                     typeHierarchy);
-            
+
             if (parentDescriptor != null) {
                 // parent class is a valid View class with a descriptor, so we create one
                 // for this class.
-                ViewElementDescriptor descriptor = new ViewElementDescriptor(canonicalName,
-                        canonicalName, // ui_name
-                        canonicalName, // canonical name
+                ViewElementDescriptor descriptor = new ViewElementDescriptor(fqcn,
+                        fqcn, // ui_name
+                        fqcn, // canonical name
                         null, // tooltip
                         null, // sdk_url
                         getAttributeDescriptor(type, parentDescriptor),
                         null, // layout attributes
                         null, // children
                         false /* mandatory */);
-                
+
                 // add it to the map
                 synchronized (mCustomDescriptorMap) {
                     HashMap<String, ElementDescriptor> map = mCustomDescriptorMap.get(project);
-                    
+
                     if (map == null) {
                         map = new HashMap<String, ElementDescriptor>();
                         mCustomDescriptorMap.put(project, map);
                     }
-                    
-                    map.put(canonicalName, descriptor);
-                    
+
+                    map.put(fqcn, descriptor);
+
                 }
 
                 //TODO setup listener on this resource change.
-                
+
                 return descriptor;
             }
         }
-        
+
         // class is neither a built-in view class, nor extend one. return null.
         return null;
     }
-    
+
     /**
      * Returns the array of {@link AttributeDescriptor} for the specified {@link IType}.
      * <p/>
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/LayoutDescriptors.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/LayoutDescriptors.java
index b855587..89f0a3b 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/LayoutDescriptors.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/LayoutDescriptors.java
@@ -217,7 +217,7 @@
 
         return new ViewElementDescriptor(xml_name,
                 xml_name, // ui_name
-                info.getCanonicalClassName(),
+                info.getFullClassName(),
                 tooltip,
                 null, // sdk_url
                 attributes.toArray(new AttributeDescriptor[attributes.size()]),
@@ -313,7 +313,7 @@
         for (ElementDescriptor desc : knownViews) {
             if (desc instanceof ViewElementDescriptor) {
                 ViewElementDescriptor viewDesc = (ViewElementDescriptor) desc;
-                if (viewFqcn.equals(viewDesc.getCanonicalClassName())) {
+                if (viewFqcn.equals(viewDesc.getFullClassName())) {
                     return viewDesc.getLayoutAttributes();
                 }
             }
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/ViewElementDescriptor.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/ViewElementDescriptor.java
index 1ae9231..bd3332e 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/ViewElementDescriptor.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/layout/descriptors/ViewElementDescriptor.java
@@ -24,26 +24,27 @@
 /**
  * {@link ViewElementDescriptor} describes the properties expected for a given XML element node
  * representing a class in an XML Layout file.
- * 
+ *
  * @see ElementDescriptor
  */
 public final class ViewElementDescriptor extends ElementDescriptor {
-    
-    private String mCanonicalClassName;
+
+    /** The full class name (FQCN) of this view. */
+    private String mFullClassName;
 
     /** The list of layout attributes. Can be empty but not null. */
     private AttributeDescriptor[] mLayoutAttributes;
 
-    
+
     /**
      * Constructs a new {@link ViewElementDescriptor} based on its XML name, UI name,
      * the canonical name of the class it represents, its tooltip, its SDK url, its attributes list,
      * its children list and its mandatory flag.
-     * 
+     *
      * @param xml_name The XML element node name. Case sensitive.
      * @param ui_name The XML element name for the user interface, typically capitalized.
-     * @param canonicalClassName The canonical class name the {@link ViewElementDescriptor} is
-     * representing.
+     * @param fullClassName The fully qualified class name the {@link ViewElementDescriptor} is
+     *          representing.
      * @param tooltip An optional tooltip. Can be null or empty.
      * @param sdk_url An optional SKD URL. Can be null or empty.
      * @param attributes The list of allowed attributes. Can be null or empty.
@@ -55,12 +56,12 @@
      *  ceases to exist.
      */
     public ViewElementDescriptor(String xml_name, String ui_name,
-            String canonicalClassName,
+            String fullClassName,
             String tooltip, String sdk_url,
             AttributeDescriptor[] attributes, AttributeDescriptor[] layoutAttributes,
             ElementDescriptor[] children, boolean mandatory) {
         super(xml_name, ui_name, tooltip, sdk_url, attributes, children, mandatory);
-        mCanonicalClassName = canonicalClassName;
+        mFullClassName = fullClassName;
         mLayoutAttributes = layoutAttributes != null ? layoutAttributes : new AttributeDescriptor[0];
     }
 
@@ -69,37 +70,37 @@
      * name of the class it represents, and its children list.
      * The UI name is build by capitalizing the XML name.
      * The UI nodes will be non-mandatory.
-     * 
+     *
      * @param xml_name The XML element node name. Case sensitive.
-     * @param canonicalClassName The canonical class name the {@link ViewElementDescriptor} is
-     * representing.
+     * @param fullClassName The fully qualified class name the {@link ViewElementDescriptor} is
+     *          representing.
      * @param children The list of allowed children. Can be null or empty.
      * @param mandatory Whether this node must always exist (even for empty models). A mandatory
      *  UI node is never deleted and it may lack an actual XML node attached. A non-mandatory
      *  UI node MUST have an XML node attached and it will cease to exist when the XML node
      *  ceases to exist.
      */
-    public ViewElementDescriptor(String xml_name, String canonicalClassName,
+    public ViewElementDescriptor(String xml_name, String fullClassName,
             ElementDescriptor[] children,
             boolean mandatory) {
         super(xml_name, children, mandatory);
-        mCanonicalClassName = canonicalClassName;
+        mFullClassName = fullClassName;
     }
 
     /**
      * Constructs a new {@link ElementDescriptor} based on its XML name and children list.
      * The UI name is build by capitalizing the XML name.
      * The UI nodes will be non-mandatory.
-     * 
+     *
      * @param xml_name The XML element node name. Case sensitive.
-     * @param canonicalClassName The canonical class name the {@link ViewElementDescriptor} is
+     * @param fullClassName The fully qualified class name the {@link ViewElementDescriptor} is
      * representing.
      * @param children The list of allowed children. Can be null or empty.
      */
-    public ViewElementDescriptor(String xml_name, String canonicalClassName,
+    public ViewElementDescriptor(String xml_name, String fullClassName,
             ElementDescriptor[] children) {
         super(xml_name, children);
-        mCanonicalClassName = canonicalClassName;
+        mFullClassName = fullClassName;
     }
 
     /**
@@ -107,23 +108,24 @@
      * name of the class it represents.
      * The UI name is build by capitalizing the XML name.
      * The UI nodes will be non-mandatory.
-     * 
+     *
      * @param xml_name The XML element node name. Case sensitive.
-     * @param canonicalClassName The canonical class name the {@link ViewElementDescriptor} is
+     * @param fullClassName The fully qualified class name the {@link ViewElementDescriptor} is
      * representing.
      */
-    public ViewElementDescriptor(String xml_name, String canonicalClassName) {
+    public ViewElementDescriptor(String xml_name, String fullClassName) {
         super(xml_name);
-        mCanonicalClassName = canonicalClassName;
+        mFullClassName = fullClassName;
     }
-    
+
     /**
-     * Returns the canonical name of the class represented by this element descriptor.
+     * Returns the fully qualified name of the View class represented by this element descriptor
+     * e.g. "android.view.View".
      */
-    public String getCanonicalClassName() {
-        return mCanonicalClassName;
+    public String getFullClassName() {
+        return mFullClassName;
     }
-    
+
     /** Returns the list of layout attributes. Can be empty but not null. */
     public AttributeDescriptor[] getLayoutAttributes() {
         return mLayoutAttributes;
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/tree/NewItemSelectionDialog.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/tree/NewItemSelectionDialog.java
index 6fdb7aa..dc53292 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/tree/NewItemSelectionDialog.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/ui/tree/NewItemSelectionDialog.java
@@ -73,7 +73,7 @@
 
     /**
      * Creates the new item selection dialog.
-     * 
+     *
      * @param shell The parent shell for the list.
      * @param labelProvider ILabelProvider for the list.
      * @param descriptorFilters The element allows at the root of the tree. Can be null.
@@ -100,17 +100,17 @@
                 }
             }
         }
-        
+
         setHelpAvailable(false);
         setMultipleSelection(false);
-        
+
         setValidator(new ISelectionStatusValidator() {
             public IStatus validate(Object[] selection) {
                 if (selection.length == 1 && selection[0] instanceof ViewElementDescriptor) {
                     return new Status(IStatus.OK, // severity
                             AdtPlugin.PLUGIN_ID, //plugin id
                             IStatus.OK, // code
-                            ((ViewElementDescriptor) selection[0]).getCanonicalClassName(), //msg 
+                            ((ViewElementDescriptor) selection[0]).getFullClassName(), //msg
                             null); // exception
                 } else if (selection.length == 1 && selection[0] instanceof ElementDescriptor) {
                     return new Status(IStatus.OK, // severity
@@ -122,14 +122,14 @@
                     return new Status(IStatus.ERROR, // severity
                             AdtPlugin.PLUGIN_ID, //plugin id
                             IStatus.ERROR, // code
-                            "Invalid selection", // msg, translatable 
+                            "Invalid selection", // msg, translatable
                             null); // exception
                 }
             }
         });
-        
+
         // Determine the initial selection using a couple heuristics.
-        
+
         // First check if we can get the last used node type for this file.
         // The heuristic is that generally one keeps adding the same kind of items to the
         // same file, so reusing the last used item type makes most sense.
@@ -165,7 +165,7 @@
                 }
             }
         }
-        
+
         return null;
     }
 
@@ -184,13 +184,13 @@
                     IFile f = ((FileEditorInput) editorInput).getFile();
                     if (f != null) {
                         mLastUsedKey = f.getFullPath().toPortableString();
-    
+
                         return sLastUsedXmlName.get(mLastUsedKey);
                     }
                 }
             }
         }
-        
+
         return null;
     }
 
@@ -216,7 +216,7 @@
         if (ui_node != null) {
             TreeMap<String, Integer> counts = new TreeMap<String, Integer>();
             int max = -1;
-            
+
             for (UiElementNode child : ui_node.getUiChildren()) {
                 String name = child.getDescriptor().getXmlName();
                 Integer i = counts.get(name);
@@ -257,15 +257,15 @@
 
     /**
      * Creates the dialog area.
-     * 
+     *
      * First add a radio area, which may be either 2 radio controls or
      * just a message area if there's only one choice (the app root node).
-     * 
+     *
      * Then uses the default from the AbstractElementListSelectionDialog
      * which is to add both a filter text and a filtered list. Adding both
      * is necessary (since the base class accesses both internal directly
-     * fields without checking for null pointers.) 
-     * 
+     * fields without checking for null pointers.)
+     *
      * Finally sets the initial selection list.
      */
     @Override
@@ -279,12 +279,12 @@
         // Initialize the list state.
         // This must be done after the filtered list as been created.
         chooseNode(mChosenRootNode);
-        
+
         // Set the initial selection
         setInitialSelection(mChosenRootNode);
         return contents;
     }
-    
+
     /**
      * Tries to set the initial selection based on the {@link #mInitialXmlName} computed
      * in the constructor. The selection is only set if there's an element descriptor
@@ -301,7 +301,7 @@
             if (partial) {
                 name = name.substring(1).toLowerCase();
             }
-            
+
             for (ElementDescriptor desc : getAllowedDescriptors(rootNode)) {
                 if (!partial && desc.getXmlName().equals(name)) {
                     initialElement = desc;
@@ -315,7 +315,7 @@
                 }
             }
         }
-        
+
         setSelection(initialElement == null ? null : new ElementDescriptor[] { initialElement });
     }
 
@@ -324,7 +324,7 @@
      * @param content the parent composite of the message area.
      */
     private Composite createRadioControl(Composite content) {
-        
+
         if (mSelectedUiNode != null) {
             Button radio1 = new Button(content, SWT.RADIO);
             radio1.setText(String.format("Create a new element at the top level, in %1$s.",
@@ -339,7 +339,7 @@
             radio1.setSelection(false);
             radio2.setSelection(true);
             mChosenRootNode = mSelectedUiNode;
-            
+
             radio1.addSelectionListener(new SelectionAdapter() {
                 @Override
                 public void widgetSelected(SelectionEvent e) {
@@ -347,7 +347,7 @@
                     chooseNode(mLocalRootNode);
                 }
             });
-            
+
             radio2.addSelectionListener(new SelectionAdapter() {
                 @Override
                 public void widgetSelected(SelectionEvent e) {
@@ -362,7 +362,7 @@
 
             mChosenRootNode = mLocalRootNode;
         }
-         
+
         return content;
     }
 
@@ -370,11 +370,11 @@
      * Internal helper to remember the root node choosen by the user.
      * It also sets the list view to the adequate list of children that can
      * be added to the chosen root node.
-     * 
+     *
      * If the chosen root node is mLocalRootNode and a descriptor filter was specified
      * when creating the master-detail part, we use this as the set of nodes that
      * can be created on the root node.
-     * 
+     *
      * @param ui_node The chosen root node, either mLocalRootNode or
      *                mSelectedUiNode.
      */
@@ -386,12 +386,12 @@
     /**
      * Returns the list of {@link ElementDescriptor}s that can be added to the given
      * UI node.
-     * 
+     *
      * @param ui_node The UI node to which element should be added. Cannot be null.
      * @return A non-null array of {@link ElementDescriptor}. The array might be empty.
      */
     private ElementDescriptor[] getAllowedDescriptors(UiElementNode ui_node) {
-        if (ui_node == mLocalRootNode && 
+        if (ui_node == mLocalRootNode &&
                 mDescriptorFilters != null &&
                 mDescriptorFilters.length != 0) {
             return mDescriptorFilters;
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/descriptors/XmlDescriptors.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/descriptors/XmlDescriptors.java
index d393bee..600db1b 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/descriptors/XmlDescriptors.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/editors/xml/descriptors/XmlDescriptors.java
@@ -282,7 +282,7 @@
                 ElementDescriptor desc = convertPref(info);
                 newGroups.add(desc);
                 
-                if (info.getCanonicalClassName() == AndroidConstants.CLASS_PREFERENCES) {
+                if (info.getFullClassName() == AndroidConstants.CLASS_PREFERENCES) {
                     topPreferences = desc;
                 }
             }
@@ -353,7 +353,7 @@
 
         return new ViewElementDescriptor(xml_name,
                 xml_name, // ui_name
-                info.getCanonicalClassName(),
+                info.getFullClassName(),
                 tooltip,
                 null, // sdk_url
                 attributes.toArray(new AttributeDescriptor[attributes.size()]),
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ViewClassInfo.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ViewClassInfo.java
index 23eb1e4..2e61544 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ViewClassInfo.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/ViewClassInfo.java
@@ -27,23 +27,23 @@
     /** Is this a layout class (i.e. ViewGroup) or just a view? */
     private boolean mIsLayout;
     /** FQCN e.g. android.view.View, never null. */
-    private String mCanonicalClassName;
+    private String mFullClassName;
     /** Short class name, e.g. View, never null. */
     private String mShortClassName;
     /** Super class. Can be null. */
     private ViewClassInfo mSuperClass;
     /** Short javadoc. Can be null. */
-    private String mJavaDoc;    
+    private String mJavaDoc;
     /** Attributes for this view or view group. Can be empty but never null. */
     private AttributeInfo[] mAttributes;
-    
+
     public static class LayoutParamsInfo {
         /** Short class name, e.g. LayoutData, never null. */
         private String mShortClassName;
         /** ViewLayout class info owning this layout data */
         private ViewClassInfo mViewLayoutClass;
         /** Super class. Can be null. */
-        private LayoutParamsInfo mSuperClass; 
+        private LayoutParamsInfo mSuperClass;
         /** Layout Data Attributes for layout classes. Can be empty but not null. */
         private AttributeInfo[] mAttributes;
 
@@ -54,7 +54,7 @@
             mSuperClass = superClassInfo;
             mAttributes = new AttributeInfo[0];
         }
-        
+
         /** Returns short class name, e.g. "LayoutData" */
         public String getShortClassName() {
             return mShortClassName;
@@ -82,22 +82,22 @@
     public LayoutParamsInfo mLayoutData;
 
     // --------
-    
-    public ViewClassInfo(boolean isLayout, String canonicalClassName, String shortClassName) {
+
+    public ViewClassInfo(boolean isLayout, String fullClassName, String shortClassName) {
         mIsLayout = isLayout;
-        mCanonicalClassName = canonicalClassName;
+        mFullClassName = fullClassName;
         mShortClassName = shortClassName;
         mAttributes = new AttributeInfo[0];
     }
-    
+
     /** Returns whether this is a layout class (i.e. ViewGroup) or just a View */
     public boolean isLayout() {
         return mIsLayout;
     }
 
     /** Returns FQCN e.g. "android.view.View" */
-    public String getCanonicalClassName() {
-        return mCanonicalClassName;
+    public String getFullClassName() {
+        return mFullClassName;
     }
 
     /** Returns short class name, e.g. "View" */