use of com.sun.jdi.ClassType in project jdk8u_jdk by JetBrains.
the class OomDebugTest method test1.
/*
* Test case: Object reference as method parameter.
*/
// called via reflection
@SuppressWarnings("unused")
private void test1() throws Exception {
System.out.println("DEBUG: ------------> Running test1");
try {
Field field = targetClass.fieldByName("fooCls");
ClassType clsType = (ClassType) field.type();
Method constructor = getConstructorForClass(clsType);
for (int i = 0; i < 15; i++) {
@SuppressWarnings({ "rawtypes", "unchecked" }) ObjectReference objRef = clsType.newInstance(mainThread, constructor, new ArrayList(0), ObjectReference.INVOKE_NONVIRTUAL);
if (objRef.isCollected()) {
System.out.println("DEBUG: Object got GC'ed before we can use it. NO-OP.");
continue;
}
invoke("testMethod", "(LOomDebugTestTarget$FooCls;)V", objRef);
}
} catch (InvocationException e) {
handleFailure(e);
}
}
use of com.sun.jdi.ClassType in project intellij-community by JetBrains.
the class UnBoxingEvaluator method convertToPrimitive.
private static Value convertToPrimitive(EvaluationContextImpl context, ObjectReference value, final String conversionMethodName, String conversionMethodSignature) throws EvaluateException {
final DebugProcessImpl process = context.getDebugProcess();
final ClassType wrapperClass = (ClassType) value.referenceType();
Method method = wrapperClass.concreteMethodByName(conversionMethodName, conversionMethodSignature);
if (method == null) {
throw new EvaluateException("Cannot convert to primitive value of type " + value.type() + ": Unable to find method " + conversionMethodName + conversionMethodSignature);
}
return process.invokeMethod(context, value, method, Collections.emptyList());
}
use of com.sun.jdi.ClassType in project che by eclipse.
the class Evaluator method isAssignable.
private boolean isAssignable(Type from, Type to) {
if (from.equals(to)) {
return true;
}
if (from instanceof BooleanType) {
return to instanceof BooleanType;
}
if (to instanceof BooleanType) {
return false;
}
if (from instanceof PrimitiveType) {
return to instanceof PrimitiveType;
}
if (to instanceof PrimitiveType) {
return false;
}
if (from instanceof ArrayType) {
if (to instanceof ArrayType) {
Type fromArrayComponent;
Type toArrayComponent;
try {
fromArrayComponent = ((ArrayType) from).componentType();
toArrayComponent = ((ArrayType) to).componentType();
} catch (ClassNotLoadedException e) {
return false;
}
if (fromArrayComponent instanceof PrimitiveType) {
return fromArrayComponent.equals(toArrayComponent);
}
return !(toArrayComponent instanceof PrimitiveType) && isAssignable(fromArrayComponent, toArrayComponent);
}
return to.name().equals("java.lang.Object");
}
if (from instanceof ClassType) {
ClassType superClass = ((ClassType) from).superclass();
if (superClass != null && isAssignable(superClass, to)) {
return true;
}
for (InterfaceType interfaceType : ((ClassType) from).interfaces()) {
if (isAssignable(interfaceType, to)) {
return true;
}
}
}
for (InterfaceType interfaceType : ((InterfaceType) from).subinterfaces()) {
if (isAssignable(interfaceType, to)) {
return true;
}
}
return false;
}
use of com.sun.jdi.ClassType in project intellij-community by JetBrains.
the class RuntimeTypeEvaluator method getCastableRuntimeType.
@Nullable
public static PsiType getCastableRuntimeType(Project project, Value value) {
Type type = value.type();
PsiType psiType = findPsiType(project, type);
if (psiType != null) {
return psiType;
}
if (type instanceof ClassType) {
ClassType superclass = ((ClassType) type).superclass();
if (superclass != null && !CommonClassNames.JAVA_LANG_OBJECT.equals(superclass.name())) {
psiType = findPsiType(project, superclass);
if (psiType != null) {
return psiType;
}
}
for (InterfaceType interfaceType : ((ClassType) type).interfaces()) {
psiType = findPsiType(project, interfaceType);
if (psiType != null) {
return psiType;
}
}
}
return null;
}
use of com.sun.jdi.ClassType in project intellij-community by JetBrains.
the class CompilingEvaluator method defineClasses.
private ClassType defineClasses(Collection<ClassObject> classes, EvaluationContext context, DebugProcess process, ClassLoaderReference classLoader) throws EvaluateException {
for (ClassObject cls : classes) {
if (cls.getPath().contains(GEN_CLASS_NAME)) {
final byte[] content = cls.getContent();
if (content != null) {
final byte[] bytes = changeSuperToMagicAccessor(content);
ClassLoadingUtils.defineClass(cls.getClassName(), bytes, context, process, classLoader);
}
}
}
return (ClassType) process.findClass(context, getGenClassQName(), classLoader);
}
Aggregations