diff --git a/.idea/ant.xml b/.idea/ant.xml
index 544e1256edb..37ffae42808 100644
--- a/.idea/ant.xml
+++ b/.idea/ant.xml
@@ -26,6 +26,14 @@
+
+
+
+
+
+
+
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 2df90c07743..4959db82cd6 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -4,6 +4,7 @@
+
diff --git a/build.xml b/build.xml
new file mode 100644
index 00000000000..c5a74ee9208
--- /dev/null
+++ b/build.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java
index 6ffc688431f..4ab6dfeb815 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassBodyCodegen.java
@@ -40,10 +40,10 @@ public abstract class ClassBodyCodegen {
public void generate() {
generateDeclaration();
- generateSyntheticParts();
-
generateClassBody();
+ generateSyntheticParts();
+
generateStaticInitializer();
v.visitEnd();
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java
index 60dc3bc46f0..86ebc6554ad 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassCodegen.java
@@ -4,8 +4,6 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.objectweb.asm.ClassVisitor;
-import org.objectweb.asm.Type;
-import org.objectweb.asm.commons.InstructionAdapter;
/**
* @author max
@@ -25,7 +23,7 @@ public class ClassCodegen {
generateImplementation(parentContext, aClass, OwnerKind.IMPLEMENTATION);
- final ClassContext contextForInners = parentContext.intoClass(descriptor, OwnerKind.IMPLEMENTATION);
+ final ClassContext contextForInners = parentContext.intoClass(null, descriptor, OwnerKind.IMPLEMENTATION);
for (JetDeclaration declaration : aClass.getDeclarations()) {
if (declaration instanceof JetClass && !(declaration instanceof JetEnumEntry)) {
generate(contextForInners, (JetClass) declaration);
@@ -36,11 +34,11 @@ public class ClassCodegen {
private void generateImplementation(ClassContext parentContext, JetClassOrObject aClass, OwnerKind kind) {
ClassDescriptor descriptor = state.getBindingContext().get(BindingContext.CLASS, aClass);
ClassVisitor v = state.forClassImplementation(descriptor);
- new ImplementationBodyCodegen(aClass, parentContext.intoClass(descriptor, kind), v, state).generate();
+ new ImplementationBodyCodegen(aClass, parentContext.intoClass(null, descriptor, kind), v, state).generate();
if(aClass instanceof JetClass && ((JetClass)aClass).isTrait()) {
v = state.forTraitImplementation(descriptor);
- new TraitImplBodyCodegen(aClass, parentContext.intoClass(descriptor, OwnerKind.TRAIT_IMPL), v, state).generate();
+ new TraitImplBodyCodegen(aClass, parentContext.intoClass(null, descriptor, OwnerKind.TRAIT_IMPL), v, state).generate();
}
}
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClassContext.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClassContext.java
index e0fe6e08cb3..3e1200388ab 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/ClassContext.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClassContext.java
@@ -1,6 +1,3 @@
-/*
- * @author max
- */
package org.jetbrains.jet.codegen;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
@@ -14,18 +11,22 @@ import org.objectweb.asm.commons.InstructionAdapter;
import java.util.HashMap;
+/*
+ * @author max
+ * @author alex.tkachman
+ */
public class ClassContext {
public static final ClassContext STATIC = new ClassContext(null, OwnerKind.NAMESPACE, null, null, null);
private final DeclarationDescriptor contextType;
private final OwnerKind contextKind;
private final StackValue thisExpression;
private final ClassContext parentContext;
- private final ClosureCodegen closure;
+ public final FunctionOrClosureCodegen closure;
private boolean thisWasUsed = false;
HashMap typeInfoConstants;
- public ClassContext(DeclarationDescriptor contextType, OwnerKind contextKind, StackValue thisExpression, ClassContext parentContext, ClosureCodegen closureCodegen) {
+ public ClassContext(DeclarationDescriptor contextType, OwnerKind contextKind, StackValue thisExpression, ClassContext parentContext, FunctionOrClosureCodegen closureCodegen) {
this.contextType = contextType;
this.contextKind = contextKind;
this.thisExpression = thisExpression;
@@ -60,11 +61,11 @@ public class ClassContext {
return new ClassContext(descriptor, OwnerKind.NAMESPACE, null, this, null);
}
- public ClassContext intoClass(ClassDescriptor descriptor, OwnerKind kind) {
+ public ClassContext intoClass(FunctionOrClosureCodegen closure, ClassDescriptor descriptor, OwnerKind kind) {
final StackValue thisValue;
thisValue = StackValue.local(0, JetTypeMapper.TYPE_OBJECT);
- return new ClassContext(descriptor, kind, thisValue, this, null);
+ return new ClassContext(descriptor, kind, thisValue, this, closure);
}
public ClassContext intoFunction(FunctionDescriptor descriptor) {
@@ -140,13 +141,21 @@ public class ClassContext {
}
public StackValue lookupInContext(DeclarationDescriptor d, InstructionAdapter v) {
- final ClosureCodegen top = closure;
+ final FunctionOrClosureCodegen top = closure;
if (top != null) {
final StackValue answer = top.lookupInContext(d);
if (answer != null) return answer;
final StackValue thisContext = getThisExpression();
- thisContext.put(thisContext.type, v);
+ if(thisContext instanceof StackValue.Local) {
+ }
+ else if(thisContext instanceof StackValue.InstanceField) {
+ StackValue.InstanceField instanceField = (StackValue.InstanceField) thisContext;
+ v.getfield(instanceField.owner, instanceField.name, instanceField.type.getDescriptor());
+ }
+ else {
+ throw new UnsupportedOperationException();
+ }
}
return parentContext != null ? parentContext.lookupInContext(d, v) : null;
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java
index 2e04ada073d..8e507409cb9 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/ClosureCodegen.java
@@ -26,19 +26,10 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-public class ClosureCodegen {
- public final GenerationState state;
- private final ExpressionCodegen exprContext;
- private final ClassContext context;
- private ClassVisitor cv = null;
- public String name = null;
-
- private Map closure = new LinkedHashMap();
+public class ClosureCodegen extends FunctionOrClosureCodegen {
public ClosureCodegen(GenerationState state, ExpressionCodegen exprContext, ClassContext context) {
- this.state = state;
- this.exprContext = exprContext;
- this.context = context;
+ super(exprContext, context, state);
}
public static Method erasedInvokeSignature(FunctionDescriptor fd) {
@@ -57,31 +48,6 @@ public class ClosureCodegen {
return state.getTypeMapper().mapSignature("invoke", fd);
}
- public StackValue lookupInContext(DeclarationDescriptor d) {
- if (d instanceof VariableDescriptor) {
- VariableDescriptor vd = (VariableDescriptor) d;
-
- EnclosedValueDescriptor answer = closure.get(vd);
- if (answer != null) return answer.getInnerValue();
-
- final int idx = exprContext.lookupLocal(vd);
- if (idx < 0) return null;
-
- final Type type = state.getTypeMapper().mapType(vd.getOutType());
-
- StackValue outerValue = StackValue.local(idx, type);
- final String fieldName = "$" + (closure.size() + 1);
- StackValue innerValue = StackValue.field(type, name, fieldName, false);
- cv.visitField(Opcodes.ACC_PUBLIC, fieldName, type.getDescriptor(), null, null);
- answer = new EnclosedValueDescriptor(d, innerValue, outerValue);
- closure.put(d, answer);
-
- return innerValue;
- }
-
- return null;
- }
-
public GeneratedAnonymousClassDescriptor gen(JetFunctionLiteralExpression fun) {
final Pair nameAndVisitor = state.forAnonymousSubclass(fun);
@@ -120,7 +86,7 @@ public class ClosureCodegen {
final Method constructor = generateConstructor(funClass, captureThis, funDescriptor.getReturnType());
if (captureThis) {
- cv.visitField(Opcodes.ACC_PRIVATE, "this$0", enclosingType.getDescriptor(), null, null);
+ cv.visitField(0, "this$0", enclosingType.getDescriptor(), null, null);
}
cv.visitEnd();
@@ -192,7 +158,9 @@ public class ClosureCodegen {
}
for (DeclarationDescriptor descriptor : closure.keySet()) {
- argTypes[i++] = state.getTypeMapper().mapType(((VariableDescriptor) descriptor).getOutType());
+ final Type sharedVarType = exprContext.getSharedVarType(descriptor);
+ final Type type = sharedVarType != null ? sharedVarType : state.getTypeMapper().mapType(((VariableDescriptor) descriptor).getOutType());
+ argTypes[i++] = type;
}
final Method constructor = new Method("", Type.VOID_TYPE, argTypes);
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java
index f231cdf3426..782ec25c56a 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/ExpressionCodegen.java
@@ -94,7 +94,7 @@ public class ExpressionCodegen extends JetVisitor {
public StackValue genQualified(StackValue receiver, JetElement selector) {
markLineNumber(selector);
- return selector.visit(this, receiver);
+ return selector.accept(this, receiver);
}
public StackValue gen(JetElement expr) {
@@ -551,7 +551,7 @@ public class ExpressionCodegen extends JetVisitor {
final Method cons = closure.getConstructor();
if (closure.isCaptureThis()) {
- thisToStack();
+ v.load(0, JetTypeMapper.TYPE_OBJECT);
}
for (int i = 0; i < closure.getArgs().size(); i++) {
@@ -566,16 +566,43 @@ public class ExpressionCodegen extends JetVisitor {
@Override
public StackValue visitObjectLiteralExpression(JetObjectLiteralExpression expression, StackValue receiver) {
- GeneratedAnonymousClassDescriptor descriptor = state.generateObjectLiteral(expression, this, context);
- Type type = Type.getObjectType(descriptor.getClassname());
+ FunctionOrClosureCodegen closureCodegen = new FunctionOrClosureCodegen(this, context, state);
+ GeneratedAnonymousClassDescriptor closure = state.generateObjectLiteral(expression, closureCodegen);
+ Type type = Type.getObjectType(closure.getClassname());
v.anew(type);
v.dup();
- v.load(0, JetTypeMapper.TYPE_OBJECT);
- String jvmDescriptor = descriptor.getConstructor().getDescriptor().replace("(","(" + typeMapper.jetImplementationType((ClassDescriptor) contextType()));
- v.invokespecial(descriptor.getClassname(), "", jvmDescriptor);
- return StackValue.onStack(type);
+ final List consArgTypes = new LinkedList(Arrays.asList(closure.getConstructor().getArgumentTypes()));
+
+ if (consArgTypes.size() > 0) {
+ v.load(0, JetTypeMapper.TYPE_OBJECT);
+ }
+
+ for (DeclarationDescriptor descriptor : closureCodegen.closure.keySet()) {
+ final Type sharedVarType = getSharedVarType(descriptor);
+ consArgTypes.add(sharedVarType != null ? sharedVarType : state.getTypeMapper().mapType(((VariableDescriptor) descriptor).getOutType()));
+ final EnclosedValueDescriptor valueDescriptor = closureCodegen.closure.get(descriptor);
+ valueDescriptor.getOuterValue().put(sharedVarType, v);
+ }
+
+ Method cons = new Method("", Type.VOID_TYPE, consArgTypes.toArray(new Type[consArgTypes.size()]));
+ v.invokespecial(closure.getClassname(), "", cons.getDescriptor());
+ return StackValue.onStack(Type.getObjectType(closure.getClassname()));
}
+ Type getSharedVarType(DeclarationDescriptor variableDescriptor) {
+ if(!(variableDescriptor instanceof VariableDescriptor))
+ return null;
+
+ Boolean aBoolean = bindingContext.get(BindingContext.MUST_BE_WRAPPED_IN_A_REF, (VariableDescriptor) variableDescriptor);
+ if (aBoolean != null && aBoolean) {
+ JetType outType = ((VariableDescriptor) variableDescriptor).getOutType();
+ return StackValue.sharedTypeForType(typeMapper.mapType(outType));
+ }
+ else {
+ return null;
+ }
+ }
+
private StackValue generateBlock(List statements) {
Label blockStart = new Label();
v.mark(blockStart);
@@ -584,7 +611,9 @@ public class ExpressionCodegen extends JetVisitor {
if (statement instanceof JetProperty) {
final VariableDescriptor variableDescriptor = bindingContext.get(BindingContext.VARIABLE, statement);
assert variableDescriptor != null;
- final Type type = typeMapper.mapType(variableDescriptor.getOutType());
+
+ final Type sharedVarType = getSharedVarType(variableDescriptor);
+ final Type type = sharedVarType != null ? sharedVarType : typeMapper.mapType(variableDescriptor.getOutType());
myMap.enter(variableDescriptor, type.getSize());
}
}
@@ -608,10 +637,17 @@ public class ExpressionCodegen extends JetVisitor {
JetProperty var = (JetProperty) statement;
VariableDescriptor variableDescriptor = bindingContext.get(BindingContext.VARIABLE, var);
assert variableDescriptor != null;
- Type outType = typeMapper.mapType(variableDescriptor.getOutType());
int index = myMap.leave(variableDescriptor);
- v.visitLocalVariable(var.getName(), outType.getDescriptor(), null, blockStart, blockEnd, index);
+
+ final Type sharedVarType = getSharedVarType(variableDescriptor);
+ final Type type = sharedVarType != null ? sharedVarType : typeMapper.mapType(variableDescriptor.getOutType());
+ if(sharedVarType != null) {
+ v.aconst(null);
+ v.store(index, JetTypeMapper.TYPE_OBJECT);
+ }
+
+ v.visitLocalVariable(var.getName(), type.getDescriptor(), null, blockStart, blockEnd, index);
}
}
@@ -699,8 +735,14 @@ public class ExpressionCodegen extends JetVisitor {
else {
int index = lookupLocal(descriptor);
if (index >= 0) {
+ Type sharedVarType = getSharedVarType(descriptor);
final JetType outType = ((VariableDescriptor) descriptor).getOutType();
- return StackValue.local(index, typeMapper.mapType(outType));
+ if(sharedVarType != null) {
+ return StackValue.shared(index, typeMapper.mapType(outType));
+ }
+ else {
+ return StackValue.local(index, typeMapper.mapType(outType));
+ }
}
else if (descriptor instanceof PropertyDescriptor) {
final PropertyDescriptor propertyDescriptor = (PropertyDescriptor) descriptor;
@@ -785,6 +827,12 @@ public class ExpressionCodegen extends JetVisitor {
if (value == null) {
throw new UnsupportedOperationException("don't know how to generate reference " + descriptor);
}
+
+ if(value instanceof StackValue.FieldForSharedVar) {
+ StackValue.FieldForSharedVar fieldForSharedVar = (StackValue.FieldForSharedVar) value;
+ Type sharedType = StackValue.sharedTypeForType(value.type);
+ v.visitFieldInsn(Opcodes.GETFIELD, fieldForSharedVar.owner, fieldForSharedVar.name, sharedType.getDescriptor());
+ }
return value;
}
}
@@ -1617,12 +1665,27 @@ public class ExpressionCodegen extends JetVisitor {
assert index >= 0;
+ final Type sharedVarType = getSharedVarType(variableDescriptor);
+ assert variableDescriptor != null;
+ Type varType = typeMapper.mapType(variableDescriptor.getOutType());
+ if(sharedVarType != null) {
+ v.anew(sharedVarType);
+ v.dup();
+ v.invokespecial(sharedVarType.getInternalName(), "", "()V");
+ v.store(index, JetTypeMapper.TYPE_OBJECT);
+ }
+
JetExpression initializer = property.getInitializer();
if (initializer != null) {
- assert variableDescriptor != null;
- Type type = typeMapper.mapType(variableDescriptor.getOutType());
- gen(initializer, type);
- v.store(index, type);
+ if(sharedVarType == null) {
+ gen(initializer, varType);
+ v.store(index, varType);
+ }
+ else {
+ v.load(index, JetTypeMapper.TYPE_OBJECT);
+ gen(initializer, varType);
+ v.putfield(sharedVarType.getInternalName(), "ref", sharedVarType == JetTypeMapper.TYPE_SHARED_VAR ? "Ljava/lang/Object;" : varType.getDescriptor());
+ }
}
return StackValue.none();
}
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java b/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java
index bf6c4710c31..3bcaf17e855 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/FrameMap.java
@@ -3,6 +3,7 @@ package org.jetbrains.jet.codegen;
import gnu.trove.TObjectIntHashMap;
import gnu.trove.TObjectIntIterator;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
+import org.jetbrains.jet.lang.resolve.BindingContext;
import java.util.ArrayList;
import java.util.List;
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java
index d7b0b188569..1fcd98e320c 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionCodegen.java
@@ -98,6 +98,23 @@ public class FunctionCodegen {
iv.areturn(jvmSignature.getReturnType());
}
else {
+ for (int i = 0; i < paramDescrs.size(); i++) {
+ ValueParameterDescriptor parameter = paramDescrs.get(i);
+
+ Type sharedVarType = codegen.getSharedVarType(parameter);
+ Type localVarType = state.getTypeMapper().mapType(parameter.getOutType());
+ if(sharedVarType != null) {
+ int index = frameMap.getIndex(parameter);
+ mv.visitTypeInsn(Opcodes.NEW, sharedVarType.getInternalName());
+ mv.visitInsn(Opcodes.DUP);
+ mv.visitInsn(Opcodes.DUP);
+ mv.visitMethodInsn(Opcodes.INVOKESPECIAL, sharedVarType.getInternalName(), "", "()V");
+ mv.visitVarInsn(localVarType.getOpcode(Opcodes.ILOAD), index);
+ mv.visitFieldInsn(Opcodes.PUTFIELD, sharedVarType.getInternalName(), "ref", StackValue.refType(localVarType).getDescriptor());
+ mv.visitVarInsn(sharedVarType.getOpcode(Opcodes.ISTORE), index);
+ }
+ }
+
codegen.returnExpression(bodyExpressions);
}
mv.visitMaxs(0, 0);
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/FunctionOrClosureCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionOrClosureCodegen.java
new file mode 100644
index 00000000000..a6a57ece6b5
--- /dev/null
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/FunctionOrClosureCodegen.java
@@ -0,0 +1,57 @@
+package org.jetbrains.jet.codegen;
+
+import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
+import org.jetbrains.jet.lang.descriptors.VariableDescriptor;
+import org.objectweb.asm.ClassVisitor;
+import org.objectweb.asm.Opcodes;
+import org.objectweb.asm.Type;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * @author alex.tkachman
+ */
+public class FunctionOrClosureCodegen {
+ public final GenerationState state;
+ protected final ExpressionCodegen exprContext;
+ protected final ClassContext context;
+ protected ClassVisitor cv = null;
+ public String name = null;
+ protected Map closure = new LinkedHashMap();
+
+ public FunctionOrClosureCodegen(ExpressionCodegen exprContext, ClassContext context, GenerationState state) {
+ this.exprContext = exprContext;
+ this.context = context;
+ this.state = state;
+ }
+
+ public StackValue lookupInContext(DeclarationDescriptor d) {
+ if (d instanceof VariableDescriptor) {
+ VariableDescriptor vd = (VariableDescriptor) d;
+
+ EnclosedValueDescriptor answer = closure.get(vd);
+ if (answer != null) return answer.getInnerValue();
+
+ final int idx = exprContext.lookupLocal(vd);
+ if (idx < 0) return null;
+
+ final Type sharedVarType = exprContext.getSharedVarType(vd);
+ Type localType = state.getTypeMapper().mapType(vd.getOutType());
+ final Type type = sharedVarType != null ? sharedVarType : localType;
+
+ StackValue outerValue = StackValue.local(idx, type);
+ final String fieldName = "$" + (closure.size() + 1); // + "$" + vd.getName();
+ StackValue innerValue = sharedVarType != null ? StackValue.fieldForSharedVar(localType, name, fieldName) : StackValue.field(type, name, fieldName, false);
+
+ cv.visitField(Opcodes.ACC_PUBLIC, fieldName, type.getDescriptor(), null, null);
+
+ answer = new EnclosedValueDescriptor(d, innerValue, outerValue);
+ closure.put(d, answer);
+
+ return innerValue;
+ }
+
+ return null;
+ }
+}
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java
index 39862f0051e..51713dc8fb4 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/GenerationState.java
@@ -9,6 +9,7 @@ import com.intellij.util.containers.Stack;
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
+import org.jetbrains.jet.lang.descriptors.ConstructorDescriptor;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import org.jetbrains.jet.lang.resolve.BindingContext;
@@ -120,13 +121,19 @@ public class GenerationState {
}
}
- public GeneratedAnonymousClassDescriptor generateObjectLiteral(JetObjectLiteralExpression literal, ExpressionCodegen context, ClassContext classContext) {
- Pair nameAndVisitor = forAnonymousSubclass(literal.getObjectDeclaration());
+ public GeneratedAnonymousClassDescriptor generateObjectLiteral(JetObjectLiteralExpression literal, FunctionOrClosureCodegen closure) {
+ JetObjectDeclaration objectDeclaration = literal.getObjectDeclaration();
+ Pair nameAndVisitor = forAnonymousSubclass(objectDeclaration);
- final ClassContext objectContext = classContext.intoClass(getBindingContext().get(BindingContext.CLASS, literal.getObjectDeclaration()), OwnerKind.IMPLEMENTATION);
+ closure.cv = nameAndVisitor.getSecond();
+ closure.name = nameAndVisitor.getFirst();
+ final ClassContext objectContext = closure.context.intoClass(closure, getBindingContext().get(BindingContext.CLASS, objectDeclaration), OwnerKind.IMPLEMENTATION);
- new ImplementationBodyCodegen(literal.getObjectDeclaration(), objectContext, nameAndVisitor.getSecond(), this).generate();
- return new GeneratedAnonymousClassDescriptor(nameAndVisitor.first, new Method("", "()V"), false);
+ new ImplementationBodyCodegen(objectDeclaration, objectContext, nameAndVisitor.getSecond(), this).generate();
+
+ ConstructorDescriptor constructorDescriptor = closure.state.getBindingContext().get(BindingContext.CONSTRUCTOR, objectDeclaration);
+ CallableMethod callableMethod = closure.state.getTypeMapper().mapToCallableMethod(constructorDescriptor, OwnerKind.IMPLEMENTATION);
+ return new GeneratedAnonymousClassDescriptor(nameAndVisitor.first, callableMethod.getSignature(), false);
}
public static void prepareAnonymousClasses(JetElement aClass, final JetTypeMapper typeMapper) {
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java
index bdf2d80bc06..5dd9bf9f711 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java
@@ -225,6 +225,22 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
callableMethod = state.getTypeMapper().mapToCallableMethod(constructorDescriptor, kind);
method = callableMethod.getSignature();
}
+
+ int firstClosureIndex = -1;
+ if(context.closure != null) {
+ final List consArgTypes = new LinkedList(Arrays.asList(method.getArgumentTypes()));
+
+ firstClosureIndex = consArgTypes.size()+1;
+
+ Map closure = context.closure.closure;
+ for (DeclarationDescriptor descriptor : closure.keySet()) {
+ final Type sharedVarType = context.closure.exprContext.getSharedVarType(descriptor);
+ consArgTypes.add(sharedVarType != null ? sharedVarType : state.getTypeMapper().mapType(((VariableDescriptor) descriptor).getOutType()));
+ }
+
+ method = new Method("", Type.VOID_TYPE, consArgTypes.toArray(new Type[consArgTypes.size()]));
+ }
+
int flags = Opcodes.ACC_PUBLIC; // TODO
final MethodVisitor mv = v.visitMethod(flags, "", method.getDescriptor(), null, null);
mv.visitCode();
@@ -300,7 +316,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
iv.putfield(classname, delegateField, fieldDesc);
JetClass superClass = (JetClass) state.getBindingContext().get(BindingContext.DESCRIPTOR_TO_DECLARATION, superClassDescriptor);
- final ClassContext delegateContext = context.intoClass(superClassDescriptor,
+ final ClassContext delegateContext = context.intoClass(null, superClassDescriptor,
new OwnerKind.DelegateKind(StackValue.field(fieldType, classname, delegateField, false),
JetTypeMapper.jvmNameForInterface(superClassDescriptor)));
generateDelegates(superClass, delegateContext, overridden);
@@ -322,6 +338,17 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
generateTypeInfoInitializer(frameMap.getFirstTypeParameter(), frameMap.getTypeParameterCount(), iv);
}
+ if(context.closure != null) {
+ Map closure = context.closure.closure;
+ int k = 0;
+ for (DeclarationDescriptor varDescr : closure.keySet()) {
+ final Type sharedVarType = context.closure.exprContext.getSharedVarType(varDescr);
+ iv.load(0, JetTypeMapper.TYPE_OBJECT);
+ iv.load(firstClosureIndex + k, StackValue.refType(sharedVarType));
+ iv.putfield(state.getTypeMapper().jvmName(descriptor, OwnerKind.IMPLEMENTATION), "$" + (k+1), sharedVarType.getDescriptor());
+ }
+ }
+
generateInitializers(codegen, iv);
generateTraitMethods(codegen);
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
index b8e221c52a9..9cf08cd2482 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/JetTypeMapper.java
@@ -59,6 +59,15 @@ public class JetTypeMapper {
public static final Type TYPE_FUNCTION1 = Type.getObjectType("jet/Function1");
public static final Type TYPE_ITERATOR = Type.getObjectType("jet/Iterator");
public static final Type TYPE_INT_RANGE = Type.getObjectType("jet/IntRange");
+ public static final Type TYPE_SHARED_VAR = Type.getObjectType("jet/refs/SharedVar$Object");
+ public static final Type TYPE_SHARED_INT = Type.getObjectType("jet/refs/SharedVar$Int");
+ public static final Type TYPE_SHARED_DOUBLE = Type.getObjectType("jet/refs/SharedVar$Double");
+ public static final Type TYPE_SHARED_FLOAT = Type.getObjectType("jet/refs/SharedVar$Float");
+ public static final Type TYPE_SHARED_BYTE = Type.getObjectType("jet/refs/SharedVar$Byte");
+ public static final Type TYPE_SHARED_SHORT = Type.getObjectType("jet/refs/SharedVar$Short");
+ public static final Type TYPE_SHARED_CHAR = Type.getObjectType("jet/refs/SharedVar$Char");
+ public static final Type TYPE_SHARED_LONG = Type.getObjectType("jet/refs/SharedVar$Long");
+ public static final Type TYPE_SHARED_BOOLEAN = Type.getObjectType("jet/refs/SharedVar$Boolean");
public JetTypeMapper(JetStandardLibrary standardLibrary, BindingContext bindingContext) {
this.standardLibrary = standardLibrary;
diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java
index f60fc9804cc..52ff48a6183 100644
--- a/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java
+++ b/compiler/backend/src/org/jetbrains/jet/codegen/StackValue.java
@@ -11,6 +11,7 @@ import org.objectweb.asm.commons.Method;
/**
* @author yole
+ * @author alex.tkachman
*/
public abstract class StackValue {
public final Type type;
@@ -59,6 +60,10 @@ public abstract class StackValue {
return new Local(index, type);
}
+ public static StackValue shared(int index, Type type) {
+ return new Shared(index, type);
+ }
+
public static StackValue onStack(Type type) {
return type == Type.VOID_TYPE ? none() : new OnStack(type);
}
@@ -225,7 +230,11 @@ public abstract class StackValue {
public static StackValue none() {
return None.INSTANCE;
}
-
+
+ public static StackValue fieldForSharedVar(Type type, String name, String fieldName) {
+ return new FieldForSharedVar(type, name, fieldName);
+ }
+
private static class None extends StackValue {
public static None INSTANCE = new None();
private None() {
@@ -496,9 +505,9 @@ public abstract class StackValue {
}
- private static class Field extends StackValue {
- private final String owner;
- private final String name;
+ static class Field extends StackValue {
+ final String owner;
+ final String name;
private final boolean isStatic;
public Field(Type type, String owner, String name, boolean isStatic) {
@@ -531,9 +540,9 @@ public abstract class StackValue {
}
}
- private static class InstanceField extends StackValue {
- private final String owner;
- private final String name;
+ static class InstanceField extends StackValue {
+ final String owner;
+ final String name;
public InstanceField(Type type, String owner, String name) {
super(type);
@@ -625,4 +634,106 @@ public abstract class StackValue {
generator.gen(expression, type);
}
}
+
+ public static class Shared extends StackValue {
+ private final int index;
+
+ public Shared(int index, Type type) {
+ super(type);
+ this.index = index;
+ }
+
+ @Override
+ public void put(Type type, InstructionAdapter v) {
+ v.load(index, JetTypeMapper.TYPE_OBJECT);
+ Type refType = refType(this.type);
+ Type sharedType = sharedTypeForType(this.type);
+ v.visitFieldInsn(Opcodes.GETFIELD, sharedType.getInternalName(), "ref", refType.getDescriptor());
+ StackValue.onStack(refType).coerce(this.type, v);
+ StackValue.onStack(this.type).coerce(type, v);
+ }
+
+ @Override
+ public void store(InstructionAdapter v) {
+ v.load(index, JetTypeMapper.TYPE_OBJECT);
+ v.swap();
+ Type refType = refType(this.type);
+ Type sharedType = sharedTypeForType(this.type);
+ v.visitFieldInsn(Opcodes.PUTFIELD, sharedType.getInternalName(), "ref", refType.getDescriptor());
+ }
+ }
+
+ public static Type sharedTypeForType(Type type) {
+ switch(type.getSort()) {
+ case Type.OBJECT:
+ case Type.ARRAY:
+ return JetTypeMapper.TYPE_SHARED_VAR;
+
+ case Type.BYTE:
+ return JetTypeMapper.TYPE_SHARED_BYTE;
+
+ case Type.SHORT:
+ return JetTypeMapper.TYPE_SHARED_SHORT;
+
+ case Type.CHAR:
+ return JetTypeMapper.TYPE_SHARED_CHAR;
+
+ case Type.INT:
+ return JetTypeMapper.TYPE_SHARED_INT;
+
+ case Type.BOOLEAN:
+ return JetTypeMapper.TYPE_SHARED_BOOLEAN;
+
+ case Type.FLOAT:
+ return JetTypeMapper.TYPE_SHARED_FLOAT;
+
+ case Type.DOUBLE:
+ return JetTypeMapper.TYPE_SHARED_DOUBLE;
+
+ default:
+ throw new UnsupportedOperationException();
+ }
+ }
+
+ public static Type refType(Type type) {
+ if(type.getSort() == Type.OBJECT || type.getSort() == Type.ARRAY)
+ return JetTypeMapper.TYPE_OBJECT;
+
+ return type;
+ }
+
+ static class FieldForSharedVar extends StackValue {
+ final String owner;
+ final String name;
+
+ public FieldForSharedVar(Type type, String owner, String name) {
+ super(type);
+ this.owner = owner;
+ this.name = name;
+ }
+
+ @Override
+ public void dupReceiver(InstructionAdapter v, int below) {
+ if (below == 1) {
+ v.dupX1();
+ }
+ else {
+ v.dup();
+ }
+ }
+
+ @Override
+ public void put(Type type, InstructionAdapter v) {
+ Type sharedType = sharedTypeForType(this.type);
+ Type refType = refType(this.type);
+ v.visitFieldInsn(Opcodes.GETFIELD, sharedType.getInternalName(), "ref", refType.getDescriptor());
+ StackValue.onStack(refType).coerce(this.type, v);
+ StackValue.onStack(this.type).coerce(type, v);
+ }
+
+ @Override
+ public void store(InstructionAdapter v) {
+ v.visitFieldInsn(Opcodes.PUTFIELD, sharedTypeForType(type).getInternalName(), "ref", refType(type).getDescriptor());
+ }
+ }
}
diff --git a/compiler/cli/bin/kotlinc b/compiler/cli/bin/kotlinc
new file mode 100644
index 00000000000..78cde18cb55
--- /dev/null
+++ b/compiler/cli/bin/kotlinc
@@ -0,0 +1,98 @@
+#!/bin/bash --posix
+#
+##############################################################################
+# Copyright 2002-2011, LAMP/EPFL
+# Copyright 2011, JetBrains
+#
+# This is free software; see the distribution for copying conditions.
+# There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+##############################################################################
+
+cygwin=false;
+case "`uname`" in
+ CYGWIN*) cygwin=true ;;
+esac
+
+# Finding the root folder for this Kotlin distribution
+SOURCE=$0;
+SCRIPT=`basename "$SOURCE"`;
+while [ -h "$SOURCE" ]; do
+ SCRIPT=`basename "$SOURCE"`;
+ LOOKUP=`ls -ld "$SOURCE"`;
+ TARGET=`expr "$LOOKUP" : '.*-> \(.*\)$'`;
+ if expr "${TARGET:-.}/" : '/.*/$' > /dev/null; then
+ SOURCE=${TARGET:-.};
+ else
+ SOURCE=`dirname "$SOURCE"`/${TARGET:-.};
+ fi;
+done;
+
+# see #2092
+KOTLIN_HOME=`dirname "$SOURCE"`
+KOTLIN_HOME=`cd "$KOTLIN_HOME"; pwd -P`
+KOTLIN_HOME=`cd "$KOTLIN_HOME"/..; pwd`
+
+# Remove spaces from KOTLIN_HOME on windows
+if $cygwin; then
+ KOTLIN_HOME=`cygpath --windows --short-name "$KOTLIN_HOME"`
+ KOTLIN_HOME=`cygpath --unix "$KOTLIN_HOME"`
+fi
+
+# Constructing the extension classpath
+TOOL_CLASSPATH=""
+if [ -z "$TOOL_CLASSPATH" ] ; then
+ for ext in "$KOTLIN_HOME"/lib/* ; do
+ if [ -z "$TOOL_CLASSPATH" ] ; then
+ TOOL_CLASSPATH="$ext"
+ else
+ TOOL_CLASSPATH="$TOOL_CLASSPATH:$ext"
+ fi
+ done
+fi
+
+[ -n "$JAVA_OPTS" ] || JAVA_OPTS="-Xmx256M -Xms32M"
+
+# break out -D and -J options and add them to JAVA_OPTS as well
+# so they reach the underlying JVM in time to do some good. The
+# -D options will be available as system properties.
+declare -a java_args
+declare -a kotlin_args
+
+while [ $# -gt 0 ]; do
+ case "$1" in
+ -D*)
+ # pass to kotlin as well: otherwise we lose it sometimes when we
+ # need it, e.g. communicating with a server compiler.
+ java_args=("${java_args[@]}" "$1")
+ kotlin_args=("${kotlin_args[@]}" "$1")
+ shift
+ ;;
+ -J*)
+ # as with -D, pass to scala even though it will almost
+ # never be used.
+ java_args=("${java_args[@]}" "${1:2}")
+ kotlin_args=("${kotlin_args[@]}" "$1")
+ shift
+ ;;
+ *)
+ kotlin_args=("${kotlin_args[@]}" "$1")
+ shift
+ ;;
+ esac
+done
+
+# reset "$@" to the remaining args
+set -- "${kotlin_args[@]}"
+
+if [ -z "$JAVACMD" -a -n "$JAVA_HOME" -a -x "$JAVA_HOME/bin/java" ]; then
+ JAVACMD="$JAVA_HOME/bin/java"
+fi
+
+CPSELECT="-cp "
+
+"${JAVACMD:=java}" \
+ $JAVA_OPTS \
+ "${java_args[@]}" \
+ ${CPSELECT}${TOOL_CLASSPATH} \
+ org.jetbrains.jet.cli.KotlinCompiler "$@"
diff --git a/compiler/cli/bin/kotlinc.bat b/compiler/cli/bin/kotlinc.bat
new file mode 100644
index 00000000000..4fb6990f3b9
--- /dev/null
+++ b/compiler/cli/bin/kotlinc.bat
@@ -0,0 +1,51 @@
+rem based on scalac.bat from the Scala distribution
+rem ##########################################################################
+rem # Copyright 2002-2011, LAMP/EPFL
+rem # Copyright 2011, JetBrains
+rem #
+rem # This is free software; see the distribution for copying conditions.
+rem # There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
+rem # PARTICULAR PURPOSE.
+rem ##########################################################################
+@echo off
+
+@setlocal
+call :set_home
+
+if not "%JAVA_HOME%"=="" (
+ if exist "%JAVA_HOME%\bin\java.exe" set "_JAVACMD=%JAVA_HOME%\bin\java.exe"
+)
+
+if "%_JAVACMD%"=="" set _JAVACMD=java
+
+rem We use the value of the JAVA_OPTS environment variable if defined
+set _JAVA_OPTS=-Xmx256M -Xms32M
+
+set _TOOL_CLASSPATH=
+if "%_TOOL_CLASSPATH%"=="" (
+ for %%f in ("%_KOTLIN_HOME%\lib\*") do call :add_cpath "%%f"
+ for /d %%f in ("%_KOTLIN_HOME%\lib\*") do call :add_cpath "%%f"
+)
+
+"%_JAVACMD%" %_JAVA_OPTS% -cp "%_TOOL_CLASSPATH%" org.jetbrains.jet.cli.KotlinCompiler %*
+goto end
+
+rem ##########################################################################
+rem # subroutines
+
+:add_cpath
+ if "%_TOOL_CLASSPATH%"=="" (
+ set _TOOL_CLASSPATH=%~1
+ ) else (
+ set _TOOL_CLASSPATH=%_TOOL_CLASSPATH%;%~1
+ )
+goto :eof
+
+:set_home
+ set _BIN_DIR=
+ for %%i in (%~sf0) do set _BIN_DIR=%_BIN_DIR%%%~dpsi
+ set _KOTLIN_HOME=%_BIN_DIR%..
+goto :eof
+
+:end
+@endlocal
diff --git a/compiler/cli/cli.iml b/compiler/cli/cli.iml
new file mode 100644
index 00000000000..de82ce75e19
--- /dev/null
+++ b/compiler/cli/cli.iml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/compiler/cli/src/org/jetbrains/jet/cli/KotlinCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/KotlinCompiler.java
new file mode 100644
index 00000000000..e41fcdddb7c
--- /dev/null
+++ b/compiler/cli/src/org/jetbrains/jet/cli/KotlinCompiler.java
@@ -0,0 +1,123 @@
+package org.jetbrains.jet.cli;
+
+import com.google.common.collect.Lists;
+import com.intellij.core.JavaCoreEnvironment;
+import com.intellij.openapi.Disposable;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.vfs.VirtualFile;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiManager;
+import org.jetbrains.jet.codegen.ClassFileFactory;
+import org.jetbrains.jet.codegen.GenerationState;
+import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
+import org.jetbrains.jet.lang.diagnostics.Diagnostic;
+import org.jetbrains.jet.lang.parsing.JetParserDefinition;
+import org.jetbrains.jet.lang.psi.JetFile;
+import org.jetbrains.jet.lang.psi.JetNamespace;
+import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
+import org.jetbrains.jet.lang.resolve.BindingContext;
+import org.jetbrains.jet.lang.resolve.java.JavaDefaultImports;
+import org.jetbrains.jet.plugin.JetFileType;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * @author yole
+ */
+public class KotlinCompiler {
+ public static void main(String[] args) {
+ System.setProperty("java.awt.headless", "true");
+ if (args.length < 1) {
+ System.out.println("Usage: KotlinCompiler ");
+ return;
+ }
+ String javaHome = System.getenv("JAVA_HOME");
+ if (javaHome == null) {
+ System.out.println("JAVA_HOME environment variable needs to be defined");
+ return;
+ }
+ File rtJar = findRtJar(javaHome);
+ if (rtJar == null || !rtJar.exists()) {
+ System.out.print("No rt.jar found under JAVA_HOME");
+ return;
+ }
+
+ Disposable root = new Disposable() {
+ @Override
+ public void dispose() {
+ }
+ };
+ JavaCoreEnvironment environment = new JavaCoreEnvironment(root);
+ environment.addToClasspath(rtJar);
+
+ environment.registerFileType(JetFileType.INSTANCE, "kt");
+ environment.registerParserDefinition(new JetParserDefinition());
+ VirtualFile vFile = environment.getLocalFileSystem().findFileByPath(args [0]);
+ if (vFile == null) {
+ System.out.print("File not found: " + args[0]);
+ return;
+ }
+
+ Project project = environment.getProject();
+ GenerationState generationState = new GenerationState(project, false);
+ List namespaces = Lists.newArrayList();
+ PsiFile psiFile = PsiManager.getInstance(project).findFile(vFile);
+ if (psiFile instanceof JetFile) {
+ namespaces.add(((JetFile) psiFile).getRootNamespace());
+ }
+ else {
+ System.out.print("Not a Kotlin file: " + vFile.getPath());
+ return;
+ }
+
+ BindingContext bindingContext = AnalyzingUtils.getInstance(JavaDefaultImports.JAVA_DEFAULT_IMPORTS).analyzeNamespaces(project, namespaces, JetControlFlowDataTraceFactory.EMPTY);
+
+ boolean errors = false;
+ for (Diagnostic diagnostic : bindingContext.getDiagnostics()) {
+ switch (diagnostic.getSeverity()) {
+ case ERROR:
+ errors = true;
+ report(diagnostic);
+ break;
+ case INFO:
+ report(diagnostic);
+ break;
+ case WARNING:
+ report(diagnostic);
+ break;
+ }
+ }
+
+ if (!errors) {
+ generationState.compileCorrectNamespaces(bindingContext, namespaces);
+
+ final ClassFileFactory factory = generationState.getFactory();
+ List files = factory.files();
+ for (String file : files) {
+ File target = new File(vFile.getParent().getPath(), file);
+ try {
+ FileUtil.writeToFile(target, factory.asBytes(file));
+ System.out.println("Generated classfile: " + target);
+ } catch (IOException e) {
+ System.out.println(e.getMessage());
+ }
+ }
+ }
+
+ }
+
+ private static void report(Diagnostic diagnostic) {
+ System.out.println(diagnostic.getMessage());
+ }
+
+ private static File findRtJar(String javaHome) {
+ File rtJar = new File(javaHome, "jre/lib/rt.jar");
+ if (rtJar.exists()) {
+ return rtJar;
+ }
+ return null;
+ }
+}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/JetSemanticServices.java b/compiler/frontend/src/org/jetbrains/jet/lang/JetSemanticServices.java
index 575a8b394b7..2aff00b8719 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/JetSemanticServices.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/JetSemanticServices.java
@@ -3,8 +3,11 @@ package org.jetbrains.jet.lang;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
-import org.jetbrains.jet.lang.resolve.*;
-import org.jetbrains.jet.lang.types.*;
+import org.jetbrains.jet.lang.resolve.BindingTrace;
+import org.jetbrains.jet.lang.resolve.ClassDescriptorResolver;
+import org.jetbrains.jet.lang.types.JetStandardLibrary;
+import org.jetbrains.jet.lang.types.JetTypeChecker;
+import org.jetbrains.jet.lang.types.expressions.ExpressionTypingServices;
/**
* @author abreslav
@@ -37,13 +40,12 @@ public class JetSemanticServices {
}
@NotNull
- public JetTypeInferrer.Services getTypeInferrerServices(@NotNull BindingTrace trace) {
- return new JetTypeInferrer(this).getServices(trace);
+ public ExpressionTypingServices getTypeInferrerServices(@NotNull BindingTrace trace) {
+ return new ExpressionTypingServices(this, trace);
}
@NotNull
public JetTypeChecker getTypeChecker() {
return typeChecker;
}
-
}
\ No newline at end of file
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java
index 3d7f2a9d25a..73d4e25cdbe 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetControlFlowProcessor.java
@@ -10,7 +10,7 @@ import org.jetbrains.jet.lang.resolve.BindingContextUtils;
import org.jetbrains.jet.lang.resolve.BindingTrace;
import org.jetbrains.jet.lang.types.JetStandardClasses;
import org.jetbrains.jet.lang.types.JetType;
-import org.jetbrains.jet.lang.types.JetTypeInferrer;
+import org.jetbrains.jet.lang.types.expressions.OperatorConventions;
import org.jetbrains.jet.lexer.JetTokens;
import java.util.*;
@@ -157,7 +157,7 @@ public class JetControlFlowProcessor {
builder.unsupported(expression); // TODO
}
}
- else if (JetTypeInferrer.assignmentOperationNames.containsKey(operationType)) {
+ else if (OperatorConventions.ASSIGNMENT_OPERATIONS.containsKey(operationType)) {
JetExpression left = JetPsiUtil.deparenthesize(expression.getLeft());
if (left != null) {
value(left, false);
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java
index f67fa35e749..b3c49e458c4 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/descriptors/TypeParameterDescriptor.java
@@ -8,6 +8,7 @@ import org.jetbrains.jet.lang.resolve.scopes.JetScope;
import org.jetbrains.jet.lang.resolve.scopes.LazyScopeAdapter;
import org.jetbrains.jet.lang.types.*;
import org.jetbrains.jet.resolve.DescriptorRenderer;
+import org.jetbrains.jet.util.lazy.LazyValue;
import java.util.Collections;
import java.util.List;
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotatedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotatedExpression.java
index 0d06de6d8d6..139b9c20cba 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotatedExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotatedExpression.java
@@ -22,7 +22,7 @@ public class JetAnnotatedExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitAnnotatedExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotation.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotation.java
index 29619099473..1103c52ac47 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotation.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotation.java
@@ -20,7 +20,7 @@ public class JetAnnotation extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitAnnotation(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotationEntry.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotationEntry.java
index 77a4634e791..591544de38f 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotationEntry.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetAnnotationEntry.java
@@ -22,7 +22,7 @@ public class JetAnnotationEntry extends JetElement implements JetCallElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitAnnotationEntry(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java
index a690f1454fb..ec971f4796c 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetArrayAccessExpression.java
@@ -32,7 +32,7 @@ public class JetArrayAccessExpression extends JetReferenceExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitArrayAccessExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java
index 33cfe223c08..5d60411e203 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpression.java
@@ -21,7 +21,7 @@ public class JetBinaryExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitBinaryExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpressionWithTypeRHS.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpressionWithTypeRHS.java
index 4c182794d96..c0249025048 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpressionWithTypeRHS.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBinaryExpressionWithTypeRHS.java
@@ -20,7 +20,7 @@ public class JetBinaryExpressionWithTypeRHS extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitBinaryWithTypeRHSExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBindingPattern.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBindingPattern.java
index 16a604244c0..bcaadfc9fdd 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBindingPattern.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBindingPattern.java
@@ -29,7 +29,7 @@ public class JetBindingPattern extends JetPattern {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitBindingPattern(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockExpression.java
index 79248df6e36..cf8074088aa 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockExpression.java
@@ -20,7 +20,7 @@ public class JetBlockExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitBlockExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockStringTemplateEntry.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockStringTemplateEntry.java
index 3982036894c..5ffceecad4d 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockStringTemplateEntry.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBlockStringTemplateEntry.java
@@ -17,7 +17,7 @@ public class JetBlockStringTemplateEntry extends JetStringTemplateEntryWithExpre
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitBlockStringTemplateEntry(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBreakExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBreakExpression.java
index 0d7592872cf..cd2037985fb 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBreakExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetBreakExpression.java
@@ -17,7 +17,7 @@ public class JetBreakExpression extends JetLabelQualifiedExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitBreakExpression(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java
index 84d08e200a4..79eef89077e 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCallExpression.java
@@ -22,7 +22,7 @@ public class JetCallExpression extends JetExpression implements JetCallElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitCallExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCatchClause.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCatchClause.java
index 0b581e6aa4c..03112fbd965 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCatchClause.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetCatchClause.java
@@ -21,7 +21,7 @@ public class JetCatchClause extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitCatchSection(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java
index 176693cc17c..0b1b54b0509 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClass.java
@@ -40,7 +40,7 @@ public class JetClass extends JetTypeParameterListOwner implements JetClassOrObj
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitClass(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassBody.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassBody.java
index 0dec1a6dca4..5b4e67347f7 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassBody.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassBody.java
@@ -30,7 +30,7 @@ public class JetClassBody extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitClassBody(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassInitializer.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassInitializer.java
index 7f014f93787..a2a93ee1f48 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassInitializer.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassInitializer.java
@@ -17,7 +17,7 @@ public class JetClassInitializer extends JetDeclaration {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitAnonymousInitializer(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassObject.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassObject.java
index 92dd0b20077..4147cc3dd20 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassObject.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetClassObject.java
@@ -19,7 +19,7 @@ public class JetClassObject extends JetDeclaration {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitClassObject(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java
index 2bfff817e77..1465a02e92c 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstantExpression.java
@@ -17,7 +17,7 @@ public class JetConstantExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitConstantExpression(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstructor.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstructor.java
index 0971e9553a6..70f9846a356 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstructor.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetConstructor.java
@@ -23,7 +23,7 @@ public class JetConstructor extends JetDeclaration implements JetDeclarationWith
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitConstructor(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetContinueExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetContinueExpression.java
index 4ce802eeafd..7dec7aedd95 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetContinueExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetContinueExpression.java
@@ -17,7 +17,7 @@ public class JetContinueExpression extends JetLabelQualifiedExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitContinueExpression(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDecomposerPattern.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDecomposerPattern.java
index c4e2bd801a4..ead61daf914 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDecomposerPattern.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDecomposerPattern.java
@@ -28,7 +28,7 @@ public class JetDecomposerPattern extends JetPattern {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDecomposerPattern(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifier.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifier.java
index c5e8aab0c0a..915eb1f9cc9 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifier.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifier.java
@@ -19,7 +19,7 @@ public class JetDelegationSpecifier extends JetElement{
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDelegationSpecifier(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifierList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifierList.java
index cdf615c4dad..4cb02aca008 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifierList.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegationSpecifierList.java
@@ -20,7 +20,7 @@ public class JetDelegationSpecifierList extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDelegationSpecifierList(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorByExpressionSpecifier.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorByExpressionSpecifier.java
index ef5da2b1cf5..fc5740e0acc 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorByExpressionSpecifier.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorByExpressionSpecifier.java
@@ -18,7 +18,7 @@ public class JetDelegatorByExpressionSpecifier extends JetDelegationSpecifier {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDelegationByExpressionSpecifier(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperCall.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperCall.java
index 91e9487a881..494c6cc196e 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperCall.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperCall.java
@@ -22,7 +22,7 @@ public class JetDelegatorToSuperCall extends JetDelegationSpecifier implements J
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDelegationToSuperCallSpecifier(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperClass.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperClass.java
index ef712c5eeb1..2167f6345d7 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperClass.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToSuperClass.java
@@ -17,7 +17,7 @@ public class JetDelegatorToSuperClass extends JetDelegationSpecifier {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDelegationToSuperClassSpecifier(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToThisCall.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToThisCall.java
index 9b5501880ce..ef4c561c17d 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToThisCall.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDelegatorToThisCall.java
@@ -23,7 +23,7 @@ public class JetDelegatorToThisCall extends JetDelegationSpecifier implements Je
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDelegationToThisCall(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDoWhileExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDoWhileExpression.java
index f2cf29fd203..35099289068 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDoWhileExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDoWhileExpression.java
@@ -19,7 +19,7 @@ public class JetDoWhileExpression extends JetLoopExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDoWhileExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java
index aafeb45cb6e..97ee45d3567 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetDotQualifiedExpression.java
@@ -17,7 +17,7 @@ public class JetDotQualifiedExpression extends JetQualifiedExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitDotQualifiedExpression(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElement.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElement.java
index 28b5c490b9a..32b7364b2ce 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElement.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetElement.java
@@ -52,7 +52,7 @@ public class JetElement extends ASTWrapperPsiElement {
visitor.visitJetElement(this);
}
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitJetElement(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEnumEntry.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEnumEntry.java
index a79f256c18c..53e8c4c798e 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEnumEntry.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEnumEntry.java
@@ -52,7 +52,7 @@ public class JetEnumEntry extends JetClass {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitEnumEntry(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEscapeStringTemplateEntry.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEscapeStringTemplateEntry.java
index d483a9ba8ba..b6e02d80088 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEscapeStringTemplateEntry.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetEscapeStringTemplateEntry.java
@@ -18,7 +18,7 @@ public class JetEscapeStringTemplateEntry extends JetStringTemplateEntry {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitEscapeStringTemplateEntry(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpression.java
index 82864490542..aec7c357d8c 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpression.java
@@ -18,7 +18,7 @@ public abstract class JetExpression extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionPattern.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionPattern.java
index fdd02ead63c..f5d19ae808a 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionPattern.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetExpressionPattern.java
@@ -23,7 +23,7 @@ public class JetExpressionPattern extends JetPattern {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitExpressionPattern(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFinallySection.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFinallySection.java
index 3c62dfebd7d..a84b0784185 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFinallySection.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFinallySection.java
@@ -18,7 +18,7 @@ public class JetFinallySection extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitFinallySection(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetForExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetForExpression.java
index ef650988dc2..b9a2958ec86 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetForExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetForExpression.java
@@ -19,7 +19,7 @@ public class JetForExpression extends JetLoopExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitForExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionLiteralExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionLiteralExpression.java
index efed8a90e56..a9d6ebd25bf 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionLiteralExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionLiteralExpression.java
@@ -20,7 +20,7 @@ public class JetFunctionLiteralExpression extends JetExpression implements JetDe
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitFunctionLiteralExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionType.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionType.java
index 572212e6392..aaeffa8262b 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionType.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetFunctionType.java
@@ -45,7 +45,7 @@ public class JetFunctionType extends JetTypeElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitFunctionType(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetHashQualifiedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetHashQualifiedExpression.java
index 8f48c5d5a9e..07edb5c27cb 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetHashQualifiedExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetHashQualifiedExpression.java
@@ -17,7 +17,7 @@ public class JetHashQualifiedExpression extends JetQualifiedExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitHashQualifiedExpression(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIfExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIfExpression.java
index 59b6ba9207f..87e1d40d7fe 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIfExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIfExpression.java
@@ -19,7 +19,7 @@ public class JetIfExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitIfExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java
index aa289179417..fbf5d660496 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetImportDirective.java
@@ -20,7 +20,7 @@ public class JetImportDirective extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitImportDirective(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetInitializerList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetInitializerList.java
index 7c161114e0f..f8c90eb3723 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetInitializerList.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetInitializerList.java
@@ -20,7 +20,7 @@ public class JetInitializerList extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitInitializerList(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIsExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIsExpression.java
index a88fe3dd204..53c35a86f45 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIsExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetIsExpression.java
@@ -20,7 +20,7 @@ public class JetIsExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitIsExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLiteralStringTemplateEntry.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLiteralStringTemplateEntry.java
index 0f3317acbc5..5933068ce2e 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLiteralStringTemplateEntry.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetLiteralStringTemplateEntry.java
@@ -17,7 +17,7 @@ public class JetLiteralStringTemplateEntry extends JetStringTemplateEntry {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitLiteralStringTemplateEntry(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetModifierList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetModifierList.java
index 2c5e47472c5..f7dcb83d990 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetModifierList.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetModifierList.java
@@ -25,7 +25,7 @@ public class JetModifierList extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitModifierList(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedFunction.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedFunction.java
index 5d791fbe2a4..34e96ce83b9 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedFunction.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamedFunction.java
@@ -19,7 +19,7 @@ public class JetNamedFunction extends JetFunction {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitNamedFunction(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespace.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespace.java
index c73621199b9..c39ea7481d9 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespace.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespace.java
@@ -24,7 +24,7 @@ public class JetNamespace extends JetNamedDeclaration {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitNamespace(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespaceBody.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespaceBody.java
index 9004b90ddc5..8d67525d104 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespaceBody.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNamespaceBody.java
@@ -24,7 +24,7 @@ public class JetNamespaceBody extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitNamespaceBody(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNullableType.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNullableType.java
index 0e1e049da29..5884b0c1904 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNullableType.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetNullableType.java
@@ -31,7 +31,7 @@ public class JetNullableType extends JetTypeElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitNullableType(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclaration.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclaration.java
index e3b91196931..27bea8777bd 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclaration.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectDeclaration.java
@@ -84,7 +84,7 @@ public class JetObjectDeclaration extends JetNamedDeclaration implements JetClas
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitObjectDeclaration(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectLiteralExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectLiteralExpression.java
index d62bbc143b3..e844ceba418 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectLiteralExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetObjectLiteralExpression.java
@@ -18,7 +18,7 @@ public class JetObjectLiteralExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitObjectLiteralExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java
index f37cb380e55..44c6cbfc276 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameter.java
@@ -20,7 +20,7 @@ public class JetParameter extends JetNamedDeclaration {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitParameter(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java
index 7241f612545..4521e52c9d9 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParameterList.java
@@ -20,7 +20,7 @@ public class JetParameterList extends JetElement {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitParameterList(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParenthesizedExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParenthesizedExpression.java
index 778deab905b..c17b0f82006 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParenthesizedExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetParenthesizedExpression.java
@@ -18,7 +18,7 @@ public class JetParenthesizedExpression extends JetExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitParenthesizedExpression(this, data);
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java
index 01b31f87a63..e98eeb230d6 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPostfixExpression.java
@@ -24,7 +24,7 @@ public class JetPostfixExpression extends JetUnaryExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public R accept(@NotNull JetVisitor visitor, D data) {
return visitor.visitPostfixExpression(this, data);
}
}
diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPredicateExpression.java b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPredicateExpression.java
index 8f4f83737de..b4841a7026f 100644
--- a/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPredicateExpression.java
+++ b/compiler/frontend/src/org/jetbrains/jet/lang/psi/JetPredicateExpression.java
@@ -17,7 +17,7 @@ public class JetPredicateExpression extends JetQualifiedExpression {
}
@Override
- public R visit(@NotNull JetVisitor visitor, D data) {
+ public