IDEA-131931 Debugger: Throwable at SuspendContextImpl.getDebugProcess() on opening...
[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   public DebuggerManagerThreadImpl getManagerThread() {
65     return getSuspendContext().getDebugProcessNoAssert().getManagerThread();
66   }
67
68   @Override
69   public Project getProject() {
70     DebugProcessImpl debugProcess = getDebugProcess();
71     return debugProcess.getProject();
72   }
73
74   @Override
75   public EvaluationContextImpl createEvaluationContext(Value value) {
76     final EvaluationContextImpl copy = new EvaluationContextImpl(getSuspendContext(), getFrameProxy(), value);
77     copy.setAutoLoadClasses(myAutoLoadClasses);
78     return copy;
79   }
80
81   @Nullable
82   @Override
83   public ClassLoaderReference getClassLoader() throws EvaluateException {
84     DebuggerManagerThreadImpl.assertIsManagerThread();
85     if (myClassLoader != null) {
86       return myClassLoader;
87     }
88     return myFrameProxy != null ? myFrameProxy.getClassLoader() : null;
89   }
90
91   public void setClassLoader(ClassLoaderReference classLoader) {
92     myClassLoader = classLoader;
93   }
94
95   public boolean isAutoLoadClasses() {
96     return myAutoLoadClasses;
97   }
98
99   public void setAutoLoadClasses(final boolean autoLoadClasses) {
100     myAutoLoadClasses = autoLoadClasses;
101   }
102 }