/* * 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); } }