759d92fd57a80d0af815d018cae3d7a087e5aafc
[idea/community.git] / java / debugger / impl / src / com / intellij / debugger / engine / evaluation / EvaluationContextImpl.java
1 /*
2  * Copyright 2000-2009 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.debugger.engine.evaluation;
17
18 import com.intellij.debugger.engine.DebugProcessImpl;
19 import com.intellij.debugger.engine.DebuggerManagerThreadImpl;
20 import com.intellij.debugger.engine.SuspendContextImpl;
21 import com.intellij.debugger.jdi.StackFrameProxyImpl;
22 import com.intellij.openapi.project.Project;
23 import com.sun.jdi.ClassLoaderReference;
24 import com.sun.jdi.Value;
25 import org.jetbrains.annotations.NotNull;
26 import org.jetbrains.annotations.Nullable;
27
28 public final class EvaluationContextImpl implements EvaluationContext{
29   private final Value myThisObject;
30   private final SuspendContextImpl mySuspendContext;
31   private final StackFrameProxyImpl myFrameProxy;
32   private boolean myAutoLoadClasses = true;
33   private ClassLoaderReference myClassLoader;
34   
35   public EvaluationContextImpl(@NotNull SuspendContextImpl suspendContext, StackFrameProxyImpl frameProxy, @Nullable Value thisObject) {
36     myThisObject = thisObject;
37     myFrameProxy = frameProxy;
38     mySuspendContext = suspendContext;
39   }
40
41   @Nullable
42   @Override
43   public Value getThisObject() {
44     return myThisObject;
45   }
46
47   @NotNull
48   @Override
49   public SuspendContextImpl getSuspendContext() {
50     return mySuspendContext;
51   }
52
53   @Override
54   public StackFrameProxyImpl getFrameProxy() {
55     return myFrameProxy;
56   }
57
58   @NotNull
59   @Override
60   public DebugProcessImpl getDebugProcess() {
61     return getSuspendContext().getDebugProcess();
62   }
63
64   @Override
65   public Project getProject() {
66     DebugProcessImpl debugProcess = getDebugProcess();
67     return debugProcess.getProject();
68   }
69
70   @Override
71   public EvaluationContextImpl createEvaluationContext(Value value) {
72     final EvaluationContextImpl copy = new EvaluationContextImpl(getSuspendContext(), getFrameProxy(), value);
73     copy.setAutoLoadClasses(myAutoLoadClasses);
74     return copy;
75   }
76
77   @Nullable
78   @Override
79   public ClassLoaderReference getClassLoader() throws EvaluateException {
80     DebuggerManagerThreadImpl.assertIsManagerThread();
81     if (myClassLoader != null) {
82       return myClassLoader;
83     }
84     return myFrameProxy != null ? myFrameProxy.getClassLoader() : null;
85   }
86
87   public void setClassLoader(ClassLoaderReference classLoader) {
88     myClassLoader = classLoader;
89   }
90
91   public boolean isAutoLoadClasses() {
92     return myAutoLoadClasses;
93   }
94
95   public void setAutoLoadClasses(final boolean autoLoadClasses) {
96     myAutoLoadClasses = autoLoadClasses;
97   }
98 }