blob: 81d90b458cdb34cc832a962a1e0821daa70db55b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2015 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.swt.tools.internal;
public class ReflectType implements JNIType {
Class<?> clazz;
public ReflectType(Class<?> clazz) {
this.clazz = clazz;
}
@Override
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof ReflectType)) return false;
return ((ReflectType)obj).clazz == clazz;
}
@Override
public JNIType getComponentType() {
return new ReflectType(clazz.getComponentType());
}
@Override
public String getName() {
return clazz.getName();
}
@Override
public String getSimpleName() {
String name = clazz.getName();
int index = name.lastIndexOf('.') + 1;
return name.substring(index, name.length());
}
@Override
public String getTypeSignature() {
if (clazz == Void.TYPE) return "V";
if (clazz == Integer.TYPE) return "I";
if (clazz == Boolean.TYPE) return "Z";
if (clazz == Long.TYPE) return "J";
if (clazz == Short.TYPE) return "S";
if (clazz == Character.TYPE) return "C";
if (clazz == Byte.TYPE) return "B";
if (clazz == Float.TYPE) return "F";
if (clazz == Double.TYPE) return "D";
if (clazz == String.class) return "Ljava/lang/String;";
if (clazz.isArray()) {
return "[" + getComponentType().getTypeSignature();
}
return "L" + clazz.getName().replace('.', '/') + ";";
}
@Override
public String getTypeSignature1() {
if (clazz == Void.TYPE) return "Void";
if (clazz == Integer.TYPE) return "Int";
if (clazz == Boolean.TYPE) return "Boolean";
if (clazz == Long.TYPE) return "Long";
if (clazz == Short.TYPE) return "Short";
if (clazz == Character.TYPE) return "Char";
if (clazz == Byte.TYPE) return "Byte";
if (clazz == Float.TYPE) return "Float";
if (clazz == Double.TYPE) return "Double";
if (clazz == String.class) return "String";
return "Object";
}
@Override
public String getTypeSignature2() {
if (clazz == Void.TYPE) return "void";
if (clazz == Integer.TYPE) return "jint";
if (clazz == Boolean.TYPE) return "jboolean";
if (clazz == Long.TYPE) return "jlong";
if (clazz == Short.TYPE) return "jshort";
if (clazz == Character.TYPE) return "jchar";
if (clazz == Byte.TYPE) return "jbyte";
if (clazz == Float.TYPE) return "jfloat";
if (clazz == Double.TYPE) return "jdouble";
if (clazz == String.class) return "jstring";
if (clazz == Class.class) return "jclass";
if (clazz.isArray()) {
return getComponentType().getTypeSignature2() + "Array";
}
return "jobject";
}
@Override
public String getTypeSignature3() {
if (clazz == Void.TYPE) return "void";
if (clazz == Integer.TYPE) return "int";
if (clazz == Boolean.TYPE) return "boolean";
if (clazz == Long.TYPE) return "long";
if (clazz == Short.TYPE) return "short";
if (clazz == Character.TYPE) return "char";
if (clazz == Byte.TYPE) return "byte";
if (clazz == Float.TYPE) return "float";
if (clazz == Double.TYPE) return "double";
if (clazz == String.class) return "String";
if (clazz.isArray()) {
return getComponentType().getTypeSignature3() + "[]";
}
return clazz.getName();
}
@Override
public String getTypeSignature4(boolean struct) {
if (clazz == Void.TYPE) return "void";
if (clazz == Integer.TYPE) return "jint";
if (clazz == Boolean.TYPE) return "jboolean";
if (clazz == Long.TYPE) return "jlong";
if (clazz == Short.TYPE) return "jshort";
if (clazz == Character.TYPE) return "jchar";
if (clazz == Byte.TYPE) return "jbyte";
if (clazz == Float.TYPE) return "jfloat";
if (clazz == Double.TYPE) return "jdouble";
if (clazz == String.class) return "jstring";
if (clazz.isArray()) {
String sig = getComponentType().getTypeSignature4(struct);
return struct ? sig : sig + " *";
}
String sig = getSimpleName();
return struct ? sig : sig + " *";
}
@Override
public int hashCode() {
return clazz.hashCode();
}
@Override
public boolean isArray() {
return clazz.isArray();
}
@Override
public boolean isPrimitive() {
return clazz.isPrimitive();
}
@Override
public boolean isType(String type) {
return clazz.getName().equals(type);
}
}