mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-30 20:35:38 +02:00
Improved type safety.
This commit is contained in:
parent
8ce322ad37
commit
f7f3825ef8
5 changed files with 36 additions and 27 deletions
|
@ -23,6 +23,8 @@ public class CharArrayUtils {
|
|||
/** @since 5.4 */
|
||||
public static final char[] EMPTY_CHAR_ARRAY = {};
|
||||
public static final char[] EMPTY = EMPTY_CHAR_ARRAY;
|
||||
/** @since 5.7 */
|
||||
public static final char[][] EMPTY_ARRAY_OF_CHAR_ARRAYS = {};
|
||||
|
||||
private CharArrayUtils() {}
|
||||
|
||||
|
|
|
@ -169,16 +169,28 @@ public class CharTable extends HashTable {
|
|||
return i;
|
||||
|
||||
// Follow the next chain
|
||||
for (i = nextTable[i] - 1; i >= 0 && nextTable[i] != i + 1; i = nextTable[i] - 1)
|
||||
for (i = nextTable[i] - 1; i >= 0 && nextTable[i] != i + 1; i = nextTable[i] - 1) {
|
||||
if (CharArrayUtils.equals(buffer, start, len, keyTable[i]))
|
||||
return i;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
public Object[] keyArray() {
|
||||
Object[] keys = new Object[size()];
|
||||
/**
|
||||
* @since 5.7
|
||||
*/
|
||||
public char[][] keys() {
|
||||
char[][] keys = new char[size()][];
|
||||
System.arraycopy(keyTable, 0, keys, 0, keys.length);
|
||||
return keys;
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #keys()} instead.
|
||||
*/
|
||||
@Deprecated
|
||||
public Object[] keyArray() {
|
||||
return keys();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -340,9 +340,8 @@ public class CScope implements ICScope, IASTInternalScope {
|
|||
for (CharArrayObjectMap<?> map : mapsToNameOrBinding) {
|
||||
if (lookup.isPrefixLookup()) {
|
||||
IContentAssistMatcher matcher = ContentAssistMatcherFactory.getInstance().createMatcher(c);
|
||||
Object[] keys = map.keyArray();
|
||||
for (Object key2 : keys) {
|
||||
char[] key = (char[]) key2;
|
||||
char[][] keys = map.keys();
|
||||
for (char[] key : keys) {
|
||||
if (matcher.match(key)) {
|
||||
obj = ArrayUtil.append(obj, map.get(key));
|
||||
}
|
||||
|
|
|
@ -38,6 +38,7 @@ import org.eclipse.cdt.core.index.IIndexFileSet;
|
|||
import org.eclipse.cdt.core.index.IndexFilter;
|
||||
import org.eclipse.cdt.core.parser.util.ArrayUtil;
|
||||
import org.eclipse.cdt.core.parser.util.CharArrayObjectMap;
|
||||
import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
||||
import org.eclipse.cdt.core.parser.util.IContentAssistMatcher;
|
||||
import org.eclipse.cdt.core.parser.util.ObjectSet;
|
||||
import org.eclipse.cdt.internal.core.dom.parser.ProblemBinding;
|
||||
|
@ -94,7 +95,7 @@ abstract public class CPPScope implements ICPPASTInternalScope {
|
|||
return;
|
||||
|
||||
if (bindings == null)
|
||||
bindings = new CharArrayObjectMap<Object>(1);
|
||||
bindings = new CharArrayObjectMap<>(1);
|
||||
if (name instanceof ICPPASTQualifiedName &&
|
||||
!(physicalNode instanceof ICPPASTCompositeTypeSpecifier) &&
|
||||
!(physicalNode instanceof ICPPASTNamespaceDefinition)) {
|
||||
|
@ -109,7 +110,7 @@ abstract public class CPPScope implements ICPPASTInternalScope {
|
|||
if (o instanceof ObjectSet) {
|
||||
((ObjectSet<Object>) o).put(name);
|
||||
} else {
|
||||
ObjectSet<Object> temp = new ObjectSet<Object>(2);
|
||||
ObjectSet<Object> temp = new ObjectSet<>(2);
|
||||
temp.put(o);
|
||||
temp.put(name);
|
||||
bindings.put(c, temp);
|
||||
|
@ -229,11 +230,10 @@ abstract public class CPPScope implements ICPPASTInternalScope {
|
|||
|
||||
Object obj = null;
|
||||
if (lookup.isPrefixLookup()) {
|
||||
Object[] keys = bindings != null ? bindings.keyArray() : new Object[0];
|
||||
ObjectSet<Object> all= new ObjectSet<Object>(16);
|
||||
char[][] keys = bindings != null ? bindings.keys() : CharArrayUtils.EMPTY_ARRAY_OF_CHAR_ARRAYS;
|
||||
ObjectSet<Object> all= new ObjectSet<>(16);
|
||||
IContentAssistMatcher matcher = ContentAssistMatcherFactory.getInstance().createMatcher(c);
|
||||
for (Object key2 : keys) {
|
||||
final char[] key = (char[]) key2;
|
||||
for (char[] key : keys) {
|
||||
if (key != CONSTRUCTOR_KEY && matcher.match(key)) {
|
||||
obj= bindings.get(key);
|
||||
if (obj instanceof ObjectSet<?>) {
|
||||
|
@ -335,9 +335,6 @@ abstract public class CPPScope implements ICPPASTInternalScope {
|
|||
}
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see org.eclipse.cdt.core.dom.ast.IScope#find(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public IBinding[] find(String name) {
|
||||
return CPPSemantics.findBindings(this, name, false);
|
||||
|
@ -347,7 +344,7 @@ abstract public class CPPScope implements ICPPASTInternalScope {
|
|||
@SuppressWarnings({ "unchecked" })
|
||||
public void addBinding(IBinding binding) {
|
||||
if (bindings == null)
|
||||
bindings = new CharArrayObjectMap<Object>(1);
|
||||
bindings = new CharArrayObjectMap<>(1);
|
||||
char[] c = binding.getNameCharArray();
|
||||
if (c.length == 0) {
|
||||
return;
|
||||
|
@ -357,7 +354,7 @@ abstract public class CPPScope implements ICPPASTInternalScope {
|
|||
if (o instanceof ObjectSet) {
|
||||
((ObjectSet<Object>) o).put(binding);
|
||||
} else {
|
||||
ObjectSet<Object> set = new ObjectSet<Object>(2);
|
||||
ObjectSet<Object> set = new ObjectSet<>(2);
|
||||
set.put(o);
|
||||
set.put(binding);
|
||||
bindings.put(c, set);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*******************************************************************************
|
||||
* Copyright (c) 2011 Google, Inc and others.
|
||||
* Copyright (c) 2011, 2014 Google, Inc and others.
|
||||
* All rights reserved. This program and the accompanying materials
|
||||
* are made available under the terms of the Eclipse Public License v1.0
|
||||
* which accompanies this distribution, and is available at
|
||||
|
@ -22,18 +22,18 @@ import org.eclipse.cdt.core.parser.util.CharArrayUtils;
|
|||
* it back.
|
||||
*
|
||||
* The map is encoded as:
|
||||
* <code><number_of_entries>,<key1><value1>...<keyN><valueN></code>.
|
||||
* {@code <number_of_entries>,<key1><value1>...<keyN><valueN>}.
|
||||
* <p>
|
||||
* Each string is encoded as: <code><number_of_characters>,<characters></code>.
|
||||
* A <code>null</code> string is encoded as a single comma.
|
||||
* Each string is encoded as: {@code <number_of_characters>,<characters>}.
|
||||
* A {@code null} string is encoded as a single comma.
|
||||
*/
|
||||
public class SignificantMacros implements ISignificantMacros {
|
||||
public static final char[] DEFINED = {0};
|
||||
public static final char[] UNDEFINED = {1};
|
||||
private static final Comparator<Object> SORTER = new Comparator<Object>() {
|
||||
private static final Comparator<char[]> SORTER = new Comparator<char[]>() {
|
||||
@Override
|
||||
public int compare(Object o1, Object o2) {
|
||||
return CharArrayUtils.compare((char[])o1, (char[])o2);
|
||||
public int compare(char[] s1, char[] s2) {
|
||||
return CharArrayUtils.compare(s1, s2);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -51,10 +51,9 @@ public class SignificantMacros implements ISignificantMacros {
|
|||
|
||||
private char[] encode(CharArrayObjectMap<char[]> sigMacros) {
|
||||
StringBuilder buffer= new StringBuilder();
|
||||
Object[] keys= sigMacros.keyArray();
|
||||
char[][] keys= sigMacros.keys();
|
||||
Arrays.sort(keys, SORTER);
|
||||
for (Object key : keys) {
|
||||
char[] name= (char[]) key;
|
||||
for (char[] name : keys) {
|
||||
char[] value= sigMacros.get(name);
|
||||
buffer.append((char) name.length).append(name);
|
||||
buffer.append((char) value.length).append(value);
|
||||
|
|
Loading…
Add table
Reference in a new issue