diff --git a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt index e642aacad54..e67e8b7aec9 100644 --- a/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt +++ b/core/descriptor.loader.java/src/org/jetbrains/jet/lang/resolve/java/lazy/LazyJavaPackageFragmentProvider.kt @@ -43,7 +43,8 @@ public class LazyJavaPackageFragmentProvider( else { val jClass = c.findJavaClass(fqName) if (jClass != null && DescriptorResolverUtils.isJavaClassVisibleAsPackage(jClass)) { - LazyPackageFragmentForJavaClass(c, _module, jClass) + val correspondingClass = c.javaClassResolver.resolveClass(jClass) + if (correspondingClass != null) LazyPackageFragmentForJavaClass(c, _module, jClass) else null } else null } diff --git a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt index 0f0fc2fad1d..4c4ff004020 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt @@ -92,6 +92,7 @@ import org.jetbrains.jet.completion.AbstractKotlinSourceInJavaCompletionTest import org.jetbrains.jet.plugin.intentions.AbstractIntentionTest import org.jetbrains.jet.checkers.AbstractJetDiagnosticsTestWithStdLib import org.jetbrains.jet.plugin.codeInsight.AbstractInsertImportOnPasteTest +import org.jetbrains.jet.resolve.AbstractReferenceToJavaWithWrongFileStructureTest fun main(args: Array) { System.setProperty("java.awt.headless", "true") @@ -403,6 +404,10 @@ fun main(args: Array) { model("resolve/referenceInLib", recursive = false) } + testClass(javaClass()) { + model("resolve/referenceToJavaWithWrongFileStructure", recursive = false) + } + testClass(javaClass()) { model("findUsages/kotlin", pattern = """^(.+)\.0\.kt$""") model("findUsages/java", pattern = """^(.+)\.0\.java$""") diff --git a/idea/testData/resolve/referenceToJavaWithWrongFileStructure/ClassStatics.java b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/ClassStatics.java new file mode 100644 index 00000000000..7f12fef5dbf --- /dev/null +++ b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/ClassStatics.java @@ -0,0 +1,5 @@ +package wrong; + +public class ClassStatics { + public static void staticMethod() {} +} \ No newline at end of file diff --git a/idea/testData/resolve/referenceToJavaWithWrongFileStructure/ClassStatics.kt b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/ClassStatics.kt new file mode 100644 index 00000000000..d026d426bf5 --- /dev/null +++ b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/ClassStatics.kt @@ -0,0 +1,7 @@ +package wrong + +fun foo() { + ClassStatics.staticMethod() +} + +// REF_EMPTY \ No newline at end of file diff --git a/idea/testData/resolve/referenceToJavaWithWrongFileStructure/SimpleClass.java b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/SimpleClass.java new file mode 100644 index 00000000000..201aaf1fffb --- /dev/null +++ b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/SimpleClass.java @@ -0,0 +1,4 @@ +package wrong; + +public class SimpleClass { +} \ No newline at end of file diff --git a/idea/testData/resolve/referenceToJavaWithWrongFileStructure/SimpleClass.kt b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/SimpleClass.kt new file mode 100644 index 00000000000..7e79e059d4b --- /dev/null +++ b/idea/testData/resolve/referenceToJavaWithWrongFileStructure/SimpleClass.kt @@ -0,0 +1,6 @@ +package wrong + +fun foo(w: SimpleClass) { +} + +// REF_EMPTY \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java b/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java index fbb3de969f0..0922c109981 100644 --- a/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java +++ b/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceResolveTest.java @@ -73,6 +73,10 @@ public abstract class AbstractReferenceResolveTest extends LightPlatformCodeInsi myFixture.configureByFile(path); } + performChecks(); + } + + protected void performChecks() { if (InTextDirectivesUtils.isDirectiveDefined(myFixture.getFile().getText(), MULTIRESOLVE)) { doMultiResolveTest(); } diff --git a/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceToJavaWithWrongFileStructureTest.java b/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceToJavaWithWrongFileStructureTest.java new file mode 100644 index 00000000000..3da6944b94e --- /dev/null +++ b/idea/tests/org/jetbrains/jet/resolve/AbstractReferenceToJavaWithWrongFileStructureTest.java @@ -0,0 +1,27 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.resolve; + +public abstract class AbstractReferenceToJavaWithWrongFileStructureTest extends AbstractReferenceResolveTest { + @Override + protected void doTest(String path) { + //this line intentionally creates wrong file structure for java file + myFixture.configureByFile(path.replace(".kt", ".java")); + myFixture.configureByFile(path); + performChecks(); + } +} diff --git a/idea/tests/org/jetbrains/jet/resolve/ReferenceToJavaWithWrongFileStructureTestGenerated.java b/idea/tests/org/jetbrains/jet/resolve/ReferenceToJavaWithWrongFileStructureTestGenerated.java new file mode 100644 index 00000000000..4c72c0eed13 --- /dev/null +++ b/idea/tests/org/jetbrains/jet/resolve/ReferenceToJavaWithWrongFileStructureTestGenerated.java @@ -0,0 +1,49 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.resolve; + +import junit.framework.Assert; +import junit.framework.Test; +import junit.framework.TestSuite; + +import java.io.File; +import java.util.regex.Pattern; +import org.jetbrains.jet.JetTestUtils; +import org.jetbrains.jet.test.InnerTestClasses; +import org.jetbrains.jet.test.TestMetadata; + +import org.jetbrains.jet.resolve.AbstractReferenceToJavaWithWrongFileStructureTest; + +/** This class is generated by {@link org.jetbrains.jet.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/testData/resolve/referenceToJavaWithWrongFileStructure") +public class ReferenceToJavaWithWrongFileStructureTestGenerated extends AbstractReferenceToJavaWithWrongFileStructureTest { + public void testAllFilesPresentInReferenceToJavaWithWrongFileStructure() throws Exception { + JetTestUtils.assertAllTestsPresentByMetadata(this.getClass(), "org.jetbrains.jet.generators.tests.TestsPackage", new File("idea/testData/resolve/referenceToJavaWithWrongFileStructure"), Pattern.compile("^(.+)\\.kt$"), false); + } + + @TestMetadata("ClassStatics.kt") + public void testClassStatics() throws Exception { + doTest("idea/testData/resolve/referenceToJavaWithWrongFileStructure/ClassStatics.kt"); + } + + @TestMetadata("SimpleClass.kt") + public void testSimpleClass() throws Exception { + doTest("idea/testData/resolve/referenceToJavaWithWrongFileStructure/SimpleClass.kt"); + } + +}