review follow-up: move teh getConstantSearch() api to already existing JavaBuilderExtension

This commit is contained in:
Eugene Zhuravlev
2018-02-22 13:55:01 +01:00
parent 8022345038
commit 8227d8e2dd
3 changed files with 19 additions and 20 deletions
@@ -1,17 +0,0 @@
// 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 org.jetbrains.jps.builders.java;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jps.builders.java.dependencyView.Callbacks;
import org.jetbrains.jps.incremental.CompileContext;
/**
* Implement this interface to provide additional constant affection resolver that will be notified when a constant is changed.
* Implementations are registered as Java services, by creating a file
* META-INF/services/org.jetbrains.jps.builders.java.ConstantSearchProvider
* containing the qualified name of your implementation class.
*/
public interface ConstantSearchProvider {
@NotNull
Callbacks.ConstantAffectionResolver getConstantSearch(@NotNull CompileContext context);
}
@@ -16,6 +16,9 @@
package org.jetbrains.jps.builders.java;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.builders.java.dependencyView.Callbacks;
import org.jetbrains.jps.incremental.CompileContext;
import org.jetbrains.jps.model.module.JpsModuleType;
import java.io.File;
@@ -43,4 +46,14 @@ public abstract class JavaBuilderExtension {
public Set<? extends JpsModuleType<?>> getCompilableModuleTypes() {
return Collections.emptySet();
}
/**
* Override this method to provide additional constant search capabilities that would augment the logic already built into the java builder
* Results from ConstantAffectionResolver extensions will be combined with the results found by the java ConstantAffectionResolver.
* The implementation should expect asynchronous execution.
*/
@Nullable
public Callbacks.ConstantAffectionResolver getConstantSearch(CompileContext context) {
return null;
}
}
@@ -28,7 +28,7 @@ import org.jetbrains.jps.builders.*;
import org.jetbrains.jps.builders.impl.BuildOutputConsumerImpl;
import org.jetbrains.jps.builders.impl.BuildTargetChunk;
import org.jetbrains.jps.builders.impl.DirtyFilesHolderBase;
import org.jetbrains.jps.builders.java.ConstantSearchProvider;
import org.jetbrains.jps.builders.java.JavaBuilderExtension;
import org.jetbrains.jps.builders.java.JavaBuilderUtil;
import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor;
import org.jetbrains.jps.builders.java.dependencyView.Callbacks;
@@ -441,8 +441,11 @@ public class IncProjectBuilder {
else {
final List<Callbacks.ConstantAffectionResolver> resolvers = getResolvers();
resolvers.add(javaResolver);
for (ConstantSearchProvider provider : JpsServiceManager.getInstance().getExtensions(ConstantSearchProvider.class)) {
resolvers.add(provider.getConstantSearch(context));
for (JavaBuilderExtension provider : JpsServiceManager.getInstance().getExtensions(JavaBuilderExtension.class)) {
final Callbacks.ConstantAffectionResolver extResolver = provider.getConstantSearch(context);
if (extResolver != null) {
resolvers.add(extResolver);
}
}
JavaBuilderUtil.CONSTANT_SEARCH_SERVICE.set(context, resolvers.size() == 1? resolvers.get(0) : new CompositeConstantResolver(resolvers));
}