From fb358f0ccebf8cda16f053068cbdaa95343e30bd Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Thu, 28 Apr 2016 18:28:48 +0300 Subject: [PATCH] test for not loading AST unnecessarily --- .../inspection/magic/withLibrary/expected.xml | 9 ++++ .../inspection/magic/withLibrary/src/X.java | 29 ++++++++++++ .../MagicConstantInspectionTest.java | 47 ++++++++++++++++++- 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 java/java-tests/testData/inspection/magic/withLibrary/expected.xml create mode 100644 java/java-tests/testData/inspection/magic/withLibrary/src/X.java diff --git a/java/java-tests/testData/inspection/magic/withLibrary/expected.xml b/java/java-tests/testData/inspection/magic/withLibrary/expected.xml new file mode 100644 index 000000000000..33405f685a37 --- /dev/null +++ b/java/java-tests/testData/inspection/magic/withLibrary/expected.xml @@ -0,0 +1,9 @@ + + + + X.java + 23 + Magic Constant + Should be one of: WindowConstants.DO_NOTHING_ON_CLOSE, WindowConstants.HIDE_ON_CLOSE, WindowConstants.DISPOSE_ON_CLOSE, WindowConstants.EXIT_ON_CLOSE + + diff --git a/java/java-tests/testData/inspection/magic/withLibrary/src/X.java b/java/java-tests/testData/inspection/magic/withLibrary/src/X.java new file mode 100644 index 000000000000..6ebaa13e932e --- /dev/null +++ b/java/java-tests/testData/inspection/magic/withLibrary/src/X.java @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2011 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. + */ +import org.intellij.lang.annotations.MagicConstant; + +import java.awt.*; +import javax.swing.*; + +public class X { + void f(JFrame frame) { + frame.setDefaultCloseOperation(2); // there is beanInfo in in JFrame.java, have to parse (but added to exceptions, so ok) + } + + void f(Frame frame) { + frame.setState(2); // no beanInfo in Frame.java, no need to parse + } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInspection/MagicConstantInspectionTest.java b/java/java-tests/testSrc/com/intellij/codeInspection/MagicConstantInspectionTest.java index 3d309cecc51f..7cf6062df848 100644 --- a/java/java-tests/testSrc/com/intellij/codeInspection/MagicConstantInspectionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInspection/MagicConstantInspectionTest.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * 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. @@ -28,15 +28,38 @@ import com.intellij.JavaTestUtil; import com.intellij.codeInspection.ex.LocalInspectionToolWrapper; import com.intellij.codeInspection.magicConstant.MagicConstantInspection; import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.vfs.LocalFileSystem; +import com.intellij.openapi.vfs.VfsUtilCore; +import com.intellij.openapi.vfs.VirtualFile; +import com.intellij.openapi.vfs.VirtualFileVisitor; +import com.intellij.psi.JavaPsiFacade; +import com.intellij.psi.PsiClass; +import com.intellij.psi.impl.PsiManagerEx; +import com.intellij.psi.impl.source.PsiClassImpl; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.testFramework.FileTreeAccessFilter; import com.intellij.testFramework.InspectionTestCase; import com.intellij.testFramework.PsiTestUtil; +import org.jetbrains.annotations.NotNull; + +import java.io.File; public class MagicConstantInspectionTest extends InspectionTestCase { + + private FileTreeAccessFilter myFilter; + @Override protected String getTestDataPath() { return JavaTestUtil.getJavaTestDataPath() + "/inspection"; } + @Override + protected void setUp() throws Exception { + super.setUp(); + myFilter = new FileTreeAccessFilter(); + PsiManagerEx.getInstanceEx(getProject()).setAssertOnFileLoadingFilter(myFilter, myTestRootDisposable); + } + @Override protected Sdk getTestProjectSdk() { return PsiTestUtil.addJdkAnnotations(super.getTestProjectSdk()); @@ -46,5 +69,27 @@ public class MagicConstantInspectionTest extends InspectionTestCase { doTest("magic/" + getTestName(true), new LocalInspectionToolWrapper(new MagicConstantInspection()), "jdk 1.7"); } + @Override + protected void setupRootModel(@NotNull String testDir, @NotNull VirtualFile[] sourceDir, String sdkName) { + super.setupRootModel(testDir, sourceDir, sdkName); + VirtualFile projectDir = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(new File(testDir)); + // allow to load AST for all files to highlight + VfsUtilCore.visitChildrenRecursively(projectDir, new VirtualFileVisitor() { + @Override + public boolean visitFile(@NotNull VirtualFile v) { + myFilter.allowTreeAccessForFile(v); + return super.visitFile(v); + } + }); + // and JFrame + PsiClass cls = JavaPsiFacade.getInstance(getProject()).findClass("javax.swing.JFrame", GlobalSearchScope.allScope(getProject())); + PsiClass aClass = (PsiClass)cls.getNavigationElement(); + assertTrue(aClass instanceof PsiClassImpl); // must to have sources + + myFilter.allowTreeAccessForFile(aClass.getContainingFile().getVirtualFile()); + } + public void testSimple() throws Exception { doTest(); } + // test that the optimisation for not loading AST works + public void testWithLibrary() throws Exception { doTest(); } }