/* * Copyright (C) 2009 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package signature.converter.dex; import java.util.HashMap; import java.util.Map; import signature.model.impl.SigEnumConstant; import signature.model.impl.SigField; public class FieldPool { private Map<FieldKey, SigField> fieldStore; private Map<FieldKey, SigEnumConstant> constantStore; public FieldPool() { fieldStore = new HashMap<FieldKey, SigField>(); constantStore = new HashMap<FieldKey, SigEnumConstant>(); } private static class FieldKey { private final String qualifiedClassName; private final String fieldName; public FieldKey(String qualifiedClassName, String fieldName) { this.qualifiedClassName = qualifiedClassName; this.fieldName = fieldName; } @Override public int hashCode() { final int prime = 31; int result = prime * fieldName.hashCode(); result = prime * result + qualifiedClassName.hashCode(); return result; } @Override public boolean equals(Object obj) { FieldKey other = (FieldKey) obj; if (!fieldName.equals(other.fieldName)) { return false; } if (!qualifiedClassName.equals(other.qualifiedClassName)) { return false; } return true; } } public SigField getField(String qualifiedClassName, String fieldName) { FieldKey key = new FieldKey(qualifiedClassName, fieldName); SigField sigField = fieldStore.get(key); if (sigField == null) { sigField = new SigField(fieldName); fieldStore.put(key, sigField); } return sigField; } public SigEnumConstant getEnumConstant(String qualifiedName, String fieldName) { FieldKey key = new FieldKey(qualifiedName, fieldName); SigEnumConstant sigField = constantStore.get(key); if (sigField == null) { sigField = new SigEnumConstant(fieldName); constantStore.put(key, sigField); } return sigField; } }