001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.lang.cfg;
018
019 import org.jetbrains.annotations.NotNull;
020 import org.jetbrains.annotations.Nullable;
021 import org.jetbrains.jet.lang.cfg.pseudocode.PseudoValue;
022 import org.jetbrains.jet.lang.cfg.pseudocode.Pseudocode;
023 import org.jetbrains.jet.lang.cfg.pseudocode.TypePredicate;
024 import org.jetbrains.jet.lang.cfg.pseudocode.instructions.eval.*;
025 import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
026 import org.jetbrains.jet.lang.psi.*;
027 import org.jetbrains.jet.lang.resolve.calls.model.ResolvedCall;
028 import org.jetbrains.jet.lang.resolve.constants.CompileTimeConstant;
029 import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverValue;
030
031 import java.util.List;
032 import java.util.Map;
033
034 public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuilder {
035
036 @NotNull
037 protected abstract JetControlFlowBuilder getDelegateBuilder();
038
039 @Override
040 public void loadUnit(@NotNull JetExpression expression) {
041 getDelegateBuilder().loadUnit(expression);
042 }
043
044 @NotNull
045 @Override
046 public InstructionWithValue loadConstant(@NotNull JetExpression expression, @Nullable CompileTimeConstant<?> constant) {
047 return getDelegateBuilder().loadConstant(expression, constant);
048 }
049
050 @NotNull
051 @Override
052 public InstructionWithValue createAnonymousObject(@NotNull JetObjectLiteralExpression expression) {
053 return getDelegateBuilder().createAnonymousObject(expression);
054 }
055
056 @NotNull
057 @Override
058 public InstructionWithValue createFunctionLiteral(@NotNull JetFunctionLiteralExpression expression) {
059 return getDelegateBuilder().createFunctionLiteral(expression);
060 }
061
062 @NotNull
063 @Override
064 public InstructionWithValue loadStringTemplate(@NotNull JetStringTemplateExpression expression, @NotNull List<PseudoValue> inputValues) {
065 return getDelegateBuilder().loadStringTemplate(expression, inputValues);
066 }
067
068 @NotNull
069 @Override
070 public MagicInstruction magic(
071 @NotNull JetElement instructionElement,
072 @Nullable JetElement valueElement,
073 @NotNull List<PseudoValue> inputValues,
074 @NotNull Map<PseudoValue, TypePredicate> expectedTypes,
075 boolean synthetic
076 ) {
077 return getDelegateBuilder().magic(instructionElement, valueElement, inputValues, expectedTypes, synthetic);
078 }
079
080 @NotNull
081 @Override
082 public MergeInstruction merge(@NotNull JetExpression expression, @NotNull List<PseudoValue> inputValues) {
083 return getDelegateBuilder().merge(expression, inputValues);
084 }
085
086 @NotNull
087 @Override
088 public ReadValueInstruction readVariable(
089 @NotNull JetElement instructionElement,
090 @NotNull JetExpression valueElement,
091 @NotNull ResolvedCall<?> resolvedCall,
092 @NotNull Map<PseudoValue, ReceiverValue> receiverValues) {
093 return getDelegateBuilder().readVariable(instructionElement, valueElement, resolvedCall, receiverValues);
094 }
095
096 @NotNull
097 @Override
098 public CallInstruction call(
099 @NotNull JetElement instructionElement,
100 @Nullable JetExpression valueElement,
101 @NotNull ResolvedCall<?> resolvedCall,
102 @NotNull Map<PseudoValue, ReceiverValue> receiverValues,
103 @NotNull Map<PseudoValue, ValueParameterDescriptor> arguments
104 ) {
105 return getDelegateBuilder().call(instructionElement, valueElement, resolvedCall, receiverValues, arguments);
106 }
107
108 @NotNull
109 @Override
110 public OperationInstruction predefinedOperation(
111 @NotNull JetExpression expression,
112 @NotNull PredefinedOperation operation,
113 @NotNull List<PseudoValue> inputValues
114 ) {
115 return getDelegateBuilder().predefinedOperation(expression, operation, inputValues);
116 }
117
118 @Override
119 public void compilationError(@NotNull JetElement element, @NotNull String message) {
120 getDelegateBuilder().compilationError(element, message);
121 }
122
123 @Override
124 @NotNull
125 public Label createUnboundLabel() {
126 return getDelegateBuilder().createUnboundLabel();
127 }
128
129 @NotNull
130 @Override
131 public Label createUnboundLabel(@NotNull String name) {
132 return getDelegateBuilder().createUnboundLabel(name);
133 }
134
135 @Override
136 public void bindLabel(@NotNull Label label) {
137 getDelegateBuilder().bindLabel(label);
138 }
139
140 @Override
141 public void jump(@NotNull Label label, @NotNull JetElement element) {
142 getDelegateBuilder().jump(label, element);
143 }
144
145 @Override
146 public void jumpOnFalse(@NotNull Label label, @NotNull JetElement element, @Nullable PseudoValue conditionValue) {
147 getDelegateBuilder().jumpOnFalse(label, element, conditionValue);
148 }
149
150 @Override
151 public void jumpOnTrue(@NotNull Label label, @NotNull JetElement element, @Nullable PseudoValue conditionValue) {
152 getDelegateBuilder().jumpOnTrue(label, element, conditionValue);
153 }
154
155 @Override
156 public void nondeterministicJump(@NotNull Label label, @NotNull JetElement element, @Nullable PseudoValue inputValue) {
157 getDelegateBuilder().nondeterministicJump(label, element, inputValue);
158 }
159
160 @Override
161 public void nondeterministicJump(@NotNull List<Label> labels, @NotNull JetElement element) {
162 getDelegateBuilder().nondeterministicJump(labels, element);
163 }
164
165 @Override
166 public void jumpToError(@NotNull JetElement element) {
167 getDelegateBuilder().jumpToError(element);
168 }
169
170 @Override
171 public void throwException(@NotNull JetThrowExpression throwExpression, @NotNull PseudoValue thrownValue) {
172 getDelegateBuilder().throwException(throwExpression, thrownValue);
173 }
174
175 @Override
176 @NotNull
177 public Label getEntryPoint(@NotNull JetElement labelElement) {
178 return getDelegateBuilder().getEntryPoint(labelElement);
179 }
180
181 @NotNull
182 @Override
183 public Label getExitPoint(@NotNull JetElement labelElement) {
184 return getDelegateBuilder().getExitPoint(labelElement);
185 }
186
187 @Override
188 public LoopInfo enterLoop(@NotNull JetExpression expression, @Nullable Label loopExitPoint, Label conditionEntryPoint) {
189 return getDelegateBuilder().enterLoop(expression, loopExitPoint, conditionEntryPoint);
190 }
191
192 @Override
193 public void exitLoop(@NotNull JetExpression expression) {
194 getDelegateBuilder().exitLoop(expression);
195 }
196
197 @Override
198 @Nullable
199 public JetElement getCurrentLoop() {
200 return getDelegateBuilder().getCurrentLoop();
201 }
202
203 @Override
204 public void enterTryFinally(@NotNull GenerationTrigger trigger) {
205 getDelegateBuilder().enterTryFinally(trigger);
206 }
207
208 @Override
209 public void exitTryFinally() {
210 getDelegateBuilder().exitTryFinally();
211 }
212
213 @Override
214 public void enterSubroutine(@NotNull JetElement subroutine) {
215 getDelegateBuilder().enterSubroutine(subroutine);
216 }
217
218 @NotNull
219 @Override
220 public Pseudocode exitSubroutine(@NotNull JetElement subroutine) {
221 return getDelegateBuilder().exitSubroutine(subroutine);
222 }
223
224 @NotNull
225 @Override
226 public JetElement getCurrentSubroutine() {
227 return getDelegateBuilder().getCurrentSubroutine();
228 }
229
230 @Override
231 @Nullable
232 public JetElement getReturnSubroutine() {
233 return getDelegateBuilder().getReturnSubroutine();
234 }
235
236 @Override
237 public void returnValue(@NotNull JetReturnExpression returnExpression, @NotNull PseudoValue returnValue, @NotNull JetElement subroutine) {
238 getDelegateBuilder().returnValue(returnExpression, returnValue, subroutine);
239 }
240
241 @Override
242 public void returnNoValue(@NotNull JetReturnExpression returnExpression, @NotNull JetElement subroutine) {
243 getDelegateBuilder().returnNoValue(returnExpression, subroutine);
244 }
245
246 @Override
247 public void unsupported(JetElement element) {
248 getDelegateBuilder().unsupported(element);
249 }
250
251 @Override
252 public void write(
253 @NotNull JetElement assignment,
254 @NotNull JetElement lValue,
255 @NotNull PseudoValue rValue,
256 @NotNull AccessTarget target,
257 @NotNull Map<PseudoValue, ReceiverValue> receiverValues) {
258 getDelegateBuilder().write(assignment, lValue, rValue, target, receiverValues);
259 }
260
261 @Override
262 public void declareParameter(@NotNull JetParameter parameter) {
263 getDelegateBuilder().declareParameter(parameter);
264 }
265
266 @Override
267 public void declareVariable(@NotNull JetVariableDeclaration property) {
268 getDelegateBuilder().declareVariable(property);
269 }
270
271 @Override
272 public void declareFunction(@NotNull JetElement subroutine, @NotNull Pseudocode pseudocode) {
273 getDelegateBuilder().declareFunction(subroutine, pseudocode);
274 }
275
276 @Override
277 public void repeatPseudocode(@NotNull Label startLabel, @NotNull Label finishLabel) {
278 getDelegateBuilder().repeatPseudocode(startLabel, finishLabel);
279 }
280
281 @Override
282 public void mark(@NotNull JetElement element) {
283 getDelegateBuilder().mark(element);
284 }
285
286 @Nullable
287 @Override
288 public PseudoValue getBoundValue(@Nullable JetElement element) {
289 return getDelegateBuilder().getBoundValue(element);
290 }
291
292 @Override
293 public void bindValue(@NotNull PseudoValue value, @NotNull JetElement element) {
294 getDelegateBuilder().bindValue(value, element);
295 }
296
297 @Override
298 public void enterLexicalScope(@NotNull JetElement element) {
299 getDelegateBuilder().enterLexicalScope(element);
300 }
301
302 @Override
303 public void exitLexicalScope(@NotNull JetElement element) {
304 getDelegateBuilder().exitLexicalScope(element);
305 }
306 }