org.aspectj.org.eclipse.jdt.internal.core.DiscardWorkingCopyOperation Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of aspectjtools Show documentation
Show all versions of aspectjtools Show documentation
AspectJ tools most notably contains the AspectJ compiler (AJC). AJC applies aspects to Java classes during
compilation, fully replacing Javac for plain Java classes and also compiling native AspectJ or annotation-based
@AspectJ syntax. Furthermore, AJC can weave aspects into existing class files in a post-compile binary weaving step.
This library is a superset of AspectJ weaver and hence also of AspectJ runtime.
/*******************************************************************************
* Copyright (c) 2000, 2015 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
* Stephan Herrmann - Contribution for
* Bug 458577 - IClassFile.getWorkingCopy() may lead to NPE in BecomeWorkingCopyOperation
*******************************************************************************/
package org.aspectj.org.eclipse.jdt.internal.core;
import org.eclipse.core.resources.IResource;
import org.aspectj.org.eclipse.jdt.core.IJavaElement;
import org.aspectj.org.eclipse.jdt.core.IJavaElementDelta;
import org.aspectj.org.eclipse.jdt.core.IJavaProject;
import org.aspectj.org.eclipse.jdt.core.JavaModelException;
/**
* Discards a working copy (decrement its use count and remove its working copy info if the use count is 0)
* and signal its removal through a delta.
*/
public class DiscardWorkingCopyOperation extends JavaModelOperation {
public DiscardWorkingCopyOperation(IJavaElement workingCopy) {
super(new IJavaElement[] {workingCopy});
}
@Override
protected void executeOperation() throws JavaModelException {
CompilationUnit workingCopy = getWorkingCopy();
JavaModelManager manager = JavaModelManager.getJavaModelManager();
int useCount = manager.discardPerWorkingCopyInfo(workingCopy);
if (useCount == 0) {
IJavaProject javaProject = workingCopy.getJavaProject();
if (ExternalJavaProject.EXTERNAL_PROJECT_NAME.equals(javaProject.getElementName())) {
manager.removePerProjectInfo((JavaProject) javaProject, true /* remove external jar files indexes and timestamps*/);
manager.containerRemove(javaProject);
}
if (!workingCopy.isPrimary()) {
// report removed java delta for a non-primary working copy
JavaElementDelta delta = new JavaElementDelta(getJavaModel());
delta.removed(workingCopy);
addDelta(delta);
removeReconcileDelta(workingCopy);
} else {
IResource resource = workingCopy.getResource();
if (resource != null) {
if (resource.isAccessible()) {
// report a F_PRIMARY_WORKING_COPY change delta for a primary working copy
JavaElementDelta delta = new JavaElementDelta(getJavaModel());
delta.changed(workingCopy, IJavaElementDelta.F_PRIMARY_WORKING_COPY);
addDelta(delta);
} else {
// report a REMOVED delta
JavaElementDelta delta = new JavaElementDelta(getJavaModel());
delta.removed(workingCopy, IJavaElementDelta.F_PRIMARY_WORKING_COPY);
addDelta(delta);
}
}
}
}
}
/**
* Returns the working copy this operation is working on.
*/
protected CompilationUnit getWorkingCopy() {
return (CompilationUnit)getElementToProcess();
}
/**
* @see JavaModelOperation#isReadOnly
*/
@Override
public boolean isReadOnly() {
return true;
}
}