blob: 28ea61e498e4e78ef922d53a11ed752aded83c30 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 Shane Clarke.
* 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:
* Shane Clarke - initial API and implementation
*******************************************************************************/
package org.eclipse.jst.ws.internal.annotations.core.utils;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.Signature;
public final class SignatureUtils {
private SignatureUtils() {
}
public static boolean isString(String returnType) {
int signatureKind = Signature.getTypeSignatureKind(returnType);
if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
if (returnType.charAt(0) == Signature.C_RESOLVED) {
return Signature.toString(returnType).equals(java.lang.String.class.getCanonicalName());
}
if (returnType.charAt(0) == Signature.C_UNRESOLVED) {
return Signature.toString(returnType).equals(java.lang.String.class.getSimpleName());
}
}
return false;
}
public static boolean isClass(String returnType) {
int signatureKind = Signature.getTypeSignatureKind(returnType);
if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
if (returnType.charAt(0) == Signature.C_RESOLVED) {
returnType = Signature.getTypeErasure(returnType);
return Signature.toString(returnType).equals(java.lang.Class.class.getCanonicalName());
}
if (returnType.charAt(0) == Signature.C_UNRESOLVED) {
returnType = Signature.getTypeErasure(returnType);
return Signature.toString(returnType).equals(java.lang.Class.class.getSimpleName());
}
}
return false;
}
public static boolean isBoolean(String returnType) {
int signatureKind = Signature.getTypeSignatureKind(returnType);
if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
if (returnType.charAt(0) == Signature.C_RESOLVED) {
return Signature.toString(returnType).equals(java.lang.Boolean.class.getCanonicalName());
}
if (returnType.charAt(0) == Signature.C_UNRESOLVED) {
return Signature.toString(returnType).equals(java.lang.Boolean.class.getSimpleName());
}
}
if (signatureKind == Signature.BASE_TYPE_SIGNATURE) {
return returnType.charAt(0) == Signature.C_BOOLEAN;
}
return false;
}
public static boolean isArray(String returnType) {
return Signature.getTypeSignatureKind(returnType) == Signature.ARRAY_TYPE_SIGNATURE;
}
public static boolean isPrimitive(String returnType) {
return Signature.getTypeSignatureKind(returnType) == Signature.BASE_TYPE_SIGNATURE;
}
public static boolean isEnum(IMethod method) throws JavaModelException {
return getEnumReturnType(method) != null;
}
public static IType getEnumReturnType(IMethod method) throws JavaModelException {
String returnType = method.getReturnType();
int signatureKind = Signature.getTypeSignatureKind(returnType);
if (signatureKind == Signature.CLASS_TYPE_SIGNATURE) {
if (returnType.charAt(0) == Signature.C_RESOLVED) {
IType type = method.getJavaProject().findType(Signature.toString(returnType));
if (type != null && type.isEnum()) {
return type;
}
}
}
return null;
}
public static String[] getEnumConstantsNames(IType enumType) throws JavaModelException {
if (enumType.isEnum()) {
List<String> enumConstants = new ArrayList<String>();
IField[] fields = getEnumConstants(enumType);
for (IField field : fields) {
enumConstants.add(field.getElementName());
}
return enumConstants.toArray(new String[enumConstants.size()]);
}
return new String[] {};
}
public static IField[] getEnumConstants(IType enumType) throws JavaModelException {
if (enumType.isEnum()) {
List<IField> enumConstants = new ArrayList<IField>();
IField[] fields = enumType.getFields();
for (IField field : fields) {
if (field.isEnumConstant()) {
enumConstants.add(field);
}
}
return enumConstants.toArray(new IField[enumConstants.size()]);
}
return new IField[] {};
}
}