diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java index 7c0582be34557cb50ba46379c1b868ec61fff9bb..8a4dab2789693c190f857af9ed69ce3f3305d7f5 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JavaDescriptorResolver.java @@ -1368,6 +1368,10 @@ public class JavaDescriptorResolver { if (anyMember.getType().getPsiNotNullOwner().getModifierList().findAnnotation(JvmAbi.JETBRAINS_NOT_NULL_ANNOTATION.getFqName().getFqName()) != null) { propertyType = TypeUtils.makeNullableAsSpecified(propertyType, false); } + else if (members.getter == null && members.setter == null && members.field.getMember().isFinal() && members.field.getMember().isStatic()) { + // http://youtrack.jetbrains.com/issue/KT-1388 + propertyType = TypeUtils.makeNotNullable(propertyType); + } } JetType receiverType; diff --git a/compiler/testData/diagnostics/tests/Builders.jet b/compiler/testData/diagnostics/tests/Builders.jet index 8e5ad3780451b3eb5b5f27d42fdb612f3c165c8a..c130650b6af09ada2e4473cf9c6bec613c034dac 100644 --- a/compiler/testData/diagnostics/tests/Builders.jet +++ b/compiler/testData/diagnostics/tests/Builders.jet @@ -151,9 +151,9 @@ fun html(init : HTML.() -> Unit) : HTML { fun Map.set(key : K, value : V) = this.put(key, value) fun println(message : Any?) { - System.out?.println(message) + System.out.println(message) } fun print(message : Any?) { - System.out?.print(message) + System.out.print(message) } diff --git a/compiler/testData/diagnostics/tests/ClassObjects.jet b/compiler/testData/diagnostics/tests/ClassObjects.jet index d029a8bafd16f87a3d06da6c3f524b3ac1155c38..716806c23f34907ec4f5ebb99241108ff6341b98 100644 --- a/compiler/testData/diagnostics/tests/ClassObjects.jet +++ b/compiler/testData/diagnostics/tests/ClassObjects.jet @@ -26,6 +26,6 @@ val d = b.x val s = System // error fun test() { - System.out?.println() - java.lang.System.out?.println() + System.out.println() + java.lang.System.out.println() } diff --git a/compiler/testData/diagnostics/tests/Nullability.jet b/compiler/testData/diagnostics/tests/Nullability.jet index 3a8594058b75e9ad46b0dfdac55150f9166d3e53..b4a7c8e57868976b8d3ee0c18f19172a315376ae 100644 --- a/compiler/testData/diagnostics/tests/Nullability.jet +++ b/compiler/testData/diagnostics/tests/Nullability.jet @@ -8,8 +8,8 @@ fun test() { a?.plus(1) } - val out : java.io.PrintStream? = null//= System.out - val ins = System.`in` + val out : java.io.PrintStream? = null + val ins : java.io.InputStream? = null out?.println() ins?.read() diff --git a/compiler/testData/diagnostics/tests/ResolveToJava.jet b/compiler/testData/diagnostics/tests/ResolveToJava.jet index a50b677f9fbad8db0cee2546e487a7b3e1715a49..243fe24d783c60dc1884badbca9bf730c966c8d6 100644 --- a/compiler/testData/diagnostics/tests/ResolveToJava.jet +++ b/compiler/testData/diagnostics/tests/ResolveToJava.jet @@ -35,7 +35,7 @@ fun test(l : java.util.List) { // ... } catch(e: Exception) { - System.out?.println(e.getMessage()) + System.out.println(e.getMessage()) } PrintStream("sdf") diff --git a/compiler/testData/diagnostics/tests/alt-headers/ArrayListAndMap.jet b/compiler/testData/diagnostics/tests/alt-headers/ArrayListAndMap.jet index 726d1cc6c00320475f9280dc8f244c7ab92c0936..c908486429915f4e69b506b9236bf87714ddf13f 100644 --- a/compiler/testData/diagnostics/tests/alt-headers/ArrayListAndMap.jet +++ b/compiler/testData/diagnostics/tests/alt-headers/ArrayListAndMap.jet @@ -22,10 +22,10 @@ fun main(args : Array) { test(al, m) } fun test(a : List, m : Map) { - System.out?.println( + System.out.println( a.get(0) + 1 ) HashMap().get(0) if (m.get("") != null) - System.out?.println(m.get("").sure().plus(1)) + System.out.println(m.get("").sure().plus(1)) } diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet index dc2fdabf70e722da517d382c99d7919fd139ef8d..dc513f6d0fca88c33f720180b6199d11c1dabd52 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1156.jet @@ -3,5 +3,5 @@ fun foo(maybe: Int?) { val i : Int = maybe ?: throw RuntimeException("No value") - System.out?.println(i) + System.out.println(i) } diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1219.1301.jet b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1219.1301.jet index d1467b8c469e63aa88c5d775f7f52ccab7975e71..89b7e3346ca818e1d1f17af7890ec64e927ed7e3 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1219.1301.jet +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/kt1219.1301.jet @@ -15,7 +15,7 @@ fun foo(){ } bar() - System.out?.println(local) + System.out.println(local) } fun Iterable.foreach(operation: (element: T) -> Unit) { diff --git a/compiler/testData/diagnostics/tests/controlStructures/kt770.kt351.kt735_StatementType.jet b/compiler/testData/diagnostics/tests/controlStructures/kt770.kt351.kt735_StatementType.jet index 568b5658255a57400f080acc2b99432884a60141..2612b5c6dce14f67f50c795c5386c0395e7e0a5e 100644 --- a/compiler/testData/diagnostics/tests/controlStructures/kt770.kt351.kt735_StatementType.jet +++ b/compiler/testData/diagnostics/tests/controlStructures/kt770.kt351.kt735_StatementType.jet @@ -9,7 +9,7 @@ fun main(args : Array) { 2 -> i = 2 // i is surrounded by a black border else -> j = 2 } - System.out?.println(i) + System.out.println(i) } //KT-351 Distinguish statement and expression positions diff --git a/compiler/testData/diagnostics/tests/extensions/ExtensionFunctions.jet b/compiler/testData/diagnostics/tests/extensions/ExtensionFunctions.jet index adb16268b694d49899caaea9ba56555616e9a3fa..8051f93bbc1981db12606fef87ec97c3ab5d6412 100644 --- a/compiler/testData/diagnostics/tests/extensions/ExtensionFunctions.jet +++ b/compiler/testData/diagnostics/tests/extensions/ExtensionFunctions.jet @@ -57,7 +57,7 @@ import outer.* fun main(args: Array) { - System.out?.print(1) + System.out.print(1) val command = parse("") diff --git a/compiler/testData/diagnostics/tests/extensions/GenericIterator.jet b/compiler/testData/diagnostics/tests/extensions/GenericIterator.jet index e8bbda720804951073b4f12521ad22856a474883..dc7ad332b385e5f515dad1bb8d7ea0348f4837dd 100644 --- a/compiler/testData/diagnostics/tests/extensions/GenericIterator.jet +++ b/compiler/testData/diagnostics/tests/extensions/GenericIterator.jet @@ -23,6 +23,6 @@ fun T?.iterator() = object { fun main(args : Array) { val i : Int? = 1 for (x in i) { - System.out?.println(x) + System.out.println(x) } } diff --git a/compiler/testData/diagnostics/tests/nullabilityAndAutoCasts/kt244.jet b/compiler/testData/diagnostics/tests/nullabilityAndAutoCasts/kt244.jet index 64c75a7856e536bb9cfac839c9f7ebbcfd92f93c..749aae7b9a048176a65818b5d3c5d1178bdc9405 100644 --- a/compiler/testData/diagnostics/tests/nullabilityAndAutoCasts/kt244.jet +++ b/compiler/testData/diagnostics/tests/nullabilityAndAutoCasts/kt244.jet @@ -7,7 +7,7 @@ fun f(s: String?) { if (s != null) { s.length //ok var i = s.length //error: Only safe calls are allowed on a nullable receiver - System.out?.println(s.length) //error + System.out.println(s.length) //error } } diff --git a/compiler/testData/diagnostics/tests/regressions/DoubleDefine.jet b/compiler/testData/diagnostics/tests/regressions/DoubleDefine.jet index f0622ea3434d1aaff2898f628cdba786dbaf5d49..309c3ff7e7a0e417aca8d93a832565ef7f61c95d 100644 --- a/compiler/testData/diagnostics/tests/regressions/DoubleDefine.jet +++ b/compiler/testData/diagnostics/tests/regressions/DoubleDefine.jet @@ -39,7 +39,7 @@ fun evaluate(expr: StringBuilder, numbers: ArrayList): Int { } fun main(args: Array) { - System.out?.println("24 game") + System.out.println("24 game") val numbers = ArrayList(4) val rnd = Random(); val prompt = StringBuilder() @@ -49,18 +49,18 @@ fun main(args: Array) { if (i > 0) prompt.append(" "); prompt.append(n) } - System.out?.println("Your numbers: " + prompt) - System.out?.println("Enter your expression:") + System.out.println("Your numbers: " + prompt) + System.out.println("Enter your expression:") val reader = BufferedReader(InputStreamReader(System.`in`)) val expr = StringBuilder(reader.readLine()) try { val result = evaluate(expr, numbers) if (result != 24) - System.out?.println("Sorry, that's " + result) + System.out.println("Sorry, that's " + result) else - System.out?.println("You won!"); + System.out.println("You won!"); } catch(e: Throwable) { - System.out?.println(e.getMessage()) + System.out.println(e.getMessage()) } } diff --git a/compiler/testData/diagnostics/tests/regressions/Jet72.jet b/compiler/testData/diagnostics/tests/regressions/Jet72.jet index ab5eb1be4eec5b63c405696d02102fa7be03c15a..b85b278971bfd12cd9ec07a4b23941cfe9f91e31 100644 --- a/compiler/testData/diagnostics/tests/regressions/Jet72.jet +++ b/compiler/testData/diagnostics/tests/regressions/Jet72.jet @@ -11,7 +11,7 @@ val items: ArrayList = ArrayList fun test(room : Object) { for(val item: Item? in items) { if (item?.room === room) { - System.out?.println("You see " + item?.name) + System.out.println("You see " + item?.name) } } } diff --git a/compiler/testData/diagnostics/tests/regressions/kt1550.jet b/compiler/testData/diagnostics/tests/regressions/kt1550.jet index 37c57f034ba550a579bd9b6ba630455615993d20..1d8c9923e63baf6cad21a5df80f5524d1657bb2c 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt1550.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt1550.jet @@ -6,7 +6,7 @@ fun main(args : Array) { val c = ArrayList() c.add(3) - System.out?.println(++(c[0])) - System.out?.println((c[1])--) - System.out?.println(-(c[2])) + System.out.println(++(c[0])) + System.out.println((c[1])--) + System.out.println(-(c[2])) } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet b/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet index c45a50035ebdc2642abb336eb9350492ebce5203..5015dfe9aa0d3277dc45326facc228283ea8560f 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt385.109.441.jet @@ -25,8 +25,8 @@ fun generic_invoker(gen : () -> T) : T { return gen() } -fun println(message : Int) { System.out?.println(message) } -fun println(message : Long) { System.out?.println(message) } +fun println(message : Int) { System.out.println(message) } +fun println(message : Long) { System.out.println(message) } inline fun run(body : () -> T) : T = body() fun main(args : Array) { diff --git a/compiler/testData/diagnostics/tests/regressions/kt469.jet b/compiler/testData/diagnostics/tests/regressions/kt469.jet index d2000b139e86656b40293110d4f6f01e5d1bdc05..e386ab4e9b87e4020fc56f6bcd3b289f885e0a57 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt469.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt469.jet @@ -8,7 +8,7 @@ fun bar(list : List) { for (i in 1..10) { list += i // error } - System.out?.println(list) + System.out.println(list) } fun List.plusAssign(t : T) { diff --git a/compiler/testData/diagnostics/tests/regressions/kt549.jet b/compiler/testData/diagnostics/tests/regressions/kt549.jet index c4b5b824d901f0437927a2937cc85f3b1232f9a3..28050cccb2bc1599291c8473f95afae0a79f40b8 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt549.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt549.jet @@ -12,6 +12,6 @@ package demo fun main(args : Array) { for (a in filter(args, {it.length > 1})) { - System.out?.println("Hello, ${a}!") + System.out.println("Hello, ${a}!") } } diff --git a/compiler/testData/diagnostics/tests/regressions/kt716.jet b/compiler/testData/diagnostics/tests/regressions/kt716.jet index 25fd89edeb647516967dff68e5f3a9f188b4571f..ec22510913f5549629a89ac69b1068772b37ee36 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt716.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt716.jet @@ -12,5 +12,5 @@ fun TypeInfo.getJavaClass() : java.lang.Class { fun getJavaClass() = typeinfo.getJavaClass() fun main(args : Array) { - System.out?.println(getJavaClass) + System.out.println(getJavaClass) } diff --git a/compiler/testData/diagnostics/tests/regressions/kt750.jet b/compiler/testData/diagnostics/tests/regressions/kt750.jet index 99427e88195c46d43eaae60b42ec89547e57f1d0..dbbf53c08bb39a7f0797e3fa7a41d25c2c59aaf1 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt750.jet +++ b/compiler/testData/diagnostics/tests/regressions/kt750.jet @@ -4,5 +4,5 @@ fun main(args : Array) { var s : Int? = Integer.valueOf(100) val o = i .sure() + s.sure() - System.out?.println(o) + System.out.println(o) } diff --git a/compiler/testData/javaDescriptorResolver/staticFinal.java b/compiler/testData/javaDescriptorResolver/staticFinal.java new file mode 100644 index 0000000000000000000000000000000000000000..0d2e17c225b5880d0e78ef88edbe9103aacd25a7 --- /dev/null +++ b/compiler/testData/javaDescriptorResolver/staticFinal.java @@ -0,0 +1,4 @@ + +class StaticFinal { + public static final String foo = "aaa"; +} diff --git a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java index abe34ad463910dd5eb59a0773b4930caa20f1bd3..dbd90b024737b0aee955f96f39c1458bcfe1e9f9 100644 --- a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/JavaDescriptorResolverTest.java @@ -20,14 +20,19 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.JetTestUtils; import org.jetbrains.jet.di.InjectorForJavaSemanticServices; import org.jetbrains.jet.lang.descriptors.ClassDescriptor; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; +import org.jetbrains.jet.lang.descriptors.VariableDescriptor; import org.jetbrains.jet.lang.resolve.FqName; import org.jetbrains.jet.lang.resolve.java.CompilerSpecialMode; import org.jetbrains.jet.lang.resolve.java.DescriptorSearchRule; import org.jetbrains.jet.lang.resolve.java.JavaDescriptorResolver; +import org.jetbrains.jet.lang.types.TypeProjection; import org.junit.Assert; import java.io.File; import java.io.IOException; +import java.util.Collections; +import java.util.Set; /** * @author Stepan Koltsov @@ -40,16 +45,33 @@ public class JavaDescriptorResolverTest extends TestCaseWithTmpdir { compileFileResolveDescriptor("inner.java", new FqName("A")); } - private void compileFileResolveDescriptor(@NotNull String fileRelativePath, @NotNull FqName fqName) throws IOException { + // We cannot declare class and namespace with same name in Kotlin + // http://youtrack.jetbrains.com/issue/KT-1388 + public void testStaticFinal() throws Exception { + JavaDescriptorResolver javaDescriptorResolver = compileFileGetJavaDescriptorResolver("staticFinal.java"); + NamespaceDescriptor ns = javaDescriptorResolver.resolveNamespace(new FqName("StaticFinal"), DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN); + Set foos = ns.getMemberScope().getProperties("foo"); + Assert.assertEquals(1, foos.size()); + VariableDescriptor foo = foos.iterator().next(); + Assert.assertFalse(foo.getType().isNullable()); + } + + private ClassDescriptor compileFileResolveDescriptor(@NotNull String fileRelativePath, @NotNull FqName fqName) throws IOException { + JavaDescriptorResolver javaDescriptorResolver = compileFileGetJavaDescriptorResolver(fileRelativePath); + ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(fqName, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN); + Assert.assertNotNull(classDescriptor); + return classDescriptor; + } + + private JavaDescriptorResolver compileFileGetJavaDescriptorResolver(String fileRelativePath) throws IOException { JetTestUtils.compileJavaFile(new File("compiler/testData/javaDescriptorResolver/" + fileRelativePath), tmpdir); - JetCoreEnvironment jetCoreEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations(myTestRootDisposable, CompilerSpecialMode.JDK_HEADERS); + JetCoreEnvironment jetCoreEnvironment = JetTestUtils.createEnvironmentWithMockJdkAndIdeaAnnotations( + myTestRootDisposable, CompilerSpecialMode.JDK_HEADERS); jetCoreEnvironment.addToClasspath(tmpdir); InjectorForJavaSemanticServices injector = new InjectorForJavaSemanticServices( jetCoreEnvironment.getCompilerDependencies(), jetCoreEnvironment.getProject()); - JavaDescriptorResolver javaDescriptorResolver = injector.getJavaDescriptorResolver(); - ClassDescriptor classDescriptor = javaDescriptorResolver.resolveClass(fqName, DescriptorSearchRule.ERROR_IF_FOUND_IN_KOTLIN); - Assert.assertNotNull(classDescriptor); + return injector.getJavaDescriptorResolver(); } } diff --git a/idea/testData/checker/ClassObjects.jet b/idea/testData/checker/ClassObjects.jet index 08858238508258d079172382f58a6330bf3e6b96..cc43a7556ae6b196b43dfba5b5f3d05fe4be9fa7 100644 --- a/idea/testData/checker/ClassObjects.jet +++ b/idea/testData/checker/ClassObjects.jet @@ -25,6 +25,6 @@ val d = b.x val s = System // error fun test() { - System.out?.println() - java.lang.System.out?.println() + System.out.println() + java.lang.System.out.println() } \ No newline at end of file diff --git a/idea/testData/checker/ExtensionFunctions.jet b/idea/testData/checker/ExtensionFunctions.jet index 934636e0b6d8fe6ceaadf68e45a9201c6bf14a75..7548d4db054c2d618c6dd08c178bbb7aebfdaf1d 100644 --- a/idea/testData/checker/ExtensionFunctions.jet +++ b/idea/testData/checker/ExtensionFunctions.jet @@ -52,7 +52,7 @@ fun Int.foo() = this fun main(args: Array) { - System.out?.print(1) + System.out.print(1) val command = parse("") diff --git a/idea/testData/checker/Nullability.jet b/idea/testData/checker/Nullability.jet index 8f2eaa9e6c7fdd372875b512aae1826aa4b2b0c3..51250eb9b6b74672f29ad66f0211e8206f96dead 100644 --- a/idea/testData/checker/Nullability.jet +++ b/idea/testData/checker/Nullability.jet @@ -7,8 +7,8 @@ fun test() { a?.plus(1) } - val out : java.io.PrintStream? = null//= System.out - val ins = System.`in` + val out : java.io.PrintStream? = null + val ins : java.io.InputStream? = null out?.println() ins?.read() @@ -277,4 +277,4 @@ fun f9(a : Int?) : Int { if (a != null) return a return 1 -} \ No newline at end of file +} diff --git a/idea/testData/checker/ResolveToJava.jet b/idea/testData/checker/ResolveToJava.jet index 25910cc8caaaf9c501f8b4d89b0c0774e1c84bd5..718c029c7df0b2d1a3f3fdea877fdf15c86b0a43 100644 --- a/idea/testData/checker/ResolveToJava.jet +++ b/idea/testData/checker/ResolveToJava.jet @@ -33,7 +33,7 @@ fun test(l : java.util.List) { // ... } catch(e: Exception) { - System.out?.println(e.getMessage()) + System.out.println(e.getMessage()) } PrintStream("sdf") diff --git a/idea/testData/checker/regression/DoubleDefine.jet b/idea/testData/checker/regression/DoubleDefine.jet index 7205eb6367fa48d44632f39dbbc6eae8e5c1db69..6dc60faa1b2ac3e2ebe3dcff756ef2cbb6e42053 100644 --- a/idea/testData/checker/regression/DoubleDefine.jet +++ b/idea/testData/checker/regression/DoubleDefine.jet @@ -38,7 +38,7 @@ fun evaluate(expr: StringBuilder, numbers: ArrayList): Int { } fun main(args: Array) { - System.out?.println("24 game") + System.out.println("24 game") val numbers = ArrayList(4) val rnd = Random(); val prompt = StringBuilder() @@ -48,18 +48,18 @@ fun main(args: Array) { if (i > 0) prompt.append(" "); prompt.append(n) } - System.out?.println("Your numbers: " + prompt) - System.out?.println("Enter your expression:") + System.out.println("Your numbers: " + prompt) + System.out.println("Enter your expression:") val reader = BufferedReader(InputStreamReader(System.`in`)) val expr = StringBuilder(reader.readLine()) try { val result = evaluate(expr, numbers) if (result != 24) - System.out?.println("Sorry, that's " + result) + System.out.println("Sorry, that's " + result) else - System.out?.println("You won!"); + System.out.println("You won!"); } catch(e: Throwable) { - System.out?.println(e.getMessage()) + System.out.println(e.getMessage()) } } diff --git a/idea/testData/checker/regression/Jet72.jet b/idea/testData/checker/regression/Jet72.jet index d3d3272c8e334b100a173f7f2f75b15b945bc53d..d41c4af13dbbe805f97fdf076072b6c84ed2ae5b 100644 --- a/idea/testData/checker/regression/Jet72.jet +++ b/idea/testData/checker/regression/Jet72.jet @@ -11,7 +11,7 @@ val items: ArrayList = ArrayList fun test(room : Object) { for(val item: Item in items) { if (item.room === room) { - System.out?.println("You see " + item.name) + System.out.println("You see " + item.name) } } }