use of org.jf.dexlib2.writer.builder.BuilderCallSiteReference in project smali by JesusFreke.
the class CallSiteTest method testBuilderCallSite.
@Test
public void testBuilderCallSite() throws IOException {
DexBuilder dexBuilder = new DexBuilder(Opcodes.forArtVersion(111));
BuilderCallSiteReference callSite = dexBuilder.internCallSite(new ImmutableCallSiteReference("call_site_1", new ImmutableMethodHandleReference(MethodHandleType.INVOKE_STATIC, new ImmutableMethodReference("Lcls1;", "loader", ImmutableList.of("Ljava/lang/invoke/Lookup;", "Ljava/lang/String;", "Ljava/lang/invoke/MethodType;"), "Ljava/lang/invoke/CallSite;")), "someMethod", new ImmutableMethodProtoReference(ImmutableList.of(), "V"), ImmutableList.of()));
MethodImplementationBuilder methodImplementationBuilder = new MethodImplementationBuilder(10);
methodImplementationBuilder.addInstruction(new BuilderInstruction35c(Opcode.INVOKE_CUSTOM, 0, 0, 0, 0, 0, 0, callSite));
BuilderMethod method = dexBuilder.internMethod("Lcls1;", "method1", null, "V", 0, ImmutableSet.of(), ImmutableSet.of(), methodImplementationBuilder.getMethodImplementation());
dexBuilder.internClassDef("Lcls1;", AccessFlags.PUBLIC.getValue(), "Ljava/lang/Object;", null, null, ImmutableSet.of(), null, ImmutableList.of(method));
File tempFile = File.createTempFile("dex", ".dex");
dexBuilder.writeTo(new FileDataStore(tempFile));
verifyDexFile(DexFileFactory.loadDexFile(tempFile, Opcodes.forArtVersion(111)));
}
use of org.jf.dexlib2.writer.builder.BuilderCallSiteReference in project smali by JesusFreke.
the class BuilderCallSitePool method internCallSite.
@Nonnull
public BuilderCallSiteReference internCallSite(@Nonnull CallSiteReference callSiteReference) {
BuilderCallSiteReference internedCallSite = internedItems.get(callSiteReference);
if (internedCallSite != null) {
return internedCallSite;
}
BuilderArrayEncodedValue encodedCallSite = dexBuilder.encodedArraySection.internArrayEncodedValue(CallSiteUtil.getEncodedCallSite(callSiteReference));
internedCallSite = new BuilderCallSiteReference(callSiteReference.getName(), encodedCallSite);
BuilderCallSiteReference existing = internedItems.putIfAbsent(internedCallSite, internedCallSite);
return existing == null ? internedCallSite : existing;
}
Aggregations