From 20e840af37897783802b9908021a0ccd7976bbaf Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Tue, 12 Sep 2017 15:02:47 +0300 Subject: [PATCH] [java] extends project model modifier API with an ability to add exported dependencies --- .../JavaProjectModelModificationService.java | 21 +++++++--- .../roots/JavaProjectModelModifier.java | 38 ++++++++++++------- .../roots/impl/IdeaProjectModelModifier.java | 31 ++++++++++----- ...vaProjectModelModificationServiceImpl.java | 30 +++++++-------- 4 files changed, 75 insertions(+), 45 deletions(-) diff --git a/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModificationService.java b/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModificationService.java index e3f65a976f47..1b8e92785c8a 100644 --- a/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModificationService.java +++ b/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModificationService.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -45,7 +45,17 @@ public abstract class JavaProjectModelModificationService { return addDependency(from, to, DependencyScope.COMPILE); } - public abstract Promise addDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope); + public Promise addDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope) { + return addDependency(from, to, scope, false); + } + + public abstract Promise addDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope, boolean exported); + + public Promise addDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope) { + return addDependency(from, library, scope, false); + } + + public abstract Promise addDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope, boolean exported); public Promise addDependency(@NotNull Module from, @NotNull ExternalLibraryDescriptor libraryDescriptor) { return addDependency(from, libraryDescriptor, DependencyScope.COMPILE); @@ -55,10 +65,9 @@ public abstract class JavaProjectModelModificationService { return addDependency(Collections.singletonList(from), descriptor, scope); } - public abstract Promise addDependency(@NotNull Collection from, @NotNull ExternalLibraryDescriptor libraryDescriptor, + public abstract Promise addDependency(@NotNull Collection from, + @NotNull ExternalLibraryDescriptor libraryDescriptor, @NotNull DependencyScope scope); - public abstract Promise addDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope); - public abstract Promise changeLanguageLevel(@NotNull Module module, @NotNull LanguageLevel languageLevel); -} +} \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModifier.java b/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModifier.java index e38e1091a6f8..678877e6ebff 100644 --- a/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModifier.java +++ b/java/java-impl/src/com/intellij/openapi/roots/JavaProjectModelModifier.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2015 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -45,9 +45,31 @@ public abstract class JavaProjectModelModifier { * @return {@link Promise} instance if dependencies between these modules can be handled by this dependencies management system or * {@code null} otherwise */ + @Nullable + public Promise addModuleDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope, boolean exported) { + return addModuleDependency(from, to, scope); + } + @Nullable public abstract Promise addModuleDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope); + /** + * Implementation of this method should add dependency from module {@code from} to {@code library} with scope {@code scope} accordingly + * to this dependencies management system. If it takes some time to propagate changes in the external project configuration to IDEA's + * project model the method may schedule this work for asynchronous execution and return {@link Promise} instance which will be fulfilled + * when the work is done. + * + * @return {@link Promise} instance if dependencies between these modules can be handled by this dependencies management system or + * {@code null} otherwise + */ + @Nullable + public Promise addLibraryDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope, boolean exported) { + return addLibraryDependency(from, library, scope); + } + + @Nullable + public abstract Promise addLibraryDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope); + /** * Implementation of this method should add dependency from modules {@code modules} to an external library with scope {@code scope} accordingly * to this dependencies management system. If it takes some time to propagate changes in the external project configuration to IDEA's @@ -62,18 +84,6 @@ public abstract class JavaProjectModelModifier { @NotNull ExternalLibraryDescriptor descriptor, @NotNull DependencyScope scope); - /** - * Implementation of this method should add dependency from module {@code from} to {@code library} with scope {@code scope} accordingly - * to this dependencies management system. If it takes some time to propagate changes in the external project configuration to IDEA's - * project model the method may schedule this work for asynchronous execution and return {@link Promise} instance which will be fulfilled - * when the work is done. - * - * @return {@link Promise} instance if dependencies between these modules can be handled by this dependencies management system or - * {@code null} otherwise - */ - @Nullable - public abstract Promise addLibraryDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope); - /** * Implementation of this method should set language level for module {@code module} to the specified value accordingly * to this dependencies management system. If it takes some time to propagate changes in the external project configuration to IDEA's @@ -84,4 +94,4 @@ public abstract class JavaProjectModelModifier { */ @Nullable public abstract Promise changeLanguageLevel(@NotNull Module module, @NotNull LanguageLevel level); -} +} \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/openapi/roots/impl/IdeaProjectModelModifier.java b/java/java-impl/src/com/intellij/openapi/roots/impl/IdeaProjectModelModifier.java index 315d1c3b8bae..1f1e3c5beb89 100644 --- a/java/java-impl/src/com/intellij/openapi/roots/impl/IdeaProjectModelModifier.java +++ b/java/java-impl/src/com/intellij/openapi/roots/impl/IdeaProjectModelModifier.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -44,6 +44,7 @@ import java.util.List; */ public class IdeaProjectModelModifier extends JavaProjectModelModifier { private static final Logger LOG = Logger.getInstance(IdeaProjectModelModifier.class); + private final Project myProject; public IdeaProjectModelModifier(Project project) { @@ -51,11 +52,27 @@ public class IdeaProjectModelModifier extends JavaProjectModelModifier { } @Override - public Promise addModuleDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope) { - ModuleRootModificationUtil.addDependency(from, to, scope, false); + public Promise addModuleDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope, boolean exported) { + ModuleRootModificationUtil.addDependency(from, to, scope, exported); return Promises.resolvedPromise(null); } + @Override + public Promise addModuleDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope) { + return addModuleDependency(from, to, scope, false); + } + + @Override + public Promise addLibraryDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope, boolean exported) { + OrderEntryUtil.addLibraryToRoots(from, library); + return Promises.resolvedPromise(null); + } + + @Override + public Promise addLibraryDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope) { + return addLibraryDependency(from, library, scope, false); + } + @Override public Promise addExternalLibraryDependency(@NotNull final Collection modules, @NotNull final ExternalLibraryDescriptor descriptor, @@ -91,12 +108,6 @@ public class IdeaProjectModelModifier extends JavaProjectModelModifier { return Promises.resolvedPromise(null); } - @Override - public Promise addLibraryDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope) { - OrderEntryUtil.addLibraryToRoots(from, library); - return Promises.resolvedPromise(null); - } - @Override public Promise changeLanguageLevel(@NotNull Module module, @NotNull LanguageLevel level) { final LanguageLevel moduleLevel = LanguageLevelModuleExtensionImpl.getInstance(module).getLanguageLevel(); @@ -111,4 +122,4 @@ public class IdeaProjectModelModifier extends JavaProjectModelModifier { } return Promises.resolvedPromise(null); } -} +} \ No newline at end of file diff --git a/java/java-impl/src/com/intellij/openapi/roots/impl/JavaProjectModelModificationServiceImpl.java b/java/java-impl/src/com/intellij/openapi/roots/impl/JavaProjectModelModificationServiceImpl.java index 2c4d80fe1ca6..5ee8151fc94f 100644 --- a/java/java-impl/src/com/intellij/openapi/roots/impl/JavaProjectModelModificationServiceImpl.java +++ b/java/java-impl/src/com/intellij/openapi/roots/impl/JavaProjectModelModificationServiceImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2016 JetBrains s.r.o. + * Copyright 2000-2017 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. @@ -40,9 +40,20 @@ public class JavaProjectModelModificationServiceImpl extends JavaProjectModelMod } @Override - public Promise addDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope) { + public Promise addDependency(@NotNull Module from, @NotNull Module to, @NotNull DependencyScope scope, boolean exported) { for (JavaProjectModelModifier modifier : getModelModifiers()) { - Promise promise = modifier.addModuleDependency(from, to, scope); + Promise promise = modifier.addModuleDependency(from, to, scope, exported); + if (promise != null) { + return promise; + } + } + return Promises.rejectedPromise(); + } + + @Override + public Promise addDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope, boolean exported) { + for (JavaProjectModelModifier modifier : getModelModifiers()) { + Promise promise = modifier.addLibraryDependency(from, library, scope, exported); if (promise != null) { return promise; } @@ -61,17 +72,6 @@ public class JavaProjectModelModificationServiceImpl extends JavaProjectModelMod return Promises.rejectedPromise(); } - @Override - public Promise addDependency(@NotNull Module from, @NotNull Library library, @NotNull DependencyScope scope) { - for (JavaProjectModelModifier modifier : getModelModifiers()) { - Promise promise = modifier.addLibraryDependency(from, library, scope); - if (promise != null) { - return promise; - } - } - return Promises.rejectedPromise(); - } - @Override public Promise changeLanguageLevel(@NotNull Module module, @NotNull LanguageLevel languageLevel) { for (JavaProjectModelModifier modifier : getModelModifiers()) { @@ -87,4 +87,4 @@ public class JavaProjectModelModificationServiceImpl extends JavaProjectModelMod private JavaProjectModelModifier[] getModelModifiers() { return JavaProjectModelModifier.EP_NAME.getExtensions(myProject); } -} +} \ No newline at end of file