blob: 90e3b161fd7652c52317c60d4a8d801992b55133 [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.utils.structural;
import com.android.tools.r8.graph.DexField;
import com.android.tools.r8.graph.DexMethod;
import com.android.tools.r8.graph.DexReference;
import com.android.tools.r8.graph.DexString;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.utils.structural.StructuralItem.CompareToAccept;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.Iterator;
/** Base class for a visitor implementing compareTo on a structural item. */
public abstract class CompareToVisitor {
public abstract int visitBool(boolean value1, boolean value2);
public abstract int visitInt(int value1, int value2);
public abstract int visitLong(long value1, long value2);
public abstract int visitFloat(float value1, float value2);
public abstract int visitDouble(double value1, double value2);
/** Base for visiting an enumeration of items. */
public abstract <S> int visitItemIterator(
Iterator<S> it1, Iterator<S> it2, CompareToAccept<S> compareToAccept);
public final <S extends StructuralItem<S>> int visitItemArray(S[] items1, S[] items2) {
return visitItemCollection(Arrays.asList(items1), Arrays.asList(items2));
}
public final <S extends StructuralItem<S>> int visitItemCollection(
Collection<S> items1, Collection<S> items2) {
return visitItemIterator(items1.iterator(), items2.iterator(), StructuralItem::acceptCompareTo);
}
public abstract int visitDexString(DexString string1, DexString string2);
public abstract int visitDexType(DexType type1, DexType type2);
public int visitDexField(DexField field1, DexField field2) {
return visit(field1, field2, field1.getStructuralMapping());
}
public int visitDexMethod(DexMethod method1, DexMethod method2) {
return visit(method1, method2, method1.getStructuralMapping());
}
public abstract int visitDexReference(DexReference reference1, DexReference reference2);
public abstract <S> int visit(S item1, S item2, StructuralMapping<S> accept);
@Deprecated
public abstract <S> int visit(S item1, S item2, Comparator<S> comparator);
}