All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.aspectj.org.eclipse.jdt.internal.core.CreatePackageFragmentOperation Maven / Gradle / Ivy

Go to download

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.

There is a newer version: 1.9.22.1
Show newest version
/*******************************************************************************
 * Copyright (c) 2000, 2013 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
 *******************************************************************************/
package org.aspectj.org.eclipse.jdt.internal.core;

import java.util.ArrayList;

import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.jobs.ISchedulingRule;
import org.aspectj.org.eclipse.jdt.core.IJavaElement;
import org.aspectj.org.eclipse.jdt.core.IJavaModelStatus;
import org.aspectj.org.eclipse.jdt.core.IJavaModelStatusConstants;
import org.aspectj.org.eclipse.jdt.core.IJavaProject;
import org.aspectj.org.eclipse.jdt.core.IPackageFragment;
import org.aspectj.org.eclipse.jdt.core.IPackageFragmentRoot;
import org.aspectj.org.eclipse.jdt.core.JavaConventions;
import org.aspectj.org.eclipse.jdt.core.JavaCore;
import org.aspectj.org.eclipse.jdt.core.JavaModelException;
import org.aspectj.org.eclipse.jdt.core.compiler.CharOperation;
import org.aspectj.org.eclipse.jdt.internal.core.util.Messages;
import org.aspectj.org.eclipse.jdt.internal.core.util.Util;

/**
 * This operation creates a new package fragment under a given package fragment root.
 * The following must be specified: 
    *
  • the package fragment root *
  • the package name *
*

Any needed folders/package fragments are created. * If the package fragment already exists, this operation has no effect. * The result elements include the IPackageFragment created and any side effect * package fragments that were created. * *

NOTE: A default package fragment exists by default for a given root. * *

Possible exception conditions:

    *
  • Package fragment root is read-only *
  • Package fragment's name is taken by a simple (non-folder) resource *
*/ @SuppressWarnings({"rawtypes", "unchecked"}) public class CreatePackageFragmentOperation extends JavaModelOperation { /** * The fully qualified, dot-delimited, package name. */ protected String[] pkgName; /** * When executed, this operation will create a package fragment with the given name * under the given package fragment root. The dot-separated name is broken into * segments. Intermediate folders are created as required for each segment. * If the folders already exist, this operation has no effect. */ public CreatePackageFragmentOperation(IPackageFragmentRoot parentElement, String packageName, boolean force) { super(null, new IJavaElement[]{parentElement}, force); this.pkgName = packageName == null ? null : Util.getTrimmedSimpleNames(packageName); } /** * Execute the operation - creates the new package fragment and any * side effect package fragments. * * @exception JavaModelException if the operation is unable to complete */ @Override protected void executeOperation() throws JavaModelException { try { JavaElementDelta delta = null; PackageFragmentRoot root = (PackageFragmentRoot) getParentElement(); beginTask(Messages.operation_createPackageFragmentProgress, this.pkgName.length); IContainer parentFolder = (IContainer) root.resource(); String[] sideEffectPackageName = CharOperation.NO_STRINGS; ArrayList results = new ArrayList(this.pkgName.length); char[][] inclusionPatterns = root.fullInclusionPatternChars(); char[][] exclusionPatterns = root.fullExclusionPatternChars(); int i; for (i = 0; i < this.pkgName.length; i++) { String subFolderName = this.pkgName[i]; sideEffectPackageName = Util.arrayConcat(sideEffectPackageName, subFolderName); IResource subFolder = parentFolder.findMember(subFolderName); if (subFolder == null) { createFolder(parentFolder, subFolderName, this.force); parentFolder = parentFolder.getFolder(new Path(subFolderName)); IPackageFragment addedFrag = root.getPackageFragment(sideEffectPackageName); if (!Util.isExcluded(parentFolder, inclusionPatterns, exclusionPatterns)) { if (delta == null) { delta = newJavaElementDelta(); } delta.added(addedFrag); } results.add(addedFrag); } else { parentFolder = (IContainer) subFolder; } worked(1); } if (results.size() > 0) { this.resultElements = new IJavaElement[results.size()]; results.toArray(this.resultElements); if (delta != null) { addDelta(delta); } } } finally { done(); } } @Override protected ISchedulingRule getSchedulingRule() { if (this.pkgName.length == 0) return null; // no resource is going to be created IResource parentResource = ((JavaElement) getParentElement()).resource(); IResource resource = ((IContainer) parentResource).getFolder(new Path(this.pkgName[0])); return resource.getWorkspace().getRuleFactory().createRule(resource); } /** * Possible failures:
    *
  • NO_ELEMENTS_TO_PROCESS - the root supplied to the operation is * null. *
  • INVALID_NAME - the name provided to the operation * is null or is not a valid package fragment name. *
  • READ_ONLY - the root provided to this operation is read only. *
  • NAME_COLLISION - there is a pre-existing resource (file) * with the same name as a folder in the package fragment's hierarchy. *
  • ELEMENT_NOT_PRESENT - the underlying resource for the root is missing *
* @see IJavaModelStatus * @see JavaConventions */ @Override public IJavaModelStatus verify() { IJavaElement parentElement = getParentElement(); if (parentElement == null) { return new JavaModelStatus(IJavaModelStatusConstants.NO_ELEMENTS_TO_PROCESS); } String packageName = this.pkgName == null ? null : Util.concatWith(this.pkgName, '.'); IJavaProject project = parentElement.getJavaProject(); if (this.pkgName == null || (this.pkgName.length > 0 && JavaConventions.validatePackageName(packageName, project.getOption(JavaCore.COMPILER_SOURCE, true), project.getOption(JavaCore.COMPILER_COMPLIANCE, true)).getSeverity() == IStatus.ERROR)) { return new JavaModelStatus(IJavaModelStatusConstants.INVALID_NAME, packageName); } IJavaElement root = getParentElement(); if (root.isReadOnly()) { return new JavaModelStatus(IJavaModelStatusConstants.READ_ONLY, root); } IContainer parentFolder = (IContainer) ((JavaElement) root).resource(); int i; for (i = 0; i < this.pkgName.length; i++) { IResource subFolder = parentFolder.findMember(this.pkgName[i]); if (subFolder != null) { if (subFolder.getType() != IResource.FOLDER) { return new JavaModelStatus( IJavaModelStatusConstants.NAME_COLLISION, Messages.bind(Messages.status_nameCollision, subFolder.getFullPath().toString())); } parentFolder = (IContainer) subFolder; } } return JavaModelStatus.VERIFIED_OK; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy