/** * Creates the initial UI Root Node, including the known mandatory elements. * * @param force if true, a new UiManifestNode is recreated even if it already exists. */ @Override protected void initUiRootNode(boolean force) { // The manifest UI node is always created, even if there's no corresponding XML node. if (mUiManifestNode != null && force == false) { return; } AndroidManifestDescriptors manifestDescriptor = getManifestDescriptors(); if (manifestDescriptor != null) { ElementDescriptor manifestElement = manifestDescriptor.getManifestElement(); mUiManifestNode = manifestElement.createUiNode(); mUiManifestNode.setEditor(this); // Similarly, always create the /manifest/uses-sdk followed by /manifest/application // (order of the elements now matters) ElementDescriptor element = manifestDescriptor.getUsesSdkElement(); boolean present = false; for (UiElementNode ui_node : mUiManifestNode.getUiChildren()) { if (ui_node.getDescriptor() == element) { present = true; break; } } if (!present) { mUiManifestNode.appendNewUiChild(element); } element = manifestDescriptor.getApplicationElement(); present = false; for (UiElementNode ui_node : mUiManifestNode.getUiChildren()) { if (ui_node.getDescriptor() == element) { present = true; break; } } if (!present) { mUiManifestNode.appendNewUiChild(element); } onDescriptorsChanged(); } else { // create a dummy descriptor/uinode until we have real descriptors ElementDescriptor desc = new ElementDescriptor( "manifest", //$NON-NLS-1$ "temporary descriptors due to missing decriptors", //$NON-NLS-1$ null /*tooltip*/, null /*sdk_url*/, null /*attributes*/, null /*children*/, false /*mandatory*/); mUiManifestNode = desc.createUiNode(); mUiManifestNode.setEditor(this); } }