mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
reset build data for particular project if set of compiler excludes changes (IDEA-129176)
This commit is contained in:
@@ -30,7 +30,9 @@ import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ApplicationNamesInfo;
|
||||
import com.intellij.openapi.compiler.CompilerBundle;
|
||||
import com.intellij.openapi.compiler.CompilerManager;
|
||||
import com.intellij.openapi.compiler.options.ExcludeEntryDescription;
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration;
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
@@ -90,7 +92,7 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
|
||||
private final List<CompiledPattern> myNegatedCompiledPatterns = new ArrayList<CompiledPattern>();
|
||||
private boolean myWildcardPatternsInitialized = false;
|
||||
private final Project myProject;
|
||||
private final ExcludedEntriesConfiguration myExcludedEntriesConfiguration;
|
||||
private final ExcludesConfigNotificationsWrapper<ExcludedEntriesConfiguration> myExcludesConfiguration;
|
||||
|
||||
private final Collection<BackendCompiler> myRegisteredCompilers = new ArrayList<BackendCompiler>();
|
||||
private JavacCompiler JAVAC_EXTERNAL_BACKEND;
|
||||
@@ -113,8 +115,8 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
|
||||
|
||||
public CompilerConfigurationImpl(Project project) {
|
||||
myProject = project;
|
||||
myExcludedEntriesConfiguration = new ExcludedEntriesConfiguration();
|
||||
Disposer.register(project, myExcludedEntriesConfiguration);
|
||||
myExcludesConfiguration = new ExcludesConfigNotificationsWrapper<ExcludedEntriesConfiguration>(project, new ExcludedEntriesConfiguration());
|
||||
Disposer.register(project, myExcludesConfiguration.getDelegate());
|
||||
MessageBusConnection connection = project.getMessageBus().connect(project);
|
||||
connection.subscribe(ProjectTopics.MODULES, new ModuleAdapter() {
|
||||
@Override
|
||||
@@ -153,8 +155,8 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
|
||||
JpsJavaCompilerConfigurationSerializer.ENABLED, String.valueOf(myAddNotNullAssertions));
|
||||
}
|
||||
|
||||
if (myExcludedEntriesConfiguration.getExcludeEntryDescriptions().length > 0) {
|
||||
myExcludedEntriesConfiguration.writeExternal(addChild(state, JpsJavaCompilerConfigurationSerializer.EXCLUDE_FROM_COMPILE));
|
||||
if (myExcludesConfiguration.getExcludeEntryDescriptions().length > 0) {
|
||||
myExcludesConfiguration.getDelegate().writeExternal(addChild(state, JpsJavaCompilerConfigurationSerializer.EXCLUDE_FROM_COMPILE));
|
||||
}
|
||||
|
||||
final Element newChild = addChild(state, JpsJavaCompilerConfigurationSerializer.RESOURCE_EXTENSIONS);
|
||||
@@ -390,13 +392,13 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExcludedEntriesConfiguration getExcludedEntriesConfiguration() {
|
||||
return myExcludedEntriesConfiguration;
|
||||
public ExcludesConfiguration getExcludedEntriesConfiguration() {
|
||||
return myExcludesConfiguration;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExcludedFromCompilation(final VirtualFile virtualFile) {
|
||||
return myExcludedEntriesConfiguration.isExcluded(virtualFile);
|
||||
return myExcludesConfiguration.isExcluded(virtualFile);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -661,7 +663,7 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
|
||||
|
||||
Element node = parentNode.getChild(JpsJavaCompilerConfigurationSerializer.EXCLUDE_FROM_COMPILE);
|
||||
if (node != null) {
|
||||
myExcludedEntriesConfiguration.readExternal(node);
|
||||
myExcludesConfiguration.getDelegate().readExternal(node);
|
||||
}
|
||||
|
||||
try {
|
||||
@@ -984,4 +986,64 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements
|
||||
return child;
|
||||
}
|
||||
|
||||
private static class ExcludesConfigNotificationsWrapper<T extends ExcludesConfiguration> implements ExcludesConfiguration {
|
||||
private final Project myProject;
|
||||
private final T myDelegate;
|
||||
|
||||
public ExcludesConfigNotificationsWrapper(@NotNull Project project, @NotNull T delegate) {
|
||||
myProject = project;
|
||||
myDelegate = delegate;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public T getDelegate() {
|
||||
return myDelegate;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ExcludeEntryDescription[] getExcludeEntryDescriptions() {
|
||||
return myDelegate.getExcludeEntryDescriptions();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addExcludeEntryDescription(ExcludeEntryDescription description) {
|
||||
try {
|
||||
myDelegate.addExcludeEntryDescription(description);
|
||||
}
|
||||
finally {
|
||||
BuildManager.getInstance().clearState(myProject);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeExcludeEntryDescription(ExcludeEntryDescription description) {
|
||||
try {
|
||||
myDelegate.removeExcludeEntryDescription(description);
|
||||
}
|
||||
finally {
|
||||
BuildManager.getInstance().clearState(myProject);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeAllExcludeEntryDescriptions() {
|
||||
try {
|
||||
myDelegate.removeAllExcludeEntryDescriptions();
|
||||
}
|
||||
finally {
|
||||
BuildManager.getInstance().clearState(myProject);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean containsExcludeEntryDescription(ExcludeEntryDescription description) {
|
||||
return myDelegate.containsExcludeEntryDescription(description);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExcluded(VirtualFile virtualFile) {
|
||||
return myDelegate.isExcluded(virtualFile);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,7 +16,6 @@
|
||||
package com.intellij.compiler.impl;
|
||||
|
||||
import com.intellij.compiler.CompilerConfiguration;
|
||||
import com.intellij.compiler.CompilerConfigurationImpl;
|
||||
import com.intellij.ide.errorTreeView.ErrorTreeElement;
|
||||
import com.intellij.ide.errorTreeView.ErrorTreeNodeDescriptor;
|
||||
import com.intellij.ide.errorTreeView.GroupingElement;
|
||||
@@ -51,7 +50,7 @@ class ExcludeFromCompileAction extends AnAction {
|
||||
|
||||
if (file != null && file.isValid()) {
|
||||
ExcludeEntryDescription description = new ExcludeEntryDescription(file, false, true, myProject);
|
||||
((CompilerConfigurationImpl) CompilerConfiguration.getInstance(myProject)).getExcludedEntriesConfiguration().addExcludeEntryDescription(description);
|
||||
CompilerConfiguration.getInstance(myProject).getExcludedEntriesConfiguration().addExcludeEntryDescription(description);
|
||||
FileStatusManager.getInstance(myProject).fileStatusesChanged();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.intellij.compiler.options;
|
||||
import com.intellij.openapi.compiler.CompileContext;
|
||||
import com.intellij.openapi.compiler.Compiler;
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration;
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.util.xmlb.XmlSerializerUtil;
|
||||
@@ -66,7 +67,7 @@ public class ValidationConfiguration implements PersistentStateComponent<Validat
|
||||
return ServiceManager.getService(project, ValidationConfiguration.class);
|
||||
}
|
||||
|
||||
public static ExcludedEntriesConfiguration getExcludedEntriesConfiguration(Project project) {
|
||||
public static ExcludesConfiguration getExcludedEntriesConfiguration(Project project) {
|
||||
return ServiceManager.getService(project, ExcludedFromValidationConfiguration.class);
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -33,7 +33,7 @@ import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.application.ReadActionProcessor;
|
||||
import com.intellij.openapi.application.Result;
|
||||
import com.intellij.openapi.compiler.*;
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -142,7 +142,7 @@ public class InspectionValidatorWrapper implements Validator {
|
||||
if (project.isDefault() || !ValidationConfiguration.shouldValidate(this, context)) {
|
||||
return ProcessingItem.EMPTY_ARRAY;
|
||||
}
|
||||
final ExcludedEntriesConfiguration excludedEntriesConfiguration = ValidationConfiguration.getExcludedEntriesConfiguration(project);
|
||||
final ExcludesConfiguration excludesConfiguration = ValidationConfiguration.getExcludedEntriesConfiguration(project);
|
||||
final List<ProcessingItem> items = new ReadAction<List<ProcessingItem>>() {
|
||||
@Override
|
||||
protected void run(final Result<List<ProcessingItem>> result) {
|
||||
@@ -159,7 +159,7 @@ public class InspectionValidatorWrapper implements Validator {
|
||||
}
|
||||
|
||||
if (myCompilerManager.isExcludedFromCompilation(file) ||
|
||||
excludedEntriesConfiguration.isExcluded(file)) {
|
||||
excludesConfiguration.isExcluded(file)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package com.intellij.compiler;
|
||||
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -62,5 +62,5 @@ public abstract class CompilerConfiguration {
|
||||
|
||||
public abstract void setAddNotNullAssertions(boolean enabled);
|
||||
|
||||
public abstract ExcludedEntriesConfiguration getExcludedEntriesConfiguration();
|
||||
public abstract ExcludesConfiguration getExcludedEntriesConfiguration();
|
||||
}
|
||||
+2
-2
@@ -46,7 +46,7 @@ public class ExcludedEntriesConfigurable implements UnnamedConfigurable {
|
||||
private final Project myProject;
|
||||
private final ArrayList<ExcludeEntryDescription> myExcludeEntryDescriptions = new ArrayList<ExcludeEntryDescription>();
|
||||
private final FileChooserDescriptor myDescriptor;
|
||||
private final ExcludedEntriesConfiguration myConfiguration;
|
||||
private final ExcludesConfiguration myConfiguration;
|
||||
private ExcludedEntriesPanel myExcludedEntriesPanel;
|
||||
|
||||
public ExcludedEntriesConfigurable(Project project) {
|
||||
@@ -54,7 +54,7 @@ public class ExcludedEntriesConfigurable implements UnnamedConfigurable {
|
||||
CompilerConfiguration.getInstance(project).getExcludedEntriesConfiguration());
|
||||
}
|
||||
|
||||
public ExcludedEntriesConfigurable(Project project, FileChooserDescriptor descriptor, final ExcludedEntriesConfiguration configuration) {
|
||||
public ExcludedEntriesConfigurable(Project project, FileChooserDescriptor descriptor, final ExcludesConfiguration configuration) {
|
||||
myDescriptor = descriptor;
|
||||
myConfiguration = configuration;
|
||||
myProject = project;
|
||||
|
||||
+8
-1
@@ -31,7 +31,8 @@ import java.util.LinkedHashSet;
|
||||
/**
|
||||
* @author nik
|
||||
*/
|
||||
public class ExcludedEntriesConfiguration implements PersistentStateComponent<ExcludedEntriesConfiguration>, JDOMExternalizable, Disposable {
|
||||
public class ExcludedEntriesConfiguration implements PersistentStateComponent<ExcludedEntriesConfiguration>, JDOMExternalizable, Disposable,
|
||||
ExcludesConfiguration {
|
||||
@NonNls private static final String FILE = "file";
|
||||
@NonNls private static final String DIRECTORY = "directory";
|
||||
@NonNls private static final String URL = "url";
|
||||
@@ -39,6 +40,7 @@ public class ExcludedEntriesConfiguration implements PersistentStateComponent<Ex
|
||||
private final Collection<ExcludeEntryDescription> myExcludeEntryDescriptions = new LinkedHashSet<ExcludeEntryDescription>();
|
||||
private ExcludeEntryDescription[] myCachedDescriptions = null;
|
||||
|
||||
@Override
|
||||
public synchronized ExcludeEntryDescription[] getExcludeEntryDescriptions() {
|
||||
if (myCachedDescriptions == null) {
|
||||
myCachedDescriptions = myExcludeEntryDescriptions.toArray(new ExcludeEntryDescription[myExcludeEntryDescriptions.size()]);
|
||||
@@ -46,21 +48,25 @@ public class ExcludedEntriesConfiguration implements PersistentStateComponent<Ex
|
||||
return myCachedDescriptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void addExcludeEntryDescription(ExcludeEntryDescription description) {
|
||||
myExcludeEntryDescriptions.add(description);
|
||||
myCachedDescriptions = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void removeExcludeEntryDescription(ExcludeEntryDescription description) {
|
||||
myExcludeEntryDescriptions.remove(description);
|
||||
myCachedDescriptions = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized void removeAllExcludeEntryDescriptions() {
|
||||
myExcludeEntryDescriptions.clear();
|
||||
myCachedDescriptions = null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public synchronized boolean containsExcludeEntryDescription(ExcludeEntryDescription description) {
|
||||
return myExcludeEntryDescriptions.contains(description);
|
||||
}
|
||||
@@ -98,6 +104,7 @@ public class ExcludedEntriesConfiguration implements PersistentStateComponent<Ex
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isExcluded(VirtualFile virtualFile) {
|
||||
for (final ExcludeEntryDescription entryDescription : getExcludeEntryDescriptions()) {
|
||||
VirtualFile descriptionFile = entryDescription.getVirtualFile();
|
||||
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
/*
|
||||
* Copyright 2000-2014 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.
|
||||
*/
|
||||
package com.intellij.openapi.compiler.options;
|
||||
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
|
||||
/**
|
||||
* @author Eugene Zhuravlev
|
||||
* Date: 12-Nov-14
|
||||
*/
|
||||
public interface ExcludesConfiguration {
|
||||
ExcludeEntryDescription[] getExcludeEntryDescriptions();
|
||||
|
||||
void addExcludeEntryDescription(ExcludeEntryDescription description);
|
||||
|
||||
void removeExcludeEntryDescription(ExcludeEntryDescription description);
|
||||
|
||||
void removeAllExcludeEntryDescriptions();
|
||||
|
||||
boolean containsExcludeEntryDescription(ExcludeEntryDescription description);
|
||||
|
||||
boolean isExcluded(VirtualFile virtualFile);
|
||||
}
|
||||
+2
-2
@@ -17,7 +17,7 @@
|
||||
package org.jetbrains.plugins.groovy.compiler;
|
||||
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfigurable;
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
@@ -62,7 +62,7 @@ public class GroovyCompilerConfigurable implements SearchableConfigurable, Confi
|
||||
}
|
||||
|
||||
private ExcludedEntriesConfigurable createExcludedConfigurable(final Project project) {
|
||||
final ExcludedEntriesConfiguration configuration = myConfig.getExcludeFromStubGeneration();
|
||||
final ExcludesConfiguration configuration = myConfig.getExcludeFromStubGeneration();
|
||||
final ProjectFileIndex index = ProjectRootManager.getInstance(project).getFileIndex();
|
||||
final FileChooserDescriptor descriptor = new FileChooserDescriptor(true, true, false, false, false, true) {
|
||||
@Override
|
||||
|
||||
+3
-2
@@ -18,6 +18,7 @@ package org.jetbrains.plugins.groovy.compiler;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration;
|
||||
import com.intellij.openapi.components.*;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
@@ -58,11 +59,11 @@ public class GroovyCompilerConfiguration implements PersistentStateComponent<Jps
|
||||
return bean;
|
||||
}
|
||||
|
||||
public static ExcludedEntriesConfiguration getExcludeConfiguration(Project project) {
|
||||
public static ExcludesConfiguration getExcludeConfiguration(Project project) {
|
||||
return getInstance(project).myExcludeFromStubGeneration;
|
||||
}
|
||||
|
||||
public ExcludedEntriesConfiguration getExcludeFromStubGeneration() {
|
||||
public ExcludesConfiguration getExcludeFromStubGeneration() {
|
||||
return myExcludeFromStubGeneration;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -18,7 +18,7 @@ package org.jetbrains.idea.maven.importing.configurers;
|
||||
import com.intellij.compiler.CompilerConfiguration;
|
||||
import com.intellij.compiler.CompilerConfigurationImpl;
|
||||
import com.intellij.openapi.compiler.options.ExcludeEntryDescription;
|
||||
import com.intellij.openapi.compiler.options.ExcludedEntriesConfiguration;
|
||||
import com.intellij.openapi.compiler.options.ExcludesConfiguration;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
@@ -50,7 +50,7 @@ public class MavenCompilerConfigurer extends MavenModuleConfigurer {
|
||||
CompilerConfigurationImpl compilerConfiguration = (CompilerConfigurationImpl)CompilerConfiguration.getInstance(project);
|
||||
|
||||
if (!compilerConfiguration.isExcludedFromCompilation(archetypeResourcesDir)) {
|
||||
ExcludedEntriesConfiguration cfg = compilerConfiguration.getExcludedEntriesConfiguration();
|
||||
ExcludesConfiguration cfg = compilerConfiguration.getExcludedEntriesConfiguration();
|
||||
|
||||
cfg.addExcludeEntryDescription(new ExcludeEntryDescription(archetypeResourcesDir, true, false, project));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user