From 3c2608408e448b1eb66703afe53f1ce2fcfcf6aa Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Tue, 7 Jul 2020 16:48:36 +0200 Subject: [PATCH] compile-time constant field change affects static import usages (IDEA-245262) GitOrigin-RevId: 9d472bdad672217f92a17766165ef51e4eea4947 --- .../imports/staticImportConstantFieldChanged.log | 12 ++++++++++++ .../src/package1/A.java | 5 +++++ .../src/package1/A.java.new | 5 +++++ .../src/package1/B.java | 9 +++++++++ .../jps/builders/java/dependencyView/Mappings.java | 5 +++-- .../testSrc/org/jetbrains/ether/ImportTest.java | 5 +++++ 6 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged.log create mode 100644 java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java create mode 100644 java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java.new create mode 100644 java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/B.java diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged.log b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged.log new file mode 100644 index 000000000000..6a14d8f283b8 --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged.log @@ -0,0 +1,12 @@ +Cleaning output files: +out/production/StaticImportConstantFieldChanged/package1/A.class +End of files +Compiling files: +src/package1/A.java +End of files +Cleaning output files: +out/production/StaticImportConstantFieldChanged/package1/B.class +End of files +Compiling files: +src/package1/B.java +End of files \ No newline at end of file diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java new file mode 100644 index 000000000000..3252db31208e --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java @@ -0,0 +1,5 @@ +package package1; + +public class A { + public static final int FIELD = 100; +} diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java.new b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java.new new file mode 100644 index 000000000000..b7286b28d28a --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/A.java.new @@ -0,0 +1,5 @@ +package package1; + +public class A { + public static final int FIELD = 200; +} diff --git a/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/B.java b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/B.java new file mode 100644 index 000000000000..217f97165c97 --- /dev/null +++ b/java/java-tests/testData/compileServer/incremental/imports/staticImportConstantFieldChanged/src/package1/B.java @@ -0,0 +1,9 @@ +package package1; + +import static package1.A.FIELD; + +public class B { + void foo() { + String msg = "Value " + FIELD; + } +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java index 029d025ff82d..8c7711ecd0e0 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/Mappings.java @@ -1699,11 +1699,12 @@ public class Mappings { if (harmful || valueChanged || becameLessAccessible) { if (myProcessConstantsIncrementally) { - debug("Potentially inlined field changed it's access or value => affecting field usages"); + debug("Potentially inlined field changed its access or value => affecting field usages and static member import usages"); myFuture.affectFieldUsages(field, propagated.get(), field.createUsage(myContext, it.name), state.myAffectedUsages, state.myDependants); + myFuture.affectStaticMemberImportUsages(field.name, it.name, propagated.get(), state.myAffectedUsages, state.myDependants); } else { - debug("Potentially inlined field changed it's access or value => a switch to non-incremental mode requested"); + debug("Potentially inlined field changed its access or value => a switch to non-incremental mode requested"); if (!incrementalDecision(it.name, field, myAffectedFiles, myFilesToCompile, myFilter)) { debug("End of Differentiate, returning false"); return false; diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/ImportTest.java b/jps/jps-builders/testSrc/org/jetbrains/ether/ImportTest.java index 2291d815ee84..c9905d8ce128 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/ImportTest.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/ImportTest.java @@ -41,6 +41,11 @@ public class ImportTest extends IncrementalTestCase { doTestBuild(1).assertFailed(); } + public void testStaticImportConstantFieldChanged() { + setupInitialProject(); + doTestBuild(1).assertSuccessful(); + } + public void testUnusedStaticImportFieldBecameNonstatic() { setupInitialProject(); setupModules();