Search code examples
phpeclipse-plugineclipse-pde

How to give PHP nature to a eclipse plugin


I have created a plugin for a Custom framework , i need to give it a php nature so that while developing using this plugin the developer can use the features of php. Currently i am using custom nature. But i do not know how to switch to a php nature. My plugin.xml looks like this.

<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.4"?>
<plugin>
   <extension
         point="org.eclipse.ui.newWizards">
      <category
            id="rudraxplugin.category.wizards"
            name="%category.name">
      </category>
      <wizard
            category="rudraxplugin.category.wizards"
            class="rudraxplugin.wizards.CustomProjectNewWizard"
            finalPerspective="rudraxplugin.perspective"
            id="rudraxplugin.wizard.new.custom"
            name="%wizard.name">
      </wizard>
   </extension>
   <extension
         point="org.eclipse.ui.views">
      <view
            class="org.eclipse.ui.navigator.CommonNavigator"
            icon="icons/sample.gif"
            id="rudraxplugin.navigator"
            name="%view.name">
      </view>
   </extension>
   <extension
         point="org.eclipse.ui.navigator.viewer">
      <viewerActionBinding
            viewerId="rudraxplugin.navigator">
         <includes>
            <actionExtension
                  pattern="org.eclipse.ui.navigator.resources.*">
            </actionExtension>
         </includes>
      </viewerActionBinding>
      <viewerContentBinding
            viewerId="rudraxplugin.navigator">
         <includes>
            <contentExtension
                  pattern="org.eclipse.ui.navigator.resourceContent">
            </contentExtension>
            <contentExtension
                  pattern="org.eclipse.ui.navigator.resources.filters.*">
            </contentExtension>
            <contentExtension
                  pattern="org.eclipse.ui.navigator.resources.linkHelper">
            </contentExtension>
            <contentExtension
                  pattern="org.eclipse.ui.navigator.resources.workingSets">
            </contentExtension>
         </includes>
      </viewerContentBinding>
   </extension>
   <extension
         point="org.eclipse.ui.perspectives">
      <perspective
            class="rudraxplugin.perspectives.Perspective"
            id="rudraxplugin.perspective"
            name="%perspective.name">
      </perspective>
   </extension>
   <extension
         point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension
            targetID="rudraxplugin.perspective">
         <view
               id="rudraxplugin.navigator"
               minimized="false"
               ratio="0.25"
               relationship="left"
               relative="org.eclipse.ui.editorss">
         </view>
      </perspectiveExtension>
   </extension>
   <extension
         id="rudraxplugin.projectNature"
         point="org.eclipse.core.resources.natures">
      <runtime>
         <run
               class="rudraxplugin.natures.ProjectNature">
         </run>
      </runtime>
   </extension>

</plugin>

Also i have used this tutorial to go through the development process.

https://cvalcarcel.wordpress.com/2009/07/08/

Any help will be appreciated.


Solution

  • Use the following code to add a nature to a project:

    IProject project = .... get the project you want to modify
    
    IProjectDescription description = project.getDescription();
    
    String [] natures = description.getNatureIds();
    
    String [] newNatures = new String[natures.length + 1];
    
    System.arraycopy(natures, 0, newNatures, 0, natures.length);
    
    newNatures[natures.length] = "org.eclipse.php.core.PHPNature";
    
    description.setNatureIds(newNatures);
    
    project.setDescription(description, null);