blob: fc582aecf1c484fc9326f6ac8482c706cb0b642a [file] [log] [blame]
/*
* Copyright 2011 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.resources.rg;
import com.google.gwt.core.ext.typeinfo.JClassType;
/**
* Evaluates the obfuscation style the user selected and formats the obfuscated
* name accordingly.
*/
public enum CssObfuscationStyle {
VERBOSE (true, false, true, true),
STABLE_FULL_CLASSNAME (true, true, true, true),
STABLE_SHORT_CLASSNAME (true, true, true, false),
STABLE_NO_CLASSNAME (true, true, false, false),
OBFUSCATED (false, false, false, false);
static CssObfuscationStyle getObfuscationStyle(String name) {
if (name.equalsIgnoreCase("pretty")) {
return VERBOSE;
} else if (name.equalsIgnoreCase("stable")) {
return STABLE_FULL_CLASSNAME;
} else if (name.equalsIgnoreCase("stable-shorttype")) {
return STABLE_SHORT_CLASSNAME;
} else if (name.equalsIgnoreCase("stable-notype")) {
return STABLE_NO_CLASSNAME;
}
return OBFUSCATED;
}
private boolean isPretty;
private boolean isStable;
private boolean showClassName;
private boolean showPackageName;
CssObfuscationStyle(boolean isPretty, boolean isStable, boolean showClassName,
boolean showPackageName) {
this.isPretty = isPretty;
this.isStable = isStable;
this.showClassName = showClassName;
this.showPackageName = showPackageName;
}
public String getPrettyName(String method, JClassType type, String obfuscatedName) {
if (!isPretty()) {
return obfuscatedName;
}
String toReturn = method;
/*
* Note that by dropping the type, or using it's short name, you are
* allowing name collisions in the css selector names. These options should
* only be used if you are sure that your GWT application is ensuring that
* there are no namespace collisions.
*/
if (showClassName) {
if (showPackageName) {
toReturn = type.getQualifiedSourceName().replaceAll("[.$]", "-") + "-" + toReturn;
} else {
toReturn = type.getName() + "-" + toReturn;
}
}
/*
* For stable styles the obfuscated class name is dropped from the pretty
* output. This results in class names that are constant, no matter how
* many other selectors are added.
*/
if (!isStable) {
toReturn = obfuscatedName += "-" + toReturn;
}
return toReturn;
}
public boolean isPretty() {
return isPretty;
}
}