/** * @return TypeReference */ public TypeReference getConcreteType() { return site.getDeclaredType(); }
/** * @return TypeReference */ public TypeReference getConcreteType() { return site.getDeclaredType(); }
@Override public int hashCode() { return result * 7529 + site.getDeclaredType().hashCode(); }
@Override public int hashCode() { return result * 7529 + site.getDeclaredType().hashCode(); }
private static Atom getLanguage(NewSiteReference site) { return getLanguage(site.getDeclaredType()); }
private static Atom getLanguage(NewSiteReference site) { return getLanguage(site.getDeclaredType()); }
@Override public IClass getAllocatedTarget(CGNode caller, NewSiteReference site) { if (site == null) { throw new IllegalArgumentException("site is null"); } IClass klass = cha.lookupClass(site.getDeclaredType()); if (klass == null) { return null; } else if (klass.isAbstract()) { return null; } else { return klass; } } }
private static Atom getLanguage(NewSiteReference target) { return target .getDeclaredType() .getClassLoader() .getLanguage(); }
private static Atom getLanguage(NewSiteReference target) { return target .getDeclaredType() .getClassLoader() .getLanguage(); }
@Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, result) + " = new " + site.getDeclaredType() + '@' + site.getProgramCounter() + (params == null ? "" : array2String(params, symbolTable)); }
@Override public String toString(SymbolTable symbolTable) { return getValueString(symbolTable, result) + " = new " + site.getDeclaredType() + '@' + site.getProgramCounter() + (params == null ? "" : array2String(params, symbolTable)); }
@Override public void visitNew(SSANewInstruction instruction) { TypeReference declaredType = instruction.getNewSite().getDeclaredType(); // check for multidimensional array if (declaredType.isArrayType() && declaredType.getArrayElementType().isArrayType()) { arrayWrites.add(new MemoryAccess(instructionIndex, node)); } }
@Override public void visitNew(SSANewInstruction instruction) { TypeReference declaredType = instruction.getNewSite().getDeclaredType(); // check for multidimensional array if (declaredType.isArrayType() && declaredType.getArrayElementType().isArrayType()) { arrayWrites.add(new MemoryAccess(instructionIndex, node)); } }
@Override public Collection<TypeReference> getExceptionTypes() { if (getNewSite().getDeclaredType().isArrayType()) { return getNewArrayExceptions(); } else { return getNewScalarExceptions(); } } };
@Override public Collection<TypeReference> getExceptionTypes() { if (getNewSite().getDeclaredType().isArrayType()) { return getNewArrayExceptions(); } else { return getNewScalarExceptions(); } } };
@Override public Iterator<? extends Pair<CGNode, NewSiteReference>> makeInner(final CGNode outer) { return new MapIterator<>( new FilterIterator<>( outer.iterateNewSites(), o -> o.getDeclaredType().equals(type.getReference()) ), object -> Pair.make(outer, object)); } };
@Override public Iterator<? extends Pair<CGNode, NewSiteReference>> makeInner(final CGNode outer) { return new MapIterator<>( new FilterIterator<>( outer.iterateNewSites(), o -> o.getDeclaredType().equals(type.getReference()) ), object -> Pair.make(outer, object)); } };
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { return new MapIterator<>( new FilterIterator<>( getNode().iterateNewSites(), o -> o.getDeclaredType().equals(getConcreteType().getReference())), object -> Pair.make(getNode(), object)); } }
@Override public Iterator<Pair<CGNode, NewSiteReference>> getCreationSites(CallGraph CG) { return new MapIterator<>( new FilterIterator<>( getNode().iterateNewSites(), o -> o.getDeclaredType().equals(getConcreteType().getReference())), object -> Pair.make(getNode(), object)); } }
@Test public void testArrayLiteral1() throws IllegalArgumentException, CancelException, IOException { runTest(singleTestSrc(), rtJar, simpleTestEntryPoint(), Collections.singletonList( cg -> { MethodReference mref = descriptorToMethodRef("Source#ArrayLiteral1#main#([Ljava/lang/String;)V", cg.getClassHierarchy()); CGNode node = cg.getNodes(mref).iterator().next(); SSAInstruction s = node.getIR().getInstructions()[2]; Assert.assertTrue("Did not find new array instruction.", s instanceof SSANewInstruction); Assert.assertTrue("", ((SSANewInstruction) s).getNewSite().getDeclaredType().isArrayType()); }), true, null); }