registers[1], registers[2], registers[3], registers[4], dexBuilder.internCallSite(callSiteReference)));
dexBuilder.internCallSite(callSiteReference)));
@Nonnull public BuilderReference internReference(@Nonnull Reference reference) { if (reference instanceof StringReference) { return internStringReference(((StringReference)reference).getString()); } if (reference instanceof TypeReference) { return internTypeReference(((TypeReference)reference).getType()); } if (reference instanceof MethodReference) { return internMethodReference((MethodReference)reference); } if (reference instanceof FieldReference) { return internFieldReference((FieldReference)reference); } if (reference instanceof MethodProtoReference) { return internMethodProtoReference((MethodProtoReference) reference); } if (reference instanceof CallSiteReference) { return internCallSite((CallSiteReference) reference); } if (reference instanceof MethodHandleReference) { return internMethodHandle((MethodHandleReference) reference); } throw new IllegalArgumentException("Could not determine type of reference"); }
@Nonnull public BuilderReference internReference(@Nonnull Reference reference) { if (reference instanceof StringReference) { return internStringReference(((StringReference)reference).getString()); } if (reference instanceof TypeReference) { return internTypeReference(((TypeReference)reference).getType()); } if (reference instanceof MethodReference) { return internMethodReference((MethodReference)reference); } if (reference instanceof FieldReference) { return internFieldReference((FieldReference)reference); } if (reference instanceof MethodProtoReference) { return internMethodProtoReference((MethodProtoReference) reference); } if (reference instanceof CallSiteReference) { return internCallSite((CallSiteReference) reference); } if (reference instanceof MethodHandleReference) { return internMethodHandle((MethodHandleReference) reference); } throw new IllegalArgumentException("Could not determine type of reference"); }
dexBuilder.internCallSite(callSiteReference)));
registers[1], registers[2], registers[3], registers[4], dexBuilder.internCallSite(callSiteReference)));
@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(), 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))); }