summaryrefslogtreecommitdiff
path: root/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/DecompilerContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/DecompilerContext.java')
-rw-r--r--plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/DecompilerContext.java150
1 files changed, 150 insertions, 0 deletions
diff --git a/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/DecompilerContext.java b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/DecompilerContext.java
new file mode 100644
index 000000000000..b600250d0b78
--- /dev/null
+++ b/plugins/java-decompiler/engine/src/org/jetbrains/java/decompiler/main/DecompilerContext.java
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2000-2014 JetBrains s.r.o.
+ *
+ * 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 org.jetbrains.java.decompiler.main;
+
+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;
+
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+
+public class DecompilerContext {
+ public static final String CURRENT_CLASS = "CURRENT_CLASS";
+ public static final String CURRENT_CLASS_NODE = "CURRENT_CLASS_NODE";
+ public static final String CURRENT_METHOD = "CURRENT_METHOD";
+ public static final String CURRENT_METHOD_DESCRIPTOR = "CURRENT_METHOD_DESCRIPTOR";
+ public static final String CURRENT_METHOD_WRAPPER = "CURRENT_METHOD_WRAPPER";
+ public static final String CURRENT_VAR_PROCESSOR = "CURRENT_VAR_PROCESSOR";
+
+ private static ThreadLocal<DecompilerContext> currentContext = new ThreadLocal<DecompilerContext>();
+
+ private final Map<String, Object> properties;
+ private StructContext structContext;
+ private ImportCollector importCollector;
+ private VarNamesCollector varNamescollector;
+ private CounterContainer counterContainer;
+ private ClassesProcessor classProcessor;
+ private PoolInterceptor poolInterceptor;
+ private IFernflowerLogger logger;
+
+ private DecompilerContext(Map<String, Object> properties) {
+ this.properties = properties;
+ }
+
+ public static void initContext(Map<String, Object> propertiesCustom) {
+ Map<String, Object> properties = new HashMap<String, Object>(IFernflowerPreferences.DEFAULTS);
+ if (propertiesCustom != null) {
+ properties.putAll(propertiesCustom);
+ }
+ currentContext.set(new DecompilerContext(properties));
+ }
+
+ 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 getImportCollector() {
+ return getCurrentContext().importCollector;
+ }
+
+ public static void setImportCollector(ImportCollector importCollector) {
+ getCurrentContext().importCollector = importCollector;
+ }
+
+ public static VarNamesCollector getVarNamesCollector() {
+ return getCurrentContext().varNamescollector;
+ }
+
+ public static void setVarNamesCollector(VarNamesCollector varNamesCollector) {
+ getCurrentContext().varNamescollector = varNamesCollector;
+ }
+
+ 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) {
+ if (logger != null) {
+ String level = (String)getProperty(IFernflowerPreferences.LOG_LEVEL);
+ if (level != null) {
+ try {
+ logger.setSeverity(IFernflowerLogger.Severity.valueOf(level.toUpperCase(Locale.US)));
+ }
+ catch (IllegalArgumentException ignore) { }
+ }
+ }
+ getCurrentContext().logger = logger;
+ }
+
+ public static String getNewLineSeparator() {
+ return getOption(IFernflowerPreferences.NEW_LINE_SEPARATOR) ?
+ IFernflowerPreferences.LINE_SEPARATOR_LIN : IFernflowerPreferences.LINE_SEPARATOR_WIN;
+ }
+}