diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/Java9NonAccessibleTypeExposedTest.kt b/java/java-tests/testSrc/com/intellij/codeInspection/Java9NonAccessibleTypeExposedTest.kt new file mode 100644 index 000000000000..86965769e8b6 --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/codeInspection/Java9NonAccessibleTypeExposedTest.kt @@ -0,0 +1,205 @@ +/* + * Copyright 2000-2016 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 com.intellij.codeInspection + +import com.intellij.codeInspection.java19modules.Java9NonAccessibleTypeExposedInspection +import com.intellij.testFramework.fixtures.LightJava9ModulesCodeInsightFixtureTestCase +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.M2 +import com.intellij.testFramework.fixtures.MultiModuleJava9ProjectDescriptor.ModuleDescriptor.MAIN +import org.intellij.lang.annotations.Language +import org.jetbrains.annotations.NonNls +import org.jetbrains.annotations.NotNull + +/** + * @author Pavel.Dolgov + */ +class Java9NonAccessibleTypeExposedTest : LightJava9ModulesCodeInsightFixtureTestCase() { + override fun setUp() { + super.setUp() + myFixture.enableInspections(Java9NonAccessibleTypeExposedInspection()) + addFile("module-info.java", "module MAIN { exports apiPkg; exports otherPkg; requires M2; }", MAIN) + addFile("apiPkg/PublicApi.java", "package apiPkg; public class PublicApi {}", MAIN) + addFile("apiPkg/PackageLocal.java", "package apiPkg; class PackageLocal {}", MAIN) + addFile("otherPkg/PublicOther.java", "package otherPkg; public class PublicOther {}", MAIN) + } + + fun testPrimitives() { + highlight("""package apiPkg; +public class Highlighted { + public int i; + protected int getInt() {return 1;} + public void run() {} +}""") + } + + fun testImported() { + addFile("module-info.java", "module M2 { exports m2Pkg; }", M2) + addFile("m2Pkg/Exported.java", "package m2Pkg; public class Exported {}", M2) + + highlight("""package apiPkg; +import m2Pkg.Exported; +public class Highlighted { + public Exported myVar; + protected Highlighted() {} + public Highlighted(Exported var) {setVar(var);} + public Exported getVar() {return myVar;} + protected void setVar(Exported var) {myVar = var;} +}""") + } + + fun testPackageLocalExposed() { + highlight("""package apiPkg; +public class Highlighted { + public PackageLocal myVar; + protected Highlighted() {} + public Highlighted(PackageLocal var) {setVar(var);} + public PackageLocal getVar() {return myVar;} + protected void setVar(PackageLocal var) {myVar = var;} +} +""") + } + + fun testPackageLocalEncapsulated() { + highlight("""package apiPkg; +public class Highlighted { + private PackageLocal myVar; + private Highlighted() {} + Highlighted(PackageLocal var) {setVar(var);} + PackageLocal getVar() {return myVar;} + private void setVar(PackageLocal var) {myVar = var;} +} +""") + } + + fun testPackageLocalUsedLocally() { + highlight("""package apiPkg; +class Highlighted { + public PackageLocal myVar; + protected Highlighted() {} + public Highlighted(PackageLocal var) {setVar(var);} + public PackageLocal getVar() {return myVar;} + protected void setVar(PackageLocal var) {myVar = var;} +} +""") + } + + fun testPublicApi() { + highlight("""package apiPkg; +public class Highlighted { + public PublicApi myVar; + protected Highlighted() {} + public Highlighted(PublicApi var) {setVar(var);} + public PublicApi getVar() {return myVar;} + protected void setVar(PublicApi var) {myVar = var;} +} +""") + } + + fun testPublicOther() { + highlight("""package apiPkg; +import otherPkg.PublicOther; +public class Highlighted { + public PublicOther myVar; + protected Highlighted() {} + public Highlighted(PublicOther var) {setVar(var);} + public PublicOther getVar() {return myVar;} + protected void setVar(PublicOther var) {myVar = var;} +} +""") + } + + fun testPublicNested() { + highlight("""package apiPkg; +public class Highlighted { + public class PublicNested {} + public PublicNested myVar; + protected Highlighted() {} + public Highlighted(PublicNested var) {setVar(var);} + public PublicNested getVar() {return myVar;} + protected void setVar(PublicNested var) {myVar = var;} +} +""") + } + + fun testPackageLocalNested() { + highlight("""package apiPkg; +public class Highlighted { + class PackageLocalNested {} + public PackageLocalNested myVar; + protected Highlighted() {} + public Highlighted(PackageLocalNested var) {setVar(var);} + public PackageLocalNested getVar() {return myVar;} + protected void setVar(PackageLocalNested var) {myVar = var;} +} +""") + } + + fun testPackageLocalInInterface() { + highlight("""package apiPkg; +public interface Highlighted { + PackageLocal myVar = new PackageLocal(); + PackageLocal getVar(); + void setVar(PackageLocal var); +} +""") + } + + fun testPublicInInterface() { + highlight("""package apiPkg; +public interface Highlighted { + PublicApi myVar = new PublicApi(); + PublicApi getVar(); + void setVar(PublicApi var); +} +""") + } + + fun testNotExportedPackage() { + addFile("implPkg/NotExported.java", "package implPkg; public class NotExported {}", MAIN) + highlight("""package apiPkg; +import implPkg.NotExported; +public class Highlighted { + public NotExported myVar; + protected Highlighted() {} + public Highlighted(NotExported var) {setVar(var);} + public NotExported getVar() {return myVar;} + protected void setVar(NotExported var) {myVar = var;} +} +""") + } + + fun testDoubleNested() { + addFile("apiPkg/PublicOuter.java", """package apiPkg; public class PublicOuter { + static class PackageLocal { + public class DoubleNested {} + } +}""", MAIN) + highlight("""package apiPkg; +import apiPkg.PublicOuter.PackageLocal; +public class Highlighted { + private PackageLocal.DoubleNested myVar; + public PackageLocal.DoubleNested getVar() {return myVar;} + protected void setVar(PackageLocal.DoubleNested var) {myVar = var;} +} +""") + } + + private fun highlight(@Language("JAVA") @NotNull @NonNls text: String) { + val file = addFile("apiPkg/Highlighted.java", text, MAIN) + myFixture.configureFromExistingVirtualFile(file) + myFixture.checkHighlighting() + } +}