From e8d5ba4bd5c86487127a3da17b1f2d636a110873 Mon Sep 17 00:00:00 2001 From: Raphael Moll <> Date: Tue, 14 Apr 2009 16:57:57 -0700 Subject: [PATCH] AI 146250: am: CL 146238 ADT #1761064: Properly refresh UiTreeBlock when SDK is reloaded. The fix I did last week was just refreshing the UiRootNode but it turns out we need to refresh the DescriptorFilters too (since they are null when there's no SDK.) So the old fix was wrong, what we need is to generate a new tree model when the SDK is reloaded. Original author: raphael Merged from: //branches/cupcake/... Automated import of CL 146250 --- .../ui/tree/UiModelTreeContentProvider.java | 13 +++++---- .../editors/ui/tree/UiRootNodeProvider.java | 27 ------------------- .../eclipse/editors/ui/tree/UiTreeBlock.java | 7 ++--- 3 files changed, 10 insertions(+), 37 deletions(-) delete mode 100644 tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiRootNodeProvider.java diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java index 30919926b..396b309f3 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiModelTreeContentProvider.java @@ -33,12 +33,12 @@ class UiModelTreeContentProvider implements ITreeContentProvider { /** The descriptor of the elements to be displayed as root in this tree view. All elements * of the same type in the root will be displayed. */ private ElementDescriptor[] mDescriptorFilters; - /** Object which provides the uiRootNode */ - private final UiRootNodeProvider mUiRootNodeProvider; + /** The uiRootNode of the model. */ + private final UiElementNode mUiRootNode; - public UiModelTreeContentProvider(UiRootNodeProvider rootNodeProvider, + public UiModelTreeContentProvider(UiElementNode uiRootNode, ElementDescriptor[] descriptorFilters) { - mUiRootNodeProvider = rootNodeProvider; + mUiRootNode = uiRootNode; mDescriptorFilters = descriptorFilters; } @@ -86,9 +86,8 @@ class UiModelTreeContentProvider implements ITreeContentProvider { */ public Object[] getElements(Object inputElement) { ArrayList roots = new ArrayList(); - UiElementNode uiRootNode = mUiRootNodeProvider.getRootNode(); - if (uiRootNode != null) { - for (UiElementNode ui_node : uiRootNode.getUiChildren()) { + if (mUiRootNode != null) { + for (UiElementNode ui_node : mUiRootNode.getUiChildren()) { if (mDescriptorFilters == null || mDescriptorFilters.length == 0) { roots.add(ui_node); } else { diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiRootNodeProvider.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiRootNodeProvider.java deleted file mode 100644 index 5121e3546..000000000 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiRootNodeProvider.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2009 The Android Open Source Project - * - * Licensed under the Eclipse Public License, Version 1.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.eclipse.org/org/documents/epl-v10.php - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.ide.eclipse.editors.ui.tree; - -import com.android.ide.eclipse.editors.uimodel.UiElementNode; - -/** - * An object that can provide a uiRootNode. - */ -public interface UiRootNodeProvider { - /** Returns the UiDocumentNode for the current model. */ - public abstract UiElementNode getRootNode(); -} diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java index 8038a47de..e1986e527 100644 --- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java +++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/editors/ui/tree/UiTreeBlock.java @@ -83,8 +83,7 @@ import java.util.LinkedList; * On the left is a details part that displays all the visible UI attributes for a given * selected UI element node. */ -public final class UiTreeBlock extends MasterDetailsBlock - implements ICommitXml, UiRootNodeProvider { +public final class UiTreeBlock extends MasterDetailsBlock implements ICommitXml { /** Height hint for the tree view. Helps the grid layout resize properly on smaller screens. */ private static final int TREE_HEIGHT_HINT = 50; @@ -251,7 +250,7 @@ public final class UiTreeBlock extends MasterDetailsBlock tree.setLayoutData(gd); mTreeViewer = new TreeViewer(tree); - mTreeViewer.setContentProvider(new UiModelTreeContentProvider(this, mDescriptorFilters)); + mTreeViewer.setContentProvider(new UiModelTreeContentProvider(mUiRootNode, mDescriptorFilters)); mTreeViewer.setLabelProvider(new UiModelTreeLabelProvider()); mTreeViewer.setInput("unused"); //$NON-NLS-1$ @@ -380,6 +379,8 @@ public final class UiTreeBlock extends MasterDetailsBlock mUiRootNode = uiRootNode; mDescriptorFilters = descriptorFilters; + mTreeViewer.setContentProvider(new UiModelTreeContentProvider(mUiRootNode, mDescriptorFilters)); + // Listen on structural changes on the root node of the tree // If the node has a parent, listen on the parent instead. node = mUiRootNode.getUiParent() != null ? mUiRootNode.getUiParent() : mUiRootNode;