| // 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; |
| } |
| } |
| } |