blob: 99475b27e09e4b4dd7f1e95b5ec8430d7702d6aa [file] [log] [blame]
// Copyright (c) 2022, 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.ir.desugar.desugaredlibrary.humanspecification.memberparser;
import com.android.tools.r8.dex.Constants;
import com.android.tools.r8.graph.DexItemFactory;
import com.android.tools.r8.graph.DexType;
import com.android.tools.r8.utils.DescriptorUtils;
import com.google.common.collect.ImmutableMap;
import java.util.Map;
public abstract class AbstractMemberParser {
static final String SEPARATORS = "\\s+|,\\s+|#|\\(|\\)";
static final Map<String, Integer> MODIFIERS =
ImmutableMap.<String, Integer>builder()
.put("public", Constants.ACC_PUBLIC)
.put("private", Constants.ACC_PRIVATE)
.put("protected", Constants.ACC_PROTECTED)
.put("final", Constants.ACC_FINAL)
.put("abstract", Constants.ACC_ABSTRACT)
.put("static", Constants.ACC_STATIC)
.build();
final DexItemFactory factory;
protected AbstractMemberParser(DexItemFactory factory) {
this.factory = factory;
}
DexType stringTypeToDexType(String stringType) {
return factory.createType(DescriptorUtils.javaTypeToDescriptor(stringType));
}
int parseModifiers(String[] split) {
int index = 0;
while (MODIFIERS.containsKey(split[index])) {
modifier(MODIFIERS.get(split[index]));
index++;
}
return index;
}
protected abstract void modifier(int access);
}