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

org.eclipse.osgi.internal.weaving.DynamicImportList 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) 2010, 2016 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.eclipse.osgi.internal.weaving;

import java.util.*;
import org.eclipse.osgi.util.ManifestElement;
import org.osgi.framework.Constants;
import org.osgi.framework.PackagePermission;

/**
 * A list of DynamicImport-Package statements that are to be used for adding new
 * dynamic imports to a bundle class loader.
 *
 */
public class DynamicImportList extends AbstractList implements RandomAccess {
	// the collection of valid DynamicImport-Package statments.
	private final List imports = new ArrayList<>(0);
	private final WovenClassImpl wovenClass;

	public DynamicImportList(WovenClassImpl wovenClass) {
		super();
		this.wovenClass = wovenClass;
	}

	@Override
	public String get(int index) {
		return imports.get(index);
	}

	@Override
	public int size() {
		return imports.size();
	}

	@Override
	public String set(int index, String element) {
		wovenClass.checkPermission();
		validateSyntaxAndCheckPackagePermission(element);
		return imports.set(index, element);
	}

	@Override
	public void add(int index, String element) {
		wovenClass.checkPermission();
		validateSyntaxAndCheckPackagePermission(element);
		imports.add(index, element);
	}

	@Override
	public String remove(int index) {
		wovenClass.checkPermission();
		return imports.remove(index);
	}

	private void validateSyntaxAndCheckPackagePermission(String dynamicImportPackageDescription) {
		ManifestElement[] clauses;
		// Validate the syntax of imports that are added.
		try {
			clauses = ManifestElement.parseHeader(Constants.IMPORT_PACKAGE, dynamicImportPackageDescription);
		} catch (Exception e) {
			throw new IllegalArgumentException(e);
		}
		SecurityManager sm = System.getSecurityManager();
		if (sm == null)
			return;
		// Security is enabled. Ensure the weaver has import package permission
		// for each dynamic import added.
		for (ManifestElement clause : clauses)
			for (String pkg : clause.getValueComponents())
				sm.checkPermission(new PackagePermission(pkg, PackagePermission.IMPORT));
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy