blob: 82dfc12ed434d37b8d7f8b0582d2a36d4fa9976a [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.graph;
import java.util.function.Function;
import java.util.function.Predicate;
import java.util.stream.Stream;
/**
* A common interface for {@link DexClass}, {@link DexEncodedField}, and {@link DexEncodedMethod}.
*/
public abstract class DexDefinition extends DexItem {
public boolean isDexClass() {
return false;
}
public DexClass asDexClass() {
return null;
}
public boolean isDexEncodedField() {
return false;
}
public DexEncodedField asDexEncodedField() {
return null;
}
public boolean isDexEncodedMethod() {
return false;
}
public DexEncodedMethod asDexEncodedMethod() {
return null;
}
public static Stream<DexDefinition> filterDexDefinition(Stream<DexItem> stream) {
return DexItem.filter(stream, DexDefinition.class);
}
public abstract DexReference toReference();
public static Stream<DexReference> mapToReference(Stream<DexDefinition> definitions) {
return definitions.map(DexDefinition::toReference);
}
private static <T extends DexDefinition> Stream<T> filter(
Stream<DexDefinition> stream,
Predicate<DexDefinition> pred,
Function<DexDefinition, T> f) {
return stream.filter(pred).map(f);
}
public static Stream<DexClass> filterDexClass(Stream<DexDefinition> stream) {
return filter(stream, DexDefinition::isDexClass, DexDefinition::asDexClass);
}
public static Stream<DexEncodedField> filterDexEncodedField(Stream<DexDefinition> stream) {
return filter(stream, DexDefinition::isDexEncodedField, DexDefinition::asDexEncodedField);
}
public static Stream<DexEncodedMethod> filterDexEncodedMethod(Stream<DexDefinition> stream) {
return filter(stream, DexDefinition::isDexEncodedMethod, DexDefinition::asDexEncodedMethod);
}
public abstract boolean isStatic();
public abstract boolean isStaticMember();
}