| /* |
| * Copyright 2014 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.gwt.dev.js; |
| |
| import com.google.gwt.dev.cfg.ConfigurationProperties; |
| |
| import java.util.ArrayList; |
| import java.util.Collections; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Locale; |
| import java.util.Set; |
| |
| /** |
| * Holds the list of JavaScript identifiers that have special meaning, so they shouldn't be used |
| * in a GWT program. (Unless used deliberately in JavaScript.) |
| */ |
| class ReservedNames { |
| |
| static final String BLACKLIST = "js.identifier.blacklist"; |
| static final String BLACKLIST_SUFFIXES = "js.identifier.blacklist.suffixes"; |
| |
| private final Set<String> blacklistedIdents; |
| |
| private final List<String> blacklistedSuffixes; |
| |
| ReservedNames(ConfigurationProperties config) { |
| Set<String> blacklist = new HashSet<String>(); |
| List<String> blacklistSuffixes = new ArrayList<String>(); |
| if (config != null) { |
| blacklist.addAll(config.getCommaSeparatedStrings(BLACKLIST)); |
| blacklistSuffixes.addAll(config.getCommaSeparatedStrings(BLACKLIST_SUFFIXES)); |
| } |
| blacklistedIdents = Collections.unmodifiableSet(blacklist); |
| blacklistedSuffixes = Collections.unmodifiableList(blacklistSuffixes); |
| } |
| |
| final boolean isAvailable(String newIdent) { |
| if (!JsProtectedNames.isLegalName(newIdent)) { |
| return false; |
| } |
| String lcIdent = newIdent.toLowerCase(Locale.ROOT); |
| for (String suffix : blacklistedSuffixes) { |
| if (lcIdent.endsWith(suffix.toLowerCase(Locale.ROOT))) { |
| return false; |
| } |
| } |
| return !blacklistedIdents.contains(newIdent); |
| } |
| } |