Fork of the Fernflower decompiler
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
fernflower/src/org/jetbrains/java/decompiler/main/DecompilerContext.java

198 lines
6.8 KiB

10 years ago
/*
* Copyright 2000-2014 JetBrains s.r.o.
10 years ago
*
* 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
10 years ago
*
* http://www.apache.org/licenses/LICENSE-2.0
10 years ago
*
* 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.
10 years ago
*/
package org.jetbrains.java.decompiler.main;
10 years ago
import org.jetbrains.java.decompiler.main.collectors.CounterContainer;
import org.jetbrains.java.decompiler.main.collectors.ImportCollector;
import org.jetbrains.java.decompiler.main.collectors.VarNamesCollector;
import org.jetbrains.java.decompiler.main.extern.IFernflowerLogger;
import org.jetbrains.java.decompiler.main.extern.IFernflowerPreferences;
import org.jetbrains.java.decompiler.modules.renamer.PoolInterceptor;
import org.jetbrains.java.decompiler.struct.StructContext;
10 years ago
import java.util.HashMap;
10 years ago
public class DecompilerContext {
public static final String CURRENT_CLASS = "CURRENT_CLASS";
public static final String CURRENT_METHOD = "CURRENT_METHOD";
public static final String CURRENT_METHOD_DESCRIPTOR = "CURRENT_METHOD_DESCRIPTOR";
public static final String CURRENT_VAR_PROCESSOR = "CURRENT_VAR_PROCESSOR";
public static final String CURRENT_CLASSNODE = "CURRENT_CLASSNODE";
public static final String CURRENT_METHOD_WRAPPER = "CURRENT_METHOD_WRAPPER";
private static ThreadLocal<DecompilerContext> currentContext = new ThreadLocal<DecompilerContext>();
private HashMap<String, Object> properties = new HashMap<String, Object>();
private StructContext structcontext;
private ImportCollector impcollector;
private VarNamesCollector varncollector;
private CounterContainer countercontainer;
private ClassesProcessor classprocessor;
private PoolInterceptor poolinterceptor;
private IFernflowerLogger logger;
private DecompilerContext(HashMap<String, Object> properties) {
this.properties.putAll(properties);
}
public static void initContext(HashMap<String, Object> propertiesCustom) {
HashMap<String, Object> mapDefault = new HashMap<String, Object>();
// default settings
mapDefault.put(IFernflowerPreferences.DECOMPILE_INNER, "1");
mapDefault.put(IFernflowerPreferences.DECOMPILE_CLASS_1_4, "1");
mapDefault.put(IFernflowerPreferences.DECOMPILE_ASSERTIONS, "1");
mapDefault.put(IFernflowerPreferences.REMOVE_BRIDGE, "1");
mapDefault.put(IFernflowerPreferences.REMOVE_SYNTHETIC, "0");
mapDefault.put(IFernflowerPreferences.HIDE_EMPTY_SUPER, "1");
mapDefault.put(IFernflowerPreferences.HIDE_DEFAULT_CONSTRUCTOR, "1");
mapDefault.put(IFernflowerPreferences.DECOMPILE_GENERIC_SIGNATURES, "0");
mapDefault.put(IFernflowerPreferences.NO_EXCEPTIONS_RETURN, "1");
mapDefault.put(IFernflowerPreferences.DECOMPILE_ENUM, "1");
mapDefault.put(IFernflowerPreferences.FINALLY_DEINLINE, "1");
mapDefault.put(IFernflowerPreferences.REMOVE_GETCLASS_NEW, "1");
mapDefault.put(IFernflowerPreferences.LITERALS_AS_IS, "0");
mapDefault.put(IFernflowerPreferences.ASCII_STRING_CHARACTERS, "0");
mapDefault.put(IFernflowerPreferences.BOOLEAN_TRUE_ONE, "1");
mapDefault.put(IFernflowerPreferences.SYNTHETIC_NOT_SET, "1");
mapDefault.put(IFernflowerPreferences.UNDEFINED_PARAM_TYPE_OBJECT, "1");
mapDefault.put(IFernflowerPreferences.USE_DEBUG_VARNAMES, "1");
mapDefault.put(IFernflowerPreferences.MAX_PROCESSING_METHOD, "0");
mapDefault.put(IFernflowerPreferences.REMOVE_EMPTY_RANGES, "1");
mapDefault.put(IFernflowerPreferences.NEW_LINE_SEPARATOR, "0");
mapDefault.put(IFernflowerPreferences.INDENT_STRING, " ");
mapDefault.put(IFernflowerPreferences.IDEA_NOT_NULL_ANNOTATION, "1");
if (propertiesCustom != null) {
mapDefault.putAll(propertiesCustom);
}
currentContext.set(new DecompilerContext(mapDefault));
}
public static DecompilerContext getCurrentContext() {
return currentContext.get();
}
public static void setCurrentContext(DecompilerContext context) {
currentContext.set(context);
}
public static Object getProperty(String key) {
return getCurrentContext().properties.get(key);
}
public static void setProperty(String key, Object value) {
getCurrentContext().properties.put(key, value);
}
public static boolean getOption(String key) {
return "1".equals(getCurrentContext().properties.get(key));
}
public static ImportCollector getImpcollector() {
return getCurrentContext().impcollector;
}
public static void setImpcollector(ImportCollector impcollector) {
getCurrentContext().impcollector = impcollector;
}
public static VarNamesCollector getVarncollector() {
return getCurrentContext().varncollector;
}
public static void setVarncollector(VarNamesCollector varncollector) {
getCurrentContext().varncollector = varncollector;
}
public static StructContext getStructcontext() {
return getCurrentContext().structcontext;
}
public static void setStructcontext(StructContext structcontext) {
getCurrentContext().structcontext = structcontext;
}
public static CounterContainer getCountercontainer() {
return getCurrentContext().countercontainer;
}
public static void setCountercontainer(CounterContainer countercontainer) {
getCurrentContext().countercontainer = countercontainer;
}
public static ClassesProcessor getClassprocessor() {
return getCurrentContext().classprocessor;
}
public static void setClassprocessor(ClassesProcessor classprocessor) {
getCurrentContext().classprocessor = classprocessor;
}
public static PoolInterceptor getPoolInterceptor() {
return getCurrentContext().poolinterceptor;
}
public static void setPoolInterceptor(PoolInterceptor poolinterceptor) {
getCurrentContext().poolinterceptor = poolinterceptor;
}
public static IFernflowerLogger getLogger() {
return getCurrentContext().logger;
}
public static void setLogger(IFernflowerLogger logger) {
getCurrentContext().logger = logger;
setLogSeverity();
}
private static void setLogSeverity() {
IFernflowerLogger logger = getCurrentContext().logger;
if (logger != null) {
String severity = (String)getProperty(IFernflowerPreferences.LOG_LEVEL);
if (severity != null) {
Integer iSeverity = IFernflowerLogger.mapLogLevel.get(severity.toUpperCase());
if (iSeverity != null) {
logger.setSeverity(iSeverity);
}
}
}
}
public static String getNewLineSeparator() {
return getOption(IFernflowerPreferences.NEW_LINE_SEPARATOR) ?
IFernflowerPreferences.LINE_SEPARATOR_LIN : IFernflowerPreferences.LINE_SEPARATOR_WIN;
}
10 years ago
}