| // Copyright (c) 2018, the R8 project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| package com.android.tools.r8.ir.optimize.classinliner.trivial; |
| |
| import com.android.tools.r8.AssumeMayHaveSideEffects; |
| import com.android.tools.r8.NeverInline; |
| import com.android.tools.r8.NoMethodStaticizing; |
| |
| public class TrivialTestClass { |
| private static int ID = 0; |
| |
| private static String next() { |
| return Integer.toString(ID++); |
| } |
| |
| public static void main(String[] args) { |
| TrivialTestClass test = new TrivialTestClass(); |
| test.testInner(); |
| test.testConstructorMapping1(); |
| test.testConstructorMapping2(); |
| test.testConstructorMapping3(); |
| test.testEmptyClass(); |
| test.testEmptyClassWithInitializer(); |
| test.testClassWithFinalizer(); |
| test.testCallOnIface1(); |
| test.testCallOnIface2(); |
| test.testCycles(); |
| } |
| |
| @NeverInline |
| private void testInner() { |
| Inner inner = new Inner("inner{", 123, next() + "}"); |
| System.out.println(inner.myToString() + " " + inner.getPrefix() + " = " + inner.prefix); |
| } |
| |
| @NeverInline |
| private void testConstructorMapping1() { |
| ReferencedFields o = new ReferencedFields(next()); |
| System.out.println(o.getA()); |
| } |
| |
| @NeverInline |
| private void testConstructorMapping2() { |
| ReferencedFields o = new ReferencedFields(next()); |
| System.out.println(o.getB()); |
| } |
| |
| @NeverInline |
| private void testConstructorMapping3() { |
| ReferencedFields o = new ReferencedFields(next(), next()); |
| System.out.println(o.getA() + o.getB() + o.getConcat()); |
| } |
| |
| @AssumeMayHaveSideEffects |
| @NeverInline |
| private void testEmptyClass() { |
| new EmptyClass(); |
| } |
| |
| @NeverInline |
| private void testEmptyClassWithInitializer() { |
| new EmptyClassWithInitializer(); |
| } |
| |
| @NeverInline |
| private void testClassWithFinalizer() { |
| new ClassWithFinal(); |
| } |
| |
| private void callOnIface1(Iface1 iface) { |
| iface.foo(); |
| } |
| |
| @NeverInline |
| private void testCallOnIface1() { |
| callOnIface1(new Iface1Impl(next())); |
| } |
| |
| private void callOnIface2(Iface2 iface) { |
| iface.foo(); |
| } |
| |
| @NeverInline |
| private void testCallOnIface2() { |
| callOnIface2(new Iface2Impl(next())); |
| System.out.println(Iface2Impl.CONSTANT); // Keep constant referenced |
| } |
| |
| @NeverInline |
| @NoMethodStaticizing |
| private void testCycles() { |
| new CycleReferenceAB("first").foo(3); |
| new CycleReferenceBA("second").foo(4); |
| new CycleReferenceAB("third").foo(5); |
| new CycleReferenceBA("fourth").foo(6); |
| } |
| |
| public class Inner { |
| private String prefix; |
| private String suffix; |
| private double id; |
| |
| public Inner(String prefix, double id, String suffix) { |
| this.prefix = prefix; |
| this.suffix = suffix; |
| this.id = id; |
| } |
| |
| public String myToString() { |
| return prefix + id + suffix; |
| } |
| |
| public String getPrefix() { |
| return prefix; |
| } |
| |
| public String getSuffix() { |
| return suffix; |
| } |
| |
| public double getId() { |
| return id; |
| } |
| |
| public void setPrefix(String prefix) { |
| this.prefix = prefix; |
| } |
| |
| public void setSuffix(String suffix) { |
| this.suffix = suffix; |
| } |
| |
| public void setId(double id) { |
| this.id = id; |
| } |
| } |
| } |