blob: 4f6c33c6a04479076c3dfa91a9981d316ff75d3f [file] [log] [blame]
// 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.staticizer;
import com.android.tools.r8.graph.DexEncodedMethod;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.GraphLense;
import com.android.tools.r8.graph.GraphLense.NestedGraphLense;
import com.android.tools.r8.ir.code.Invoke.Type;
import com.google.common.collect.BiMap;
import com.google.common.collect.ImmutableMap;
class ClassStaticizerGraphLense extends NestedGraphLense {
ClassStaticizerGraphLense(GraphLense previous, DexItemFactory factory,
BiMap<DexField, DexField> fieldMapping, BiMap<DexMethod, DexMethod> methodMapping) {
super(ImmutableMap.of(),
methodMapping,
fieldMapping,
fieldMapping.inverse(),
methodMapping.inverse(),
previous,
factory);
}
@Override
protected Type mapInvocationType(
DexMethod newMethod, DexMethod originalMethod,
DexEncodedMethod context, Type type) {
if (methodMap.get(originalMethod) == newMethod) {
assert type == Type.VIRTUAL || type == Type.DIRECT;
return Type.STATIC;
}
return super.mapInvocationType(newMethod, originalMethod, context, type);
}
}