diff --git a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java index d6df75cd5c04..e34390e6f645 100644 --- a/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java +++ b/java/execution/impl/src/com/intellij/execution/RunConfigurationExtension.java @@ -31,6 +31,8 @@ import com.intellij.openapi.options.SettingsEditorGroup; import com.intellij.openapi.util.InvalidDataException; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.WriteExternalException; +import com.intellij.psi.PsiElement; +import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.ui.LayeredIcon; import org.jdom.Element; import org.jetbrains.annotations.Nullable; @@ -58,6 +60,21 @@ public abstract class RunConfigurationExtension { public abstract void patchConfiguration(RunConfigurationBase runJavaConfiguration); public abstract void checkConfiguration(RunConfigurationBase runJavaConfiguration) throws RuntimeConfigurationException; + public RefactoringElementListener wrapElementListener(PsiElement element, + RunConfigurationBase runJavaConfiguration, + RefactoringElementListener listener) { + return listener; + } + + public static RefactoringElementListener wrapRefactoringElementListener(PsiElement element, + RunConfigurationBase runConfigurationBase, + RefactoringElementListener listener) { + for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) { + listener = extension.wrapElementListener(element, runConfigurationBase, listener); + } + return listener; + } + public static void appendEditors(RunConfigurationBase configuration, SettingsEditorGroup group) { for (RunConfigurationExtension extension : Extensions.getExtensions(EP_NAME)) { final SettingsEditor editor = extension.createEditor(configuration); diff --git a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java index 901685def43a..5287087da48e 100644 --- a/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java +++ b/java/execution/impl/src/com/intellij/execution/application/ApplicationConfiguration.java @@ -103,8 +103,9 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration public static final String[] DEFAULT_NULLABLES = {AnnotationUtil.NULLABLE, "javax.annotation.Nullable", "edu.umd.cs.findbugs.annotations.Nullable"}; public static final String[] DEFAULT_NOT_NULLS = {AnnotationUtil.NOT_NULL, "javax.annotation.Nonnull", "edu.umd.cs.findbugs.annotations.NonNull"}; + private static final Object LOCK = new Object(); + public static NullableNotNullManager getInstance(Project project) { return ServiceManager.getService(project, NullableNotNullManager.class); } @@ -90,13 +92,6 @@ public class NullableNotNullManager implements PersistentStateComponent myDefaultNotNull = defaultNotNull; } - public List getNullables() { - if (myNullables.isEmpty()) { - Collections.addAll(myNullables, DEFAULT_NULLABLES); - } - return myNullables; - } - public boolean isNullable(PsiModifierListOwner owner, boolean checkBases) { return AnnotationUtil.isAnnotated(owner, getNullables(), checkBases); } @@ -105,9 +100,24 @@ public class NullableNotNullManager implements PersistentStateComponent return AnnotationUtil.isAnnotated(owner, getNotNulls(), checkBases); } + public List getNullables() { + if (myNullables.isEmpty()) { + synchronized (LOCK) { + if (myNullables.isEmpty()) { + Collections.addAll(myNullables, DEFAULT_NULLABLES); + } + } + } + return myNullables; + } + public List getNotNulls() { if (myNotNulls.isEmpty()) { - Collections.addAll(myNotNulls, DEFAULT_NOT_NULLS); + synchronized (LOCK) { + if (myNotNulls.isEmpty()) { + Collections.addAll(myNotNulls, DEFAULT_NOT_NULLS); + } + } } return myNotNulls; } diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java index b9000c3ce422..dd3c56934bc0 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java @@ -93,7 +93,8 @@ public class JUnitConfiguration extends ModuleBasedConfiguration