1 /* -*- Mode: java; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2  *
3  * This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 package org.mozilla.javascript.tools.shell;
8 
9 import org.mozilla.javascript.*;
10 
11 public class ShellContextFactory extends ContextFactory
12 {
13     private boolean strictMode;
14     private boolean warningAsError;
15     private int languageVersion = Context.VERSION_1_7;
16     private int optimizationLevel;
17     private boolean generatingDebug;
18     private boolean allowReservedKeywords = true;
19     private ErrorReporter errorReporter;
20     private String characterEncoding;
21 
22     @Override
hasFeature(Context cx, int featureIndex)23     protected boolean hasFeature(Context cx, int featureIndex)
24     {
25         switch (featureIndex) {
26           case Context.FEATURE_STRICT_VARS:
27           case Context.FEATURE_STRICT_EVAL:
28           case Context.FEATURE_STRICT_MODE:
29             return strictMode;
30 
31           case Context.FEATURE_RESERVED_KEYWORD_AS_IDENTIFIER:
32             return allowReservedKeywords;
33 
34           case Context.FEATURE_WARNING_AS_ERROR:
35             return warningAsError;
36 
37           case Context.FEATURE_LOCATION_INFORMATION_IN_ERROR:
38             return generatingDebug;
39         }
40         return super.hasFeature(cx, featureIndex);
41     }
42 
43     @Override
onContextCreated(Context cx)44     protected void onContextCreated(Context cx)
45     {
46         cx.setLanguageVersion(languageVersion);
47         cx.setOptimizationLevel(optimizationLevel);
48         if (errorReporter != null) {
49             cx.setErrorReporter(errorReporter);
50         }
51         cx.setGeneratingDebug(generatingDebug);
52         super.onContextCreated(cx);
53     }
54 
setStrictMode(boolean flag)55     public void setStrictMode(boolean flag)
56     {
57         checkNotSealed();
58         this.strictMode = flag;
59     }
60 
setWarningAsError(boolean flag)61     public void setWarningAsError(boolean flag)
62     {
63         checkNotSealed();
64         this.warningAsError = flag;
65     }
66 
setLanguageVersion(int version)67     public void setLanguageVersion(int version)
68     {
69         Context.checkLanguageVersion(version);
70         checkNotSealed();
71         this.languageVersion = version;
72     }
73 
setOptimizationLevel(int optimizationLevel)74     public void setOptimizationLevel(int optimizationLevel)
75     {
76         Context.checkOptimizationLevel(optimizationLevel);
77         checkNotSealed();
78         this.optimizationLevel = optimizationLevel;
79     }
80 
setErrorReporter(ErrorReporter errorReporter)81     public void setErrorReporter(ErrorReporter errorReporter)
82     {
83         if (errorReporter == null) throw new IllegalArgumentException();
84         this.errorReporter = errorReporter;
85     }
86 
setGeneratingDebug(boolean generatingDebug)87     public void setGeneratingDebug(boolean generatingDebug)
88     {
89         this.generatingDebug = generatingDebug;
90     }
91 
getCharacterEncoding()92     public String getCharacterEncoding()
93     {
94         return characterEncoding;
95     }
96 
setCharacterEncoding(String characterEncoding)97     public void setCharacterEncoding(String characterEncoding)
98     {
99         this.characterEncoding = characterEncoding;
100     }
101 
setAllowReservedKeywords(boolean allowReservedKeywords)102     public void setAllowReservedKeywords(boolean allowReservedKeywords) {
103         this.allowReservedKeywords = allowReservedKeywords;
104     }
105 }
106