diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Access.java b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Access.java index ef466aef0f..a6e98ee6aa 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Access.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Access.java @@ -4,9 +4,9 @@ * 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. @@ -19,7 +19,7 @@ import java.util.HashMap; import java.util.Map; /** - * + * Class access attributes */ //---------------------------------------------------------------------------------------------- // TODO: Consider expanding these beyond C++. diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/ClassFieldAttributes.java b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/ClassFieldAttributes.java index f13d9da38d..98007248af 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/ClassFieldAttributes.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/ClassFieldAttributes.java @@ -15,28 +15,36 @@ */ package ghidra.app.util.pdb.classtype; -import java.util.*; +import java.util.Objects; import ghidra.app.util.bin.format.pdb2.pdbreader.type.ClassFieldMsAttributes; /** - * + * Class field attributes */ public class ClassFieldAttributes { - private static final Map map = new HashMap<>(); + private static final ClassFieldAttributes all[][] = + new ClassFieldAttributes[Access.values().length][Property.values().length]; - // These initializations use the map above, so it must be initialized first + static { + for (Access access : Access.values()) { + for (Property property : Property.values()) { + all[access.ordinal()][property.ordinal()] = + new ClassFieldAttributes(access, property); + } + } + } + + // These initializations use the 'all' array above, so it must be initialized first public static final ClassFieldAttributes UNKNOWN = get(Access.UNKNOWN, Property.UNKNOWN); public static final ClassFieldAttributes BLANK = get(Access.BLANK, Property.BLANK); private final Access access; private final Property property; - public synchronized static ClassFieldAttributes get(Access access, Property property) { - ClassFieldAttributes key = new ClassFieldAttributes(access, property); - ClassFieldAttributes cfa = map.putIfAbsent(key, key); - return (cfa != null) ? cfa : key; + public static ClassFieldAttributes get(Access access, Property property) { + return all[access.ordinal()][property.ordinal()]; } public static ClassFieldAttributes convert(ClassFieldMsAttributes msAtts, diff --git a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Property.java b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Property.java index 4b6357f2e3..e28a5e7b65 100644 --- a/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Property.java +++ b/Ghidra/Features/PDB/src/main/java/ghidra/app/util/pdb/classtype/Property.java @@ -19,7 +19,7 @@ import java.util.HashMap; import java.util.Map; /** - * + * Class properties */ public enum Property { UNKNOWN("INVALID_PROPERTY", -1),