// Copyright (C) 2008 Google Inc. // // 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 com.google.caja.ancillary.linter; import com.google.caja.parser.AncestorChain; import com.google.caja.parser.js.Declaration; import com.google.caja.util.Lists; import com.google.caja.util.Maps; import java.util.Collection; import java.util.Collections; import java.util.Map; /** * A mapping from symbol names to declarations. * * @author mikesamuel@gmail.com */ final class SymbolTable { private final Map<String, Symbol> symbols = Maps.newLinkedHashMap(); Symbol getSymbol(String symbolName) { return symbols.get(symbolName); } Collection<String> symbolNames() { return Collections.unmodifiableSet(symbols.keySet()); } void declare(AncestorChain<Declaration> decl) { declare(decl.node.getIdentifierName(), decl); } void declare(String symbolName, AncestorChain<?> decl) { Symbol s = symbols.get(symbolName); if (s == null) { s = new Symbol(); symbols.put(symbolName, s); } s.decls.add(decl); } final static class Symbol { private final Collection<AncestorChain<?>> decls = Lists.newArrayList(); Collection<AncestorChain<?>> getDeclarations() { return Collections.unmodifiableCollection(decls); } } }