title: Triggering 'extract method' in Eclipse Refactoring/LTK API
body: <p>I am currently developing an Eclipse Plug-In that will let me trigger refactorings, using gestures.
  I've been trying to trigger  'extract method' programmatically in Eclipse for a while now but I am constantly running into issues.
  Most suggestions I have found while searching for a solution require the use of internal classes.</p>
  
  <p>I am now stuck at this code template. The issue is that I find no place where I could give the code I want to extract as ISelection or something similar.</p>
  
  <pre><code>RefactoringContribution rc = RefactoringCore.getRefactoringContribution(IJavaRefactorings.EXTRACT_METHOD);
  ExtractMethodDescriptor rd = (ExtractMethodDescriptor) rc.createDescriptor();
  
  rd.setProject(staticHelper.getIProject().getName());
  //There should be some more rd.setXXXXX() here.
  
  RefactoringStatus rs = new RefactoringStatus();
  
  try {
      Refactoring r = rd.createRefactoring(rs);
      IProgressMonitor pm = new NullProgressMonitor();
  
      r.checkInitialConditions(pm);
      r.checkFinalConditions(pm);
  
      Change change = r.createChange(pm);
      change.perform(pm);
  }
  
  catch(Exception e) {e.printStackTrace();}
  }
  </code></pre>
  
  <p>The following method works, but it uses the internal API:</p>
  
  <pre><code>@SuppressWarnings("restriction")    //Works but is INTERNAL USE ONLY
  public static void extractMethodRefactoring() {
      ITextSelection selection = staticHelper.getITextSelection();
      int start = selection.getOffset();
      int length = selection.getLength();
  
  
      //The following line is part of the internal API
      ExtractMethodRefactoring tempR = new ExtractMethodRefactoring(staticHelper.getICompilationUnit(), start, length);
  
      try {
          NullProgressMonitor pm = new NullProgressMonitor();
          tempR.checkAllConditions(pm);
          Change change = tempR.createChange(pm);
          change.perform(pm);
      } catch (Exception e) {e.printStackTrace();}
  
  }
  </code></pre>
  
  <p>Again this requires the internal class ExtractMethodRefactoring, which should not be used.</p>