public void run(IAction action) {
   if (project == null) {
     return;
   }
   if (cpEntry != null) {
     // update the restrictions on this classpath element
     // although the element probably already is on the aspect/in path, we can ensure it's on, just
     // in case
     IClasspathEntry newEntry = cpEntry;
     if (shouldAskForClasspathRestrictions(cpEntry)) {
       String currRestriction =
           AspectJCorePreferences.getRestriction(
               cpEntry, AspectJCorePreferences.INPATH_RESTRICTION_ATTRIBUTE_NAME);
       String restriction = askForClasspathRestrictions(newEntry, currRestriction, "In path");
       if (restriction != null) {
         newEntry =
             AspectJCorePreferences.updatePathRestrictions(
                 newEntry, restriction, AspectJCorePreferences.INPATH_RESTRICTION_ATTRIBUTE_NAME);
       } else {
         newEntry =
             AspectJCorePreferences.ensureHasAttribute(
                 newEntry, AspectJCorePreferences.INPATH_RESTRICTION_ATTRIBUTE_NAME, "");
       }
     }
     newEntry =
         AspectJCorePreferences.ensureHasAttribute(
             newEntry,
             AspectJCorePreferences.INPATH_ATTRIBUTE_NAME,
             AspectJCorePreferences.INPATH_ATTRIBUTE_NAME);
     AspectJCorePreferences.updateClasspathEntry(project, newEntry);
   }
   AJDTUtils.refreshPackageExplorer();
 }
 public void selectionChanged(IAction action, ISelection sel) {
   boolean enable = false;
   if (sel instanceof IStructuredSelection) {
     IStructuredSelection selection = (IStructuredSelection) sel;
     Object element = selection.getFirstElement();
     try {
       if (element instanceof IPackageFragmentRoot) {
         IPackageFragmentRoot root = (IPackageFragmentRoot) element;
         project = root.getJavaProject().getProject();
         cpEntry = root.getRawClasspathEntry();
         if (cpEntry.getEntryKind() == IClasspathEntry.CPE_CONTAINER) {
           fileName = root.getElementName();
           enable = AspectJCorePreferences.isOnInpath(cpEntry);
         } else {
           fileName = null;
           cpEntry = null;
           project = null;
           enable = false;
         }
       } else {
         enable = false;
       }
     } catch (JavaModelException e) {
     }
     action.setEnabled(enable);
   }
 }
  protected void setUp() throws Exception {
    super.setUp();
    origFactory = AspectJPlugin.getDefault().getCompilerFactory();
    AspectJPlugin.getDefault().setCompilerFactory(new MockCompilerFactory());

    Utils.setAutobuilding(true);

    proj2 = createPredefinedProject("ExportAsJar");
    AspectJCorePreferences.setProjectOutJar(proj2, "export.jar");
    proj2.build(IncrementalProjectBuilder.FULL_BUILD, null);
    proj1 = createPredefinedProject("JarOnInpath");
    waitForAutoBuild();
  }
  /** should cause location manager to be refreshed */
  public void testOutjarChangedChanged() {
    // first build of proj1 is full build, so should have been flushed, but is a noop since started
    // out as null
    assertTrue(proj1 + "'s OutputLocationManager should have been flushed", hasBeenFlushed());
    assertFalse(
        proj1 + "'s OutputLocationManager's binToProject map should not have been zapped",
        hasBeenZapped());
    unflush();
    AspectJCorePreferences.setProjectOutJar(proj1, "out.jar");
    waitForAutoBuild();

    assertTrue(
        proj1 + "'s OutputLocationManager should not have been flushed after change to out jar",
        hasBeenFlushed());
  }
  /** should cause location manager to be refreshed */
  public void testInpathChanged() throws Exception {
    // first build of proj1 is full build, so should have been flushed, but is a noop since started
    // out as null
    assertTrue(proj1 + "'s OutputLocationManager should have been flushed", hasBeenFlushed());
    assertFalse(
        proj1 + "'s OutputLocationManager's binToProject map should not have been zapped",
        hasBeenZapped());
    unflush();
    AspectJCorePreferences.removeFromInPath(proj1, getClasspathEntry());
    waitForAutoBuild();

    assertTrue(
        proj1 + "'s OutputLocationManager should not have been flushed after change to in path",
        hasBeenFlushed());
  }