Search in sources :

Example 1 with BuilderCallSiteReference

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)));
}
Also used : ImmutableMethodProtoReference(org.jf.dexlib2.immutable.reference.ImmutableMethodProtoReference) ImmutableMethodReference(org.jf.dexlib2.immutable.reference.ImmutableMethodReference) ImmutableMethodHandleReference(org.jf.dexlib2.immutable.reference.ImmutableMethodHandleReference) BuilderInstruction35c(org.jf.dexlib2.builder.instruction.BuilderInstruction35c) BuilderMethod(org.jf.dexlib2.writer.builder.BuilderMethod) ImmutableDexFile(org.jf.dexlib2.immutable.ImmutableDexFile) File(java.io.File) DexFile(org.jf.dexlib2.iface.DexFile) FileDataStore(org.jf.dexlib2.writer.io.FileDataStore) BuilderCallSiteReference(org.jf.dexlib2.writer.builder.BuilderCallSiteReference) MethodImplementationBuilder(org.jf.dexlib2.builder.MethodImplementationBuilder) DexBuilder(org.jf.dexlib2.writer.builder.DexBuilder) ImmutableCallSiteReference(org.jf.dexlib2.immutable.reference.ImmutableCallSiteReference) Test(org.junit.Test)

Example 2 with BuilderCallSiteReference

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;
}
Also used : BuilderArrayEncodedValue(org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderArrayEncodedValue) Nonnull(javax.annotation.Nonnull)

Aggregations

File (java.io.File)1 Nonnull (javax.annotation.Nonnull)1 MethodImplementationBuilder (org.jf.dexlib2.builder.MethodImplementationBuilder)1 BuilderInstruction35c (org.jf.dexlib2.builder.instruction.BuilderInstruction35c)1 DexFile (org.jf.dexlib2.iface.DexFile)1 ImmutableDexFile (org.jf.dexlib2.immutable.ImmutableDexFile)1 ImmutableCallSiteReference (org.jf.dexlib2.immutable.reference.ImmutableCallSiteReference)1 ImmutableMethodHandleReference (org.jf.dexlib2.immutable.reference.ImmutableMethodHandleReference)1 ImmutableMethodProtoReference (org.jf.dexlib2.immutable.reference.ImmutableMethodProtoReference)1 ImmutableMethodReference (org.jf.dexlib2.immutable.reference.ImmutableMethodReference)1 BuilderCallSiteReference (org.jf.dexlib2.writer.builder.BuilderCallSiteReference)1 BuilderArrayEncodedValue (org.jf.dexlib2.writer.builder.BuilderEncodedValues.BuilderArrayEncodedValue)1 BuilderMethod (org.jf.dexlib2.writer.builder.BuilderMethod)1 DexBuilder (org.jf.dexlib2.writer.builder.DexBuilder)1 FileDataStore (org.jf.dexlib2.writer.io.FileDataStore)1 Test (org.junit.Test)1