From 1267e002aa35f94c3e1a02fd8caad6d3a60839e5 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 20 May 2019 12:12:06 +0700 Subject: [PATCH] Unit test for IDEA-211140 (IDEA-CR-46794) GitOrigin-RevId: 1b8b24a4bc6d5ffc2d611d30fea6308aef7ac688 --- .../lib_1.0/pkg/Conflict.class | Bin 0 -> 155 bytes .../lib_1.0/pkg/Conflict.java | 5 ++ .../lib_2.0/pkg/Conflict.class | Bin 0 -> 225 bytes .../lib_2.0/pkg/Conflict.java | 5 ++ .../lib_2.0/pkg/NonNullApi.class | Bin 0 -> 401 bytes .../lib_2.0/pkg/NonNullApi.java | 10 +++ .../lib_2.0/pkg/Test.class | Bin 0 -> 259 bytes .../nullableAnnotations/lib_2.0/pkg/Test.java | 5 ++ .../lib_2.0/pkg/package-info.class | Bin 0 -> 170 bytes .../lib_2.0/pkg/package-info.java | 4 ++ .../NullableNotNullManagerTest.java | 59 +++++++++++++++++- 11 files changed, 85 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/nullableAnnotations/lib_1.0/pkg/Conflict.class create mode 100644 java/java-tests/testData/nullableAnnotations/lib_1.0/pkg/Conflict.java create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Conflict.class create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Conflict.java create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/NonNullApi.class create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/NonNullApi.java create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Test.class create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Test.java create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/package-info.class create mode 100644 java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/package-info.java diff --git a/java/java-tests/testData/nullableAnnotations/lib_1.0/pkg/Conflict.class b/java/java-tests/testData/nullableAnnotations/lib_1.0/pkg/Conflict.class new file mode 100644 index 0000000000000000000000000000000000000000..832b67b9e0e8d08f4388ade442090b0a44c31e18 GIT binary patch literal 155 zcmX^0Z`VEs1_pBmPId-%b_Nbc29fmC62H=%oW!J@)ZqNw)RK(MymX+jhNe$eVp*bo zPGVlVesD<_<=ryx6BA121gAb`;C ipOlrFT*Ah{z{tP^v>r&aFfuSRuz*+$tU!{9feiq)qb9%r literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/nullableAnnotations/lib_1.0/pkg/Conflict.java b/java/java-tests/testData/nullableAnnotations/lib_1.0/pkg/Conflict.java new file mode 100644 index 000000000000..a2e736f6486c --- /dev/null +++ b/java/java-tests/testData/nullableAnnotations/lib_1.0/pkg/Conflict.java @@ -0,0 +1,5 @@ +package pkg; + +interface Conflict { + String getNullableSomething(); +} \ No newline at end of file diff --git a/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Conflict.class b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Conflict.class new file mode 100644 index 0000000000000000000000000000000000000000..2eaec7647d679bf69eceacd773488fe1cfc10748 GIT binary patch literal 225 zcmYL@!4APd6h-e)Ek$BsBYuF5Sz1_$#7amsv7a`hrlvE}PQ|xb_y8Xz9!c4}n|ogF zyYKnBKLE_p4bTY?G7MAcww2Z*)-tlWbSGs}!jtJH6Ia2tFe#5*L3F_|+E>P@Tpm=Z zD6llfI^mQxCByg|xN-4=ygp3HFtSyV$hFdvp}(@`s8!--pALrJ<(%@GF%16AyEv1H a^8tniJx=N|G~tnNk@HDuNi(3?K>H1}O*^~* literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Conflict.java b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Conflict.java new file mode 100644 index 000000000000..07c8c8856ec5 --- /dev/null +++ b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Conflict.java @@ -0,0 +1,5 @@ +package pkg; + +interface Conflict { + @javax.annotation.Nullable String getNullableSomething(); +} \ No newline at end of file diff --git a/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/NonNullApi.class b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/NonNullApi.class new file mode 100644 index 0000000000000000000000000000000000000000..83091db30b7f3a440e80f5a7eeaaee8e64ff1f51 GIT binary patch literal 401 zcmZut!A`h9UDO;ky=D`o}ql~YZ zSQ0(#+qW~5$;^I!y?+2W$F7HthpvYmLhCUr@-bg&!-P&hv;D%DV5ZNeYM}^wQDL1< z`AN_9$Z%k7=9JT!of8i3N{w%nO?>rB__4|pb{B;DLYYEbkN($%hEujKew(p~y9 z8(fEk{iXbM)lymTLVqVkZ(ywa}#nv5{B_3u50gnkibT)^o9vSa<*rCGOZT$;|!k znR6%edOw~325@W`sFq-vsF|n}iX$1zY)sI*?wVjslC2=rXEGM^{1}LIYm6>U%d;p}JDp~*l literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Test.java b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Test.java new file mode 100644 index 000000000000..a42e4afd0e80 --- /dev/null +++ b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/Test.java @@ -0,0 +1,5 @@ +package pkg; + +class Test { + String foo() {return "foo";} +} \ No newline at end of file diff --git a/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/package-info.class b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/package-info.class new file mode 100644 index 0000000000000000000000000000000000000000..2b68e6d8f64657edcf842108b04d47c082e5a611 GIT binary patch literal 170 zcmX^0Z`VEs1_pBmPId-%b_Nbc2Cm@z(xT*4x6GVWMh3xx#N_P6^iyOj0PZa-qyPW_ literal 0 HcmV?d00001 diff --git a/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/package-info.java b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/package-info.java new file mode 100644 index 000000000000..d9ba35e190c7 --- /dev/null +++ b/java/java-tests/testData/nullableAnnotations/lib_2.0/pkg/package-info.java @@ -0,0 +1,4 @@ +// Recompile if necessary adding jsr305-3.0.2.jar to classpath +// e.g. javac -cp %USERPROFILE%\.m2\repository\com\google\code\findbugs\jsr305\3.0.2\jsr305-3.0.2.jar pkg/*.java +@NonNullApi +package pkg; \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/NullableNotNullManagerTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/NullableNotNullManagerTest.java index c54324d22603..d7bfca298af0 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/NullableNotNullManagerTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/NullableNotNullManagerTest.java @@ -1,11 +1,24 @@ // Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.java.codeInsight; -import com.intellij.codeInsight.AnnotationUtil; -import com.intellij.codeInsight.NullableNotNullManager; -import com.intellij.codeInsight.NullableNotNullManagerImpl; +import com.intellij.JavaTestUtil; +import com.intellij.codeInsight.*; +import com.intellij.java.testutil.MavenDependencyUtil; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.roots.ContentEntry; +import com.intellij.openapi.roots.ModifiableRootModel; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiMethod; +import com.intellij.psi.search.GlobalSearchScope; import com.intellij.testFramework.LightPlatformTestCase; +import com.intellij.testFramework.LightProjectDescriptor; +import com.intellij.testFramework.PsiTestUtil; +import com.intellij.testFramework.fixtures.DefaultLightProjectDescriptor; import org.jdom.Element; +import org.jetbrains.annotations.NotNull; import org.junit.Assume; import java.util.List; @@ -21,6 +34,23 @@ public class NullableNotNullManagerTest extends LightPlatformTestCase { myManager = (NullableNotNullManagerImpl)manager; } + @NotNull + @Override + protected LightProjectDescriptor getProjectDescriptor() { + return new DefaultLightProjectDescriptor() { + @Override + public void configureModule(@NotNull Module module, @NotNull ModifiableRootModel model, @NotNull ContentEntry contentEntry) { + super.configureModule(module, model, contentEntry); + VirtualFile file = + LocalFileSystem.getInstance().refreshAndFindFileByPath(JavaTestUtil.getJavaTestDataPath() + "/nullableAnnotations/"); + MavenDependencyUtil.addFromMaven(model, "com.google.code.findbugs:jsr305:3.0.2"); + // Library order is important + PsiTestUtil.newLibrary("lib_2.0").classesRoot(file.findChild("lib_2.0")).addTo(model); + PsiTestUtil.newLibrary("lib_1.0").classesRoot(file.findChild("lib_1.0")).addTo(model); + } + }; + } + @Override protected void tearDown() throws Exception { try { @@ -33,6 +63,29 @@ public class NullableNotNullManagerTest extends LightPlatformTestCase { super.tearDown(); } } + + public void testSplitPackageContainerAnnotation() { + // Check that annotations work normally + NullabilityAnnotationInfo fooNullability = getMethodReturnNullability("pkg.Test", "foo"); + assertNotNull(fooNullability); + assertEquals(Nullability.NOT_NULL, fooNullability.getNullability()); + assertTrue(fooNullability.isContainer()); + + // Check the conflicting case + NullabilityAnnotationInfo nullability = getMethodReturnNullability("pkg.Conflict", "getNullableSomething"); + assertNull(nullability); + } + + private static NullabilityAnnotationInfo getMethodReturnNullability(String className, String methodName) { + JavaPsiFacade facade = JavaPsiFacade.getInstance(getProject()); + GlobalSearchScope scope = GlobalSearchScope.allScope(getProject()); + NullableNotNullManager manager = NullableNotNullManager.getInstance(getProject()); + PsiClass testClass = facade.findClass(className, scope); + assertNotNull(testClass); + PsiMethod[] fooMethods = testClass.findMethodsByName(methodName, false); + assertSize(1, fooMethods); + return manager.findEffectiveNullabilityInfo(fooMethods[0]); + } public void testCannotAddNotNullToNullable() { assertNotNull(myManager);