From a95509a71c30a446a7d9e409a00a17d2a1aa65b6 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 6 Nov 2013 17:18:36 +0400 Subject: [PATCH] extracted method to get/set 'for generated source' option via API --- .../intellij/openapi/roots/JavaProjectRootsUtil.java | 5 ++--- .../jetbrains/jps/incremental/ResourcesTarget.java | 5 ++--- .../jps/model/module/JpsModuleSourceRoot.java | 10 ++++++++++ .../model/module/impl/JpsModuleSourceRootImpl.java | 10 ++++++++++ .../project/manage/ContentRootDataService.java | 11 +++++------ .../roots/ui/configuration/ContentRootPanel.java | 8 ++++---- .../configuration/JavaSourceRootEditHandlerBase.java | 8 ++++---- .../actions/ToggleSourcesStateAction.java | 3 +-- .../src/com/intellij/openapi/roots/SourceFolder.java | 4 ++++ .../intellij/openapi/roots/impl/ContentEntryImpl.java | 2 +- .../intellij/openapi/roots/impl/SourceFolderImpl.java | 10 +++------- .../model/impl/module/content/JpsSourceFolder.java | 6 ++++++ .../idea/maven/importing/MavenFoldersImporter.java | 7 +++---- .../jetbrains/idea/maven/MavenImportingTestCase.java | 5 +++-- .../idea/maven/project/MavenFoldersImporterTest.java | 6 ++++-- 15 files changed, 62 insertions(+), 38 deletions(-) diff --git a/java/java-impl/src/com/intellij/openapi/roots/JavaProjectRootsUtil.java b/java/java-impl/src/com/intellij/openapi/roots/JavaProjectRootsUtil.java index 6a04def9469c..d48b7d185a16 100644 --- a/java/java-impl/src/com/intellij/openapi/roots/JavaProjectRootsUtil.java +++ b/java/java-impl/src/com/intellij/openapi/roots/JavaProjectRootsUtil.java @@ -3,7 +3,6 @@ package com.intellij.openapi.roots; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.impl.SourceFolderImpl; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiCodeFragment; import com.intellij.psi.PsiFile; @@ -39,8 +38,8 @@ public class JavaProjectRootsUtil { for (Module module : ModuleManager.getInstance(project).getModules()) { for (ContentEntry entry : ModuleRootManager.getInstance(module).getContentEntries()) { for (SourceFolder sourceFolder : entry.getSourceFolders(JavaModuleSourceRootTypes.SOURCES)) { - JavaSourceRootProperties properties = (JavaSourceRootProperties)((SourceFolderImpl)sourceFolder).getJpsElement().getProperties(); - if (!properties.isForGeneratedSources()) { + JavaSourceRootProperties properties = sourceFolder.getJpsElement().getProperties(JavaModuleSourceRootTypes.SOURCES); + if (properties != null && !properties.isForGeneratedSources()) { ContainerUtil.addIfNotNull(roots, sourceFolder.getFile()); } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ResourcesTarget.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ResourcesTarget.java index 90348b899685..21c329149400 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ResourcesTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ResourcesTarget.java @@ -32,7 +32,6 @@ import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.indices.IgnoredFileIndex; import org.jetbrains.jps.indices.ModuleExcludeIndex; import org.jetbrains.jps.model.JpsModel; -import org.jetbrains.jps.model.JpsSimpleElement; import org.jetbrains.jps.model.java.JavaResourceRootType; import org.jetbrains.jps.model.java.JavaSourceRootProperties; import org.jetbrains.jps.model.java.JavaSourceRootType; @@ -93,9 +92,9 @@ public final class ResourcesTarget extends JVMModuleBuildTarget excludedRootProviders = JpsServiceManager.getInstance().getExtensions(ExcludedJavaSourceRootProvider.class); - for (JpsTypedModuleSourceRoot> sourceRoot : myModule.getSourceRoots(type)) { + for (JpsTypedModuleSourceRoot sourceRoot : myModule.getSourceRoots(type)) { if (!isExcludedFromCompilation(excludedRootProviders, sourceRoot)) { - final String packagePrefix = sourceRoot.getProperties().getData().getPackagePrefix(); + final String packagePrefix = sourceRoot.getProperties().getPackagePrefix(); final File rootFile = sourceRoot.getFile(); roots.add(new FilteredResourceRootDescriptor(rootFile, this, packagePrefix, computeRootExcludes(rootFile, index))); } diff --git a/jps/model-api/src/org/jetbrains/jps/model/module/JpsModuleSourceRoot.java b/jps/model-api/src/org/jetbrains/jps/model/module/JpsModuleSourceRoot.java index 87af19012421..6e07aa7578b0 100644 --- a/jps/model-api/src/org/jetbrains/jps/model/module/JpsModuleSourceRoot.java +++ b/jps/model-api/src/org/jetbrains/jps/model/module/JpsModuleSourceRoot.java @@ -20,6 +20,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.JpsElement; import java.io.File; +import java.util.Set; /** * @author nik @@ -28,9 +29,18 @@ public interface JpsModuleSourceRoot extends JpsElement { @NotNull JpsModuleSourceRootType getRootType(); + /** + * @return the root properties element or {@code null} if the root type doesn't equal to {@code type} + */ @Nullable

P getProperties(@NotNull JpsModuleSourceRootType

type); + /** + * @return the root properties element or {@code null} if the root type isn't contained in {@code types} + */ + @Nullable +

P getProperties(@NotNull Set> types); + @Nullable

JpsTypedModuleSourceRoot

asTyped(@NotNull JpsModuleSourceRootType

type); diff --git a/jps/model-impl/src/org/jetbrains/jps/model/module/impl/JpsModuleSourceRootImpl.java b/jps/model-impl/src/org/jetbrains/jps/model/module/impl/JpsModuleSourceRootImpl.java index 7ba971b0ade5..f32c8143d391 100644 --- a/jps/model-impl/src/org/jetbrains/jps/model/module/impl/JpsModuleSourceRootImpl.java +++ b/jps/model-impl/src/org/jetbrains/jps/model/module/impl/JpsModuleSourceRootImpl.java @@ -25,6 +25,7 @@ import org.jetbrains.jps.model.module.JpsModuleSourceRootType; import org.jetbrains.jps.model.module.JpsTypedModuleSourceRoot; import java.io.File; +import java.util.Set; /** * @author nik @@ -55,6 +56,15 @@ public class JpsModuleSourceRootImpl

extends JpsCompositeE return null; } + @Nullable + @Override + public

P getProperties(@NotNull Set> types) { + if (types.contains(myRootType)) { + return (P)getProperties(); + } + return null; + } + @Nullable @Override public

JpsTypedModuleSourceRoot

asTyped(@NotNull JpsModuleSourceRootType

type) { diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java index facd97159476..7a6ac2c01c8e 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/project/manage/ContentRootDataService.java @@ -15,13 +15,12 @@ import com.intellij.openapi.externalSystem.util.Order; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.*; -import com.intellij.openapi.roots.impl.SourceFolderImpl; import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jps.model.JpsElement; +import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; import org.jetbrains.jps.model.java.JavaResourceRootType; import org.jetbrains.jps.model.java.JavaSourceRootProperties; import org.jetbrains.jps.model.java.JavaSourceRootType; @@ -184,10 +183,10 @@ public class ContentRootDataService implements ProjectDataService JComponent createFolderComponent(final ContentFolder folder, Color foreground, ModuleSourceRootEditHandler

editor) { final VirtualFile folderFile = folder.getFile(); final VirtualFile contentEntryFile = getContentEntry().getFile(); - final String properties = folder instanceof SourceFolderImpl? StringUtil.notNullize( - editor.getPropertiesString((P)((SourceFolderImpl)folder).getJpsElement().getProperties())) : ""; + final String properties = folder instanceof SourceFolder? StringUtil.notNullize(editor.getPropertiesString((P)((SourceFolder)folder).getJpsElement().getProperties())) : ""; if (folderFile != null && contentEntryFile != null) { String path = folderFile.equals(contentEntryFile)? "." : VfsUtilCore.getRelativePath(folderFile, contentEntryFile, File.separatorChar); HoverHyperlinkLabel hyperlinkLabel = new HoverHyperlinkLabel(path + properties, foreground); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/JavaSourceRootEditHandlerBase.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/JavaSourceRootEditHandlerBase.java index ce2fb6525bdb..7b3f5879e867 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/JavaSourceRootEditHandlerBase.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/JavaSourceRootEditHandlerBase.java @@ -18,14 +18,13 @@ package com.intellij.openapi.roots.ui.configuration; import com.intellij.icons.AllIcons; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.roots.SourceFolder; -import com.intellij.openapi.roots.impl.SourceFolderImpl; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.ui.roots.IconActionComponent; import com.intellij.util.ui.FormBuilder; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.jps.model.JpsElement; +import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; import org.jetbrains.jps.model.java.JavaSourceRootProperties; import org.jetbrains.jps.model.module.JpsModuleSourceRootType; @@ -64,8 +63,9 @@ public abstract class JavaSourceRootEditHandlerBase extends ModuleSourceRootEdit ProjectBundle.message("module.paths.edit.properties.tooltip"), new Runnable() { @Override public void run() { - JpsElement properties = ((SourceFolderImpl)folder).getJpsElement().getProperties(); - SourceRootPropertiesDialog dialog = new SourceRootPropertiesDialog(parentComponent, (JavaSourceRootProperties)properties); + JavaSourceRootProperties properties = folder.getJpsElement().getProperties(JavaModuleSourceRootTypes.SOURCES); + assert properties != null; + SourceRootPropertiesDialog dialog = new SourceRootPropertiesDialog(parentComponent, properties); dialog.show(); if (dialog.isOK()) { callback.onSourceRootPropertiesChanged(folder); diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/actions/ToggleSourcesStateAction.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/actions/ToggleSourcesStateAction.java index 62159b6366f8..c893d048a065 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/actions/ToggleSourcesStateAction.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/actions/ToggleSourcesStateAction.java @@ -20,7 +20,6 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.roots.SourceFolder; -import com.intellij.openapi.roots.impl.SourceFolderImpl; import com.intellij.openapi.roots.ui.configuration.ContentEntryEditor; import com.intellij.openapi.roots.ui.configuration.ContentEntryTreeEditor; import com.intellij.openapi.roots.ui.configuration.ModuleSourceRootEditHandler; @@ -72,7 +71,7 @@ public class ToggleSourcesStateAction

extends ContentEntry else if (!myEditHandler.getRootType().equals(sourceFolder.getRootType())) { P properties; if (myEditHandler.getRootType().getClass().equals(sourceFolder.getRootType().getClass())) { - properties = (P)((SourceFolderImpl)sourceFolder).getJpsElement().getProperties().getBulkModificationSupport().createCopy(); + properties = (P)sourceFolder.getJpsElement().getProperties().getBulkModificationSupport().createCopy(); } else { properties = myEditHandler.getRootType().createDefaultProperties(); diff --git a/platform/projectModel-api/src/com/intellij/openapi/roots/SourceFolder.java b/platform/projectModel-api/src/com/intellij/openapi/roots/SourceFolder.java index 6dd2db42f2c1..a8388a96985c 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/roots/SourceFolder.java +++ b/platform/projectModel-api/src/com/intellij/openapi/roots/SourceFolder.java @@ -16,6 +16,7 @@ package com.intellij.openapi.roots; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.model.module.JpsModuleSourceRoot; import org.jetbrains.jps.model.module.JpsModuleSourceRootType; /** @@ -49,4 +50,7 @@ public interface SourceFolder extends ContentFolder { @NotNull JpsModuleSourceRootType getRootType(); + + @NotNull + JpsModuleSourceRoot getJpsElement(); } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java index 6d2837475607..26e311cf5ebb 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/ContentEntryImpl.java @@ -366,7 +366,7 @@ public class ContentEntryImpl extends RootModelComponentBase implements ContentE element.setAttribute(URL_ATTRIBUTE, myRoot.getUrl()); for (final SourceFolder sourceFolder : mySourceFolders) { if (sourceFolder instanceof SourceFolderImpl) { - JpsModuleRootModelSerializer.saveSourceRoot(element, sourceFolder.getUrl(), ((SourceFolderImpl)sourceFolder).getJpsElement().asTyped()); + JpsModuleRootModelSerializer.saveSourceRoot(element, sourceFolder.getUrl(), sourceFolder.getJpsElement().asTyped()); } } diff --git a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/SourceFolderImpl.java b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/SourceFolderImpl.java index 4f088705df43..4f153d396405 100644 --- a/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/SourceFolderImpl.java +++ b/platform/projectModel-impl/src/com/intellij/openapi/roots/impl/SourceFolderImpl.java @@ -27,6 +27,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.model.JpsElement; import org.jetbrains.jps.model.JpsElementFactory; +import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; import org.jetbrains.jps.model.java.JavaResourceRootType; import org.jetbrains.jps.model.java.JavaSourceRootProperties; import org.jetbrains.jps.model.java.JavaSourceRootType; @@ -82,13 +83,7 @@ public class SourceFolderImpl extends ContentFolderBaseImpl implements SourceFol @Nullable private JavaSourceRootProperties getJavaProperties() { - if (myJpsElement.getRootType() == JavaSourceRootType.SOURCE) { - return myJpsElement.getProperties(JavaSourceRootType.SOURCE); - } - if (myJpsElement.getRootType() == JavaSourceRootType.TEST_SOURCE) { - return myJpsElement.getProperties(JavaSourceRootType.TEST_SOURCE); - } - return null; + return myJpsElement.getProperties(JavaModuleSourceRootTypes.SOURCES); } @Override @@ -112,6 +107,7 @@ public class SourceFolderImpl extends ContentFolderBaseImpl implements SourceFol return new SourceFolderImpl(this, (ContentEntryImpl)contentEntry); } + @NotNull public JpsModuleSourceRoot getJpsElement() { return myJpsElement; } diff --git a/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsSourceFolder.java b/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsSourceFolder.java index 2616121cbae4..3eb43fdc61c9 100644 --- a/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsSourceFolder.java +++ b/platform/projectModel-impl/src/com/intellij/project/model/impl/module/content/JpsSourceFolder.java @@ -75,4 +75,10 @@ public class JpsSourceFolder extends JpsContentFolderBase implements SourceFolde public JpsModuleSourceRootType getRootType() { return mySourceRoot.getRootType(); } + + @NotNull + @Override + public JpsModuleSourceRoot getJpsElement() { + return mySourceRoot; + } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java index 0558a36ad864..d61b12b3f001 100755 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/importing/MavenFoldersImporter.java @@ -25,7 +25,6 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ModifiableRootModel; import com.intellij.openapi.roots.SourceFolder; import com.intellij.openapi.roots.impl.ModifiableModelCommitter; -import com.intellij.openapi.roots.impl.SourceFolderImpl; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.util.ArrayUtil; @@ -38,7 +37,7 @@ import org.jetbrains.idea.maven.model.MavenResource; import org.jetbrains.idea.maven.project.MavenImportingSettings; import org.jetbrains.idea.maven.project.MavenProject; import org.jetbrains.idea.maven.project.MavenProjectsManager; -import org.jetbrains.jps.model.JpsElement; +import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; import org.jetbrains.jps.model.java.JavaResourceRootType; import org.jetbrains.jps.model.java.JavaSourceRootProperties; import org.jetbrains.jps.model.java.JavaSourceRootType; @@ -269,8 +268,8 @@ public class MavenFoldersImporter { } private static boolean isGenerated(@NotNull SourceFolder folder) { - JpsElement properties = ((SourceFolderImpl)folder).getJpsElement().getProperties(); - return properties instanceof JavaSourceRootProperties && ((JavaSourceRootProperties)properties).isForGeneratedSources(); + JavaSourceRootProperties properties = folder.getJpsElement().getProperties(JavaModuleSourceRootTypes.SOURCES); + return properties != null && properties.isForGeneratedSources(); } private void addAllSubDirsAsGeneratedSources(@NotNull File dir, final JavaSourceRootType rootType) { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java index 1da55a178665..1f7a404c2abe 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java @@ -34,7 +34,6 @@ import com.intellij.openapi.progress.EmptyProgressIndicator; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.openapi.roots.*; -import com.intellij.openapi.roots.impl.SourceFolderImpl; import com.intellij.openapi.roots.impl.libraries.ProjectLibraryTable; import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.ui.Messages; @@ -130,7 +129,9 @@ public abstract class MavenImportingTestCase extends MavenTestCase { ContentEntry contentRoot = getContentRoot(moduleName); List folders = new ArrayList(); for (SourceFolder folder : contentRoot.getSourceFolders(JavaSourceRootType.SOURCE)) { - if (((JavaSourceRootProperties)((SourceFolderImpl)folder).getJpsElement().getProperties()).isForGeneratedSources()) { + JavaSourceRootProperties properties = folder.getJpsElement().getProperties(JavaSourceRootType.SOURCE); + assertNotNull(properties); + if (properties.isForGeneratedSources()) { folders.add(folder); } } diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenFoldersImporterTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenFoldersImporterTest.java index 2138756deaf7..e6e946e71c15 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenFoldersImporterTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenFoldersImporterTest.java @@ -18,13 +18,13 @@ package org.jetbrains.idea.maven.project; import com.intellij.ProjectTopics; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.roots.*; -import com.intellij.openapi.roots.impl.SourceFolderImpl; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.Consumer; import org.jetbrains.idea.maven.MavenImportingTestCase; import org.jetbrains.idea.maven.importing.MavenDefaultModifiableModelsProvider; import org.jetbrains.idea.maven.importing.MavenFoldersImporter; import org.jetbrains.idea.maven.importing.MavenRootModelAdapter; +import org.jetbrains.jps.model.java.JavaModuleSourceRootTypes; import org.jetbrains.jps.model.java.JavaSourceRootProperties; import org.jetbrains.jps.model.java.JavaSourceRootType; @@ -239,7 +239,9 @@ public class MavenFoldersImporterTest extends MavenImportingTestCase { @Override public void consume(ModifiableRootModel model) { for (SourceFolder folder : model.getContentEntries()[0].getSourceFolders()) { - ((JavaSourceRootProperties)((SourceFolderImpl)folder).getJpsElement().getProperties()).setForGeneratedSources(false); + JavaSourceRootProperties properties = folder.getJpsElement().getProperties(JavaModuleSourceRootTypes.SOURCES); + assertNotNull(properties); + properties.setForGeneratedSources(false); } } });