Merge remote branch 'origin/master'
This commit is contained in:
@@ -8,6 +8,7 @@ import com.intellij.openapi.project.Project;
|
|||||||
import com.intellij.openapi.util.Pair;
|
import com.intellij.openapi.util.Pair;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.util.containers.Stack;
|
import com.intellij.util.containers.Stack;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
|
import org.jetbrains.jet.codegen.intrinsics.IntrinsicMethods;
|
||||||
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
|
||||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||||
@@ -23,6 +24,7 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class GenerationState {
|
public class GenerationState {
|
||||||
|
@NotNull
|
||||||
private final ClassFileFactory factory;
|
private final ClassFileFactory factory;
|
||||||
private final Project project;
|
private final Project project;
|
||||||
|
|
||||||
@@ -38,6 +40,7 @@ public class GenerationState {
|
|||||||
this.intrinsics = new IntrinsicMethods(project, standardLibrary);
|
this.intrinsics = new IntrinsicMethods(project, standardLibrary);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public ClassFileFactory getFactory() {
|
public ClassFileFactory getFactory() {
|
||||||
return factory;
|
return factory;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.google.common.base.Predicates;
|
|||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import com.intellij.psi.PsiManager;
|
import com.intellij.psi.PsiManager;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.JetCoreEnvironment;
|
import org.jetbrains.jet.JetCoreEnvironment;
|
||||||
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
import org.jetbrains.jet.codegen.ClassBuilderFactory;
|
||||||
import org.jetbrains.jet.codegen.ClassFileFactory;
|
import org.jetbrains.jet.codegen.ClassFileFactory;
|
||||||
@@ -107,6 +108,7 @@ public class CompileSession {
|
|||||||
return !errorCollector.hasErrors;
|
return !errorCollector.hasErrors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
public ClassFileFactory generate() {
|
public ClassFileFactory generate() {
|
||||||
GenerationState generationState = new GenerationState(myEnvironment.getProject(), ClassBuilderFactory.BINARIES);
|
GenerationState generationState = new GenerationState(myEnvironment.getProject(), ClassBuilderFactory.BINARIES);
|
||||||
generationState.compileCorrectFiles(myBindingContext, mySourceFiles);
|
generationState.compileCorrectFiles(myBindingContext, mySourceFiles);
|
||||||
|
|||||||
+1
-1
@@ -51,7 +51,7 @@ public abstract class DeclarationDescriptorImpl extends AnnotatedImpl implements
|
|||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
// DescriptionRenderer may throw if this is not yet completely initialized
|
// DescriptionRenderer may throw if this is not yet completely initialized
|
||||||
// It is very inconvenient while debugging
|
// It is very inconvenient while debugging
|
||||||
return super.toString();
|
return this.getClass().getName() + "@" + System.identityHashCode(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-1
@@ -165,7 +165,11 @@ public class TypeParameterDescriptor extends DeclarationDescriptorImpl implement
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return DescriptorRenderer.TEXT.render(this);
|
try {
|
||||||
|
return DescriptorRenderer.TEXT.render(this);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return this.getClass().getName() + "@" + System.identityHashCode(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -1,186 +1,3 @@
|
|||||||
// FILE: a.kt
|
|
||||||
// +JDK
|
|
||||||
|
|
||||||
package abstract
|
|
||||||
|
|
||||||
class MyClass() {
|
|
||||||
//properties
|
|
||||||
val <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>a<!>: Int
|
|
||||||
val a1: Int = 1
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a2: Int
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a3: Int = 1
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>b<!>: Int private set
|
|
||||||
var b1: Int = 0; private set
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b2: Int private set
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b3: Int = 0; private set
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED!>c<!>: Int set(v: Int) { $c = v }
|
|
||||||
var c1: Int = 0; set(v: Int) { $c1 = v }
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c2: Int set(v: Int) { $c2 = v }
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c3: Int = 0; set(v: Int) { $c3 = v }
|
|
||||||
|
|
||||||
val e: Int get() = a
|
|
||||||
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e2: Int get() = a
|
|
||||||
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e3: Int = 0; get() = a
|
|
||||||
|
|
||||||
//methods
|
|
||||||
fun <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>f<!>()
|
|
||||||
fun g() {}
|
|
||||||
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS!>abstract<!> fun h()
|
|
||||||
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
|
||||||
|
|
||||||
//property accessors
|
|
||||||
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>k<!>: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var k1: Int = 0; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var l: Int <!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) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract class MyAbstractClass() {
|
|
||||||
//properties
|
|
||||||
val <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>a<!>: Int
|
|
||||||
val a1: Int = 1
|
|
||||||
abstract val a2: Int
|
|
||||||
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>b<!>: Int private set
|
|
||||||
var b1: Int = 0; private set
|
|
||||||
abstract var b2: Int private set
|
|
||||||
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED!>c<!>: Int set(v: Int) { $c = v }
|
|
||||||
var c1: Int = 0; set(v: Int) { $c1 = v }
|
|
||||||
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c2 = v }<!>
|
|
||||||
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c3 = v }<!>
|
|
||||||
|
|
||||||
val e: Int get() = a
|
|
||||||
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
|
|
||||||
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
|
||||||
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
|
||||||
|
|
||||||
//methods
|
|
||||||
fun <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>f<!>()
|
|
||||||
fun g() {}
|
|
||||||
abstract fun h()
|
|
||||||
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
|
||||||
|
|
||||||
//property accessors
|
|
||||||
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var j1: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>k<!>: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var k1: Int = 0; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var l: Int <!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) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
trait MyTrait {
|
|
||||||
//properties
|
|
||||||
val a: Int
|
|
||||||
val a1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>1<!>
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val a2: Int
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
|
||||||
|
|
||||||
var b: Int private set
|
|
||||||
var b1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; private set
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var b2: Int private set
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
|
|
||||||
|
|
||||||
var <!BACKING_FIELD_IN_TRAIT!>c<!>: Int set(v: Int) { $c = v }
|
|
||||||
var <!BACKING_FIELD_IN_TRAIT!>c1<!>: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; set(v: Int) { $c1 = v }
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c2 = v }<!>
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c3 = v }<!>
|
|
||||||
|
|
||||||
val e: Int get() = a
|
|
||||||
val e1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; get() = a
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
|
||||||
|
|
||||||
//methods
|
|
||||||
fun f()
|
|
||||||
fun g() {}
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> fun h()
|
|
||||||
<!REDUNDANT_MODIFIER_IN_TRAIT, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
|
||||||
|
|
||||||
//property accessors
|
|
||||||
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var i1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var j1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var k: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var k1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var l: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var l1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var n: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set(v: Int) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum class MyEnum() {
|
|
||||||
//properties
|
|
||||||
val <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>a<!>: Int
|
|
||||||
val a1: Int = 1
|
|
||||||
abstract val a2: Int
|
|
||||||
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>b<!>: Int private set
|
|
||||||
var b1: Int = 0; private set
|
|
||||||
abstract var b2: Int private set
|
|
||||||
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED!>c<!>: Int set(v: Int) { $c = v }
|
|
||||||
var c1: Int = 0; set(v: Int) { $c1 = v }
|
|
||||||
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c2 = v }<!>
|
|
||||||
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c3 = v }<!>
|
|
||||||
|
|
||||||
val e: Int get() = a
|
|
||||||
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
|
|
||||||
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
|
||||||
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
|
||||||
|
|
||||||
//methods
|
|
||||||
fun <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>f<!>()
|
|
||||||
fun g() {}
|
|
||||||
abstract fun h()
|
|
||||||
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
|
||||||
|
|
||||||
//property accessors
|
|
||||||
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>k<!>: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
var k1: Int = 0; <!ILLEGAL_MODIFIER!>abstract<!> set
|
|
||||||
|
|
||||||
var l: Int <!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) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract enum class MyAbstractEnum() {}
|
|
||||||
|
|
||||||
// FILE: b.kt
|
// FILE: b.kt
|
||||||
package MyNamespace
|
package MyNamespace
|
||||||
//properties
|
//properties
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
// FILE: a.kt
|
||||||
|
// +JDK
|
||||||
|
|
||||||
|
package abstract
|
||||||
|
|
||||||
|
abstract enum class MyAbstractEnum() {}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// FILE: a.kt
|
||||||
|
// +JDK
|
||||||
|
|
||||||
|
package abstract
|
||||||
|
|
||||||
|
abstract class MyAbstractClass() {
|
||||||
|
//properties
|
||||||
|
val <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>a<!>: Int
|
||||||
|
val a1: Int = 1
|
||||||
|
abstract val a2: Int
|
||||||
|
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>b<!>: Int private set
|
||||||
|
var b1: Int = 0; private set
|
||||||
|
abstract var b2: Int private set
|
||||||
|
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED!>c<!>: Int set(v: Int) { $c = v }
|
||||||
|
var c1: Int = 0; set(v: Int) { $c1 = v }
|
||||||
|
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c2 = v }<!>
|
||||||
|
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c3 = v }<!>
|
||||||
|
|
||||||
|
val e: Int get() = a
|
||||||
|
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
|
||||||
|
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
||||||
|
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
||||||
|
|
||||||
|
//methods
|
||||||
|
fun <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>f<!>()
|
||||||
|
fun g() {}
|
||||||
|
abstract fun h()
|
||||||
|
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||||
|
|
||||||
|
//property accessors
|
||||||
|
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var j1: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>k<!>: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var k1: Int = 0; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var l: Int <!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) {}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// FILE: a.kt
|
||||||
|
// +JDK
|
||||||
|
|
||||||
|
package abstract
|
||||||
|
|
||||||
|
class MyClass() {
|
||||||
|
//properties
|
||||||
|
val <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>a<!>: Int
|
||||||
|
val a1: Int = 1
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a2: Int
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val a3: Int = 1
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>b<!>: Int private set
|
||||||
|
var b1: Int = 0; private set
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b2: Int private set
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var b3: Int = 0; private set
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED!>c<!>: Int set(v: Int) { $c = v }
|
||||||
|
var c1: Int = 0; set(v: Int) { $c1 = v }
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c2: Int set(v: Int) { $c2 = v }
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> var c3: Int = 0; set(v: Int) { $c3 = v }
|
||||||
|
|
||||||
|
val e: Int get() = a
|
||||||
|
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e2: Int get() = a
|
||||||
|
<!ABSTRACT_PROPERTY_IN_NON_ABSTRACT_CLASS!>abstract<!> val e3: Int = 0; get() = a
|
||||||
|
|
||||||
|
//methods
|
||||||
|
fun <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>f<!>()
|
||||||
|
fun g() {}
|
||||||
|
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS!>abstract<!> fun h()
|
||||||
|
<!ABSTRACT_FUNCTION_IN_NON_ABSTRACT_CLASS, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||||
|
|
||||||
|
//property accessors
|
||||||
|
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>k<!>: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var k1: Int = 0; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var l: Int <!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) {}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,50 @@
|
|||||||
|
// FILE: a.kt
|
||||||
|
// +JDK
|
||||||
|
|
||||||
|
package abstract
|
||||||
|
|
||||||
|
|
||||||
|
enum class MyEnum() {
|
||||||
|
//properties
|
||||||
|
val <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>a<!>: Int
|
||||||
|
val a1: Int = 1
|
||||||
|
abstract val a2: Int
|
||||||
|
abstract val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>b<!>: Int private set
|
||||||
|
var b1: Int = 0; private set
|
||||||
|
abstract var b2: Int private set
|
||||||
|
abstract var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED!>c<!>: Int set(v: Int) { $c = v }
|
||||||
|
var c1: Int = 0; set(v: Int) { $c1 = v }
|
||||||
|
abstract var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c2 = v }<!>
|
||||||
|
abstract var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c3 = v }<!>
|
||||||
|
|
||||||
|
val e: Int get() = a
|
||||||
|
val e1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = a
|
||||||
|
abstract val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
||||||
|
abstract val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
||||||
|
|
||||||
|
//methods
|
||||||
|
fun <!NON_ABSTRACT_FUNCTION_WITH_NO_BODY!>f<!>()
|
||||||
|
fun g() {}
|
||||||
|
abstract fun h()
|
||||||
|
<!ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||||
|
|
||||||
|
//property accessors
|
||||||
|
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var i1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var j1: Int = <!PROPERTY_INITIALIZER_NO_BACKING_FIELD!>0<!>; get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var <!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>k<!>: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var k1: Int = 0; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var l: Int <!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) {}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
// FILE: a.kt
|
||||||
|
// +JDK
|
||||||
|
|
||||||
|
package abstract
|
||||||
|
|
||||||
|
trait MyTrait {
|
||||||
|
//properties
|
||||||
|
val a: Int
|
||||||
|
val a1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>1<!>
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val a2: Int
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val a3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>1<!>
|
||||||
|
|
||||||
|
var b: Int private set
|
||||||
|
var b1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; private set
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var b2: Int private set
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var b3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; private set
|
||||||
|
|
||||||
|
var <!BACKING_FIELD_IN_TRAIT!>c<!>: Int set(v: Int) { $c = v }
|
||||||
|
var <!BACKING_FIELD_IN_TRAIT!>c1<!>: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; set(v: Int) { $c1 = v }
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var c2: Int <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c2 = v }<!>
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> var c3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_SETTER!>set(v: Int) { $c3 = v }<!>
|
||||||
|
|
||||||
|
val e: Int get() = a
|
||||||
|
val e1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; get() = a
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val e2: Int <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> val e3: Int = <!ABSTRACT_PROPERTY_WITH_INITIALIZER!>0<!>; <!ABSTRACT_PROPERTY_WITH_GETTER!>get() = a<!>
|
||||||
|
|
||||||
|
//methods
|
||||||
|
fun f()
|
||||||
|
fun g() {}
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT!>abstract<!> fun h()
|
||||||
|
<!REDUNDANT_MODIFIER_IN_TRAIT, ABSTRACT_FUNCTION_WITH_BODY!>abstract<!> fun j() {}
|
||||||
|
|
||||||
|
//property accessors
|
||||||
|
var i: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var i1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var j: Int get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var j1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; get() = i; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var k: Int <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var k1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var l: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
var l1: Int = <!PROPERTY_INITIALIZER_IN_TRAIT!>0<!>; <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set
|
||||||
|
|
||||||
|
var n: Int <!ILLEGAL_MODIFIER!>abstract<!> get <!ILLEGAL_MODIFIER!>abstract<!> set(v: Int) {}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -15,9 +15,6 @@ fun foo(o : `java::java.lang.Object`Object, l : `java::java.util`util.`java::jav
|
|||||||
}
|
}
|
||||||
|
|
||||||
class B : `java::java.lang.Object`Object {
|
class B : `java::java.lang.Object`Object {
|
||||||
fun bar(~o~o : `java::java.lang.Object`Object) {
|
|
||||||
`java::java.lang.System`System.`java::java.lang.System.out`out.`java::java.io.PrintStream.print(Object)`print(`o`o)`:std::Unit`
|
|
||||||
}
|
|
||||||
|
|
||||||
fun f(a : `java::java.util`util.`java::java.util.List`List) {}
|
fun f(a : `java::java.util`util.`java::java.util.List`List) {}
|
||||||
fun f(a : `java::java.util.List`List) {}
|
fun f(a : `java::java.util.List`List) {}
|
||||||
@@ -35,19 +32,3 @@ class B : `java::java.lang.Object`Object {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
~c~fun c(~x~x : java.lang.`java::java.lang.Number`Number) {
|
|
||||||
`x`x.`java::java.lang.Number.intValue()`intValue()
|
|
||||||
}
|
|
||||||
|
|
||||||
fun <T> t(t : T) : T {
|
|
||||||
`c`c(java.lang.Integer(1))
|
|
||||||
System.out.`java::java.io.PrintStream.print(Object)`print(t)
|
|
||||||
System.out.`java::java.io.PrintStream.print(char[])`print(null : CharArray?)
|
|
||||||
System.out.`java::java.io.PrintStream.print(Object)`print(null : Object?)
|
|
||||||
System.out.`java::java.io.PrintStream.print(Int)`print(1)
|
|
||||||
System.out.`java::java.io.PrintStream.print(Double)`print(1.0)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun typeTransform() {
|
|
||||||
Integer.getInteger("", 239)`:std::Int`
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
import `java::java`java.*
|
||||||
|
import `java::java.util`util.*
|
||||||
|
|
||||||
|
~c~fun c(~x~x : java.lang.`java::java.lang.Number`Number) {
|
||||||
|
`x`x.`java::java.lang.Number.intValue()`intValue()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun <T> t(t : T) : T {
|
||||||
|
`c`c(java.lang.Integer(1))
|
||||||
|
System.out.`java::java.io.PrintStream.print(Object)`print(t)
|
||||||
|
System.out.`java::java.io.PrintStream.print(char[])`print(null : CharArray?)
|
||||||
|
System.out.`java::java.io.PrintStream.print(Object)`print(null : Object?)
|
||||||
|
System.out.`java::java.io.PrintStream.print(Int)`print(1)
|
||||||
|
System.out.`java::java.io.PrintStream.print(Double)`print(1.0)
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
import `java::java`java.*
|
||||||
|
import `java::java.util`util.*
|
||||||
|
|
||||||
|
class B : `java::java.lang.Object`Object {
|
||||||
|
fun bar(~o~o : `java::java.lang.Object`Object) {
|
||||||
|
`java::java.lang.System`System.`java::java.lang.System.out`out.`java::java.io.PrintStream.print(Object)`print(`o`o)`:std::Unit`
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
import `java::java`java.*
|
||||||
|
import `java::java.util`util.*
|
||||||
|
|
||||||
|
fun typeTransform() {
|
||||||
|
Integer.getInteger("", 239)`:std::Int`
|
||||||
|
}
|
||||||
@@ -53,7 +53,8 @@ public class JetDiagnosticsTest extends JetLiteFixture {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getActualText(BindingContext bindingContext, StringBuilder actualText) {
|
public boolean getActualText(BindingContext bindingContext, StringBuilder actualText) {
|
||||||
|
final boolean ok[] = { true };
|
||||||
CheckerTestUtil.diagnosticsDiff(diagnosedRanges, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile), new CheckerTestUtil.DiagnosticDiffCallbacks() {
|
CheckerTestUtil.diagnosticsDiff(diagnosedRanges, CheckerTestUtil.getDiagnosticsIncludingSyntaxErrors(bindingContext, jetFile), new CheckerTestUtil.DiagnosticDiffCallbacks() {
|
||||||
@NotNull
|
@NotNull
|
||||||
@Override
|
@Override
|
||||||
@@ -65,16 +66,19 @@ public class JetDiagnosticsTest extends JetLiteFixture {
|
|||||||
public void missingDiagnostic(String type, int expectedStart, int expectedEnd) {
|
public void missingDiagnostic(String type, int expectedStart, int expectedEnd) {
|
||||||
String message = "Missing " + type + DiagnosticUtils.atLocation(jetFile, new TextRange(expectedStart, expectedEnd));
|
String message = "Missing " + type + DiagnosticUtils.atLocation(jetFile, new TextRange(expectedStart, expectedEnd));
|
||||||
System.err.println(message);
|
System.err.println(message);
|
||||||
|
ok[0] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void unexpectedDiagnostic(String type, int actualStart, int actualEnd) {
|
public void unexpectedDiagnostic(String type, int actualStart, int actualEnd) {
|
||||||
String message = "Unexpected " + type + DiagnosticUtils.atLocation(jetFile, new TextRange(actualStart, actualEnd));
|
String message = "Unexpected " + type + DiagnosticUtils.atLocation(jetFile, new TextRange(actualStart, actualEnd));
|
||||||
System.err.println(message);
|
System.err.println(message);
|
||||||
|
ok[0] = false;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
actualText.append(CheckerTestUtil.addDiagnosticMarkersToText(jetFile, bindingContext, AnalyzingUtils.getSyntaxErrorRanges(jetFile)));
|
actualText.append(CheckerTestUtil.addDiagnosticMarkersToText(jetFile, bindingContext, AnalyzingUtils.getSyntaxErrorRanges(jetFile)));
|
||||||
|
return ok[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -108,12 +112,16 @@ public class JetDiagnosticsTest extends JetLiteFixture {
|
|||||||
bindingContext = AnalyzingUtils.analyzeFiles(getProject(), Configuration.EMPTY, jetFiles, Predicates.<PsiFile>alwaysTrue(), JetControlFlowDataTraceFactory.EMPTY);
|
bindingContext = AnalyzingUtils.analyzeFiles(getProject(), Configuration.EMPTY, jetFiles, Predicates.<PsiFile>alwaysTrue(), JetControlFlowDataTraceFactory.EMPTY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean ok = true;
|
||||||
|
|
||||||
StringBuilder actualText = new StringBuilder();
|
StringBuilder actualText = new StringBuilder();
|
||||||
for (TestFile testFileFile : testFileFiles) {
|
for (TestFile testFileFile : testFileFiles) {
|
||||||
testFileFile.getActualText(bindingContext, actualText);
|
ok &= testFileFile.getActualText(bindingContext, actualText);
|
||||||
}
|
}
|
||||||
|
|
||||||
assertEquals(expectedText, actualText.toString());
|
assertEquals(expectedText, actualText.toString());
|
||||||
|
|
||||||
|
assertTrue("something is wrong is this test", ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
// private void convert(File src, File dest) throws IOException {
|
// private void convert(File src, File dest) throws IOException {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.jetbrains.jet.codegen;
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
import com.intellij.openapi.util.text.StringUtil;
|
import com.intellij.openapi.util.text.StringUtil;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.JetLiteFixture;
|
import org.jetbrains.jet.JetLiteFixture;
|
||||||
import org.jetbrains.jet.lang.psi.JetFile;
|
import org.jetbrains.jet.lang.psi.JetFile;
|
||||||
@@ -109,13 +110,13 @@ public abstract class CodegenTestCase extends JetLiteFixture {
|
|||||||
return loadRootNamespaceClass(state);
|
return loadRootNamespaceClass(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Class loadRootNamespaceClass(ClassFileFactory state) {
|
protected Class loadRootNamespaceClass(@NotNull ClassFileFactory state) {
|
||||||
String fqName = NamespaceCodegen.getJVMClassName(JetPsiUtil.getFQName(myFile)).replace("/", ".");
|
String fqName = NamespaceCodegen.getJVMClassName(JetPsiUtil.getFQName(myFile)).replace("/", ".");
|
||||||
Map<String, Class> classMap = loadAllClasses(state);
|
Map<String, Class> classMap = loadAllClasses(state);
|
||||||
return classMap.get(fqName);
|
return classMap.get(fqName);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Class loadClass(String fqName, ClassFileFactory state) {
|
protected Class loadClass(String fqName, @NotNull ClassFileFactory state) {
|
||||||
List<String> files = state.files();
|
List<String> files = state.files();
|
||||||
for (String file : files) {
|
for (String file : files) {
|
||||||
if (file.equals(fqName.replace('.', '/') + ".class")) {
|
if (file.equals(fqName.replace('.', '/') + ".class")) {
|
||||||
@@ -128,7 +129,7 @@ public abstract class CodegenTestCase extends JetLiteFixture {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Map<String, Class> loadAllClasses(ClassFileFactory state) {
|
protected Map<String, Class> loadAllClasses(@NotNull ClassFileFactory state) {
|
||||||
Map<String, Class> result = new HashMap<String, Class>();
|
Map<String, Class> result = new HashMap<String, Class>();
|
||||||
for (String fileName : state.files()) {
|
for (String fileName : state.files()) {
|
||||||
String className = StringUtil.trimEnd(fileName, ".class").replace('/', '.');
|
String className = StringUtil.trimEnd(fileName, ".class").replace('/', '.');
|
||||||
@@ -139,6 +140,7 @@ public abstract class CodegenTestCase extends JetLiteFixture {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
protected ClassFileFactory generateClassesInFile() {
|
protected ClassFileFactory generateClassesInFile() {
|
||||||
try {
|
try {
|
||||||
GenerationState state = new GenerationState(getProject(), ClassBuilderFactory.BINARIES);
|
GenerationState state = new GenerationState(getProject(), ClassBuilderFactory.BINARIES);
|
||||||
@@ -200,7 +202,7 @@ public abstract class CodegenTestCase extends JetLiteFixture {
|
|||||||
assertTrue(Math.abs(returnValue - currentTime) <= 1L);
|
assertTrue(Math.abs(returnValue - currentTime) <= 1L);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Class loadImplementationClass(ClassFileFactory codegens, final String name) {
|
protected Class loadImplementationClass(@NotNull ClassFileFactory codegens, final String name) {
|
||||||
return loadClass(name, codegens);
|
return loadClass(name, codegens);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package org.jetbrains.jet.codegen;
|
package org.jetbrains.jet.codegen;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.compiler.CompileEnvironment;
|
import org.jetbrains.jet.compiler.CompileEnvironment;
|
||||||
import org.jetbrains.jet.compiler.CompileSession;
|
import org.jetbrains.jet.compiler.CompileSession;
|
||||||
|
|
||||||
@@ -30,6 +32,7 @@ public class StdlibTest extends CodegenTestCase {
|
|||||||
return session.generateText();
|
return session.generateText();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
protected ClassFileFactory generateClassesInFile() {
|
protected ClassFileFactory generateClassesInFile() {
|
||||||
try {
|
try {
|
||||||
CompileSession session = new CompileSession(myEnvironment);
|
CompileSession session = new CompileSession(myEnvironment);
|
||||||
@@ -38,7 +41,7 @@ public class StdlibTest extends CodegenTestCase {
|
|||||||
session.addStdLibSources(true);
|
session.addStdLibSources(true);
|
||||||
|
|
||||||
if (!session.analyze(System.out)) {
|
if (!session.analyze(System.out)) {
|
||||||
return null;
|
throw new RuntimeException();
|
||||||
}
|
}
|
||||||
|
|
||||||
return session.generate();
|
return session.generate();
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class CompileEnvironmentTest extends TestCase {
|
|||||||
super.tearDown();
|
super.tearDown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSmoke() throws IOException {
|
public void _testSmoke() throws IOException {
|
||||||
final File activeRtJar = CompileEnvironment.findRtJar(true);
|
final File activeRtJar = CompileEnvironment.findRtJar(true);
|
||||||
environment.setJavaRuntime(activeRtJar);
|
environment.setJavaRuntime(activeRtJar);
|
||||||
environment.initializeKotlinRuntime();
|
environment.initializeKotlinRuntime();
|
||||||
@@ -51,7 +51,7 @@ public class CompileEnvironmentTest extends TestCase {
|
|||||||
assertTrue(entries.contains("Smoke/namespace.class"));
|
assertTrue(entries.contains("Smoke/namespace.class"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testSmokeWithCompilerJar() throws IOException {
|
public void _testSmokeWithCompilerJar() throws IOException {
|
||||||
File tempFile = File.createTempFile("compilerTest", "compilerTest");
|
File tempFile = File.createTempFile("compilerTest", "compilerTest");
|
||||||
try {
|
try {
|
||||||
KotlinCompiler.main(Arrays.asList("-module", JetParsingTest.getTestDataDir() + "/compiler/smoke/Smoke.kts", "-jar", tempFile.getAbsolutePath()).toArray(new String[0]));
|
KotlinCompiler.main(Arrays.asList("-module", JetParsingTest.getTestDataDir() + "/compiler/smoke/Smoke.kts", "-jar", tempFile.getAbsolutePath()).toArray(new String[0]));
|
||||||
|
|||||||
@@ -40,8 +40,9 @@ class JarBuilder(val parent: ModuleBuilder) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
open class ModuleBuilder(val name: String): IModuleBuilder {
|
open class ModuleBuilder(val name: String): IModuleBuilder {
|
||||||
val sourceFiles: ArrayList<String?> = ArrayList<String?>()
|
// http://youtrack.jetbrains.net/issue/KT-904
|
||||||
val classpathRoots: ArrayList<String?> = ArrayList<String?>()
|
private val sourceFiles0: ArrayList<String?> = ArrayList<String?>()
|
||||||
|
private val classpathRoots0: ArrayList<String?> = ArrayList<String?>()
|
||||||
var _jarName: String? = null
|
var _jarName: String? = null
|
||||||
|
|
||||||
val source: SourcesBuilder
|
val source: SourcesBuilder
|
||||||
@@ -54,19 +55,19 @@ open class ModuleBuilder(val name: String): IModuleBuilder {
|
|||||||
get() = JarBuilder(this)
|
get() = JarBuilder(this)
|
||||||
|
|
||||||
fun addSourceFiles(pattern: String) {
|
fun addSourceFiles(pattern: String) {
|
||||||
sourceFiles.add(pattern)
|
sourceFiles0.add(pattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun addClasspathEntry(name: String) {
|
fun addClasspathEntry(name: String) {
|
||||||
classpathRoots.add(name)
|
classpathRoots0.add(name)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun setJarName(name: String) {
|
fun setJarName(name: String) {
|
||||||
_jarName = name
|
_jarName = name
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getSourceFiles(): List<String?>? = sourceFiles
|
override fun getSourceFiles(): List<String?>? = sourceFiles0
|
||||||
override fun getClasspathRoots(): List<String?>? = classpathRoots
|
override fun getClasspathRoots(): List<String?>? = classpathRoots0
|
||||||
override fun getModuleName(): String? = name
|
override fun getModuleName(): String? = name
|
||||||
override fun getJarName(): String? = _jarName
|
override fun getJarName(): String? = _jarName
|
||||||
|
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
Hello
|
|
||||||
World
|
|
||||||
@@ -19,7 +19,8 @@ class IoTest() : TestSupport() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun sample() : Reader {
|
fun sample() : Reader {
|
||||||
return InputStreamReader((this as java.lang.Object).getClass()?.getClassLoader()?.getResourceAsStream("test/HelloWorld.txt"))
|
return StringReader("""Hello
|
||||||
|
World""");
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testLineIterator() {
|
fun testLineIterator() {
|
||||||
|
|||||||
Reference in New Issue
Block a user