private void inspectExtension(ISchema schema, IPluginParent parent, IFile file) {
    IPluginObject[] children = parent.getChildren();

    if (parent instanceof PluginElementNode && parent.getParent() instanceof PluginElementNode) {
      // check if this node corresponds to a Java type attribute which would have been defined has
      // an element
      PluginElementNode node = (PluginElementNode) parent;
      PluginElementNode parentNode = (PluginElementNode) parent.getParent();
      ISchemaElement schemaElement = schema.findElement(parentNode.getName());
      if (schemaElement != null) {
        ISchemaAttribute attInfo = schemaElement.getAttribute(node.getName());
        if (attInfo != null && attInfo.getKind() == IMetaAttribute.JAVA)
          checkMatch(node.getAttribute("class"), file); // $NON-NLS-1$
      }
    }

    for (int i = 0; i < children.length; i++) {
      IPluginElement child = (IPluginElement) children[i];
      ISchemaElement schemaElement = schema.findElement(child.getName());
      if (schemaElement != null) {
        IPluginAttribute[] attributes = child.getAttributes();
        for (int j = 0; j < attributes.length; j++) {
          IPluginAttribute attr = attributes[j];
          ISchemaAttribute attInfo = schemaElement.getAttribute(attr.getName());
          if (attInfo != null
              && attInfo.getKind() == IMetaAttribute.JAVA
              && attr instanceof IDocumentAttributeNode) checkMatch(attr, file);
        }
      }
      inspectExtension(schema, child, file);
    }
  }
  @Override
  protected UnitCompilerDescriptor createDescriptor(IPluginElement extPointElement) {
    if (extPointElement.getName().equals("unitcompiler")) {
      String instrName = extPointElement.getAttribute("name").getValue();
      String instrClass = extPointElement.getAttribute("class").getValue();

      boolean enabled =
          Boolean.parseBoolean(extPointElement.getAttribute("defaultEnabled").getValue());
      IReportableUnitCompiler.Level defaultLevel = IReportableUnitCompiler.Level.IGNORE;

      try {
        String level = extPointElement.getAttribute("report").getValue();
        defaultLevel = IReportableUnitCompiler.Level.valueOf(level.toUpperCase());
      } catch (Exception e) {
        // noop
      }

      StringBuilder instrDesc = new StringBuilder();
      for (IPluginObject child : extPointElement.getChildren()) {
        IPluginElement childElement = (IPluginElement) child;
        if (childElement.getName().equals("description"))
          instrDesc.append(childElement.getText()).append(" ");
      }

      if (LOGGER.isDebugEnabled())
        LOGGER.debug(
            "Adding extension of unitcompiler from "
                + extPointElement.getPluginBase().getId()
                + " named:"
                + instrName
                + " class:"
                + instrClass
                + " desc:"
                + instrDesc);

      return new UnitCompilerDescriptor(
          extPointElement.getPluginBase().getId(),
          instrName,
          instrClass,
          instrDesc.toString(),
          enabled,
          defaultLevel);
    } else
      throw new IllegalArgumentException(
          "Was expecting unitcompiler tag, got " + extPointElement.getName());
  }
 private void updateUIDescriptionText(IPluginElement parentElement) {
   IPluginObject pluginObject = parentElement.getChildren()[0];
   if (pluginObject instanceof IPluginElement) {
     IPluginElement element = (IPluginElement) pluginObject;
     if (element.getName().equals(F_CS_ELEMENT_DESCRIPTION)
         && PDETextHelper.isDefinedAfterTrim(element.getText())) {
       // Triggers listener to update data description on load
       fDescriptionText.setText(element.getText().trim());
     }
   }
 }
 private void processCategoryElements(IPluginExtension[] extensions) {
   // Linear search:  Process all cheat sheet extensions found
   for (int i = 0; i < extensions.length; i++) {
     if (extensions[i].getChildCount() == 0) {
       // Extension has no children, skip to the next extension
       continue;
     }
     IPluginExtension extension = extensions[i];
     IPluginObject[] pluginObjects = extension.getChildren();
     // Process all children
     for (int j = 0; j < pluginObjects.length; j++) {
       if (pluginObjects[j] instanceof IPluginElement) {
         IPluginElement element = (IPluginElement) pluginObjects[j];
         if (element.getName().equals(F_CS_ELEMENT_CATEGORY)) {
           // Category element
           // Update the category combo
           updateUICategoryComboElement(element);
         }
       }
     }
   }
 }
 private void processCheatSheetElements(IPluginExtension[] extensions) {
   // Query cheat sheet extensions for information required to update
   // the description text and category combo widgets
   // Linear search:  Process all cheat sheet extensions found
   for (int i = 0; i < extensions.length; i++) {
     if (extensions[i].getChildCount() == 0) {
       // Extension has no children, skip to the next extension
       continue;
     }
     IPluginExtension extension = extensions[i];
     IPluginObject[] pluginObjects = extension.getChildren();
     // Process all children
     for (int j = 0; j < pluginObjects.length; j++) {
       if (pluginObjects[j] instanceof IPluginElement) {
         IPluginElement element = (IPluginElement) pluginObjects[j];
         if (element.getName().equals(F_CS_ELEMENT_CHEATSHEET)) {
           // Cheat sheet element
           processCheatSheetElement(element, fDataCheatSheetID);
         }
       }
     }
   }
 }