/** * @return null if the element type is a primitive * @throws IllegalArgumentException if T == null */ private static IClass myElementType(ArrayClass T, int d) throws IllegalArgumentException, IllegalArgumentException { if (T == null) { throw new IllegalArgumentException("T == null"); } if (d == 0) { return T.getElementClass(); } else { ArrayClass element = (ArrayClass) T.getElementClass(); if (element == null) { return null; } else { return myElementType(element, d - 1); } } }
/** * @return null if the element type is a primitive * @throws IllegalArgumentException if T == null */ private static IClass myElementType(ArrayClass T, int d) throws IllegalArgumentException, IllegalArgumentException { if (T == null) { throw new IllegalArgumentException("T == null"); } if (d == 0) { return T.getElementClass(); } else { ArrayClass element = (ArrayClass) T.getElementClass(); if (element == null) { return null; } else { return myElementType(element, d - 1); } } }
@Override public TypeFilter getTypeFilter() { return new SingleClassFilter(((ArrayClass) instance.getConcreteType()).getElementClass()); } }
@Override public TypeFilter getTypeFilter() { return new SingleClassFilter(((ArrayClass) instance.getConcreteType()).getElementClass()); } }
Assertions.UNREACHABLE(); type = (ArrayClass) type.getElementClass(); if (DEBUG) { System.err.println(("intermediate: " + i + ' ' + type));
Assertions.UNREACHABLE(); type = (ArrayClass) type.getElementClass(); if (DEBUG) { System.err.println(("intermediate: " + i + ' ' + type));
private Map<PointerKey, Object> computePointerKeys(IClass klass) { Map<PointerKey, Object> result = HashMapFactory.make(); if (klass.isArrayClass()) { ArrayClass a = (ArrayClass) klass; if (a.getElementClass() != null && a.getElementClass().isReferenceType()) { PointerKey p = pointerKeys.getPointerKeyForArrayContents(new ConcreteTypeKey(a)); result.put(p, p); } } else { for (IField f : klass.getAllFields()) { if (!f.getFieldTypeReference().isPrimitiveType()) { if (f.isStatic()) { PointerKey p = pointerKeys.getPointerKeyForStaticField(f); result.put(p, p); } else { PointerKey p = pointerKeys.getPointerKeyForInstanceField(new ConcreteTypeKey(klass), f); result.put(p, p); } } } } return result; }
private Map<PointerKey, Object> computePointerKeys(IClass klass) { Map<PointerKey, Object> result = HashMapFactory.make(); if (klass.isArrayClass()) { ArrayClass a = (ArrayClass) klass; if (a.getElementClass() != null && a.getElementClass().isReferenceType()) { PointerKey p = pointerKeys.getPointerKeyForArrayContents(new ConcreteTypeKey(a)); result.put(p, p); } } else { for (IField f : klass.getAllFields()) { if (!f.getFieldTypeReference().isPrimitiveType()) { if (f.isStatic()) { PointerKey p = pointerKeys.getPointerKeyForStaticField(f); result.put(p, p); } else { PointerKey p = pointerKeys.getPointerKeyForInstanceField(new ConcreteTypeKey(klass), f); result.put(p, p); } } } } return result; }
if (!klass.isArrayClass() || ((ArrayClass) klass).getElementClass() == null || !((ArrayClass) klass).getElementClass().isArrayClass()) { return null; PointerKey lastVar = def; while (klass != null && klass.isArrayClass()) { klass = ((ArrayClass) klass).getElementClass();
if (!klass.isArrayClass() || ((ArrayClass) klass).getElementClass() == null || !((ArrayClass) klass).getElementClass().isArrayClass()) { return null; PointerKey lastVar = def; while (klass != null && klass.isArrayClass()) { klass = ((ArrayClass) klass).getElementClass();
if (c.isArrayClass() && ((ArrayClass) c).getElementClass() != null && ((ArrayClass) c).getElementClass().getReference().isReferenceType()) { return true;
if (c.isArrayClass() && ((ArrayClass) c).getElementClass() != null && ((ArrayClass) c).getElementClass().getReference().isReferenceType()) { return true;
return false; IClass ce = ((ArrayClass) c).getElementClass(); if (ce == null) { return false;
@Override public IClass getSuperclass() { IClass elt = getElementClass(); assert getReference().getArrayElementType().isPrimitiveType() || elt != null; // super is Ljava/lang/Object in two cases: // 1) [Ljava/lang/Object // 2) [? for primitive arrays (null from getElementClass) if (elt == null || elt.getReference() == getClassLoader().getLanguage().getRootType()) { return loader.lookupClass(getClassLoader().getLanguage().getRootType().getName()); } // else it is array of super of element type (yuck) else { TypeReference eltSuperRef = elt.getSuperclass().getReference(); TypeReference superRef = TypeReference.findOrCreateArrayOf(eltSuperRef); return elt.getSuperclass().getClassLoader().lookupClass(superRef.getName()); } }
@Override public IClass getSuperclass() { IClass elt = getElementClass(); assert getReference().getArrayElementType().isPrimitiveType() || elt != null; // super is Ljava/lang/Object in two cases: // 1) [Ljava/lang/Object // 2) [? for primitive arrays (null from getElementClass) if (elt == null || elt.getReference() == getClassLoader().getLanguage().getRootType()) { return loader.lookupClass(getClassLoader().getLanguage().getRootType().getName()); } // else it is array of super of element type (yuck) else { TypeReference eltSuperRef = elt.getSuperclass().getReference(); TypeReference superRef = TypeReference.findOrCreateArrayOf(eltSuperRef); return elt.getSuperclass().getClassLoader().lookupClass(superRef.getName()); } }
InstanceKey lastInstance = iKey; while (klass != null && klass.isArrayClass()) { klass = ((ArrayClass) klass).getElementClass();
PointerKey lastVar = def; while (klass != null && klass.isArrayClass()) { klass = ((ArrayClass) klass).getElementClass();
PointerKey lastVar = def; while (klass != null && klass.isArrayClass()) { klass = ((ArrayClass) klass).getElementClass();
system.findOrCreateIndexForInstanceKey(ik[i]); PointerKey p = getPointerKeyForArrayContents(ik[i]); IClass contents = ((ArrayClass) ik[i].getConcreteType()).getElementClass(); if (p == null) { } else {
system.findOrCreateIndexForInstanceKey(ik[i]); PointerKey p = getPointerKeyForArrayContents(ik[i]); IClass contents = ((ArrayClass) ik[i].getConcreteType()).getElementClass(); if (p == null) { } else {