Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -253,7 +253,7 @@ public class ClosureCodegen extends ObjectOrClosureCodegen {
|
|||||||
iv.load(0, Type.getObjectType(funClass));
|
iv.load(0, Type.getObjectType(funClass));
|
||||||
// expressionCodegen.generateTypeInfo(new ProjectionErasingJetType(returnType));
|
// expressionCodegen.generateTypeInfo(new ProjectionErasingJetType(returnType));
|
||||||
iv.aconst(null); // @todo
|
iv.aconst(null); // @todo
|
||||||
iv.invokespecial(funClass, "<init>", "(Ljet/typeinfo/TypeInfo;)V");
|
iv.invokespecial(funClass, "<init>", "(Ljet/TypeInfo;)V");
|
||||||
|
|
||||||
i = 1;
|
i = 1;
|
||||||
int k = 0;
|
int k = 0;
|
||||||
|
|||||||
@@ -991,7 +991,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
else if (descriptor instanceof TypeParameterDescriptor) {
|
else if (descriptor instanceof TypeParameterDescriptor) {
|
||||||
TypeParameterDescriptor typeParameterDescriptor = (TypeParameterDescriptor) descriptor;
|
TypeParameterDescriptor typeParameterDescriptor = (TypeParameterDescriptor) descriptor;
|
||||||
loadTypeParameterTypeInfo(typeParameterDescriptor, null);
|
loadTypeParameterTypeInfo(typeParameterDescriptor, null);
|
||||||
v.invokevirtual("jet/typeinfo/TypeInfo", "getClassObject", "()Ljava/lang/Object;");
|
v.invokevirtual("jet/TypeInfo", "getClassObject", "()Ljava/lang/Object;");
|
||||||
v.checkcast(asmType(typeParameterDescriptor.getClassObjectType()));
|
v.checkcast(asmType(typeParameterDescriptor.getClassObjectType()));
|
||||||
|
|
||||||
return StackValue.onStack(TYPE_OBJECT);
|
return StackValue.onStack(TYPE_OBJECT);
|
||||||
@@ -2118,7 +2118,7 @@ public class ExpressionCodegen extends JetVisitor<StackValue, StackValue> {
|
|||||||
if(elementType != null) {
|
if(elementType != null) {
|
||||||
generateTypeInfo(elementType, null);
|
generateTypeInfo(elementType, null);
|
||||||
gen(args.get(0).getArgumentExpression(), Type.INT_TYPE);
|
gen(args.get(0).getArgumentExpression(), Type.INT_TYPE);
|
||||||
v.invokevirtual("jet/typeinfo/TypeInfo", "newArray", "(I)[Ljava/lang/Object;");
|
v.invokevirtual("jet/TypeInfo", "newArray", "(I)[Ljava/lang/Object;");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
gen(args.get(0).getArgumentExpression(), Type.INT_TYPE);
|
gen(args.get(0).getArgumentExpression(), Type.INT_TYPE);
|
||||||
@@ -2543,14 +2543,14 @@ If finally block is present, its last expression is the value of try expression.
|
|||||||
if (leaveExpressionOnStack) {
|
if (leaveExpressionOnStack) {
|
||||||
v.dupX1();
|
v.dupX1();
|
||||||
}
|
}
|
||||||
v.invokevirtual("jet/typeinfo/TypeInfo", "isInstance", "(Ljava/lang/Object;)Z");
|
v.invokevirtual("jet/TypeInfo", "isInstance", "(Ljava/lang/Object;)Z");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void generateTypeInfo(JetType jetType, Map<TypeParameterDescriptor, JetType> typeArguments) {
|
public void generateTypeInfo(JetType jetType, Map<TypeParameterDescriptor, JetType> typeArguments) {
|
||||||
String knownTypeInfo = typeMapper.isKnownTypeInfo(jetType);
|
String knownTypeInfo = typeMapper.isKnownTypeInfo(jetType);
|
||||||
if(knownTypeInfo != null) {
|
if(knownTypeInfo != null) {
|
||||||
v.getstatic("jet/typeinfo/TypeInfo", knownTypeInfo, "Ljet/typeinfo/TypeInfo;");
|
v.getstatic("jet/TypeInfo", knownTypeInfo, "Ljet/TypeInfo;");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2562,14 +2562,14 @@ If finally block is present, its last expression is the value of try expression.
|
|||||||
|
|
||||||
if(!CodegenUtil.hasTypeInfoField(jetType) && !(bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, jetType.getConstructor().getDeclarationDescriptor()) instanceof PsiClass)) {
|
if(!CodegenUtil.hasTypeInfoField(jetType) && !(bindingContext.get(BindingContext.DESCRIPTOR_TO_DECLARATION, jetType.getConstructor().getDeclarationDescriptor()) instanceof PsiClass)) {
|
||||||
// TODO: we need some better checks here
|
// TODO: we need some better checks here
|
||||||
v.getstatic(typeMapper.mapType(jetType, OwnerKind.IMPLEMENTATION).getInternalName(), "$staticTypeInfo", "Ljet/typeinfo/TypeInfo;");
|
v.getstatic(typeMapper.mapType(jetType, OwnerKind.IMPLEMENTATION).getInternalName(), "$staticTypeInfo", "Ljet/TypeInfo;");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasUnsubstituted = TypeUtils.hasUnsubstitutedTypeParameters(jetType);
|
boolean hasUnsubstituted = TypeUtils.hasUnsubstitutedTypeParameters(jetType);
|
||||||
if(!hasUnsubstituted) {
|
if(!hasUnsubstituted) {
|
||||||
int typeInfoConstantIndex = context.getTypeInfoConstantIndex(jetType);
|
int typeInfoConstantIndex = context.getTypeInfoConstantIndex(jetType);
|
||||||
v.invokestatic(context.getNamespaceClassName(), "$getCachedTypeInfo$" + typeInfoConstantIndex, "()Ljet/typeinfo/TypeInfo;");
|
v.invokestatic(context.getNamespaceClassName(), "$getCachedTypeInfo$" + typeInfoConstantIndex, "()Ljet/TypeInfo;");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2590,10 +2590,10 @@ If finally block is present, its last expression is the value of try expression.
|
|||||||
genTypeInfoToProjection(v, argument.getProjectionKind());
|
genTypeInfoToProjection(v, argument.getProjectionKind());
|
||||||
v.astore(TYPE_OBJECT);
|
v.astore(TYPE_OBJECT);
|
||||||
}
|
}
|
||||||
v.invokestatic("jet/typeinfo/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z[Ljet/typeinfo/TypeInfoProjection;)Ljet/typeinfo/TypeInfo;");
|
v.invokestatic("jet/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z[Ljet/typeinfo/TypeInfoProjection;)Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
v.invokestatic("jet/typeinfo/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/typeinfo/TypeInfo;");
|
v.invokestatic("jet/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2601,9 +2601,9 @@ If finally block is present, its last expression is the value of try expression.
|
|||||||
if(variance == Variance.INVARIANT)
|
if(variance == Variance.INVARIANT)
|
||||||
v.checkcast(TYPE_TYPEINFOPROJECTION);
|
v.checkcast(TYPE_TYPEINFOPROJECTION);
|
||||||
else if(variance == Variance.IN_VARIANCE)
|
else if(variance == Variance.IN_VARIANCE)
|
||||||
v.invokestatic("jet/typeinfo/TypeInfo", "inProjection", "(Ljet/typeinfo/TypeInfo;)Ljet/typeinfo/TypeInfoProjection;");
|
v.invokestatic("jet/TypeInfo", "inProjection", "(Ljet/TypeInfo;)Ljet/typeinfo/TypeInfoProjection;");
|
||||||
else if(variance == Variance.OUT_VARIANCE)
|
else if(variance == Variance.OUT_VARIANCE)
|
||||||
v.invokestatic("jet/typeinfo/TypeInfo", "outProjection", "(Ljet/typeinfo/TypeInfo;)Ljet/typeinfo/TypeInfoProjection;");
|
v.invokestatic("jet/TypeInfo", "outProjection", "(Ljet/TypeInfo;)Ljet/typeinfo/TypeInfoProjection;");
|
||||||
else
|
else
|
||||||
throw new UnsupportedOperationException(variance.toString());
|
throw new UnsupportedOperationException(variance.toString());
|
||||||
}
|
}
|
||||||
@@ -2635,19 +2635,19 @@ If finally block is present, its last expression is the value of try expression.
|
|||||||
if (CodegenUtil.hasTypeInfoField(defaultType)) {
|
if (CodegenUtil.hasTypeInfoField(defaultType)) {
|
||||||
if(!(context instanceof CodegenContext.ConstructorContext)) {
|
if(!(context instanceof CodegenContext.ConstructorContext)) {
|
||||||
v.load(0, TYPE_OBJECT);
|
v.load(0, TYPE_OBJECT);
|
||||||
v.getfield(ownerType.getInternalName(), "$typeInfo", "Ljet/typeinfo/TypeInfo;");
|
v.getfield(ownerType.getInternalName(), "$typeInfo", "Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
v.load(((ConstructorFrameMap)myFrameMap).getTypeInfoIndex(), TYPE_OBJECT);
|
v.load(((ConstructorFrameMap)myFrameMap).getTypeInfoIndex(), TYPE_OBJECT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
v.getstatic(ownerType.getInternalName(), "$typeInfo", "Ljet/typeinfo/TypeInfo;");
|
v.getstatic(ownerType.getInternalName(), "$typeInfo", "Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
v.load(0, TYPE_OBJECT);
|
v.load(0, TYPE_OBJECT);
|
||||||
v.invokeinterface(TYPE_JET_OBJECT.getInternalName(), "getTypeInfo", "()Ljet/typeinfo/TypeInfo;");
|
v.invokeinterface(TYPE_JET_OBJECT.getInternalName(), "getTypeInfo", "()Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -2656,11 +2656,11 @@ If finally block is present, its last expression is the value of try expression.
|
|||||||
descriptor = CodegenUtil.getOuterClassDescriptor(descriptor);
|
descriptor = CodegenUtil.getOuterClassDescriptor(descriptor);
|
||||||
v.invokeinterface(TYPE_JET_OBJECT.getInternalName(), "getOuterObject", "()Ljet/JetObject;");
|
v.invokeinterface(TYPE_JET_OBJECT.getInternalName(), "getOuterObject", "()Ljet/JetObject;");
|
||||||
}
|
}
|
||||||
v.invokeinterface(TYPE_JET_OBJECT.getInternalName(), "getTypeInfo", "()Ljet/typeinfo/TypeInfo;");
|
v.invokeinterface(TYPE_JET_OBJECT.getInternalName(), "getTypeInfo", "()Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
v.aconst(ownerType);
|
v.aconst(ownerType);
|
||||||
v.iconst(typeParameterDescriptor.getIndex());
|
v.iconst(typeParameterDescriptor.getIndex());
|
||||||
v.invokevirtual("jet/typeinfo/TypeInfo", "getArgumentType", "(Ljava/lang/Class;I)Ljet/typeinfo/TypeInfo;");
|
v.invokevirtual("jet/TypeInfo", "getArgumentType", "(Ljava/lang/Class;I)Ljet/TypeInfo;");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
throw new UnsupportedOperationException("don't know what this type parameter resolves to");
|
throw new UnsupportedOperationException("don't know what this type parameter resolves to");
|
||||||
@@ -2780,7 +2780,7 @@ If finally block is present, its last expression is the value of try expression.
|
|||||||
|
|
||||||
final String className = "jet/Tuple" + entries.size();
|
final String className = "jet/Tuple" + entries.size();
|
||||||
Type tupleType = Type.getObjectType(className);
|
Type tupleType = Type.getObjectType(className);
|
||||||
StringBuilder signature = new StringBuilder("(Ljet/typeinfo/TypeInfo;");
|
StringBuilder signature = new StringBuilder("(Ljet/TypeInfo;");
|
||||||
for (int i = 0; i != entries.size(); ++i) {
|
for (int i = 0; i != entries.size(); ++i) {
|
||||||
signature.append("Ljava/lang/Object;");
|
signature.append("Ljava/lang/Object;");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -500,7 +500,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
if (CodegenUtil.requireTypeInfoConstructorArg(descriptor.getDefaultType()) && kind == OwnerKind.IMPLEMENTATION) {
|
if (CodegenUtil.requireTypeInfoConstructorArg(descriptor.getDefaultType()) && kind == OwnerKind.IMPLEMENTATION) {
|
||||||
iv.load(0, JetTypeMapper.TYPE_OBJECT);
|
iv.load(0, JetTypeMapper.TYPE_OBJECT);
|
||||||
iv.load(frameMap.getTypeInfoIndex(), JetTypeMapper.TYPE_OBJECT);
|
iv.load(frameMap.getTypeInfoIndex(), JetTypeMapper.TYPE_OBJECT);
|
||||||
iv.invokevirtual(typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName(), "$setTypeInfo", "(Ljet/typeinfo/TypeInfo;)V");
|
iv.invokevirtual(typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName(), "$setTypeInfo", "(Ljet/TypeInfo;)V");
|
||||||
}
|
}
|
||||||
|
|
||||||
if(closure != null) {
|
if(closure != null) {
|
||||||
@@ -836,27 +836,27 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
JetType defaultType = descriptor.getDefaultType();
|
JetType defaultType = descriptor.getDefaultType();
|
||||||
if(CodegenUtil.requireTypeInfoConstructorArg(defaultType)) {
|
if(CodegenUtil.requireTypeInfoConstructorArg(defaultType)) {
|
||||||
if(!CodegenUtil.hasDerivedTypeInfoField(defaultType)) {
|
if(!CodegenUtil.hasDerivedTypeInfoField(defaultType)) {
|
||||||
v.newField(myClass, Opcodes.ACC_PROTECTED, "$typeInfo", "Ljet/typeinfo/TypeInfo;", null, null);
|
v.newField(myClass, Opcodes.ACC_PROTECTED, "$typeInfo", "Ljet/TypeInfo;", null, null);
|
||||||
|
|
||||||
MethodVisitor mv = v.newMethod(myClass, Opcodes.ACC_PUBLIC, "getTypeInfo", "()Ljet/typeinfo/TypeInfo;", null, null);
|
MethodVisitor mv = v.newMethod(myClass, Opcodes.ACC_PUBLIC, "getTypeInfo", "()Ljet/TypeInfo;", null, null);
|
||||||
if (v.generateCode()) {
|
if (v.generateCode()) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
String owner = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
String owner = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
||||||
iv.load(0, JetTypeMapper.TYPE_OBJECT);
|
iv.load(0, JetTypeMapper.TYPE_OBJECT);
|
||||||
iv.getfield(owner, "$typeInfo", "Ljet/typeinfo/TypeInfo;");
|
iv.getfield(owner, "$typeInfo", "Ljet/TypeInfo;");
|
||||||
iv.areturn(JetTypeMapper.TYPE_TYPEINFO);
|
iv.areturn(JetTypeMapper.TYPE_TYPEINFO);
|
||||||
FunctionCodegen.endVisit(iv, "getTypeInfo", myClass);
|
FunctionCodegen.endVisit(iv, "getTypeInfo", myClass);
|
||||||
}
|
}
|
||||||
|
|
||||||
mv = v.newMethod(myClass, Opcodes.ACC_PROTECTED | Opcodes.ACC_FINAL, "$setTypeInfo", "(Ljet/typeinfo/TypeInfo;)V", null, null);
|
mv = v.newMethod(myClass, Opcodes.ACC_PROTECTED | Opcodes.ACC_FINAL, "$setTypeInfo", "(Ljet/TypeInfo;)V", null, null);
|
||||||
if (v.generateCode()) {
|
if (v.generateCode()) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
InstructionAdapter iv = new InstructionAdapter(mv);
|
InstructionAdapter iv = new InstructionAdapter(mv);
|
||||||
String owner = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
String owner = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
||||||
iv.load(0, JetTypeMapper.TYPE_OBJECT);
|
iv.load(0, JetTypeMapper.TYPE_OBJECT);
|
||||||
iv.load(1, JetTypeMapper.TYPE_OBJECT);
|
iv.load(1, JetTypeMapper.TYPE_OBJECT);
|
||||||
iv.putfield(owner, "$typeInfo", "Ljet/typeinfo/TypeInfo;");
|
iv.putfield(owner, "$typeInfo", "Ljet/TypeInfo;");
|
||||||
mv.visitInsn(Opcodes.RETURN);
|
mv.visitInsn(Opcodes.RETURN);
|
||||||
FunctionCodegen.endVisit(iv, "$setTypeInfo", myClass);
|
FunctionCodegen.endVisit(iv, "$setTypeInfo", myClass);
|
||||||
}
|
}
|
||||||
@@ -869,26 +869,26 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void genGetStaticGetTypeInfoMethod() {
|
private void genGetStaticGetTypeInfoMethod() {
|
||||||
final MethodVisitor mv = v.newMethod(myClass, Opcodes.ACC_PUBLIC, "getTypeInfo", "()Ljet/typeinfo/TypeInfo;", null, null);
|
final MethodVisitor mv = v.newMethod(myClass, Opcodes.ACC_PUBLIC, "getTypeInfo", "()Ljet/TypeInfo;", null, null);
|
||||||
if (v.generateCode()) {
|
if (v.generateCode()) {
|
||||||
mv.visitCode();
|
mv.visitCode();
|
||||||
InstructionAdapter v = new InstructionAdapter(mv);
|
InstructionAdapter v = new InstructionAdapter(mv);
|
||||||
String owner = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
String owner = typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION).getInternalName();
|
||||||
v.getstatic(owner, "$staticTypeInfo", "Ljet/typeinfo/TypeInfo;");
|
v.getstatic(owner, "$staticTypeInfo", "Ljet/TypeInfo;");
|
||||||
v.areturn(JetTypeMapper.TYPE_TYPEINFO);
|
v.areturn(JetTypeMapper.TYPE_TYPEINFO);
|
||||||
FunctionCodegen.endVisit(v, "getTypeInfo", myClass);
|
FunctionCodegen.endVisit(v, "getTypeInfo", myClass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void staticTypeInfoField() {
|
private void staticTypeInfoField() {
|
||||||
v.newField(myClass, Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_STATIC, "$staticTypeInfo", "Ljet/typeinfo/TypeInfo;", null, null);
|
v.newField(myClass, Opcodes.ACC_PUBLIC | Opcodes.ACC_FINAL | Opcodes.ACC_STATIC, "$staticTypeInfo", "Ljet/TypeInfo;", null, null);
|
||||||
staticInitializerChunks.add(new CodeChunk() {
|
staticInitializerChunks.add(new CodeChunk() {
|
||||||
@Override
|
@Override
|
||||||
public void generate(InstructionAdapter v) {
|
public void generate(InstructionAdapter v) {
|
||||||
v.aconst(typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION));
|
v.aconst(typeMapper.mapType(descriptor.getDefaultType(), OwnerKind.IMPLEMENTATION));
|
||||||
v.iconst(0);
|
v.iconst(0);
|
||||||
v.invokestatic("jet/typeinfo/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/typeinfo/TypeInfo;");
|
v.invokestatic("jet/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/TypeInfo;");
|
||||||
v.putstatic(typeMapper.mapType(descriptor.getDefaultType(), kind).getInternalName(), "$staticTypeInfo", "Ljet/typeinfo/TypeInfo;");
|
v.putstatic(typeMapper.mapType(descriptor.getDefaultType(), kind).getInternalName(), "$staticTypeInfo", "Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package org.jetbrains.jet.codegen;
|
|||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import jet.JetObject;
|
import jet.JetObject;
|
||||||
import jet.typeinfo.TypeInfo;
|
import jet.TypeInfo;
|
||||||
import jet.typeinfo.TypeInfoProjection;
|
import jet.typeinfo.TypeInfoProjection;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|||||||
@@ -121,11 +121,11 @@ public class NamespaceCodegen {
|
|||||||
for(int index = 0; index != context.typeInfoConstantsCount; index++) {
|
for(int index = 0; index != context.typeInfoConstantsCount; index++) {
|
||||||
JetType type = context.reverseTypeInfoConstants.get(index);
|
JetType type = context.reverseTypeInfoConstants.get(index);
|
||||||
String fieldName = "$typeInfoCache$" + index;
|
String fieldName = "$typeInfoCache$" + index;
|
||||||
v.newField(null, ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC, fieldName, "Ljet/typeinfo/TypeInfo;", null, null);
|
v.newField(null, ACC_PRIVATE | ACC_STATIC | ACC_SYNTHETIC, fieldName, "Ljet/TypeInfo;", null, null);
|
||||||
|
|
||||||
MethodVisitor mmv = v.newMethod(null, ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC, "$getCachedTypeInfo$" + index, "()Ljet/typeinfo/TypeInfo;", null, null);
|
MethodVisitor mmv = v.newMethod(null, ACC_PUBLIC | ACC_STATIC | ACC_SYNTHETIC, "$getCachedTypeInfo$" + index, "()Ljet/TypeInfo;", null, null);
|
||||||
InstructionAdapter v = new InstructionAdapter(mmv);
|
InstructionAdapter v = new InstructionAdapter(mmv);
|
||||||
v.visitFieldInsn(GETSTATIC, jvmClassName, fieldName, "Ljet/typeinfo/TypeInfo;");
|
v.visitFieldInsn(GETSTATIC, jvmClassName, fieldName, "Ljet/TypeInfo;");
|
||||||
v.visitInsn(DUP);
|
v.visitInsn(DUP);
|
||||||
Label end = new Label();
|
Label end = new Label();
|
||||||
v.visitJumpInsn(IFNONNULL, end);
|
v.visitJumpInsn(IFNONNULL, end);
|
||||||
@@ -134,7 +134,7 @@ public class NamespaceCodegen {
|
|||||||
generateTypeInfo(context, v, type, state.getTypeMapper(), type);
|
generateTypeInfo(context, v, type, state.getTypeMapper(), type);
|
||||||
v.dup();
|
v.dup();
|
||||||
|
|
||||||
v.visitFieldInsn(PUTSTATIC, jvmClassName, fieldName, "Ljet/typeinfo/TypeInfo;");
|
v.visitFieldInsn(PUTSTATIC, jvmClassName, fieldName, "Ljet/TypeInfo;");
|
||||||
v.visitLabel(end);
|
v.visitLabel(end);
|
||||||
v.visitInsn(ARETURN);
|
v.visitInsn(ARETURN);
|
||||||
FunctionCodegen.endVisit(v, "type info method", namespace);
|
FunctionCodegen.endVisit(v, "type info method", namespace);
|
||||||
@@ -145,21 +145,21 @@ public class NamespaceCodegen {
|
|||||||
private static void generateTypeInfo(CodegenContext context, InstructionAdapter v, JetType jetType, JetTypeMapper typeMapper, JetType root) {
|
private static void generateTypeInfo(CodegenContext context, InstructionAdapter v, JetType jetType, JetTypeMapper typeMapper, JetType root) {
|
||||||
String knownTypeInfo = typeMapper.isKnownTypeInfo(jetType);
|
String knownTypeInfo = typeMapper.isKnownTypeInfo(jetType);
|
||||||
if(knownTypeInfo != null) {
|
if(knownTypeInfo != null) {
|
||||||
v.getstatic("jet/typeinfo/TypeInfo", knownTypeInfo, "Ljet/typeinfo/TypeInfo;");
|
v.getstatic("jet/TypeInfo", knownTypeInfo, "Ljet/TypeInfo;");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
DeclarationDescriptor declarationDescriptor = jetType.getConstructor().getDeclarationDescriptor();
|
DeclarationDescriptor declarationDescriptor = jetType.getConstructor().getDeclarationDescriptor();
|
||||||
if(!jetType.equals(root) && jetType.getArguments().size() == 0 && !(declarationDescriptor instanceof JavaClassDescriptor) && !JetStandardClasses.getAny().equals(declarationDescriptor)) {
|
if(!jetType.equals(root) && jetType.getArguments().size() == 0 && !(declarationDescriptor instanceof JavaClassDescriptor) && !JetStandardClasses.getAny().equals(declarationDescriptor)) {
|
||||||
// TODO: we need some better checks here
|
// TODO: we need some better checks here
|
||||||
v.getstatic(typeMapper.mapType(jetType, OwnerKind.IMPLEMENTATION).getInternalName(), "$typeInfo", "Ljet/typeinfo/TypeInfo;");
|
v.getstatic(typeMapper.mapType(jetType, OwnerKind.IMPLEMENTATION).getInternalName(), "$typeInfo", "Ljet/TypeInfo;");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean hasUnsubstituted = TypeUtils.hasUnsubstitutedTypeParameters(jetType);
|
boolean hasUnsubstituted = TypeUtils.hasUnsubstitutedTypeParameters(jetType);
|
||||||
if(!jetType.equals(root) && !hasUnsubstituted) {
|
if(!jetType.equals(root) && !hasUnsubstituted) {
|
||||||
int typeInfoConstantIndex = context.getTypeInfoConstantIndex(jetType);
|
int typeInfoConstantIndex = context.getTypeInfoConstantIndex(jetType);
|
||||||
v.invokestatic(context.getNamespaceClassName(), "$getCachedTypeInfo$" + typeInfoConstantIndex, "()Ljet/typeinfo/TypeInfo;");
|
v.invokestatic(context.getNamespaceClassName(), "$getCachedTypeInfo$" + typeInfoConstantIndex, "()Ljet/TypeInfo;");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -180,10 +180,10 @@ public class NamespaceCodegen {
|
|||||||
ExpressionCodegen.genTypeInfoToProjection(v, argument.getProjectionKind());
|
ExpressionCodegen.genTypeInfoToProjection(v, argument.getProjectionKind());
|
||||||
v.astore(JetTypeMapper.TYPE_OBJECT);
|
v.astore(JetTypeMapper.TYPE_OBJECT);
|
||||||
}
|
}
|
||||||
v.invokestatic("jet/typeinfo/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z[Ljet/typeinfo/TypeInfoProjection;)Ljet/typeinfo/TypeInfo;");
|
v.invokestatic("jet/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z[Ljet/typeinfo/TypeInfoProjection;)Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
v.invokestatic("jet/typeinfo/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/typeinfo/TypeInfo;");
|
v.invokestatic("jet/TypeInfo", "getTypeInfo", "(Ljava/lang/Class;Z)Ljet/TypeInfo;");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ public class ArrayIterator implements IntrinsicMethod {
|
|||||||
JetStandardLibrary standardLibrary = codegen.getState().getStandardLibrary();
|
JetStandardLibrary standardLibrary = codegen.getState().getStandardLibrary();
|
||||||
if(containingDeclaration.equals(standardLibrary.getArray())) {
|
if(containingDeclaration.equals(standardLibrary.getArray())) {
|
||||||
codegen.generateTypeInfo(funDescriptor.getReturnType().getArguments().get(0).getType(), null);
|
codegen.generateTypeInfo(funDescriptor.getReturnType().getArguments().get(0).getType(), null);
|
||||||
v.invokestatic("jet/runtime/ArrayIterator", "iterator", "([Ljava/lang/Object;Ljet/typeinfo/TypeInfo;)Ljet/Iterator;");
|
v.invokestatic("jet/runtime/ArrayIterator", "iterator", "([Ljava/lang/Object;Ljet/TypeInfo;)Ljet/Iterator;");
|
||||||
return StackValue.onStack(JetTypeMapper.TYPE_ITERATOR);
|
return StackValue.onStack(JetTypeMapper.TYPE_ITERATOR);
|
||||||
}
|
}
|
||||||
else if(containingDeclaration.equals(standardLibrary.getByteArrayClass())) {
|
else if(containingDeclaration.equals(standardLibrary.getByteArrayClass())) {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class ValueTypeInfo implements IntrinsicMethod {
|
|||||||
@Override
|
@Override
|
||||||
public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List<JetExpression> arguments, StackValue receiver) {
|
public StackValue generate(ExpressionCodegen codegen, InstructionAdapter v, Type expectedType, PsiElement element, List<JetExpression> arguments, StackValue receiver) {
|
||||||
codegen.gen(arguments.get(0), JetTypeMapper.TYPE_JET_OBJECT);
|
codegen.gen(arguments.get(0), JetTypeMapper.TYPE_JET_OBJECT);
|
||||||
v.invokeinterface(JetTypeMapper.TYPE_JET_OBJECT.getInternalName(), "getTypeInfo", "()Ljet/typeinfo/TypeInfo;");
|
v.invokeinterface(JetTypeMapper.TYPE_JET_OBJECT.getInternalName(), "getTypeInfo", "()Ljet/TypeInfo;");
|
||||||
return StackValue.onStack(JetTypeMapper.TYPE_TYPEINFO);
|
return StackValue.onStack(JetTypeMapper.TYPE_TYPEINFO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,38 +1,12 @@
|
|||||||
package jet
|
package jet
|
||||||
|
|
||||||
package typeinfo {
|
class TypeInfo<out T> {
|
||||||
class TypeInfo<out T> {
|
fun isSubtypeOf(other : TypeInfo<*>) : Boolean
|
||||||
fun isSubtypeOf(other : TypeInfo<*>) : Boolean
|
fun isInstance(obj : Any?) : Boolean
|
||||||
fun isInstance(obj : Any?) : Boolean
|
|
||||||
}
|
|
||||||
|
|
||||||
fun typeinfo<T>() : TypeInfo<T>
|
|
||||||
fun typeinfo<T>(expression : T) : TypeInfo<T>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
package io {
|
fun typeinfo<T>() : TypeInfo<T>
|
||||||
fun print(message : Any?)
|
fun typeinfo<T>(expression : T) : TypeInfo<T>
|
||||||
fun print(message : Int)
|
|
||||||
fun print(message : Long)
|
|
||||||
fun print(message : Byte)
|
|
||||||
fun print(message : Short)
|
|
||||||
fun print(message : Char)
|
|
||||||
fun print(message : Boolean)
|
|
||||||
fun print(message : Float)
|
|
||||||
fun print(message : Double)
|
|
||||||
|
|
||||||
fun println(message : Any?)
|
|
||||||
fun println(message : Int)
|
|
||||||
fun println(message : Long)
|
|
||||||
fun println(message : Byte)
|
|
||||||
fun println(message : Short)
|
|
||||||
fun println(message : Char)
|
|
||||||
fun println(message : Boolean)
|
|
||||||
fun println(message : Float)
|
|
||||||
fun println(message : Double)
|
|
||||||
|
|
||||||
fun readLine() : String?
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <R> Any.synchronized(block : () -> R) : R
|
fun <R> Any.synchronized(block : () -> R) : R
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public interface Errors {
|
|||||||
DiagnosticWithParameterFactory<JetModifierList, JetKeywordToken> REDUNDANT_MODIFIER_IN_GETTER = DiagnosticWithParameterFactory.create(WARNING, "Visibility modifiers are redundant in getter", DiagnosticParameters.MODIFIER);
|
DiagnosticWithParameterFactory<JetModifierList, JetKeywordToken> REDUNDANT_MODIFIER_IN_GETTER = DiagnosticWithParameterFactory.create(WARNING, "Visibility modifiers are redundant in getter", DiagnosticParameters.MODIFIER);
|
||||||
SimplePsiElementOnlyDiagnosticFactory<JetClass> TRAIT_CAN_NOT_BE_FINAL = SimplePsiElementOnlyDiagnosticFactory.create(ERROR, "Trait can not be final");
|
SimplePsiElementOnlyDiagnosticFactory<JetClass> TRAIT_CAN_NOT_BE_FINAL = SimplePsiElementOnlyDiagnosticFactory.create(ERROR, "Trait can not be final");
|
||||||
SimpleDiagnosticFactory SAFE_CALLS_ARE_NOT_ALLOWED_ON_NAMESPACES = SimpleDiagnosticFactory.create(ERROR, "Safe calls are not allowed on namespaces");
|
SimpleDiagnosticFactory SAFE_CALLS_ARE_NOT_ALLOWED_ON_NAMESPACES = SimpleDiagnosticFactory.create(ERROR, "Safe calls are not allowed on namespaces");
|
||||||
SimpleDiagnosticFactory TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM = SimpleDiagnosticFactory.create(ERROR, "Type checking has run into a recursive problem"); // TODO: message
|
SimpleDiagnosticFactory TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM = SimpleDiagnosticFactory.create(ERROR, "Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly"); // TODO: message
|
||||||
SimpleDiagnosticFactory RETURN_NOT_ALLOWED = SimpleDiagnosticFactory.create(ERROR, "'return' is not allowed here");
|
SimpleDiagnosticFactory RETURN_NOT_ALLOWED = SimpleDiagnosticFactory.create(ERROR, "'return' is not allowed here");
|
||||||
SimpleDiagnosticFactory PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE = SimpleDiagnosticFactory.create(ERROR, "Projections are not allowed for immediate arguments of a supertype");
|
SimpleDiagnosticFactory PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE = SimpleDiagnosticFactory.create(ERROR, "Projections are not allowed for immediate arguments of a supertype");
|
||||||
SimpleDiagnosticFactory LABEL_NAME_CLASH = SimpleDiagnosticFactory.create(WARNING, "There is more than one label with such a name in this scope");
|
SimpleDiagnosticFactory LABEL_NAME_CLASH = SimpleDiagnosticFactory.create(WARNING, "There is more than one label with such a name in this scope");
|
||||||
|
|||||||
@@ -235,10 +235,11 @@ public class JetParsing extends AbstractJetParsing {
|
|||||||
|
|
||||||
IElementType keywordToken = tt();
|
IElementType keywordToken = tt();
|
||||||
JetNodeType declType = null;
|
JetNodeType declType = null;
|
||||||
if (keywordToken == NAMESPACE_KEYWORD) {
|
// if (keywordToken == NAMESPACE_KEYWORD) {
|
||||||
declType = parseNamespaceBlock();
|
// declType = parseNamespaceBlock();
|
||||||
}
|
// }
|
||||||
else if (keywordToken == CLASS_KEYWORD || keywordToken == TRAIT_KEYWORD) {
|
// else
|
||||||
|
if (keywordToken == CLASS_KEYWORD || keywordToken == TRAIT_KEYWORD) {
|
||||||
declType = parseClass(detector.isDetected());
|
declType = parseClass(detector.isDetected());
|
||||||
}
|
}
|
||||||
else if (keywordToken == FUN_KEYWORD) {
|
else if (keywordToken == FUN_KEYWORD) {
|
||||||
|
|||||||
@@ -7,10 +7,11 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.jet.lang.JetSemanticServices;
|
import org.jetbrains.jet.lang.JetSemanticServices;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
|
||||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.*;
|
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
||||||
|
import org.jetbrains.jet.lang.resolve.BindingTraceContext;
|
||||||
|
import org.jetbrains.jet.lang.resolve.TopDownAnalyzer;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
import org.jetbrains.jet.lang.resolve.scopes.JetScope;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
import org.jetbrains.jet.lang.resolve.scopes.RedeclarationHandler;
|
||||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||||
@@ -120,7 +121,6 @@ public class JetStandardLibrary {
|
|||||||
private JetType tuple0Type;
|
private JetType tuple0Type;
|
||||||
private JetType nullableStringType;
|
private JetType nullableStringType;
|
||||||
|
|
||||||
private NamespaceDescriptor typeInfoNamespace;
|
|
||||||
private Set<FunctionDescriptor> typeInfoFunction;
|
private Set<FunctionDescriptor> typeInfoFunction;
|
||||||
|
|
||||||
private JetStandardLibrary(@NotNull Project project) {
|
private JetStandardLibrary(@NotNull Project project) {
|
||||||
@@ -168,9 +168,9 @@ public class JetStandardLibrary {
|
|||||||
this.arrayClass = (ClassDescriptor) libraryScope.getClassifier("Array");
|
this.arrayClass = (ClassDescriptor) libraryScope.getClassifier("Array");
|
||||||
|
|
||||||
this.iterableClass = (ClassDescriptor) libraryScope.getClassifier("Iterable");
|
this.iterableClass = (ClassDescriptor) libraryScope.getClassifier("Iterable");
|
||||||
typeInfoNamespace = libraryScope.getNamespace("typeinfo");
|
// typeInfoNamespace = libraryScope.getNamespace("typeinfo");
|
||||||
this.typeInfoClass = (ClassDescriptor) typeInfoNamespace.getMemberScope().getClassifier("TypeInfo");
|
this.typeInfoClass = (ClassDescriptor) libraryScope.getClassifier("TypeInfo");
|
||||||
typeInfoFunction = typeInfoNamespace.getMemberScope().getFunctions("typeinfo");
|
this.typeInfoFunction = libraryScope.getFunctions("typeinfo");
|
||||||
|
|
||||||
this.byteType = new JetTypeImpl(getByte());
|
this.byteType = new JetTypeImpl(getByte());
|
||||||
this.charType = new JetTypeImpl(getChar());
|
this.charType = new JetTypeImpl(getChar());
|
||||||
@@ -297,11 +297,11 @@ public class JetStandardLibrary {
|
|||||||
return iterableClass;
|
return iterableClass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public NamespaceDescriptor getTypeInfoNamespace() {
|
// public NamespaceDescriptor getTypeInfoNamespace() {
|
||||||
initStdClasses();
|
// initStdClasses();
|
||||||
return typeInfoNamespace;
|
// return typeInfoNamespace;
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
public ClassDescriptor getTypeInfo() {
|
public ClassDescriptor getTypeInfo() {
|
||||||
initStdClasses();
|
initStdClasses();
|
||||||
return typeInfoClass;
|
return typeInfoClass;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package Foo {
|
package Foo
|
||||||
fun bar() = 610
|
fun bar() = 610
|
||||||
}
|
|
||||||
|
|
||||||
fun box(): String {
|
fun box(): String {
|
||||||
return if (Foo.bar() == 610) "OK" else "fail"
|
return if (Foo.bar() == 610) "OK" else "fail"
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
class Point() {
|
class Point() {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun foo() : typeinfo.TypeInfo<Point> {
|
fun foo() : TypeInfo<Point> {
|
||||||
val p = Point();
|
val p = Point();
|
||||||
return typeinfo.typeinfo<Point>(p);
|
return typeinfo<Point>(p);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
class Simple {
|
class Simple {
|
||||||
{
|
{
|
||||||
jet.typeinfo.TypeInfo blabla = null;
|
jet.TypeInfo blabla = null;
|
||||||
new Impossible<String>(blabla);
|
new Impossible<String>(blabla);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
class GenericArray {
|
class GenericArray {
|
||||||
public static void ggff() {
|
public static void ggff() {
|
||||||
jet.typeinfo.TypeInfo noise = null;
|
jet.TypeInfo noise = null;
|
||||||
String[] s = namespace.ffgg(noise, new String[0]);
|
String[] s = namespace.ffgg(noise, new String[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import java.util.ArrayList;
|
|||||||
class ListOfT {
|
class ListOfT {
|
||||||
|
|
||||||
public static void check() {
|
public static void check() {
|
||||||
jet.typeinfo.TypeInfo nobodyCaresAboutTypeinfo = null;
|
jet.TypeInfo nobodyCaresAboutTypeinfo = null;
|
||||||
List<String> list = new ArrayList<String>();
|
List<String> list = new ArrayList<String>();
|
||||||
List<String> r = namespace.listOfT(nobodyCaresAboutTypeinfo, list);
|
List<String> r = namespace.listOfT(nobodyCaresAboutTypeinfo, list);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import java.math.BigDecimal;
|
|||||||
|
|
||||||
class MapOfKString {
|
class MapOfKString {
|
||||||
public static void gfgdgfg() {
|
public static void gfgdgfg() {
|
||||||
jet.typeinfo.TypeInfo useless = null;
|
jet.TypeInfo useless = null;
|
||||||
|
|
||||||
Map<BigDecimal, String> map = new HashMap<BigDecimal, String>();
|
Map<BigDecimal, String> map = new HashMap<BigDecimal, String>();
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ class Question {
|
|||||||
// id2 is to prevent java type parameter type inference
|
// id2 is to prevent java type parameter type inference
|
||||||
static <T> T id2(T p) { return p; }
|
static <T> T id2(T p) { return p; }
|
||||||
{
|
{
|
||||||
java.util.List<String> s = id2(namespace.id((jet.typeinfo.TypeInfo) null, null));
|
java.util.List<String> s = id2(namespace.id((jet.TypeInfo) null, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ class Question {
|
|||||||
// id2 is to prevent java type parameter type inference
|
// id2 is to prevent java type parameter type inference
|
||||||
static <T> T id2(T p) { return p; }
|
static <T> T id2(T p) { return p; }
|
||||||
{
|
{
|
||||||
String s = id2(namespace.id((jet.typeinfo.TypeInfo) null, null));
|
String s = id2(namespace.id((jet.TypeInfo) null, null));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FILE: a.kt
|
||||||
// +JDK
|
// +JDK
|
||||||
|
|
||||||
package abstract
|
package abstract
|
||||||
@@ -180,7 +181,8 @@ enum class MyEnum() {
|
|||||||
|
|
||||||
abstract enum class MyAbstractEnum() {}
|
abstract enum class MyAbstractEnum() {}
|
||||||
|
|
||||||
package MyNamespace {
|
// FILE: b.kt
|
||||||
|
package MyNamespace
|
||||||
//properties
|
//properties
|
||||||
val <!MUST_BE_INITIALIZED!>a<!>: Int
|
val <!MUST_BE_INITIALIZED!>a<!>: Int
|
||||||
val a1: Int = 1
|
val a1: Int = 1
|
||||||
@@ -222,8 +224,8 @@ package MyNamespace {
|
|||||||
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
var l1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
var n: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set(v: Int) {}
|
var n: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set(v: Int) {}
|
||||||
}
|
|
||||||
|
|
||||||
|
// FILE: c.kt
|
||||||
//creating an instance
|
//creating an instance
|
||||||
abstract class B1(
|
abstract class B1(
|
||||||
val i: Int,
|
val i: Int,
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
package example;
|
// FILE: a.kt
|
||||||
|
package example.ns
|
||||||
package ns {
|
|
||||||
val y : Any? = 2
|
val y : Any? = 2
|
||||||
}
|
|
||||||
|
// FILE: b.kt
|
||||||
|
package example
|
||||||
|
|
||||||
object Obj {
|
object Obj {
|
||||||
val y : Any? = 2
|
val y : Any? = 2
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
package boundsWithSubstitutors {
|
// FILE: a.kt
|
||||||
|
package boundsWithSubstitutors
|
||||||
open class A<T>
|
open class A<T>
|
||||||
class B<X : A<X>>()
|
class B<X : A<X>>()
|
||||||
|
|
||||||
@@ -13,8 +14,7 @@ package boundsWithSubstitutors {
|
|||||||
val b0 = X<Any, <!UPPER_BOUND_VIOLATED!>Any?<!>>
|
val b0 = X<Any, <!UPPER_BOUND_VIOLATED!>Any?<!>>
|
||||||
val b1 = X<Any, X<A<C>, <!UPPER_BOUND_VIOLATED!>String<!>>>
|
val b1 = X<Any, X<A<C>, <!UPPER_BOUND_VIOLATED!>String<!>>>
|
||||||
|
|
||||||
}
|
// FILE: b.kt
|
||||||
|
|
||||||
open class A {}
|
open class A {}
|
||||||
open class B<T : A>()
|
open class B<T : A>()
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
|
// FILE: a.kt
|
||||||
// +JDK
|
// +JDK
|
||||||
|
|
||||||
|
package html
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
package html {
|
|
||||||
|
|
||||||
abstract class Factory<T> {
|
abstract class Factory<T> {
|
||||||
abstract fun create() : T
|
abstract fun create() : T
|
||||||
}
|
}
|
||||||
@@ -85,9 +85,9 @@ package html {
|
|||||||
return html
|
return html
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
// FILE: b.kt
|
||||||
|
|
||||||
package foo {
|
package foo
|
||||||
|
|
||||||
import html.*
|
import html.*
|
||||||
|
|
||||||
@@ -120,4 +120,3 @@ fun result(args : Array<String>) =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FILE: b.kt
|
||||||
// http://youtrack.jetbrains.net/issue/KT-424
|
// http://youtrack.jetbrains.net/issue/KT-424
|
||||||
|
|
||||||
class A {
|
class A {
|
||||||
@@ -13,7 +14,8 @@ class A {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
package deepSpace {
|
// FILE: b.kt
|
||||||
|
package deepSpace
|
||||||
<!CONFLICTING_OVERLOADS!>fun c(<!UNUSED_PARAMETER!>s<!>: String)<!> {
|
<!CONFLICTING_OVERLOADS!>fun c(<!UNUSED_PARAMETER!>s<!>: String)<!> {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -27,28 +29,25 @@ package deepSpace {
|
|||||||
<!CONFLICTING_OVERLOADS!>fun d(<!UNUSED_PARAMETER!>s<!>: String)<!> {
|
<!CONFLICTING_OVERLOADS!>fun d(<!UNUSED_PARAMETER!>s<!>: String)<!> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
// FILE: b.kt
|
||||||
// check no error in overload in different namespaces
|
// check no error in overload in different namespaces
|
||||||
|
|
||||||
package ns1 {
|
package ns1
|
||||||
fun e() = 1
|
fun e() = 1
|
||||||
}
|
|
||||||
|
|
||||||
package ns2 {
|
// FILE: b.kt
|
||||||
|
package ns2
|
||||||
fun e() = 1
|
fun e() = 1
|
||||||
}
|
|
||||||
|
|
||||||
package ns3 {
|
// FILE: b.kt
|
||||||
package ns1 {
|
package ns3.ns1
|
||||||
fun e() = 1
|
fun e() = 1
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// FILE: b.kt
|
||||||
// check same rules apply for ext functions
|
// check same rules apply for ext functions
|
||||||
|
|
||||||
package extensionFunctions {
|
package extensionFunctions
|
||||||
<!CONFLICTING_OVERLOADS!>fun Int.qwe(<!UNUSED_PARAMETER!>a<!>: Float)<!> = 1
|
<!CONFLICTING_OVERLOADS!>fun Int.qwe(<!UNUSED_PARAMETER!>a<!>: Float)<!> = 1
|
||||||
|
|
||||||
<!CONFLICTING_OVERLOADS!>fun Int.qwe(<!UNUSED_PARAMETER!>a<!>: Float)<!> = 2
|
<!CONFLICTING_OVERLOADS!>fun Int.qwe(<!UNUSED_PARAMETER!>a<!>: Float)<!> = 2
|
||||||
@@ -56,19 +55,19 @@ package extensionFunctions {
|
|||||||
fun Int.rty() = 3
|
fun Int.rty() = 3
|
||||||
|
|
||||||
fun String.rty() = 4
|
fun String.rty() = 4
|
||||||
}
|
|
||||||
|
|
||||||
|
// FILE: b.kt
|
||||||
// check no error when regular function and extension function have same name
|
// check no error when regular function and extension function have same name
|
||||||
|
|
||||||
package extensionAndRegular {
|
package extensionAndRegular
|
||||||
fun who() = 1
|
fun who() = 1
|
||||||
|
|
||||||
fun Int.who() = 1
|
fun Int.who() = 1
|
||||||
}
|
|
||||||
|
|
||||||
|
// FILE: b.kt
|
||||||
// constructor vs. fun overload
|
// constructor vs. fun overload
|
||||||
|
|
||||||
package constructorVsFun {
|
package constructorVsFun
|
||||||
class <!CONFLICTING_OVERLOADS!>a()<!> { }
|
class <!CONFLICTING_OVERLOADS!>a()<!> { }
|
||||||
|
|
||||||
<!CONFLICTING_OVERLOADS!>fun a()<!> = 1
|
<!CONFLICTING_OVERLOADS!>fun a()<!> = 1
|
||||||
@@ -94,4 +93,3 @@ package constructorVsFun {
|
|||||||
class ololo() { }
|
class ololo() { }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FILE: b.kt
|
||||||
trait A<in T> {}
|
trait A<in T> {}
|
||||||
trait B<T> : A<Int> {}
|
trait B<T> : A<Int> {}
|
||||||
trait C<T> : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>B<T>, A<T><!> {}
|
trait C<T> : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>B<T>, A<T><!> {}
|
||||||
@@ -13,30 +14,30 @@ trait BB1 : BA1<Int> {}
|
|||||||
trait BB2 : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>BA1<Any>, BB1<!> {}
|
trait BB2 : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>BA1<Any>, BB1<!> {}
|
||||||
|
|
||||||
|
|
||||||
package x {
|
// FILE: b.kt
|
||||||
|
package x
|
||||||
trait AA1<out T> {}
|
trait AA1<out T> {}
|
||||||
trait AB1 : AA1<Int> {}
|
trait AB1 : AA1<Int> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait AB3 : AA1<Comparable<Int>> {}
|
||||||
trait AB2 : AA1<Number>, AB1, AB3 {}
|
trait AB2 : AA1<Number>, AB1, AB3 {}
|
||||||
}
|
|
||||||
|
|
||||||
package x2 {
|
// FILE: b.kt
|
||||||
|
package x2
|
||||||
trait AA1<out T> {}
|
trait AA1<out T> {}
|
||||||
trait AB1 : AA1<Any> {}
|
trait AB1 : AA1<Any> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait AB3 : AA1<Comparable<Int>> {}
|
||||||
trait AB2 : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>AA1<Number>, AB1, AB3<!> {}
|
trait AB2 : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>AA1<Number>, AB1, AB3<!> {}
|
||||||
}
|
|
||||||
|
|
||||||
package x3 {
|
// FILE: b.kt
|
||||||
|
package x3
|
||||||
trait AA1<in T> {}
|
trait AA1<in T> {}
|
||||||
trait AB1 : AA1<Any> {}
|
trait AB1 : AA1<Any> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait AB3 : AA1<Comparable<Int>> {}
|
||||||
trait AB2 : AA1<Number>, AB1, AB3 {}
|
trait AB2 : AA1<Number>, AB1, AB3 {}
|
||||||
}
|
|
||||||
|
|
||||||
package sx2 {
|
// FILE: b.kt
|
||||||
|
package sx2
|
||||||
trait AA1<in T> {}
|
trait AA1<in T> {}
|
||||||
trait AB1 : AA1<Int> {}
|
trait AB1 : AA1<Int> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait AB3 : AA1<Comparable<Int>> {}
|
||||||
trait AB2 : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>AA1<Number>, AB1, AB3<!> {}
|
trait AB2 : <!INCONSISTENT_TYPE_PARAMETER_VALUES!>AA1<Number>, AB1, AB3<!> {}
|
||||||
}
|
|
||||||
@@ -1,23 +1,23 @@
|
|||||||
|
// FILE: b.kt
|
||||||
// KT-355 Resolve imports after all symbols are built
|
// KT-355 Resolve imports after all symbols are built
|
||||||
|
|
||||||
package a {
|
package a
|
||||||
import b.*
|
import b.*
|
||||||
val x : X = X()
|
val x : X = X()
|
||||||
}
|
|
||||||
|
|
||||||
package b {
|
// FILE: b.kt
|
||||||
|
package b
|
||||||
class X() {
|
class X() {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
package c {
|
// FILE: b.kt
|
||||||
|
package c
|
||||||
import d.X
|
import d.X
|
||||||
val x : X = X()
|
val x : X = X()
|
||||||
}
|
|
||||||
|
|
||||||
package d {
|
// FILE: b.kt
|
||||||
|
package d
|
||||||
class X() {
|
class X() {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
|
// FILE: b.kt
|
||||||
|
package root.a
|
||||||
|
|
||||||
|
// FILE: b.kt
|
||||||
package root
|
package root
|
||||||
|
|
||||||
package a {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
val x = <!EXPRESSION_EXPECTED_NAMESPACE_FOUND!>a<!>
|
val x = <!EXPRESSION_EXPECTED_NAMESPACE_FOUND!>a<!>
|
||||||
val y2 = <!NAMESPACE_IS_NOT_AN_EXPRESSION!>package<!>
|
val y2 = <!NAMESPACE_IS_NOT_AN_EXPRESSION!>package<!>
|
||||||
|
|||||||
@@ -1,26 +1,29 @@
|
|||||||
|
// FILE: b.kt
|
||||||
// +JDK
|
// +JDK
|
||||||
|
|
||||||
package foobar
|
|
||||||
|
|
||||||
package a {
|
package foobar.a
|
||||||
import java.*
|
import java.*
|
||||||
|
|
||||||
val a : util.List<Int>? = null
|
val a : util.List<Int>? = null
|
||||||
val a1 : <!UNRESOLVED_REFERENCE!>List<!><Int>? = null
|
val a1 : <!UNRESOLVED_REFERENCE!>List<!><Int>? = null
|
||||||
|
|
||||||
}
|
// FILE: b.kt
|
||||||
|
package foobar
|
||||||
|
|
||||||
abstract class Foo<T>() {
|
abstract class Foo<T>() {
|
||||||
abstract val x : T<Int>
|
abstract val x : T<Int>
|
||||||
}
|
}
|
||||||
|
|
||||||
package a {
|
// FILE: b.kt
|
||||||
|
package foobar.a
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
val b : List<Int>? = a
|
val b : List<Int>? = a
|
||||||
val b1 : <!UNRESOLVED_REFERENCE!>util<!>.List<Int>? = a
|
val b1 : <!UNRESOLVED_REFERENCE!>util<!>.List<Int>? = a
|
||||||
}
|
|
||||||
|
|
||||||
|
// FILE: b.kt
|
||||||
|
package foobar
|
||||||
val x1 = a.a
|
val x1 = a.a
|
||||||
|
|
||||||
val y1 = a.b
|
val y1 = a.b
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
package toplevelObjectDeclarations {
|
// FILE: f.kt
|
||||||
|
package toplevelObjectDeclarations
|
||||||
open class Foo(y : Int) {
|
open class Foo(y : Int) {
|
||||||
open fun foo() : Int = 1
|
open fun foo() : Int = 1
|
||||||
}
|
}
|
||||||
@@ -26,9 +27,9 @@ package toplevelObjectDeclarations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val z = y.foo()
|
val z = y.foo()
|
||||||
}
|
|
||||||
|
|
||||||
package nestedObejcts {
|
// FILE: f.kt
|
||||||
|
package nestedObejcts
|
||||||
object A {
|
object A {
|
||||||
val b = B
|
val b = B
|
||||||
val d = A.B.A
|
val d = A.B.A
|
||||||
@@ -56,9 +57,10 @@ package nestedObejcts {
|
|||||||
val c = A.B
|
val c = A.B
|
||||||
val d = A.B.A
|
val d = A.B.A
|
||||||
val e = B.<!UNRESOLVED_REFERENCE!>A<!>.B
|
val e = B.<!UNRESOLVED_REFERENCE!>A<!>.B
|
||||||
}
|
|
||||||
|
|
||||||
package localObjects {
|
// FILE: f.kt
|
||||||
|
|
||||||
|
package localObjects
|
||||||
object A {
|
object A {
|
||||||
val x : Int = 0
|
val x : Int = 0
|
||||||
}
|
}
|
||||||
@@ -80,4 +82,3 @@ package localObjects {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val bb = <!UNRESOLVED_REFERENCE!>B<!>.foo()
|
val bb = <!UNRESOLVED_REFERENCE!>B<!>.foo()
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package override
|
// FILE: f.kt
|
||||||
|
package override.normal
|
||||||
package normal {
|
|
||||||
trait MyTrait {
|
trait MyTrait {
|
||||||
fun foo()
|
fun foo()
|
||||||
val pr : Unit
|
val pr : Unit
|
||||||
@@ -49,9 +48,10 @@ package normal {
|
|||||||
override fun bar() {}
|
override fun bar() {}
|
||||||
override val prr : Unit = #()
|
override val prr : Unit = #()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
package generics {
|
// FILE: f.kt
|
||||||
|
|
||||||
|
package override.generics
|
||||||
trait MyTrait<T> {
|
trait MyTrait<T> {
|
||||||
fun foo(t: T) : T
|
fun foo(t: T) : T
|
||||||
}
|
}
|
||||||
@@ -110,4 +110,3 @@ package generics {
|
|||||||
fun bar(t: T) = t
|
fun bar(t: T) = t
|
||||||
val <R> pr : T = t
|
val <R> pr : T = t
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FILE: f.kt
|
||||||
class Dup {
|
class Dup {
|
||||||
fun Dup() : Unit {
|
fun Dup() : Unit {
|
||||||
this<!AMBIGUOUS_LABEL!>@Dup<!>
|
this<!AMBIGUOUS_LABEL!>@Dup<!>
|
||||||
@@ -21,7 +22,8 @@ fun foo1() : Unit {
|
|||||||
this<!UNRESOLVED_REFERENCE!>@a<!>
|
this<!UNRESOLVED_REFERENCE!>@a<!>
|
||||||
}
|
}
|
||||||
|
|
||||||
package closures {
|
// FILE: f.kt
|
||||||
|
package closures
|
||||||
class A(val a:Int) {
|
class A(val a:Int) {
|
||||||
|
|
||||||
class B() {
|
class B() {
|
||||||
@@ -38,4 +40,3 @@ package closures {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,42 +1,40 @@
|
|||||||
package a {
|
// FILE: f.kt
|
||||||
|
package a
|
||||||
val foo = bar()
|
val foo = bar()
|
||||||
|
|
||||||
fun bar() = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>foo<!>
|
fun bar() = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>foo<!>
|
||||||
}
|
|
||||||
|
|
||||||
package b {
|
// FILE: f.kt
|
||||||
|
package b
|
||||||
fun foo() = bar()
|
fun foo() = bar()
|
||||||
|
|
||||||
fun bar() = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>foo()<!>
|
fun bar() = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>foo()<!>
|
||||||
}
|
|
||||||
|
|
||||||
package c {
|
// FILE: f.kt
|
||||||
|
package c
|
||||||
fun bazz() = bar()
|
fun bazz() = bar()
|
||||||
|
|
||||||
fun foo() = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>bazz()<!>
|
fun foo() = <!TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM!>bazz()<!>
|
||||||
|
|
||||||
fun bar() = foo()
|
fun bar() = foo()
|
||||||
}
|
|
||||||
|
|
||||||
package ok {
|
// FILE: f.kt
|
||||||
|
|
||||||
package a {
|
package ok.a
|
||||||
val foo = bar()
|
val foo = bar()
|
||||||
|
|
||||||
fun bar() : Int = foo
|
fun bar() : Int = foo
|
||||||
}
|
|
||||||
|
|
||||||
package b {
|
// FILE: f.kt
|
||||||
|
package ok.b
|
||||||
fun foo() : Int = bar()
|
fun foo() : Int = bar()
|
||||||
|
|
||||||
fun bar() = foo()
|
fun bar() = foo()
|
||||||
}
|
|
||||||
|
|
||||||
package c {
|
// FILE: f.kt
|
||||||
|
package ok.c
|
||||||
fun bazz() = bar()
|
fun bazz() = bar()
|
||||||
|
|
||||||
fun foo() : Int = bazz()
|
fun foo() : Int = bazz()
|
||||||
|
|
||||||
fun bar() = foo()
|
fun bar() = foo()
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,16 +1,15 @@
|
|||||||
package redeclarations {
|
// FILE: f.kt
|
||||||
|
package redeclarations
|
||||||
object <!REDECLARATION, REDECLARATION!>A<!> {
|
object <!REDECLARATION, REDECLARATION!>A<!> {
|
||||||
val x : Int = 0
|
val x : Int = 0
|
||||||
|
|
||||||
val A = 1
|
val A = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
package <!REDECLARATION!>A<!> {
|
class <!REDECLARATION!>A<!> {}
|
||||||
class A {}
|
|
||||||
}
|
|
||||||
|
|
||||||
class <!REDECLARATION, REDECLARATION!>A<!> {}
|
|
||||||
|
|
||||||
val <!REDECLARATION!>A<!> = 1
|
val <!REDECLARATION!>A<!> = 1
|
||||||
|
|
||||||
}
|
// FILE: f.kt
|
||||||
|
package redeclarations.<!REDECLARATION, REDECLARATION!>A<!>
|
||||||
|
class A {}
|
||||||
@@ -1,3 +1,4 @@
|
|||||||
|
// FILE: f.kt
|
||||||
// +JDK
|
// +JDK
|
||||||
|
|
||||||
import java.*
|
import java.*
|
||||||
@@ -49,6 +50,6 @@ fun test(<!UNUSED_PARAMETER!>l<!> : java.util.List<Int>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
package xxx {
|
// FILE: f.kt
|
||||||
|
package xxx
|
||||||
import java.lang.Class;
|
import java.lang.Class;
|
||||||
}
|
|
||||||
@@ -1,9 +1,11 @@
|
|||||||
|
// FILE: f.kt
|
||||||
class A {
|
class A {
|
||||||
}
|
}
|
||||||
|
|
||||||
package n {
|
// FILE: f.kt
|
||||||
|
package n
|
||||||
class B
|
class B
|
||||||
}
|
// FILE: f.kt
|
||||||
abstract class XXX() {
|
abstract class XXX() {
|
||||||
abstract val a : Int
|
abstract val a : Int
|
||||||
abstract val a1 : package.<!UNRESOLVED_REFERENCE!>Int<!>
|
abstract val a1 : package.<!UNRESOLVED_REFERENCE!>Int<!>
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
package customGetValGlobal {
|
package customGetValGlobal
|
||||||
val zz = 1
|
val zz = 1
|
||||||
get() = $zz * 2
|
get() = $zz * 2
|
||||||
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
|
// FILE: b.kt
|
||||||
// +JDK
|
// +JDK
|
||||||
|
package outer
|
||||||
|
|
||||||
fun Int?.optint() : Unit {}
|
fun Int?.optint() : Unit {}
|
||||||
val Int?.optval : Unit = #()
|
val Int?.optval : Unit = #()
|
||||||
@@ -39,7 +41,10 @@ val <T> T.<!MUST_BE_INITIALIZED!>foo<!> : T
|
|||||||
|
|
||||||
fun Int.foo() = this
|
fun Int.foo() = this
|
||||||
|
|
||||||
package null_safety {
|
// FILE: b.kt
|
||||||
|
package null_safety
|
||||||
|
|
||||||
|
import outer.*
|
||||||
|
|
||||||
fun parse(<!UNUSED_PARAMETER!>cmd<!>: String): Command? { return null }
|
fun parse(<!UNUSED_PARAMETER!>cmd<!>: String): Command? { return null }
|
||||||
class Command() {
|
class Command() {
|
||||||
@@ -69,5 +74,3 @@ package null_safety {
|
|||||||
|
|
||||||
if (command == null) 1
|
if (command == null) 1
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,21 +1,8 @@
|
|||||||
|
// FILE: this.kt
|
||||||
|
|
||||||
// KT-362 Don't allow autocasts on vals that are not internal
|
// KT-362 Don't allow autocasts on vals that are not internal
|
||||||
package example;
|
package example;
|
||||||
|
|
||||||
package test {
|
|
||||||
public class Public() {
|
|
||||||
public val public : Int? = 1;
|
|
||||||
protected val protected : Int? = 1;
|
|
||||||
internal protected val i_protected : Int? = 1;
|
|
||||||
val internal : Int? = 1
|
|
||||||
}
|
|
||||||
internal class Internal() {
|
|
||||||
public val public : Int? = 1;
|
|
||||||
protected val protected : Int? = 1;
|
|
||||||
internal protected val i_protected : Int? = 1;
|
|
||||||
val internal : Int? = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun test() {
|
fun test() {
|
||||||
val p = test.Public()
|
val p = test.Public()
|
||||||
if (p.public is Int) <!AUTOCAST_IMPOSSIBLE!>p.public<!> + 1
|
if (p.public is Int) <!AUTOCAST_IMPOSSIBLE!>p.public<!> + 1
|
||||||
@@ -28,3 +15,20 @@ fun test() {
|
|||||||
if (i.i_protected is Int) i.i_protected + 1
|
if (i.i_protected is Int) i.i_protected + 1
|
||||||
if (i.internal is Int) i.internal + 1
|
if (i.internal is Int) i.internal + 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FILE: other.kt
|
||||||
|
package test
|
||||||
|
|
||||||
|
public class Public() {
|
||||||
|
public val public : Int? = 1;
|
||||||
|
protected val protected : Int? = 1;
|
||||||
|
internal protected val i_protected : Int? = 1;
|
||||||
|
val internal : Int? = 1
|
||||||
|
}
|
||||||
|
internal class Internal() {
|
||||||
|
public val public : Int? = 1;
|
||||||
|
protected val protected : Int? = 1;
|
||||||
|
internal protected val i_protected : Int? = 1;
|
||||||
|
val internal : Int? = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,14 +1,14 @@
|
|||||||
package jet121 {
|
package jet121
|
||||||
fun box() : String {
|
|
||||||
val answer = apply("OK") { String.() : Int ->
|
|
||||||
get(0)
|
|
||||||
length
|
|
||||||
}
|
|
||||||
|
|
||||||
return if (answer == 2) "OK" else "FAIL"
|
fun box() : String {
|
||||||
}
|
val answer = apply("OK") { String.() : Int ->
|
||||||
|
get(0)
|
||||||
fun apply(arg:String, f : String.() -> Int) : Int {
|
length
|
||||||
return arg.f()
|
}
|
||||||
}
|
|
||||||
|
return if (answer == 2) "OK" else "FAIL"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun apply(arg:String, f : String.() -> Int) : Int {
|
||||||
|
return arg.f()
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
|
// FILE: this.kt
|
||||||
|
|
||||||
// KT-26 Import namespaces defined in this file
|
// KT-26 Import namespaces defined in this file
|
||||||
|
package foo
|
||||||
|
|
||||||
package foo {
|
import bar.* // Must not be an error
|
||||||
import bar.* // Must not be an error
|
|
||||||
}
|
|
||||||
|
|
||||||
package bar {}
|
// FILE: other.kt
|
||||||
|
package bar
|
||||||
@@ -1,10 +1,12 @@
|
|||||||
|
// FILE: a.kt
|
||||||
// KT-26 Import namespaces defined in this file
|
// KT-26 Import namespaces defined in this file
|
||||||
|
|
||||||
import html.* // Must not be an error
|
import html.* // Must not be an error
|
||||||
|
|
||||||
package html {
|
// FILE: b.kt
|
||||||
|
|
||||||
abstract class Factory<T> {
|
package html
|
||||||
fun create() : T? = null
|
|
||||||
}
|
abstract class Factory<T> {
|
||||||
|
fun create() : T? = null
|
||||||
}
|
}
|
||||||
@@ -1,12 +1,12 @@
|
|||||||
// KT-716 Type inference failed
|
// KT-716 Type inference failed
|
||||||
// +JDK
|
// +JDK
|
||||||
|
|
||||||
fun <T> typeinfo.TypeInfo<T>.getJavaClass() : java.lang.Class<T> {
|
fun <T> TypeInfo<T>.getJavaClass() : java.lang.Class<T> {
|
||||||
val t : java.lang.Object = this <!CAST_NEVER_SUCCEEDS!>as<!> java.lang.Object
|
val t : java.lang.Object = this <!CAST_NEVER_SUCCEEDS!>as<!> java.lang.Object
|
||||||
return <!UNCHECKED_CAST!>t.getClass() as java.lang.Class<T><!> // inferred type is Object but Serializable was expected
|
return <!UNCHECKED_CAST!>t.getClass() as java.lang.Class<T><!> // inferred type is Object but Serializable was expected
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getJavaClass<T>() = typeinfo.typeinfo<T>.getJavaClass()
|
fun getJavaClass<T>() = typeinfo<T>.getJavaClass()
|
||||||
|
|
||||||
fun main(args : Array<String>) {
|
fun main(args : Array<String>) {
|
||||||
System.out?.println(getJavaClass<String>)
|
System.out?.println(getJavaClass<String>)
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
//FILE:a.kt
|
// FILE:a.kt
|
||||||
package a
|
package a
|
||||||
|
|
||||||
import b.B //class
|
import b.B //class
|
||||||
@@ -23,7 +23,7 @@ fun test(arg: B) {
|
|||||||
f.f()
|
f.f()
|
||||||
}
|
}
|
||||||
|
|
||||||
//FILE:b.kt
|
// FILE:b.kt
|
||||||
package b
|
package b
|
||||||
|
|
||||||
class B() {}
|
class B() {}
|
||||||
|
|||||||
@@ -4,19 +4,33 @@ JetFile: FileStart_ERR.jet
|
|||||||
<empty list>
|
<empty list>
|
||||||
PsiErrorElement:Expecting namespace or top level declaration
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(DIV)('/')
|
PsiElement(DIV)('/')
|
||||||
NAMESPACE
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
NAMESPACE_HEADER
|
PsiElement(namespace)('package')
|
||||||
PsiElement(namespace)('package')
|
PsiWhiteSpace(' ')
|
||||||
PsiWhiteSpace(' ')
|
MODIFIER_LIST
|
||||||
REFERENCE_EXPRESSION
|
ANNOTATION_ENTRY
|
||||||
PsiElement(IDENTIFIER)('foo')
|
CONSTRUCTOR_CALLEE
|
||||||
PsiElement(DOT)('.')
|
TYPE_REFERENCE
|
||||||
PsiElement(IDENTIFIER)('bar')
|
USER_TYPE
|
||||||
PsiErrorElement:A namespace block in '{...}' expected
|
USER_TYPE
|
||||||
<empty list>
|
REFERENCE_EXPRESSION
|
||||||
PsiWhiteSpace('\n')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
IMPORT_DIRECTIVE
|
PsiElement(DOT)('.')
|
||||||
PsiElement(import)('import')
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
ANNOTATION_ENTRY
|
||||||
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('import')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
REFERENCE_EXPRESSION
|
ANNOTATION_ENTRY
|
||||||
PsiElement(IDENTIFIER)('foo')
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
|
<empty list>
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
package foo.bar.goo
|
|
||||||
|
|
||||||
import foo as bar
|
|
||||||
|
|
||||||
package foof {
|
|
||||||
import foo.bar.*;
|
|
||||||
|
|
||||||
class Foo {}
|
|
||||||
|
|
||||||
package bar {
|
|
||||||
class Bar {}
|
|
||||||
|
|
||||||
package ns {
|
|
||||||
class X
|
|
||||||
|
|
||||||
class Y
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class Bar<T> {}
|
|
||||||
|
|
||||||
package foo {}
|
|
||||||
|
|
||||||
package bar {
|
|
||||||
import sdf
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,146 +0,0 @@
|
|||||||
JetFile: NamespaceBlock.jet
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiElement(IDENTIFIER)('goo')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('foof')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiElement(MUL)('*')
|
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Foo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
CLASS_BODY
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Bar')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
CLASS_BODY
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('ns')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('X')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Y')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n\n')
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Bar')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
PsiElement(LT)('<')
|
|
||||||
TYPE_PARAMETER
|
|
||||||
PsiElement(IDENTIFIER)('T')
|
|
||||||
PsiElement(GT)('>')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
CLASS_BODY
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
<empty list>
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('sdf')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
@@ -2,37 +2,43 @@ JetFile: NamespaceBlockFirst.jet
|
|||||||
NAMESPACE
|
NAMESPACE
|
||||||
NAMESPACE_HEADER
|
NAMESPACE_HEADER
|
||||||
<empty list>
|
<empty list>
|
||||||
NAMESPACE
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
NAMESPACE_HEADER
|
PsiElement(namespace)('package')
|
||||||
PsiElement(namespace)('package')
|
PsiWhiteSpace(' ')
|
||||||
PsiWhiteSpace(' ')
|
MODIFIER_LIST
|
||||||
PsiElement(IDENTIFIER)('foobar')
|
ANNOTATION_ENTRY
|
||||||
PsiWhiteSpace(' ')
|
CONSTRUCTOR_CALLEE
|
||||||
|
TYPE_REFERENCE
|
||||||
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('foobar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
PsiWhiteSpace('\n ')
|
PsiWhiteSpace('\n ')
|
||||||
NAMESPACE_BODY
|
PROPERTY
|
||||||
PROPERTY
|
PsiElement(val)('val')
|
||||||
PsiElement(val)('val')
|
PsiWhiteSpace(' ')
|
||||||
PsiWhiteSpace(' ')
|
PsiElement(IDENTIFIER)('a')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(EQ)('=')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
INTEGER_CONSTANT
|
||||||
|
PsiElement(INTEGER_LITERAL)('1')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
PROPERTY
|
||||||
|
PsiElement(val)('val')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(IDENTIFIER)('b')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(EQ)('=')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('foobar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(IDENTIFIER)('a')
|
PsiElement(IDENTIFIER)('a')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace('\n')
|
||||||
PsiElement(EQ)('=')
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
INTEGER_CONSTANT
|
|
||||||
PsiElement(INTEGER_LITERAL)('1')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
PROPERTY
|
|
||||||
PsiElement(val)('val')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('b')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(EQ)('=')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foobar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
PsiElement(RBRACE)('}')
|
PsiElement(RBRACE)('}')
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package foo.bar.goo
|
|
||||||
|
|
||||||
import foo as
|
|
||||||
import foo.
|
|
||||||
import foo.bar.
|
|
||||||
import foo. as bar
|
|
||||||
|
|
||||||
package foof {
|
|
||||||
import foo.bar.* as bar
|
|
||||||
import foo as ;
|
|
||||||
import foo. ;
|
|
||||||
import foo.bar. ;
|
|
||||||
import foo. as bar ;
|
|
||||||
import foo.bar.* as bar ;
|
|
||||||
import foo.bar.* as ;
|
|
||||||
|
|
||||||
package foo
|
|
||||||
|
|
||||||
class Foo {}
|
|
||||||
package {
|
|
||||||
class Bar {}
|
|
||||||
|
|
||||||
package ns {
|
|
||||||
class X
|
|
||||||
|
|
||||||
class Y
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dsfgd
|
|
||||||
|
|
||||||
class Bar<T> {}
|
|
||||||
|
|
||||||
package foo
|
|
||||||
|
|
||||||
package {}
|
|
||||||
|
|
||||||
package bar {
|
|
||||||
import sdf
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,318 +0,0 @@
|
|||||||
JetFile: NamespaceBlock_ERR.jet
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiElement(IDENTIFIER)('goo')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
PsiElement(IDENTIFIER)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
NAMESPACE
|
|
||||||
MODIFIER_LIST
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
USER_TYPE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiErrorElement:Expecting type name
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('foof')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiElement(MUL)('*')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiErrorElement:Cannot rename a all imported items to one identifier
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiErrorElement:Expecting identifier
|
|
||||||
<empty list>
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiErrorElement:Qualified name must be a '.'-separated identifier list
|
|
||||||
<empty list>
|
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiErrorElement:Qualified name must be a '.'-separated identifier list
|
|
||||||
<empty list>
|
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiErrorElement:Qualified name must be a '.'-separated identifier list
|
|
||||||
<empty list>
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiElement(MUL)('*')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiErrorElement:Cannot rename a all imported items to one identifier
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
PsiElement(MUL)('*')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiErrorElement:Cannot rename a all imported items to one identifier
|
|
||||||
PsiElement(as)('as')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiErrorElement:A namespace block in '{...}' expected
|
|
||||||
<empty list>
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Foo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
CLASS_BODY
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiErrorElement:Expecting namespace name
|
|
||||||
<empty list>
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Bar')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
CLASS_BODY
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('ns')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('X')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
CLASS
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Y')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
<empty list>
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
CLASS
|
|
||||||
MODIFIER_LIST
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('dsfgd')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
PsiElement(class)('class')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('Bar')
|
|
||||||
TYPE_PARAMETER_LIST
|
|
||||||
PsiElement(LT)('<')
|
|
||||||
TYPE_PARAMETER
|
|
||||||
PsiElement(IDENTIFIER)('T')
|
|
||||||
PsiElement(GT)('>')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
CLASS_BODY
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiErrorElement:A namespace block in '{...}' expected
|
|
||||||
<empty list>
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiErrorElement:Expecting namespace name
|
|
||||||
<empty list>
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
<empty list>
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
IMPORT_DIRECTIVE
|
|
||||||
PsiElement(import)('import')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('sdf')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
@@ -1,9 +1 @@
|
|||||||
public [a] package name;
|
public [a] package name
|
||||||
|
|
||||||
[a] package a {
|
|
||||||
val foo
|
|
||||||
|
|
||||||
private package b {
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -17,46 +17,3 @@ JetFile: NamespaceModifiers.jet
|
|||||||
PsiElement(namespace)('package')
|
PsiElement(namespace)('package')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(IDENTIFIER)('name')
|
PsiElement(IDENTIFIER)('name')
|
||||||
PsiElement(SEMICOLON)(';')
|
|
||||||
PsiWhiteSpace('\n\n')
|
|
||||||
NAMESPACE
|
|
||||||
MODIFIER_LIST
|
|
||||||
ANNOTATION
|
|
||||||
PsiElement(LBRACKET)('[')
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiElement(RBRACKET)(']')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
PROPERTY
|
|
||||||
PsiElement(val)('val')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
NAMESPACE
|
|
||||||
MODIFIER_LIST
|
|
||||||
PsiElement(private)('private')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('b')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
PsiWhiteSpace('\n\n ')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
<empty list>
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
@@ -16,112 +16,119 @@ JetFile: RootNamespace.jet
|
|||||||
PsiWhiteSpace('\n\n')
|
PsiWhiteSpace('\n\n')
|
||||||
TYPE_PARAMETER_LIST
|
TYPE_PARAMETER_LIST
|
||||||
<empty list>
|
<empty list>
|
||||||
NAMESPACE
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
NAMESPACE_HEADER
|
PsiElement(namespace)('package')
|
||||||
PsiElement(namespace)('package')
|
PsiWhiteSpace(' ')
|
||||||
PsiWhiteSpace(' ')
|
MODIFIER_LIST
|
||||||
REFERENCE_EXPRESSION
|
ANNOTATION_ENTRY
|
||||||
PsiElement(IDENTIFIER)('foo')
|
CONSTRUCTOR_CALLEE
|
||||||
PsiElement(DOT)('.')
|
TYPE_REFERENCE
|
||||||
PsiElement(IDENTIFIER)('bar')
|
USER_TYPE
|
||||||
PsiWhiteSpace(' ')
|
USER_TYPE
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('foo')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(LBRACE)('{')
|
||||||
PsiWhiteSpace('\n ')
|
PsiWhiteSpace('\n ')
|
||||||
NAMESPACE_BODY
|
FUN
|
||||||
FUN
|
PsiElement(fun)('fun')
|
||||||
PsiElement(fun)('fun')
|
PsiWhiteSpace(' ')
|
||||||
PsiWhiteSpace(' ')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
PsiElement(IDENTIFIER)('foo')
|
VALUE_PARAMETER_LIST
|
||||||
VALUE_PARAMETER_LIST
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(RPAR)(')')
|
||||||
PsiElement(RPAR)(')')
|
PsiWhiteSpace(' ')
|
||||||
PsiWhiteSpace(' ')
|
BLOCK
|
||||||
BLOCK
|
PsiElement(LBRACE)('{')
|
||||||
PsiElement(LBRACE)('{')
|
PsiWhiteSpace('\n ')
|
||||||
PsiWhiteSpace('\n ')
|
DOT_QUALIFIED_EXPRESSION
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
DOT_QUALIFIED_EXPRESSION
|
DOT_QUALIFIED_EXPRESSION
|
||||||
DOT_QUALIFIED_EXPRESSION
|
ROOT_NAMESPACE
|
||||||
DOT_QUALIFIED_EXPRESSION
|
PsiElement(namespace)('package')
|
||||||
ROOT_NAMESPACE
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
PsiElement(DOT)('.')
|
||||||
REFERENCE_EXPRESSION
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(IDENTIFIER)('X')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
PsiWhiteSpace('\n ')
|
PsiElement(DOT)('.')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('bar')
|
||||||
|
PsiElement(DOT)('.')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('X')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
|
DOT_QUALIFIED_EXPRESSION
|
||||||
DOT_QUALIFIED_EXPRESSION
|
DOT_QUALIFIED_EXPRESSION
|
||||||
DOT_QUALIFIED_EXPRESSION
|
ROOT_NAMESPACE
|
||||||
DOT_QUALIFIED_EXPRESSION
|
PsiElement(namespace)('package')
|
||||||
ROOT_NAMESPACE
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
PsiElement(DOT)('.')
|
||||||
CALL_EXPRESSION
|
REFERENCE_EXPRESSION
|
||||||
REFERENCE_EXPRESSION
|
PsiElement(IDENTIFIER)('foo')
|
||||||
PsiElement(IDENTIFIER)('X')
|
PsiElement(DOT)('.')
|
||||||
VALUE_ARGUMENT_LIST
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(IDENTIFIER)('bar')
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(DOT)('.')
|
||||||
PsiWhiteSpace('\n ')
|
CALL_EXPRESSION
|
||||||
WHEN
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(when)('when')
|
PsiElement(IDENTIFIER)('X')
|
||||||
PsiWhiteSpace(' ')
|
VALUE_ARGUMENT_LIST
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(LPAR)('(')
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('e')
|
|
||||||
PsiElement(RPAR)(')')
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
WHEN
|
||||||
|
PsiElement(when)('when')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LPAR)('(')
|
||||||
|
REFERENCE_EXPRESSION
|
||||||
|
PsiElement(IDENTIFIER)('e')
|
||||||
|
PsiElement(RPAR)(')')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
|
PsiWhiteSpace('\n ')
|
||||||
|
WHEN_ENTRY
|
||||||
|
WHEN_CONDITION_IS_PATTERN
|
||||||
|
PsiElement(is)('is')
|
||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(LBRACE)('{')
|
DECOMPOSER_PATTERN
|
||||||
PsiWhiteSpace('\n ')
|
DOT_QUALIFIED_EXPRESSION
|
||||||
WHEN_ENTRY
|
DOT_QUALIFIED_EXPRESSION
|
||||||
WHEN_CONDITION_IS_PATTERN
|
|
||||||
PsiElement(is)('is')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
DECOMPOSER_PATTERN
|
|
||||||
DOT_QUALIFIED_EXPRESSION
|
DOT_QUALIFIED_EXPRESSION
|
||||||
DOT_QUALIFIED_EXPRESSION
|
ROOT_NAMESPACE
|
||||||
DOT_QUALIFIED_EXPRESSION
|
PsiElement(namespace)('package')
|
||||||
ROOT_NAMESPACE
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiElement(DOT)('.')
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
PsiElement(DOT)('.')
|
PsiElement(DOT)('.')
|
||||||
REFERENCE_EXPRESSION
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(IDENTIFIER)('X')
|
PsiElement(IDENTIFIER)('foo')
|
||||||
PsiWhiteSpace(' ')
|
PsiElement(DOT)('.')
|
||||||
DECOMPOSER_ARGUMENT_LIST
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(HASH)('#')
|
PsiElement(IDENTIFIER)('bar')
|
||||||
PsiElement(LPAR)('(')
|
PsiElement(DOT)('.')
|
||||||
TUPLE_PATTERN_ENTRY
|
REFERENCE_EXPRESSION
|
||||||
TYPE_PATTERN
|
PsiElement(IDENTIFIER)('X')
|
||||||
TYPE_REFERENCE
|
PsiWhiteSpace(' ')
|
||||||
USER_TYPE
|
DECOMPOSER_ARGUMENT_LIST
|
||||||
REFERENCE_EXPRESSION
|
PsiElement(HASH)('#')
|
||||||
PsiElement(IDENTIFIER)('x')
|
PsiElement(LPAR)('(')
|
||||||
PsiElement(RPAR)(')')
|
TUPLE_PATTERN_ENTRY
|
||||||
PsiWhiteSpace(' ')
|
TYPE_PATTERN
|
||||||
PsiElement(ARROW)('->')
|
TYPE_REFERENCE
|
||||||
PsiWhiteSpace(' ')
|
USER_TYPE
|
||||||
BLOCK
|
REFERENCE_EXPRESSION
|
||||||
PsiElement(LBRACE)('{')
|
PsiElement(IDENTIFIER)('x')
|
||||||
PsiElement(RBRACE)('}')
|
PsiElement(RPAR)(')')
|
||||||
PsiWhiteSpace('\n ')
|
PsiWhiteSpace(' ')
|
||||||
|
PsiElement(ARROW)('->')
|
||||||
|
PsiWhiteSpace(' ')
|
||||||
|
BLOCK
|
||||||
|
PsiElement(LBRACE)('{')
|
||||||
PsiElement(RBRACE)('}')
|
PsiElement(RBRACE)('}')
|
||||||
PsiWhiteSpace('\n ')
|
PsiWhiteSpace('\n ')
|
||||||
PsiElement(RBRACE)('}')
|
PsiElement(RBRACE)('}')
|
||||||
PsiWhiteSpace('\n')
|
PsiWhiteSpace('\n ')
|
||||||
|
PsiElement(RBRACE)('}')
|
||||||
|
PsiWhiteSpace('\n')
|
||||||
|
PsiErrorElement:Expecting namespace or top level declaration
|
||||||
PsiElement(RBRACE)('}')
|
PsiElement(RBRACE)('}')
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
foo bar(1) buzz<T>(1) zoo package aa
|
foo bar(1) buzz<T>(1) zoo package aa
|
||||||
|
|
||||||
foo bar(1) buzz<T>(1) zoo package a {}
|
|
||||||
foo bar(1) buzz<T>(1) zoo class A
|
foo bar(1) buzz<T>(1) zoo class A
|
||||||
foo bar(1) buzz<T>(1) zoo object B
|
foo bar(1) buzz<T>(1) zoo object B
|
||||||
foo bar(1) buzz<T>(1) zoo fun a() {}
|
foo bar(1) buzz<T>(1) zoo fun a() {}
|
||||||
|
|||||||
@@ -54,66 +54,6 @@ JetFile: ShortAnnotations.jet
|
|||||||
PsiWhiteSpace(' ')
|
PsiWhiteSpace(' ')
|
||||||
PsiElement(IDENTIFIER)('aa')
|
PsiElement(IDENTIFIER)('aa')
|
||||||
PsiWhiteSpace('\n\n')
|
PsiWhiteSpace('\n\n')
|
||||||
NAMESPACE
|
|
||||||
MODIFIER_LIST
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('foo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('bar')
|
|
||||||
VALUE_ARGUMENT_LIST
|
|
||||||
PsiElement(LPAR)('(')
|
|
||||||
VALUE_ARGUMENT
|
|
||||||
INTEGER_CONSTANT
|
|
||||||
PsiElement(INTEGER_LITERAL)('1')
|
|
||||||
PsiElement(RPAR)(')')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('buzz')
|
|
||||||
TYPE_ARGUMENT_LIST
|
|
||||||
PsiElement(LT)('<')
|
|
||||||
TYPE_PROJECTION
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('T')
|
|
||||||
PsiElement(GT)('>')
|
|
||||||
VALUE_ARGUMENT_LIST
|
|
||||||
PsiElement(LPAR)('(')
|
|
||||||
VALUE_ARGUMENT
|
|
||||||
INTEGER_CONSTANT
|
|
||||||
PsiElement(INTEGER_LITERAL)('1')
|
|
||||||
PsiElement(RPAR)(')')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
ANNOTATION_ENTRY
|
|
||||||
CONSTRUCTOR_CALLEE
|
|
||||||
TYPE_REFERENCE
|
|
||||||
USER_TYPE
|
|
||||||
REFERENCE_EXPRESSION
|
|
||||||
PsiElement(IDENTIFIER)('zoo')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
NAMESPACE_HEADER
|
|
||||||
PsiElement(namespace)('package')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(IDENTIFIER)('a')
|
|
||||||
PsiWhiteSpace(' ')
|
|
||||||
PsiElement(LBRACE)('{')
|
|
||||||
NAMESPACE_BODY
|
|
||||||
<empty list>
|
|
||||||
PsiElement(RBRACE)('}')
|
|
||||||
PsiWhiteSpace('\n')
|
|
||||||
CLASS
|
CLASS
|
||||||
MODIFIER_LIST
|
MODIFIER_LIST
|
||||||
ANNOTATION_ENTRY
|
ANNOTATION_ENTRY
|
||||||
|
|||||||
@@ -1,22 +1,21 @@
|
|||||||
package root
|
// FILE: f.kt
|
||||||
|
~a~package a
|
||||||
~a~package a {
|
|
||||||
import java.*
|
import java.*
|
||||||
|
|
||||||
~a.a~val a : util.List<Int>? = null
|
~a.a~val a : util.List<Int>? = null
|
||||||
|
|
||||||
val y : Any? = `a.b`b
|
val y : Any? = `a.b`b
|
||||||
|
|
||||||
}
|
// FILE: f.kt
|
||||||
|
package a
|
||||||
package a {
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
~a.b~val b : List<Int>? = null
|
~a.b~val b : List<Int>? = null
|
||||||
|
|
||||||
val x = `a.a`a
|
val x = `a.a`a
|
||||||
}
|
|
||||||
|
|
||||||
|
// FILE: f.kt
|
||||||
|
package root
|
||||||
val x = `a`a.`a.a`a
|
val x = `a`a.`a.a`a
|
||||||
|
|
||||||
val y = `a`a.`a.b`b
|
val y = `a`a.`a.b`b
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
~ns~package nestedObjects {
|
~ns~package nestedObjects
|
||||||
object ~A~A {
|
object ~A~A {
|
||||||
val b = `A.B`B
|
val b = `A.B`B
|
||||||
val d = `A`A.`A.B`B.`A.B.A`A
|
val d = `A`A.`A.B`B.`A.B.A`A
|
||||||
@@ -25,4 +25,3 @@
|
|||||||
val c = `A`A.`A.B`B
|
val c = `A`A.`A.B`B
|
||||||
val d = A.B.`A.B.A`A
|
val d = A.B.`A.B.A`A
|
||||||
val e = B.`!`A.B
|
val e = B.`!`A.B
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package org.jetbrains.jet;
|
package org.jetbrains.jet;
|
||||||
|
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
import com.intellij.openapi.Disposable;
|
import com.intellij.openapi.Disposable;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
||||||
@@ -18,6 +19,9 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
@@ -168,5 +172,43 @@ public class JetTestUtils {
|
|||||||
mkdirs(file);
|
mkdirs(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static final Pattern FILE_PATTERN = Pattern.compile("//\\s*FILE:\\s*(.*)$", Pattern.MULTILINE);
|
||||||
|
public interface TestFileFactory<F> {
|
||||||
|
F create(String fileName, String text);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <F> List<F> createTestFiles(String testFileName, String expectedText, TestFileFactory<F> factory) {
|
||||||
|
List<F> testFileFiles = Lists.newArrayList();
|
||||||
|
Matcher matcher = FILE_PATTERN.matcher(expectedText);
|
||||||
|
if (!matcher.find()) {
|
||||||
|
// One file
|
||||||
|
testFileFiles.add(factory.create(testFileName, expectedText));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
int processedChars = 0;
|
||||||
|
// Many files
|
||||||
|
while (true) {
|
||||||
|
String fileName = matcher.group(1);
|
||||||
|
int start = matcher.start();
|
||||||
|
assert start == processedChars : "Characters skipped from " + processedChars + " to " + matcher.start();
|
||||||
|
|
||||||
|
boolean nextFileExists = matcher.find();
|
||||||
|
int end;
|
||||||
|
if (nextFileExists) {
|
||||||
|
end = matcher.start();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
end = expectedText.length();
|
||||||
|
}
|
||||||
|
String fileText = expectedText.substring(start, end);
|
||||||
|
processedChars = end;
|
||||||
|
|
||||||
|
testFileFiles.add(factory.create(fileName, fileText));
|
||||||
|
|
||||||
|
if (!nextFileExists) break;
|
||||||
|
}
|
||||||
|
assert processedChars == expectedText.length() : "Characters skipped from " + processedChars + " to " + (expectedText.length() - 1);
|
||||||
|
}
|
||||||
|
return testFileFiles;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import org.jetbrains.annotations.NonNls;
|
|||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.JetLiteFixture;
|
import org.jetbrains.jet.JetLiteFixture;
|
||||||
import org.jetbrains.jet.JetTestCaseBuilder;
|
import org.jetbrains.jet.JetTestCaseBuilder;
|
||||||
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.lang.Configuration;
|
import org.jetbrains.jet.lang.Configuration;
|
||||||
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
import org.jetbrains.jet.lang.diagnostics.DiagnosticUtils;
|
||||||
@@ -20,15 +21,12 @@ import org.jetbrains.jet.lang.resolve.java.AnalyzerFacade;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
public class JetDiagnosticsTest extends JetLiteFixture {
|
public class JetDiagnosticsTest extends JetLiteFixture {
|
||||||
private String name;
|
private String name;
|
||||||
public static final Pattern FILE_PATTERN = Pattern.compile("//\\s*FILE:\\s*(.*)$", Pattern.MULTILINE);
|
|
||||||
|
|
||||||
public JetDiagnosticsTest(@NonNls String dataPath, String name) {
|
public JetDiagnosticsTest(@NonNls String dataPath, String name) {
|
||||||
super(dataPath);
|
super(dataPath);
|
||||||
@@ -88,7 +86,12 @@ public class JetDiagnosticsTest extends JetLiteFixture {
|
|||||||
|
|
||||||
String expectedText = loadFile(testFileName);
|
String expectedText = loadFile(testFileName);
|
||||||
|
|
||||||
List<TestFile> testFileFiles = createTestFiles(testFileName, expectedText);
|
List<TestFile> testFileFiles = JetTestUtils.createTestFiles(testFileName, expectedText, new JetTestUtils.TestFileFactory<TestFile>() {
|
||||||
|
@Override
|
||||||
|
public TestFile create(String fileName, String text) {
|
||||||
|
return new TestFile(fileName, text);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
boolean importJdk = expectedText.contains("+JDK");
|
boolean importJdk = expectedText.contains("+JDK");
|
||||||
// Configuration configuration = importJdk ? JavaBridgeConfiguration.createJavaBridgeConfiguration(getProject()) : Configuration.EMPTY;
|
// Configuration configuration = importJdk ? JavaBridgeConfiguration.createJavaBridgeConfiguration(getProject()) : Configuration.EMPTY;
|
||||||
@@ -114,41 +117,6 @@ public class JetDiagnosticsTest extends JetLiteFixture {
|
|||||||
assertEquals(expectedText, actualText.toString());
|
assertEquals(expectedText, actualText.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<TestFile> createTestFiles(String testFileName, String expectedText) {
|
|
||||||
List<TestFile> testFileFiles = Lists.newArrayList();
|
|
||||||
Matcher matcher = FILE_PATTERN.matcher(expectedText);
|
|
||||||
if (!matcher.find()) {
|
|
||||||
// One file
|
|
||||||
testFileFiles.add(new TestFile(testFileName, expectedText));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
int processedChars = 0;
|
|
||||||
// Many files
|
|
||||||
while (true) {
|
|
||||||
String fileName = matcher.group(1);
|
|
||||||
int start = matcher.start();
|
|
||||||
assertTrue("Characters skipped from " + processedChars + " to " + matcher.start(), start == processedChars);
|
|
||||||
|
|
||||||
boolean nextFileExists = matcher.find();
|
|
||||||
int end;
|
|
||||||
if (nextFileExists) {
|
|
||||||
end = matcher.start();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
end = expectedText.length();
|
|
||||||
}
|
|
||||||
String fileText = expectedText.substring(start, end);
|
|
||||||
processedChars = end;
|
|
||||||
|
|
||||||
testFileFiles.add(new TestFile(fileName, fileText));
|
|
||||||
|
|
||||||
if (!nextFileExists) break;
|
|
||||||
}
|
|
||||||
assertTrue("Characters skipped from " + processedChars + " to " + (expectedText.length() - 1), processedChars == expectedText.length());
|
|
||||||
}
|
|
||||||
return testFileFiles;
|
|
||||||
}
|
|
||||||
|
|
||||||
// private void convert(File src, File dest) throws IOException {
|
// private void convert(File src, File dest) throws IOException {
|
||||||
// File[] files = src.listFiles();
|
// File[] files = src.listFiles();
|
||||||
// for (File file : files) {
|
// for (File file : files) {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class ClassGenTest extends CodegenTestCase {
|
|||||||
final Class aClass = loadClass("SimpleClass", generateClassesInFile());
|
final Class aClass = loadClass("SimpleClass", generateClassesInFile());
|
||||||
final Method[] methods = aClass.getDeclaredMethods();
|
final Method[] methods = aClass.getDeclaredMethods();
|
||||||
// public int SimpleClass.foo()
|
// public int SimpleClass.foo()
|
||||||
// public jet.typeinfo.TypeInfo SimpleClass.getTypeInfo()
|
// public jet.TypeInfo SimpleClass.getTypeInfo()
|
||||||
assertEquals(2, methods.length);
|
assertEquals(2, methods.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package org.jetbrains.jet.codegen;
|
|||||||
import jet.IntRange;
|
import jet.IntRange;
|
||||||
import jet.Tuple2;
|
import jet.Tuple2;
|
||||||
import jet.Tuple4;
|
import jet.Tuple4;
|
||||||
import jet.typeinfo.TypeInfo;
|
import jet.TypeInfo;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package org.jetbrains.jet.codegen;
|
|||||||
|
|
||||||
import jet.JetObject;
|
import jet.JetObject;
|
||||||
import jet.TypeCastException;
|
import jet.TypeCastException;
|
||||||
import jet.typeinfo.TypeInfo;
|
import jet.TypeInfo;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ public class TypeInfoTest extends CodegenTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testNoArgTypeinfo() throws Exception {
|
public void testNoArgTypeinfo() throws Exception {
|
||||||
loadText("fun foo() = typeinfo.typeinfo<Int>()");
|
loadText("fun foo() = typeinfo<Int>()");
|
||||||
Method foo = generateFunction();
|
Method foo = generateFunction();
|
||||||
TypeInfo typeInfo = (TypeInfo) foo.invoke(null);
|
TypeInfo typeInfo = (TypeInfo) foo.invoke(null);
|
||||||
assertSame(TypeInfo.INT_TYPE_INFO, typeInfo);
|
assertSame(TypeInfo.INT_TYPE_INFO, typeInfo);
|
||||||
|
|||||||
@@ -1,8 +1,13 @@
|
|||||||
package org.jetbrains.jet.resolve;
|
package org.jetbrains.jet.resolve;
|
||||||
|
|
||||||
|
import com.google.common.base.Predicates;
|
||||||
|
import com.google.common.collect.Lists;
|
||||||
|
import com.google.common.collect.Maps;
|
||||||
|
import com.google.common.collect.Sets;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.util.PsiTreeUtil;
|
import com.intellij.psi.util.PsiTreeUtil;
|
||||||
import org.jetbrains.jet.JetTestUtils;
|
|
||||||
import org.jetbrains.jet.lang.JetSemanticServices;
|
import org.jetbrains.jet.lang.JetSemanticServices;
|
||||||
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
@@ -12,13 +17,14 @@ import org.jetbrains.jet.lang.diagnostics.UnresolvedReferenceDiagnostic;
|
|||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
import org.jetbrains.jet.lang.resolve.BindingContextUtils;
|
||||||
|
import org.jetbrains.jet.lang.resolve.java.AnalyzerFacade;
|
||||||
import org.jetbrains.jet.lang.types.ErrorUtils;
|
import org.jetbrains.jet.lang.types.ErrorUtils;
|
||||||
import org.jetbrains.jet.lang.types.JetStandardLibrary;
|
import org.jetbrains.jet.lang.types.JetStandardLibrary;
|
||||||
import org.jetbrains.jet.lang.types.JetType;
|
import org.jetbrains.jet.lang.types.JetType;
|
||||||
import org.jetbrains.jet.lang.types.TypeConstructor;
|
import org.jetbrains.jet.lang.types.TypeConstructor;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
@@ -31,22 +37,37 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.REFERENCE_TARGET;
|
|||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
public class ExpectedResolveData {
|
public abstract class ExpectedResolveData {
|
||||||
|
|
||||||
private final Map<String, Integer> declarationToPosition = new HashMap<String, Integer>();
|
private static class Position {
|
||||||
private final Map<Integer, String> positionToReference = new HashMap<Integer, String>();
|
private final PsiElement element;
|
||||||
private final Map<Integer, String> positionToType = new HashMap<Integer, String>();
|
|
||||||
private final Map<String, DeclarationDescriptor> nameToDescriptor;
|
|
||||||
private final Map<String, PsiElement> nameToPsiElement;
|
|
||||||
// private final Map<String, JetType> nameToType;
|
|
||||||
|
|
||||||
public ExpectedResolveData(Map<String, DeclarationDescriptor> nameToDescriptor, Map<String, PsiElement> nameToPsiElement/*, Map<String, JetType> nameToType*/) {
|
private Position(JetFile file, int offset) {
|
||||||
this.nameToDescriptor = nameToDescriptor;
|
this.element = file.findElementAt(offset);
|
||||||
this.nameToPsiElement = nameToPsiElement;
|
}
|
||||||
// this.nameToType = nameToType;
|
|
||||||
|
public PsiElement getElement() {
|
||||||
|
return element;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public String extractData(String text) {
|
private final Map<String, Position> declarationToPosition = Maps.newHashMap();
|
||||||
|
private final Map<Position, String> positionToReference = Maps.newHashMap();
|
||||||
|
private final Map<Position, String> positionToType = Maps.newHashMap();
|
||||||
|
|
||||||
|
private final Map<String, DeclarationDescriptor> nameToDescriptor;
|
||||||
|
private final Map<String, PsiElement> nameToPsiElement;
|
||||||
|
|
||||||
|
public ExpectedResolveData(Map<String, DeclarationDescriptor> nameToDescriptor, Map<String, PsiElement> nameToPsiElement) {
|
||||||
|
this.nameToDescriptor = nameToDescriptor;
|
||||||
|
this.nameToPsiElement = nameToPsiElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
public final JetFile createFileFromMarkedUpText(String fileName, String text) {
|
||||||
|
Map<String, Integer> declarationToIntPosition = Maps.newHashMap();
|
||||||
|
Map<Integer, String> intPositionToReference = Maps.newHashMap();
|
||||||
|
Map<Integer, String> intPositionToType = Maps.newHashMap();
|
||||||
|
|
||||||
Pattern pattern = Pattern.compile("(~[^~]+~)|(`[^`]+`)");
|
Pattern pattern = Pattern.compile("(~[^~]+~)|(`[^`]+`)");
|
||||||
while (true) {
|
while (true) {
|
||||||
Matcher matcher = pattern.matcher(text);
|
Matcher matcher = pattern.matcher(text);
|
||||||
@@ -56,16 +77,16 @@ public class ExpectedResolveData {
|
|||||||
String name = group.substring(1, group.length() - 1);
|
String name = group.substring(1, group.length() - 1);
|
||||||
int start = matcher.start();
|
int start = matcher.start();
|
||||||
if (group.startsWith("~")) {
|
if (group.startsWith("~")) {
|
||||||
if (declarationToPosition.put(name, start) != null) {
|
if (declarationToIntPosition.put(name, start) != null) {
|
||||||
throw new IllegalArgumentException("Redeclaration: " + name);
|
throw new IllegalArgumentException("Redeclaration: " + name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (group.startsWith("`")) {
|
else if (group.startsWith("`")) {
|
||||||
if (name.startsWith(":")) {
|
if (name.startsWith(":")) {
|
||||||
positionToType.put(start - 1, name.substring(1));
|
intPositionToType.put(start - 1, name.substring(1));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
positionToReference.put(start, name);
|
intPositionToReference.put(start, name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -75,16 +96,38 @@ public class ExpectedResolveData {
|
|||||||
text = text.substring(0, start) + text.substring(matcher.end());
|
text = text.substring(0, start) + text.substring(matcher.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
System.out.println(text);
|
JetFile jetFile = createJetFile(fileName, text);
|
||||||
return text;
|
|
||||||
|
for (Map.Entry<Integer, String> entry : intPositionToType.entrySet()) {
|
||||||
|
positionToType.put(new Position(jetFile, entry.getKey()), entry.getValue());
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, Integer> entry : declarationToIntPosition.entrySet()) {
|
||||||
|
declarationToPosition.put(entry.getKey(), new Position(jetFile, entry.getValue()));
|
||||||
|
}
|
||||||
|
for (Map.Entry<Integer, String> entry : intPositionToReference.entrySet()) {
|
||||||
|
positionToReference.put(new Position(jetFile, entry.getKey()), entry.getValue());
|
||||||
|
}
|
||||||
|
return jetFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkResult(JetFile file) {
|
protected abstract JetFile createJetFile(String fileName, String text);
|
||||||
final Set<PsiElement> unresolvedReferences = new HashSet<PsiElement>();
|
|
||||||
JetSemanticServices semanticServices = JetSemanticServices.createSemanticServices(file.getProject());
|
public final void checkResult(List<JetFile> files) {
|
||||||
|
if (files.isEmpty()) {
|
||||||
|
System.err.println("Suspicious: no files");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Set<PsiElement> unresolvedReferences = Sets.newHashSet();
|
||||||
|
Project project = files.iterator().next().getProject();
|
||||||
|
JetSemanticServices semanticServices = JetSemanticServices.createSemanticServices(project);
|
||||||
JetStandardLibrary lib = semanticServices.getStandardLibrary();
|
JetStandardLibrary lib = semanticServices.getStandardLibrary();
|
||||||
|
|
||||||
BindingContext bindingContext = JetTestUtils.analyzeNamespace(file.getRootNamespace(), JetControlFlowDataTraceFactory.EMPTY);
|
List<JetDeclaration> declarations = Lists.newArrayList();
|
||||||
|
for (JetFile file : files) {
|
||||||
|
declarations.add(file.getRootNamespace());
|
||||||
|
}
|
||||||
|
|
||||||
|
BindingContext bindingContext = AnalyzerFacade.analyzeNamespacesWithJavaIntegration(project, declarations, Predicates.<PsiFile>alwaysTrue(), JetControlFlowDataTraceFactory.EMPTY);
|
||||||
for (Diagnostic diagnostic : bindingContext.getDiagnostics()) {
|
for (Diagnostic diagnostic : bindingContext.getDiagnostics()) {
|
||||||
if (diagnostic instanceof UnresolvedReferenceDiagnostic) {
|
if (diagnostic instanceof UnresolvedReferenceDiagnostic) {
|
||||||
UnresolvedReferenceDiagnostic unresolvedReferenceDiagnostic = (UnresolvedReferenceDiagnostic) diagnostic;
|
UnresolvedReferenceDiagnostic unresolvedReferenceDiagnostic = (UnresolvedReferenceDiagnostic) diagnostic;
|
||||||
@@ -95,20 +138,20 @@ public class ExpectedResolveData {
|
|||||||
Map<String, JetDeclaration> nameToDeclaration = new HashMap<String, JetDeclaration>();
|
Map<String, JetDeclaration> nameToDeclaration = new HashMap<String, JetDeclaration>();
|
||||||
|
|
||||||
Map<JetDeclaration, String> declarationToName = new HashMap<JetDeclaration, String>();
|
Map<JetDeclaration, String> declarationToName = new HashMap<JetDeclaration, String>();
|
||||||
for (Map.Entry<String, Integer> entry : declarationToPosition.entrySet()) {
|
for (Map.Entry<String, Position> entry : declarationToPosition.entrySet()) {
|
||||||
String name = entry.getKey();
|
String name = entry.getKey();
|
||||||
Integer position = entry.getValue();
|
Position position = entry.getValue();
|
||||||
PsiElement element = file.findElementAt(position);
|
PsiElement element = position.getElement();
|
||||||
|
|
||||||
JetDeclaration ancestorOfType = getAncestorOfType(JetDeclaration.class, element);
|
JetDeclaration ancestorOfType = getAncestorOfType(JetDeclaration.class, element);
|
||||||
nameToDeclaration.put(name, ancestorOfType);
|
nameToDeclaration.put(name, ancestorOfType);
|
||||||
declarationToName.put(ancestorOfType, name);
|
declarationToName.put(ancestorOfType, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Map.Entry<Integer, String> entry : positionToReference.entrySet()) {
|
for (Map.Entry<Position, String> entry : positionToReference.entrySet()) {
|
||||||
Integer position = entry.getKey();
|
Position position = entry.getKey();
|
||||||
String name = entry.getValue();
|
String name = entry.getValue();
|
||||||
PsiElement element = file.findElementAt(position);
|
PsiElement element = position.getElement();
|
||||||
|
|
||||||
JetReferenceExpression referenceExpression = PsiTreeUtil.getParentOfType(element, JetReferenceExpression.class);
|
JetReferenceExpression referenceExpression = PsiTreeUtil.getParentOfType(element, JetReferenceExpression.class);
|
||||||
if ("!".equals(name)) {
|
if ("!".equals(name)) {
|
||||||
@@ -216,11 +259,11 @@ public class ExpectedResolveData {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Map.Entry<Integer, String> entry : positionToType.entrySet()) {
|
for (Map.Entry<Position, String> entry : positionToType.entrySet()) {
|
||||||
Integer position = entry.getKey();
|
Position position = entry.getKey();
|
||||||
String typeName = entry.getValue();
|
String typeName = entry.getValue();
|
||||||
|
|
||||||
PsiElement element = file.findElementAt(position);
|
PsiElement element = position.getElement();
|
||||||
JetExpression expression = getAncestorOfType(JetExpression.class, element);
|
JetExpression expression = getAncestorOfType(JetExpression.class, element);
|
||||||
|
|
||||||
JetType expressionType = bindingContext.get(BindingContext.EXPRESSION_TYPE, expression);
|
JetType expressionType = bindingContext.get(BindingContext.EXPRESSION_TYPE, expression);
|
||||||
@@ -230,15 +273,16 @@ public class ExpectedResolveData {
|
|||||||
|
|
||||||
assertNotNull("Expected class not found: " + typeName, expectedClass);
|
assertNotNull("Expected class not found: " + typeName, expectedClass);
|
||||||
expectedTypeConstructor = expectedClass.getTypeConstructor();
|
expectedTypeConstructor = expectedClass.getTypeConstructor();
|
||||||
} else {
|
}
|
||||||
Integer declarationPosition = declarationToPosition.get(typeName);
|
else {
|
||||||
|
Position declarationPosition = declarationToPosition.get(typeName);
|
||||||
assertNotNull("Undeclared: " + typeName, declarationPosition);
|
assertNotNull("Undeclared: " + typeName, declarationPosition);
|
||||||
PsiElement declElement = file.findElementAt(declarationPosition);
|
PsiElement declElement = declarationPosition.getElement();
|
||||||
assertNotNull(declarationPosition);
|
assertNotNull(declarationPosition);
|
||||||
JetDeclaration declaration = getAncestorOfType(JetDeclaration.class, declElement);
|
JetDeclaration declaration = getAncestorOfType(JetDeclaration.class, declElement);
|
||||||
assertNotNull(declaration);
|
assertNotNull(declaration);
|
||||||
if (declaration instanceof JetClass) {
|
if (declaration instanceof JetClass) {
|
||||||
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, (JetClass) declaration);
|
ClassDescriptor classDescriptor = bindingContext.get(BindingContext.CLASS, declaration);
|
||||||
expectedTypeConstructor = classDescriptor.getTypeConstructor();
|
expectedTypeConstructor = classDescriptor.getTypeConstructor();
|
||||||
}
|
}
|
||||||
else if (declaration instanceof JetTypeParameter) {
|
else if (declaration instanceof JetTypeParameter) {
|
||||||
|
|||||||
@@ -2,9 +2,10 @@ package org.jetbrains.jet.resolve;
|
|||||||
|
|
||||||
import org.jetbrains.annotations.NonNls;
|
import org.jetbrains.annotations.NonNls;
|
||||||
import org.jetbrains.jet.JetLiteFixture;
|
import org.jetbrains.jet.JetLiteFixture;
|
||||||
|
import org.jetbrains.jet.JetTestUtils;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
|
|
||||||
import java.io.File;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author abreslav
|
* @author abreslav
|
||||||
@@ -22,8 +23,12 @@ public abstract class ExtensibleResolveTestCase extends JetLiteFixture {
|
|||||||
|
|
||||||
protected void doTest(@NonNls String filePath) throws Exception {
|
protected void doTest(@NonNls String filePath) throws Exception {
|
||||||
String text = loadFile(filePath);
|
String text = loadFile(filePath);
|
||||||
text = expectedResolveData.extractData(text);
|
List<JetFile> files = JetTestUtils.createTestFiles("file.kt", text, new JetTestUtils.TestFileFactory<JetFile>() {
|
||||||
JetFile jetFile = createPsiFile(new File(filePath).getName(), text);
|
@Override
|
||||||
expectedResolveData.checkResult(jetFile);
|
public JetFile create(String fileName, String text) {
|
||||||
|
return expectedResolveData.createFileFromMarkedUpText(fileName, text);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
expectedResolveData.checkResult(files);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
|||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||||
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
import org.jetbrains.jet.lang.resolve.calls.CallResolver;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.OverloadResolutionResults;
|
import org.jetbrains.jet.lang.resolve.calls.OverloadResolutionResults;
|
||||||
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
|
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
|
||||||
@@ -54,7 +55,7 @@ public class JetResolveTest extends ExtensibleResolveTestCase {
|
|||||||
FunctionDescriptor descriptorForSet = standardFunction(lib.getArray(), Collections.singletonList(new TypeProjection(lib.getIntType())), "set", lib.getIntType(), lib.getIntType());
|
FunctionDescriptor descriptorForSet = standardFunction(lib.getArray(), Collections.singletonList(new TypeProjection(lib.getIntType())), "set", lib.getIntType(), lib.getIntType());
|
||||||
nameToDescriptor.put("std::Array.set(Int, Int)", descriptorForSet.getOriginal());
|
nameToDescriptor.put("std::Array.set(Int, Int)", descriptorForSet.getOriginal());
|
||||||
|
|
||||||
Map<String,PsiElement> nameToDeclaration = new HashMap<String, PsiElement>();
|
Map<String, PsiElement> nameToDeclaration = new HashMap<String, PsiElement>();
|
||||||
PsiClass java_util_Collections = findClass("java.util.Collections");
|
PsiClass java_util_Collections = findClass("java.util.Collections");
|
||||||
nameToDeclaration.put("java::java.util.Collections.emptyList()", findMethod(java_util_Collections, "emptyList"));
|
nameToDeclaration.put("java::java.util.Collections.emptyList()", findMethod(java_util_Collections, "emptyList"));
|
||||||
nameToDeclaration.put("java::java.util.Collections", java_util_Collections);
|
nameToDeclaration.put("java::java.util.Collections", java_util_Collections);
|
||||||
@@ -78,7 +79,12 @@ public class JetResolveTest extends ExtensibleResolveTestCase {
|
|||||||
nameToDeclaration.put("java::java.lang.Number", java_lang_Number);
|
nameToDeclaration.put("java::java.lang.Number", java_lang_Number);
|
||||||
nameToDeclaration.put("java::java.lang.Number.intValue()", java_lang_Number.findMethodsByName("intValue", true)[0]);
|
nameToDeclaration.put("java::java.lang.Number.intValue()", java_lang_Number.findMethodsByName("intValue", true)[0]);
|
||||||
|
|
||||||
return new ExpectedResolveData(nameToDescriptor, nameToDeclaration);
|
return new ExpectedResolveData(nameToDescriptor, nameToDeclaration) {
|
||||||
|
@Override
|
||||||
|
protected JetFile createJetFile(String fileName, String text) {
|
||||||
|
return createCheckAndReturnPsiFile(fileName, text);
|
||||||
|
}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
@@ -154,6 +160,9 @@ public class JetResolveTest extends ExtensibleResolveTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Test suite() {
|
public static Test suite() {
|
||||||
|
// TestSuite suite = new TestSuite();
|
||||||
|
// suite.addTest(new JetResolveTest("/resolve/Basic.jet", "basic"));
|
||||||
|
// return suite;
|
||||||
return JetTestCaseBuilder.suiteForDirectory(getHomeDirectory() + "/compiler/testData/", "/resolve/", true, new JetTestCaseBuilder.NamedTestFactory() {
|
return JetTestCaseBuilder.suiteForDirectory(getHomeDirectory() + "/compiler/testData/", "/resolve/", true, new JetTestCaseBuilder.NamedTestFactory() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -90,8 +90,8 @@ public class JetTypeCheckerTest extends JetLiteFixture {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void testTypeInfo() throws Exception {
|
public void testTypeInfo() throws Exception {
|
||||||
assertType("typeinfo.typeinfo<Int>", "typeinfo.TypeInfo<Int>");
|
assertType("typeinfo<Int>", "TypeInfo<Int>");
|
||||||
assertType("typeinfo.typeinfo<typeinfo.TypeInfo<Int>>", "typeinfo.TypeInfo<typeinfo.TypeInfo<Int>>");
|
assertType("typeinfo<TypeInfo<Int>>", "TypeInfo<TypeInfo<Int>>");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testJumps() throws Exception {
|
public void testJumps() throws Exception {
|
||||||
|
|||||||
@@ -16,15 +16,15 @@ script
|
|||||||
;
|
;
|
||||||
|
|
||||||
preamble
|
preamble
|
||||||
: namespaceHeader? import*
|
: packageHeader? import*
|
||||||
;
|
;
|
||||||
|
|
||||||
namespaceHeader
|
packageHeader
|
||||||
: modifiers "namespace" SimpleName{"."} SEMI?
|
: modifiers "package" SimpleName{"."} SEMI?
|
||||||
;
|
;
|
||||||
|
|
||||||
import
|
import
|
||||||
: "import" ("namespace" ".")? SimpleName{"."} ("." "*" | "as" SimpleName)? SEMI?
|
: "import" ("package" ".")? SimpleName{"."} ("." "*" | "as" SimpleName)? SEMI?
|
||||||
;
|
;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,7 +32,7 @@ bq. See [Imports|Namespaces#Imports]
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
toplevelObject
|
toplevelObject
|
||||||
: namespace
|
: package
|
||||||
: class
|
: class
|
||||||
: object
|
: object
|
||||||
: function
|
: function
|
||||||
@@ -40,8 +40,8 @@ toplevelObject
|
|||||||
: typedef
|
: typedef
|
||||||
;
|
;
|
||||||
|
|
||||||
namespace
|
package
|
||||||
: "namespace" SimpleName{"."} "{"
|
: "package" SimpleName{"."} "{"
|
||||||
import*
|
import*
|
||||||
toplevelObject*
|
toplevelObject*
|
||||||
"}"
|
"}"
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ enum class MyEnum() {
|
|||||||
|
|
||||||
abstract enum class MyAbstractEnum() {}
|
abstract enum class MyAbstractEnum() {}
|
||||||
|
|
||||||
package MyNamespace {
|
//package MyNamespace {
|
||||||
//properties
|
//properties
|
||||||
val <error>a</error>: Int
|
val <error>a</error>: Int
|
||||||
val a1: Int = 1
|
val a1: Int = 1
|
||||||
@@ -145,7 +145,7 @@ package MyNamespace {
|
|||||||
fun g() {}
|
fun g() {}
|
||||||
<error>abstract</error> fun h()
|
<error>abstract</error> fun h()
|
||||||
<error>abstract</error> fun j() {}
|
<error>abstract</error> fun j() {}
|
||||||
}
|
//}
|
||||||
|
|
||||||
//creating an instance
|
//creating an instance
|
||||||
abstract class B1(
|
abstract class B1(
|
||||||
|
|||||||
@@ -1,20 +1,3 @@
|
|||||||
package boundsWithSubstitutors {
|
|
||||||
open class A<T>
|
|
||||||
class B<X : A<X>>()
|
|
||||||
|
|
||||||
class C : A<C>
|
|
||||||
|
|
||||||
val a = B<C>()
|
|
||||||
val a1 = B<<error>Int</error>>()
|
|
||||||
|
|
||||||
class X<A, B : A>()
|
|
||||||
|
|
||||||
val b = X<Any, X<A<C>, C>>
|
|
||||||
val b0 = X<Any, <error>Any?</error>>
|
|
||||||
val b1 = X<Any, X<A<C>, <error>String</error>>>
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
open class A {}
|
open class A {}
|
||||||
open class B<T : A>()
|
open class B<T : A>()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
open class A<T>
|
||||||
|
class B<X : A<X>>()
|
||||||
|
|
||||||
|
class C : A<C>
|
||||||
|
|
||||||
|
val a = B<C>()
|
||||||
|
val a1 = B<<error>Int</error>>()
|
||||||
|
|
||||||
|
class X<A, B : A>()
|
||||||
|
|
||||||
|
val b = X<Any, X<A<C>, C>>
|
||||||
|
val b0 = X<Any, <error>Any?</error>>
|
||||||
|
val b1 = X<Any, X<A<C>, <error>String</error>>>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import java.util.*
|
package html
|
||||||
|
|
||||||
package html {
|
import java.util.*
|
||||||
|
|
||||||
abstract class Factory<T> {
|
abstract class Factory<T> {
|
||||||
abstract fun create() : T
|
abstract fun create() : T
|
||||||
@@ -83,12 +83,6 @@ package html {
|
|||||||
return html
|
return html
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
package foo {
|
|
||||||
|
|
||||||
import html.*
|
|
||||||
|
|
||||||
fun result(args : Array<String>) =
|
fun result(args : Array<String>) =
|
||||||
html {
|
html {
|
||||||
head {
|
head {
|
||||||
@@ -118,4 +112,3 @@ fun result(args : Array<String>) =
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|||||||
@@ -37,7 +37,8 @@ val <T> T.<error>foo</error> : T
|
|||||||
|
|
||||||
fun Int.foo() = this
|
fun Int.foo() = this
|
||||||
|
|
||||||
package null_safety {
|
// FILE: b.kt
|
||||||
|
//package null_safety
|
||||||
|
|
||||||
fun parse(<warning>cmd</warning>: String): Command? { return null }
|
fun parse(<warning>cmd</warning>: String): Command? { return null }
|
||||||
class Command() {
|
class Command() {
|
||||||
@@ -67,5 +68,3 @@ package null_safety {
|
|||||||
|
|
||||||
if (command == null) 1
|
if (command == null) 1
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
@@ -13,30 +13,30 @@ trait BB1 : BA1<Int> {}
|
|||||||
trait BB2 : <error>BA1<Any>, BB1</error> {}
|
trait BB2 : <error>BA1<Any>, BB1</error> {}
|
||||||
|
|
||||||
|
|
||||||
package x {
|
//package x {
|
||||||
trait AA1<out T> {}
|
trait xAA1<out T> {}
|
||||||
trait AB1 : AA1<Int> {}
|
trait xAB1 : xAA1<Int> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait xAB3 : xAA1<Comparable<Int>> {}
|
||||||
trait AB2 : AA1<Number>, AB1, AB3 {}
|
trait xAB2 : xAA1<Number>, xAB1, xAB3 {}
|
||||||
}
|
//}
|
||||||
|
|
||||||
package x2 {
|
//package x2 {
|
||||||
trait AA1<out T> {}
|
trait x2AA1<out T> {}
|
||||||
trait AB1 : AA1<Any> {}
|
trait x2AB1 : x2AA1<Any> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait x2AB3 : x2AA1<Comparable<Int>> {}
|
||||||
trait AB2 : <error>AA1<Number>, AB1, AB3</error> {}
|
trait x2AB2 : <error>x2AA1<Number>, x2AB1, x2AB3</error> {}
|
||||||
}
|
//}
|
||||||
|
|
||||||
package x3 {
|
//package x3 {
|
||||||
trait AA1<in T> {}
|
trait x3AA1<in T> {}
|
||||||
trait AB1 : AA1<Any> {}
|
trait x3AB1 : x3AA1<Any> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait x3AB3 : x3AA1<Comparable<Int>> {}
|
||||||
trait AB2 : AA1<Number>, AB1, AB3 {}
|
trait x3AB2 : x3AA1<Number>, x3AB1, x3AB3 {}
|
||||||
}
|
//}
|
||||||
|
|
||||||
package sx2 {
|
//package sx2 {
|
||||||
trait AA1<in T> {}
|
trait sx2AA1<in T> {}
|
||||||
trait AB1 : AA1<Int> {}
|
trait sx2AB1 : sx2AA1<Int> {}
|
||||||
trait AB3 : AA1<Comparable<Int>> {}
|
trait sx2AB3 : sx2AA1<Comparable<Int>> {}
|
||||||
trait AB2 : <error>AA1<Number>, AB1, AB3</error> {}
|
trait sx2AB2 : <error>sx2AA1<Number>, sx2AB1, sx2AB3</error> {}
|
||||||
}
|
//}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
object A {
|
||||||
|
val x : Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
open class Foo {
|
||||||
|
fun foo() : Int = 1
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test() {
|
||||||
|
A.x
|
||||||
|
val b = object : Foo {
|
||||||
|
}
|
||||||
|
b.foo()
|
||||||
|
|
||||||
|
object B {
|
||||||
|
fun foo() {}
|
||||||
|
}
|
||||||
|
B.foo()
|
||||||
|
}
|
||||||
|
|
||||||
|
val bb = <error>B</error>.foo()
|
||||||
@@ -1,8 +1,4 @@
|
|||||||
package root
|
package root
|
||||||
|
|
||||||
package a {
|
val x = <error>root</error>
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
val x = <error>a</error>
|
|
||||||
val y2 = <error>package</error>
|
val y2 = <error>package</error>
|
||||||
|
|||||||
@@ -1,29 +1,8 @@
|
|||||||
package foobar
|
package a
|
||||||
|
|
||||||
package a {
|
|
||||||
import java.*
|
import java.*
|
||||||
|
|
||||||
val a : util.List<Int>? = null
|
|
||||||
val a1 : <error>List</error><Int>? = null
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class Foo<T>() {
|
|
||||||
abstract val x : T<Int>
|
|
||||||
}
|
|
||||||
|
|
||||||
package a {
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
val b : List<Int>? = a
|
|
||||||
val b1 : <error>util</error>.List<Int>? = a
|
|
||||||
}
|
|
||||||
|
|
||||||
val x1 = a.a
|
|
||||||
|
|
||||||
val y1 = a.b
|
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
fun done<O>(result : O) : Iteratee<Any?, O> = StrangeIterateeImpl<Any?, O>(result)
|
fun done<O>(result : O) : Iteratee<Any?, O> = StrangeIterateeImpl<Any?, O>(result)
|
||||||
@@ -44,7 +23,7 @@ class StrangeIterateeImpl<in I, out O>(val obj: O) : Iteratee<I, O> {
|
|||||||
|
|
||||||
abstract class Sum() : Iteratee<Int, Int> {
|
abstract class Sum() : Iteratee<Int, Int> {
|
||||||
override fun process(item : Int) : Iteratee<Int, Int> {
|
override fun process(item : Int) : Iteratee<Int, Int> {
|
||||||
return foobar.done<Int>(item);
|
return a.done<Int>(item);
|
||||||
}
|
}
|
||||||
abstract override val isDone : Boolean
|
abstract override val isDone : Boolean
|
||||||
abstract override val result : Int
|
abstract override val result : Int
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package nestedObjects
|
||||||
|
object A {
|
||||||
|
val b = B
|
||||||
|
val d = A.B.A
|
||||||
|
|
||||||
|
object B {
|
||||||
|
val a = A
|
||||||
|
val e = B.A
|
||||||
|
|
||||||
|
object A {
|
||||||
|
val a = A
|
||||||
|
val b = B
|
||||||
|
val x = nestedObjects.A.B.A
|
||||||
|
val y = this<error>@A</error>
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
object B {
|
||||||
|
val b = B
|
||||||
|
val c = A.B
|
||||||
|
}
|
||||||
|
|
||||||
|
val a = A
|
||||||
|
val b = B
|
||||||
|
val c = A.B
|
||||||
|
val d = A.B.A
|
||||||
|
val e = B.<error>A</error>.B
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
package toplevelObjectDeclarations {
|
package toplevelObjectDeclarations
|
||||||
open class Foo(y : Int) {
|
open class Foo(y : Int) {
|
||||||
open fun foo() : Int = 1
|
open fun foo() : Int = 1
|
||||||
}
|
}
|
||||||
@@ -26,58 +26,3 @@ package toplevelObjectDeclarations {
|
|||||||
}
|
}
|
||||||
|
|
||||||
val z = y.foo()
|
val z = y.foo()
|
||||||
}
|
|
||||||
|
|
||||||
package nestedObejcts {
|
|
||||||
object A {
|
|
||||||
val b = B
|
|
||||||
val d = A.B.A
|
|
||||||
|
|
||||||
object B {
|
|
||||||
val a = A
|
|
||||||
val e = B.A
|
|
||||||
|
|
||||||
object A {
|
|
||||||
val a = A
|
|
||||||
val b = B
|
|
||||||
val x = nestedObejcts.A.B.A
|
|
||||||
val y = this<error>@A</error>
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
object B {
|
|
||||||
val b = B
|
|
||||||
val c = A.B
|
|
||||||
}
|
|
||||||
|
|
||||||
val a = A
|
|
||||||
val b = B
|
|
||||||
val c = A.B
|
|
||||||
val d = A.B.A
|
|
||||||
val e = B.<error>A</error>.B
|
|
||||||
}
|
|
||||||
|
|
||||||
package localObjects {
|
|
||||||
object A {
|
|
||||||
val x : Int = 0
|
|
||||||
}
|
|
||||||
|
|
||||||
open class Foo {
|
|
||||||
fun foo() : Int = 1
|
|
||||||
}
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
A.x
|
|
||||||
val b = object : Foo {
|
|
||||||
}
|
|
||||||
b.foo()
|
|
||||||
|
|
||||||
object B {
|
|
||||||
fun foo() {}
|
|
||||||
}
|
|
||||||
B.foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
val bb = <error>B</error>.foo()
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package override
|
package override
|
||||||
|
|
||||||
package normal {
|
|
||||||
trait MyTrait {
|
trait MyTrait {
|
||||||
fun foo()
|
fun foo()
|
||||||
}
|
}
|
||||||
@@ -35,42 +34,3 @@ package normal {
|
|||||||
fun <error>foo</error>() {}
|
fun <error>foo</error>() {}
|
||||||
override fun bar() {}
|
override fun bar() {}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
package generics {
|
|
||||||
trait MyTrait<T> {
|
|
||||||
fun foo(t: T) : T
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class MyAbstractClass<T> {
|
|
||||||
abstract fun bar(t: T) : T
|
|
||||||
}
|
|
||||||
|
|
||||||
open class MyGenericClass<T> : MyTrait<T>, MyAbstractClass<T> {
|
|
||||||
override fun foo(t: T) = t
|
|
||||||
override fun bar(t: T) = t
|
|
||||||
}
|
|
||||||
|
|
||||||
class MyChildClass : MyGenericClass<Int> {}
|
|
||||||
class MyChildClass1<T> : MyGenericClass<T> {}
|
|
||||||
class MyChildClass2<T> : MyGenericClass<T> {
|
|
||||||
fun <error>foo</error>(t: T) = t
|
|
||||||
override fun bar(t: T) = t
|
|
||||||
}
|
|
||||||
|
|
||||||
open class MyClass : MyTrait<Int>, MyAbstractClass<String> {
|
|
||||||
override fun foo(i: Int) = i
|
|
||||||
override fun bar(s: String) = s
|
|
||||||
}
|
|
||||||
|
|
||||||
class <error>MyIllegalGenericClass1</error><T> : MyTrait<T>, MyAbstractClass<T> {}
|
|
||||||
class <error>MyIllegalGenericClass2</error><T, R> : MyTrait<T>, MyAbstractClass<R> {
|
|
||||||
<error>override</error> fun foo(r: R) = r
|
|
||||||
}
|
|
||||||
class <error>MyIllegalClass1</error> : MyTrait<Int>, MyAbstractClass<String> {}
|
|
||||||
|
|
||||||
class <error>MyIllegalClass2</error><T> : MyTrait<Int>, MyAbstractClass<Int> {
|
|
||||||
fun foo(t: T) = t
|
|
||||||
fun bar(t: T) = t
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
trait MyTrait<T> {
|
||||||
|
fun foo(t: T) : T
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class MyAbstractClass<T> {
|
||||||
|
abstract fun bar(t: T) : T
|
||||||
|
}
|
||||||
|
|
||||||
|
open class MyGenericClass<T> : MyTrait<T>, MyAbstractClass<T> {
|
||||||
|
override fun foo(t: T) = t
|
||||||
|
override fun bar(t: T) = t
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyChildClass : MyGenericClass<Int> {}
|
||||||
|
class MyChildClass1<T> : MyGenericClass<T> {}
|
||||||
|
class MyChildClass2<T> : MyGenericClass<T> {
|
||||||
|
fun <error>foo</error>(t: T) = t
|
||||||
|
override fun bar(t: T) = t
|
||||||
|
}
|
||||||
|
|
||||||
|
open class MyClass : MyTrait<Int>, MyAbstractClass<String> {
|
||||||
|
override fun foo(i: Int) = i
|
||||||
|
override fun bar(s: String) = s
|
||||||
|
}
|
||||||
|
|
||||||
|
class <error>MyIllegalGenericClass1</error><T> : MyTrait<T>, MyAbstractClass<T> {}
|
||||||
|
class <error>MyIllegalGenericClass2</error><T, R> : MyTrait<T>, MyAbstractClass<R> {
|
||||||
|
<error>override</error> fun foo(r: R) = r
|
||||||
|
}
|
||||||
|
class <error>MyIllegalClass1</error> : MyTrait<Int>, MyAbstractClass<String> {}
|
||||||
|
|
||||||
|
class <error>MyIllegalClass2</error><T> : MyTrait<Int>, MyAbstractClass<Int> {
|
||||||
|
fun foo(t: T) = t
|
||||||
|
fun bar(t: T) = t
|
||||||
|
}
|
||||||
@@ -21,21 +21,3 @@ fun foo1() : Unit {
|
|||||||
this<error>@a</error>
|
this<error>@a</error>
|
||||||
}
|
}
|
||||||
|
|
||||||
package closures {
|
|
||||||
class A(val a:Int) {
|
|
||||||
|
|
||||||
class B() {
|
|
||||||
val x = this@B : B
|
|
||||||
val y = this@A : A
|
|
||||||
val z = this : B
|
|
||||||
val Int.xx = this : Int
|
|
||||||
fun Char.xx() : Any {
|
|
||||||
this : Char
|
|
||||||
val <warning>a</warning> = {Double.() -> this : Double + this@xx : Char}
|
|
||||||
val <warning>b</warning> = @a{Double.() -> this@a : Double + this@xx : Char}
|
|
||||||
val <warning>c</warning> = @a{() -> <error>this@a</error> + this@xx : Char}
|
|
||||||
return (@a{Double.() -> this@a : Double + this@xx : Char})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
class A(val a:Int) {
|
||||||
|
|
||||||
|
class B() {
|
||||||
|
val x = this@B : B
|
||||||
|
val y = this@A : A
|
||||||
|
val z = this : B
|
||||||
|
val Int.xx = this : Int
|
||||||
|
fun Char.xx() : Any {
|
||||||
|
this : Char
|
||||||
|
val <warning>a</warning> = {Double.() -> this : Double + this@xx : Char}
|
||||||
|
val <warning>b</warning> = @a{Double.() -> this@a : Double + this@xx : Char}
|
||||||
|
val <warning>c</warning> = @a{() -> <error>this@a</error> + this@xx : Char}
|
||||||
|
return (@a{Double.() -> this@a : Double + this@xx : Char})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,42 +1,42 @@
|
|||||||
package a {
|
//package a {
|
||||||
val foo = bar()
|
val afoo = abar()
|
||||||
|
|
||||||
fun bar() = <error descr="[TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM] Type checking has run into a recursive problem">foo</error>
|
fun abar() = <error descr="[TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM] Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly">afoo</error>
|
||||||
}
|
//}
|
||||||
|
|
||||||
package b {
|
//package b {
|
||||||
fun foo() = bar()
|
fun bfoo() = bbar()
|
||||||
|
|
||||||
fun bar() = <error descr="[TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM] Type checking has run into a recursive problem">foo()</error>
|
fun bbar() = <error descr="[TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM] Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly">bfoo()</error>
|
||||||
}
|
//}
|
||||||
|
|
||||||
package c {
|
//package c {
|
||||||
fun bazz() = bar()
|
fun cbazz() = cbar()
|
||||||
|
|
||||||
fun foo() = <error descr="[TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM] Type checking has run into a recursive problem">bazz()</error>
|
fun cfoo() = <error descr="[TYPECHECKER_HAS_RUN_INTO_RECURSIVE_PROBLEM] Type checking has run into a recursive problem. Easiest workaround: specify types of your declarations explicitly">cbazz()</error>
|
||||||
|
|
||||||
fun bar() = foo()
|
fun cbar() = cfoo()
|
||||||
}
|
//}
|
||||||
|
|
||||||
package ok {
|
//package ok {
|
||||||
|
//
|
||||||
|
// package a {
|
||||||
|
val okafoo = okabar()
|
||||||
|
|
||||||
package a {
|
fun okabar() : Int = okafoo
|
||||||
val foo = bar()
|
// }
|
||||||
|
//
|
||||||
|
// package b {
|
||||||
|
fun okbfoo() : Int = okbbar()
|
||||||
|
|
||||||
fun bar() : Int = foo
|
fun okbbar() = okbfoo()
|
||||||
}
|
// }
|
||||||
|
//
|
||||||
|
// package c {
|
||||||
|
fun okcbazz() = okcbar()
|
||||||
|
|
||||||
package b {
|
fun okcfoo() : Int = okcbazz()
|
||||||
fun foo() : Int = bar()
|
|
||||||
|
|
||||||
fun bar() = foo()
|
fun okcbar() = okcfoo()
|
||||||
}
|
// }
|
||||||
|
//}
|
||||||
package c {
|
|
||||||
fun bazz() = bar()
|
|
||||||
|
|
||||||
fun foo() : Int = bazz()
|
|
||||||
|
|
||||||
fun bar() = foo()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
package redeclarations {
|
//package redeclarations {
|
||||||
object <error>A</error> {
|
object <error>A</error> {
|
||||||
val x : Int = 0
|
val x : Int = 0
|
||||||
|
|
||||||
val A = 1
|
val A = 1
|
||||||
}
|
}
|
||||||
|
|
||||||
package <error>A</error> {
|
|
||||||
class A {}
|
|
||||||
}
|
|
||||||
|
|
||||||
class <error>A</error> {}
|
class <error>A</error> {}
|
||||||
|
|
||||||
val <error>A</error> = 1
|
val <error>A</error> = 1
|
||||||
|
|
||||||
}
|
//}
|
||||||
|
|||||||
@@ -43,10 +43,6 @@ fun test(<warning>l</warning> : java.util.List<Int>) {
|
|||||||
c : java.lang.Comparable<Int>?
|
c : java.lang.Comparable<Int>?
|
||||||
|
|
||||||
// Collections.sort<Integer>(ArrayList<Integer>())
|
// Collections.sort<Integer>(ArrayList<Integer>())
|
||||||
xxx.<error>Class</error>()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
package xxx {
|
|
||||||
import java.lang.Class;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package jet121 {
|
package jet121
|
||||||
fun box() : String {
|
fun box() : String {
|
||||||
val answer = apply("OK") { String.() : Int ->
|
val answer = apply("OK") { String.() : Int ->
|
||||||
get(0)
|
get(0)
|
||||||
@@ -11,4 +11,3 @@ package jet121 {
|
|||||||
fun apply(arg:String, f : String.() -> Int) : Int {
|
fun apply(arg:String, f : String.() -> Int) : Int {
|
||||||
return arg.f()
|
return arg.f()
|
||||||
}
|
}
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
// "Import Class" "true"
|
|
||||||
package a
|
|
||||||
|
|
||||||
import a.b.M
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
val v = M
|
|
||||||
}
|
|
||||||
|
|
||||||
package b {
|
|
||||||
class M() { }
|
|
||||||
}
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
// "Import Class" "true"
|
|
||||||
package a
|
|
||||||
|
|
||||||
fun test() {
|
|
||||||
val v = <caret>M
|
|
||||||
}
|
|
||||||
|
|
||||||
package b {
|
|
||||||
class M() { }
|
|
||||||
}
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
// "Remove initializer from property" "true"
|
|
||||||
package a
|
|
||||||
|
|
||||||
import java.util.Collections
|
|
||||||
|
|
||||||
package b {
|
|
||||||
|
|
||||||
import java.util.List
|
|
||||||
|
|
||||||
class M {
|
|
||||||
trait A {
|
|
||||||
abstract val l : <caret>List<Int>?
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
// "Remove initializer from property" "true"
|
|
||||||
package a
|
|
||||||
|
|
||||||
import java.util.Collections
|
|
||||||
|
|
||||||
package b {
|
|
||||||
|
|
||||||
class M {
|
|
||||||
trait A {
|
|
||||||
abstract val l = <caret>Collections.emptyList<Int>()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author alex.tkachman
|
* @author alex.tkachman
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author alex.tkachman
|
* @author alex.tkachman
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author alex.tkachman
|
* @author alex.tkachman
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author alex.tkachman
|
* @author alex.tkachman
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author alex.tkachman
|
* @author alex.tkachman
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
|
|
||||||
public abstract class ExtensionFunction0<E, R> extends DefaultJetObject {
|
public abstract class ExtensionFunction0<E, R> extends DefaultJetObject {
|
||||||
protected ExtensionFunction0(TypeInfo<?> typeInfo) {
|
protected ExtensionFunction0(TypeInfo<?> typeInfo) {
|
||||||
super(typeInfo);
|
super(typeInfo);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
public abstract class ExtensionFunction1<E, D1, R> extends DefaultJetObject {
|
public abstract class ExtensionFunction1<E, D1, R> extends DefaultJetObject {
|
||||||
protected ExtensionFunction1(TypeInfo<?> typeInfo) {
|
protected ExtensionFunction1(TypeInfo<?> typeInfo) {
|
||||||
super(typeInfo);
|
super(typeInfo);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
public abstract class ExtensionFunction10<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, R> extends DefaultJetObject {
|
public abstract class ExtensionFunction10<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, R> extends DefaultJetObject {
|
||||||
protected ExtensionFunction10(TypeInfo<?> typeInfo) {
|
protected ExtensionFunction10(TypeInfo<?> typeInfo) {
|
||||||
super(typeInfo);
|
super(typeInfo);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
public abstract class ExtensionFunction11<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, R> extends DefaultJetObject {
|
public abstract class ExtensionFunction11<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, R> extends DefaultJetObject {
|
||||||
protected ExtensionFunction11(TypeInfo<?> typeInfo) {
|
protected ExtensionFunction11(TypeInfo<?> typeInfo) {
|
||||||
super(typeInfo);
|
super(typeInfo);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
public abstract class ExtensionFunction12<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, R> extends DefaultJetObject {
|
public abstract class ExtensionFunction12<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, R> extends DefaultJetObject {
|
||||||
protected ExtensionFunction12(TypeInfo<?> typeInfo) {
|
protected ExtensionFunction12(TypeInfo<?> typeInfo) {
|
||||||
super(typeInfo);
|
super(typeInfo);
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
*/
|
*/
|
||||||
package jet;
|
package jet;
|
||||||
|
|
||||||
import jet.typeinfo.TypeInfo;
|
|
||||||
public abstract class ExtensionFunction13<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, R> extends DefaultJetObject {
|
public abstract class ExtensionFunction13<E, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, R> extends DefaultJetObject {
|
||||||
protected ExtensionFunction13(TypeInfo<?> typeInfo) {
|
protected ExtensionFunction13(TypeInfo<?> typeInfo) {
|
||||||
super(typeInfo);
|
super(typeInfo);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user