blob: c9ab49b3c9177fbae323f892329dfcfefcdc4017 [file] [log] [blame]
// Copyright (c) 2016, 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.shaking;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.DexClass;
public enum ProguardClassType {
ANNOTATION_INTERFACE {
@Override
public boolean matches(DexClass clazz) {
return clazz.accessFlags.isInterface() && clazz.accessFlags.isAnnotation();
}
},
CLASS {
@Override
public boolean matches(DexClass clazz) {
return true;
}
},
ENUM {
@Override
public boolean matches(DexClass clazz) {
return clazz.accessFlags.isEnum();
}
},
INTERFACE {
@Override
public boolean matches(DexClass clazz) {
return clazz.accessFlags.isInterface() && !clazz.accessFlags.isAnnotation();
}
},
UNSPECIFIED {
@Override
public boolean matches(DexClass clazz) {
return true;
}
};
@Override
public String toString() {
switch (this) {
case ANNOTATION_INTERFACE: return "@interface";
case CLASS: return "class";
case ENUM: return "enum";
case INTERFACE: return "interface";
case UNSPECIFIED:
return "";
default:
throw new Unreachable("Invalid proguard class type '" + this + "'");
}
}
public abstract boolean matches(DexClass clazz);
}