From 56189446b82bc55ba1f7122dc6aef43719631759 Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 23 Jan 2020 13:12:49 +0300 Subject: [PATCH] [jps builds] make ModuleLevelBuilder::getCompilableFileExtensions abstract to ensure that it is implemented It's important to know which files are processed by ModuleLevelBuilder to skip processing irrelevant files in caches for ModuleBuildTarget. Before the change a notification was printed to the log if some builder doesn't override the method. Now it's will be a compilation error, but binary compatibility isn't broken because we will catch AbstractMethodError at runtime. GitOrigin-RevId: fdfed347a2904ee31745f7fdf8210b78bc332a97 --- .../JavaBackwardReferenceIndexBuilder.java | 1 + .../jetbrains/jps/incremental/BuilderRegistry.java | 14 ++++++++------ .../jps/incremental/ModuleLevelBuilder.java | 8 ++------ .../dependencies/DependencyResolvingBuilder.java | 1 + .../instrumentation/ClassProcessingBuilder.java | 2 ++ .../jps/incremental/java/JavaBuilder.java | 1 + .../appengine/build/AppEngineEnhancerBuilder.java | 1 + .../jps/incremental/groovy/GreclipseBuilder.java | 1 + .../jps/incremental/groovy/GroovyBuilder.java | 1 + .../uiDesigner/compiler/FormsBindingManager.java | 1 + .../jps/uiDesigner/compiler/FormsInstrumenter.java | 2 ++ 11 files changed, 21 insertions(+), 12 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/JavaBackwardReferenceIndexBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/JavaBackwardReferenceIndexBuilder.java index a486f6f4eeb2..440f4f220f95 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/JavaBackwardReferenceIndexBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/backwardRefs/JavaBackwardReferenceIndexBuilder.java @@ -62,6 +62,7 @@ public class JavaBackwardReferenceIndexBuilder extends ModuleLevelBuilder { JavaBackwardReferenceIndexWriter.closeIfNeeded(false); } + @NotNull @Override public List getCompilableFileExtensions() { return Collections.emptyList(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java index 7e9943b261aa..02ff6c99159e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/BuilderRegistry.java @@ -55,13 +55,15 @@ public class BuilderRegistry { myTargetBuilders.addAll(service.createBuilders()); final List moduleLevelBuilders = service.createModuleLevelBuilders(); for (ModuleLevelBuilder builder : moduleLevelBuilders) { - List extensions = builder.getCompilableFileExtensions(); - if (extensions == null) { - LOG.info(builder.getClass().getName() + " builder returns 'null' from 'getCompilableFileExtensions' method so files for module-level builders won't be filtered"); - compilableFileExtensions = null; + try { + List extensions = builder.getCompilableFileExtensions(); + if (compilableFileExtensions != null) { + compilableFileExtensions.addAll(extensions); + } } - else if (compilableFileExtensions != null) { - compilableFileExtensions.addAll(extensions); + catch (AbstractMethodError e) { + LOG.info(builder.getClass().getName() + " builder doesn't implement 'getCompilableFileExtensions' method so ModuleBuildTarget will process all files under source roots."); + compilableFileExtensions = null; } myModuleLevelBuilders.get(builder.getCategory()).add(builder); } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java index d68d8c9cb657..be947863d2db 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleLevelBuilder.java @@ -103,13 +103,9 @@ public abstract class ModuleLevelBuilder extends Builder { } /** - * DO NOT RETURN {@code null} from implementation of this method. If some of builders returns {@code null} no filtering - * will be performed for compatibility reasons. - * @return list of extensions (without dot) of files which can be compiled by the builder + * Returns list of extensions (without dot) of files which can be compiled by the builder. */ - public List getCompilableFileExtensions() { - return null; - } + public abstract @NotNull List getCompilableFileExtensions(); public final BuilderCategory getCategory() { return myCategory; diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java index c81e520532fc..b2f87e28202b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/dependencies/DependencyResolvingBuilder.java @@ -55,6 +55,7 @@ public class DependencyResolvingBuilder extends ModuleLevelBuilder{ super(BuilderCategory.INITIAL); } + @NotNull @Override public List getCompilableFileExtensions() { return Collections.emptyList(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/ClassProcessingBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/ClassProcessingBuilder.java index 92d329fd9c05..4c39c14885fd 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/ClassProcessingBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/instrumentation/ClassProcessingBuilder.java @@ -4,6 +4,7 @@ package org.jetbrains.jps.incremental.instrumentation; import com.intellij.compiler.instrumentation.InstrumentationClassFinder; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ProjectPaths; @@ -84,6 +85,7 @@ public abstract class ClassProcessingBuilder extends ModuleLevelBuilder { } } + @NotNull @Override public List getCompilableFileExtensions() { return Collections.emptyList(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index e20b0ed2a7d3..4cc1606ad84a 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -205,6 +205,7 @@ public class JavaBuilder extends ModuleLevelBuilder { } } + @NotNull @Override public List getCompilableFileExtensions() { return COMPILABLE_EXTENSIONS; diff --git a/plugins/google-app-engine/jps-plugin/src/org/jetbrains/jps/appengine/build/AppEngineEnhancerBuilder.java b/plugins/google-app-engine/jps-plugin/src/org/jetbrains/jps/appengine/build/AppEngineEnhancerBuilder.java index 2eb1d78df4e4..6bb5cb9cc30b 100644 --- a/plugins/google-app-engine/jps-plugin/src/org/jetbrains/jps/appengine/build/AppEngineEnhancerBuilder.java +++ b/plugins/google-app-engine/jps-plugin/src/org/jetbrains/jps/appengine/build/AppEngineEnhancerBuilder.java @@ -71,6 +71,7 @@ public class AppEngineEnhancerBuilder extends ModuleLevelBuilder { return doneSomething ? ExitCode.OK : ExitCode.NOTHING_DONE; } + @NotNull @Override public List getCompilableFileExtensions() { return Collections.emptyList(); diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GreclipseBuilder.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GreclipseBuilder.java index e83c8f4a1db9..555ff19dd05d 100644 --- a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GreclipseBuilder.java +++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GreclipseBuilder.java @@ -92,6 +92,7 @@ public class GreclipseBuilder extends ModuleLevelBuilder { } + @NotNull @Override public List getCompilableFileExtensions() { return Arrays.asList("groovy", "java"); diff --git a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java index b411dfa8c164..fd81f3c1a78c 100644 --- a/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java +++ b/plugins/groovy/jps-plugin/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java @@ -168,6 +168,7 @@ public class GroovyBuilder extends ModuleLevelBuilder { return path.endsWith("." + GROOVY_EXTENSION); } + @NotNull @Override public List getCompilableFileExtensions() { return Collections.singletonList(GROOVY_EXTENSION); diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsBindingManager.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsBindingManager.java index 3d80ab4c62b3..088a1e619358 100644 --- a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsBindingManager.java +++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsBindingManager.java @@ -74,6 +74,7 @@ public class FormsBindingManager extends FormsBuilder { return new File(context.getProjectDescriptor().dataManager.getDataPaths().getDataStorageRoot(), "forms_rebuild_required"); } + @NotNull @Override public List getCompilableFileExtensions() { return Collections.singletonList(FORM_EXTENSION); diff --git a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsInstrumenter.java b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsInstrumenter.java index c473443e9f1c..91f2d05504e7 100644 --- a/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsInstrumenter.java +++ b/plugins/ui-designer/jps-plugin/src/org/jetbrains/jps/uiDesigner/compiler/FormsInstrumenter.java @@ -13,6 +13,7 @@ import com.intellij.uiDesigner.lw.CompiledClassPropertiesProvider; import com.intellij.uiDesigner.lw.LwRootContainer; import gnu.trove.THashMap; import gnu.trove.THashSet; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ProjectPaths; @@ -116,6 +117,7 @@ public class FormsInstrumenter extends FormsBuilder { return ExitCode.OK; } + @NotNull @Override public List getCompilableFileExtensions() { return Collections.emptyList();