Package org.aspectj.org.eclipse.jdt.internal.core.search

Source Code of org.aspectj.org.eclipse.jdt.internal.core.search.JavaWorkspaceScope

/*******************************************************************************
* Copyright (c) 2000, 2006 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     IBM Corporation - initial API and implementation
*******************************************************************************/
package org.aspectj.org.eclipse.jdt.internal.core.search;

import java.util.HashSet;

import org.eclipse.core.runtime.IPath;
import org.aspectj.org.eclipse.jdt.core.IJavaElement;
import org.aspectj.org.eclipse.jdt.core.IJavaElementDelta;
import org.aspectj.org.eclipse.jdt.core.JavaModelException;
import org.aspectj.org.eclipse.jdt.internal.compiler.env.AccessRuleSet;
import org.aspectj.org.eclipse.jdt.internal.core.JavaModelManager;
import org.aspectj.org.eclipse.jdt.internal.core.JavaProject;
import org.aspectj.org.eclipse.jdt.core.IJavaProject;

/**
* A Java-specific scope for searching the entire workspace.
* The scope can be configured to not search binaries. By default, binaries
* are included.
*/
public class JavaWorkspaceScope extends JavaSearchScope {

protected boolean needsInitialize;

public boolean encloses(IJavaElement element) {
  /*
  if (this.needsInitialize) {
    this.initialize();
  }
  return super.encloses(element);
  */
  /*A workspace scope encloses all java elements (this assumes that the index selector
   * and thus enclosingProjectAndJars() returns indexes on the classpath only and that these
   * indexes are consistent.)
   * NOTE: Returning true gains 20% of a hierarchy build on Object
   */
  return true;
}
public boolean encloses(String resourcePathString) {
  /*
  if (this.needsInitialize) {
    this.initialize();
  }
  return super.encloses(resourcePathString);
  */
  /*A workspace scope encloses all resources (this assumes that the index selector
   * and thus enclosingProjectAndJars() returns indexes on the classpath only and that these
   * indexes are consistent.)
   * NOTE: Returning true gains 20% of a hierarchy build on Object
   */
  return true;
}
public IPath[] enclosingProjectsAndJars() {
  if (this.needsInitialize) {
    this.initialize(5);
  }
  return super.enclosingProjectsAndJars();
}
public boolean equals(Object o) {
  return o instanceof JavaWorkspaceScope;
}
public AccessRuleSet getAccessRuleSet(String relativePath, String containerPath) {
  if (this.pathRestrictions == null)
    return null;
  return super.getAccessRuleSet(relativePath, containerPath);
}
public int hashCode() {
  return JavaWorkspaceScope.class.hashCode();
}
public void initialize(int size) {
  super.initialize(size);
  try {
    IJavaProject[] projects = JavaModelManager.getJavaModelManager().getJavaModel().getJavaProjects();
    for (int i = 0, length = projects.length; i < length; i++) {
      int includeMask = SOURCES | APPLICATION_LIBRARIES | SYSTEM_LIBRARIES;
      add((JavaProject) projects[i], null, includeMask, new HashSet(length*2, 1), null);
    }
  } catch (JavaModelException ignored) {
    // ignore
  }
  this.needsInitialize = false;
}
public void processDelta(IJavaElementDelta delta) {
  if (this.needsInitialize) return;
  IJavaElement element = delta.getElement();
  switch (element.getElementType()) {
    case IJavaElement.JAVA_MODEL:
      IJavaElementDelta[] children = delta.getAffectedChildren();
      for (int i = 0, length = children.length; i < length; i++) {
        IJavaElementDelta child = children[i];
        this.processDelta(child);
      }
      break;
    case IJavaElement.JAVA_PROJECT:
      int kind = delta.getKind();
      switch (kind) {
        case IJavaElementDelta.ADDED:
        case IJavaElementDelta.REMOVED:
          this.needsInitialize = true;
          break;
        case IJavaElementDelta.CHANGED:
          int flags = delta.getFlags();
          if ((flags & IJavaElementDelta.F_CLOSED) != 0
              || (flags & IJavaElementDelta.F_OPENED) != 0) {
            this.needsInitialize = true;
          } else {
            children = delta.getAffectedChildren();
            for (int i = 0, length = children.length; i < length; i++) {
              IJavaElementDelta child = children[i];
              this.processDelta(child);
            }
          }
          break;
      }
      break;
    case IJavaElement.PACKAGE_FRAGMENT_ROOT:
      kind = delta.getKind();
      switch (kind) {
        case IJavaElementDelta.ADDED:
        case IJavaElementDelta.REMOVED:
          this.needsInitialize = true;
          break;
        case IJavaElementDelta.CHANGED:
          int flags = delta.getFlags();
          if ((flags & IJavaElementDelta.F_ADDED_TO_CLASSPATH) > 0
            || (flags & IJavaElementDelta.F_REMOVED_FROM_CLASSPATH) > 0) {
            this.needsInitialize = true;
          }
          break;
      }
      break;
  }
}
public String toString() {
  return "JavaWorkspaceScope"; //$NON-NLS-1$
}
}
TOP

Related Classes of org.aspectj.org.eclipse.jdt.internal.core.search.JavaWorkspaceScope

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.