blob: 6269c28254678e675f3fdaf556ad750302fb5955 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2010 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.pde.api.tools.internal.builder;
import org.eclipse.jdt.internal.core.builder.StringSet;
import org.eclipse.pde.api.tools.internal.provisional.builder.IBuildContext;
/**
* Default implementation of an {@link IBuildContext}
*
* @since 1.0.1
*/
public class BuildContext implements IBuildContext {
private static final String[] NO_TYPES = new String[0];
private StringSet structualChanges = null;
private StringSet removedTypes = null;
private StringSet descriptionChanges = null;
private StringSet descriptionDepedents = null;
/**
* Constructor
*/
public BuildContext() {
}
@Override
public String[] getStructurallyChangedTypes() {
if (this.structualChanges == null) {
return NO_TYPES;
}
return this.structualChanges.values;
}
@Override
public String[] getDescriptionChangedTypes() {
if (this.descriptionChanges == null) {
return NO_TYPES;
}
return this.descriptionChanges.values;
}
@Override
public String[] getRemovedTypes() {
if (this.removedTypes == null) {
return NO_TYPES;
}
return this.removedTypes.values;
}
@Override
public boolean hasStructuralChanges() {
int count = (this.structualChanges == null ? 0 : this.structualChanges.elementSize);
count += (this.removedTypes == null ? 0 : this.removedTypes.elementSize);
return count > 0;
}
@Override
public boolean hasDescriptionChanges() {
return (this.descriptionChanges == null ? 0 : this.descriptionChanges.elementSize) > 0;
}
@Override
public boolean hasDescriptionDependents() {
return (this.descriptionDepedents == null ? 0 : this.descriptionDepedents.elementSize) > 0;
}
@Override
public boolean hasRemovedTypes() {
return (this.removedTypes == null ? 0 : this.removedTypes.elementSize) > 0;
}
/**
* Adds the given type name to the collection of structurally changed types.
* Does nothing if <code>null</code> is passed in as the type name.
*
* @param typename
*/
public void recordStructuralChange(String typename) {
if (typename == null) {
return;
}
if (this.structualChanges == null) {
this.structualChanges = new StringSet(16);
}
this.structualChanges.add(typename.replace('/', '.'));
}
/**
* Adds the given type name to the collection of removed types. Does nothing
* if <code>null</code> is passed in as the type name.
*
* @param typename
*/
public void recordRemovedType(String typename) {
if (typename == null) {
return;
}
if (this.removedTypes == null) {
this.removedTypes = new StringSet(16);
}
this.removedTypes.add(typename.replace('/', '.'));
}
/**
* Adds the given type name to the collection of types that have had an API
* description change. Does nothing if <code>null</code> is passed in.
*
* @param typename the type that has an API description change or
* <code>null</code>
*/
public void recordDescriptionChanged(String typename) {
if (typename != null) {
if (this.descriptionChanges == null) {
this.descriptionChanges = new StringSet(16);
}
this.descriptionChanges.add(typename.replace('/', '.'));
}
}
/**
* Adds the given type name to the collection of dependent type names. Does
* nothing if <code>null</code> is passed in as the type name.
*
* @param typename the type to add a dependent of
*/
public void recordDescriptionDependent(String typename) {
if (typename == null) {
return;
}
if (this.descriptionDepedents == null) {
this.descriptionDepedents = new StringSet(16);
}
this.descriptionDepedents.add(typename.replace('/', '.'));
}
@Override
public void dispose() {
if (this.structualChanges != null) {
this.structualChanges.clear();
this.structualChanges = null;
}
if (this.removedTypes != null) {
this.removedTypes.clear();
this.removedTypes = null;
}
if (this.descriptionChanges != null) {
this.descriptionChanges.clear();
this.descriptionChanges = null;
}
if (this.descriptionDepedents != null) {
this.descriptionDepedents.clear();
this.descriptionDepedents = null;
}
}
@Override
public boolean hasTypes() {
return hasStructuralChanges() || hasRemovedTypes() || hasDescriptionChanges() || hasDescriptionDependents();
}
@Override
public boolean containsStructuralChange(String typename) {
if (typename == null) {
return false;
}
return structualChanges != null && structualChanges.includes(typename.replace('/', '.'));
}
@Override
public boolean containsDescriptionChange(String typename) {
if (typename == null) {
return false;
}
return descriptionChanges != null && descriptionChanges.includes(typename.replace('/', '.'));
}
@Override
public boolean containsDescriptionDependent(String typename) {
if (typename == null) {
return false;
}
return descriptionDepedents != null && descriptionDepedents.includes(typename.replace('/', '.'));
}
@Override
public boolean containsRemovedType(String typename) {
if (typename == null) {
return false;
}
return removedTypes != null && removedTypes.includes(typename.replace('/', '.'));
}
@Override
public String[] getDescriptionDependentTypes() {
if (this.descriptionDepedents == null) {
return NO_TYPES;
}
return this.descriptionDepedents.values;
}
}