blob: a2647af7f90e2b5b18b59e874b6c7933bf886a69 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 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.eclipse.pde.api.tools.internal.comparator;
class SignatureDescriptor {
private static final TypeParameterDescriptor[] EMPTY_TYPE_PARAMETER_DESCRIPTORS = new TypeParameterDescriptor[0];
private static final String[] EMPTY_TYPE_ARGUMENTS = new String[0];
static final int INITIAL_SIZE = 1;
TypeParameterDescriptor currentTypeParameterDescriptor;
String superClass;
TypeParameterDescriptor[] typeParameterDescriptors;
int typeParameterDescriptorsCounter;
String[] typeArguments;
int typeArgumentsCounter;
public SignatureDescriptor() {
}
public void addInterfaceBound(String bound) {
this.currentTypeParameterDescriptor.addInterfaceBound(bound);
}
public void addTypeArgument(String typeArgument) {
if (this.typeArguments == null) {
this.typeArguments = new String[INITIAL_SIZE];
this.typeArgumentsCounter = 0;
} else {
int length = typeArguments.length;
if (length == this.typeArgumentsCounter) {
// resize
System.arraycopy(this.typeArguments, 0, (this.typeArguments = new String[length * 2]), 0, length);
}
}
this.typeArguments[this.typeArgumentsCounter++] = typeArgument;
}
public void addTypeParameterDescriptor(String name) {
if (this.typeParameterDescriptors == null) {
this.typeParameterDescriptors = new TypeParameterDescriptor[INITIAL_SIZE];
this.typeParameterDescriptorsCounter = 0;
} else {
int length = this.typeParameterDescriptors.length;
if (this.typeParameterDescriptorsCounter == length) {
System.arraycopy(this.typeParameterDescriptors, 0, (this.typeParameterDescriptors = new TypeParameterDescriptor[length * 2]), 0, length);
}
}
TypeParameterDescriptor typeParameterDescriptor = new TypeParameterDescriptor(name);
this.currentTypeParameterDescriptor = typeParameterDescriptor;
this.typeParameterDescriptors[this.typeParameterDescriptorsCounter++] = typeParameterDescriptor;
}
public TypeParameterDescriptor[] getTypeParameterDescriptors() {
if (this.typeParameterDescriptors == null) {
return EMPTY_TYPE_PARAMETER_DESCRIPTORS;
}
int length = this.typeParameterDescriptors.length;
if (this.typeParameterDescriptorsCounter != length) {
System.arraycopy(this.typeParameterDescriptors, 0, (this.typeParameterDescriptors = new TypeParameterDescriptor[this.typeParameterDescriptorsCounter]), 0, this.typeParameterDescriptorsCounter);
}
return this.typeParameterDescriptors;
}
public String[] getTypeArguments() {
if (this.typeArguments == null) {
return EMPTY_TYPE_ARGUMENTS;
}
int length = this.typeArguments.length;
if (this.typeArgumentsCounter != length) {
System.arraycopy(this.typeArguments, 0, (this.typeArguments = new String[this.typeArgumentsCounter]), 0, this.typeArgumentsCounter);
}
return this.typeArguments;
}
public void setClassBound(String bound) {
this.currentTypeParameterDescriptor.setClassBound(bound);
}
public void setSuperclass(String superclass) {
this.superClass = superclass;
}
@Override
public String toString() {
StringBuilder buffer = new StringBuilder();
for (int i = 0, max = this.typeParameterDescriptorsCounter; i < max; i++) {
if (i > 0) {
buffer.append(',');
}
buffer.append(this.typeParameterDescriptors[i]);
}
buffer.append("superclass: " + this.superClass); //$NON-NLS-1$
for (int i = 0, max = this.typeArgumentsCounter; i < max; i++) {
if (i > 0) {
buffer.append(',');
}
buffer.append(this.typeArguments[i]);
}
return String.valueOf(buffer);
}
}