blob: 7a923de3b24c757fa50e2bb5c8edf2692422627c [file] [log] [blame]
// Copyright (c) 2020, 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 com.android.tools.r8.graph.LookupResult.LookupResultSuccess.LookupResultCollectionState;
import java.util.Collections;
import java.util.Set;
public abstract class LookupResult {
public boolean isLookupResultFailure() {
return false;
}
public boolean isLookupResultSuccess() {
return false;
}
public LookupResultFailure asLookupResultFailure() {
return null;
}
public LookupResultSuccess asLookupResultSuccess() {
return null;
}
public static LookupResultSuccess createResult(
Set<DexEncodedMethod> methodTargets, LookupResultCollectionState state) {
return new LookupResultSuccess(methodTargets, state);
}
public static LookupResultFailure createFailedResult() {
return LookupResultFailure.INSTANCE;
}
public static LookupResultSuccess getIncompleteEmptyResult() {
return LookupResultSuccess.EMPTY_INSTANCE;
}
public static class LookupResultSuccess extends LookupResult {
private static final LookupResultSuccess EMPTY_INSTANCE =
new LookupResultSuccess(Collections.emptySet(), LookupResultCollectionState.Incomplete);
private final Set<DexEncodedMethod> methodTargets;
private final LookupResultCollectionState state;
private LookupResultSuccess(
Set<DexEncodedMethod> methodTargets, LookupResultCollectionState state) {
this.methodTargets = methodTargets;
this.state = state;
}
public boolean isEmpty() {
return methodTargets == null || methodTargets.isEmpty();
}
public Set<DexEncodedMethod> getMethodTargets() {
return methodTargets;
}
@Override
public LookupResultSuccess asLookupResultSuccess() {
return this;
}
@Override
public boolean isLookupResultSuccess() {
return true;
}
public boolean isIncomplete() {
return state == LookupResultCollectionState.Incomplete;
}
public enum LookupResultCollectionState {
Complete,
Incomplete,
}
}
public static class LookupResultFailure extends LookupResult {
private static final LookupResultFailure INSTANCE = new LookupResultFailure();
private LookupResultFailure() {
// Empty to only allow creation locally.
}
@Override
public LookupResultFailure asLookupResultFailure() {
return this;
}
@Override
public boolean isLookupResultFailure() {
return true;
}
}
}