diff options
Diffstat (limited to 'platform/projectModel-api')
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/application/PathMacros.java | 10 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/components/LastStorageChooserForWrite.java | 10 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/components/State.java | 9 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/components/StateStorage.java | 15 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/components/Storage.java | 9 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/components/StorageAnnotationsDefaultValues.java | 87 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/components/StoragePathMacros.java | 8 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/project/DefaultProjectTypeEP.java (renamed from platform/projectModel-api/src/com/intellij/openapi/project/DefaultProjectTypeProvider.java) | 13 | ||||
-rw-r--r-- | platform/projectModel-api/src/com/intellij/openapi/project/ProjectTypeService.java | 14 |
9 files changed, 59 insertions, 116 deletions
diff --git a/platform/projectModel-api/src/com/intellij/openapi/application/PathMacros.java b/platform/projectModel-api/src/com/intellij/openapi/application/PathMacros.java index 160aed545b03..fac4e5e9edb1 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/application/PathMacros.java +++ b/platform/projectModel-api/src/com/intellij/openapi/application/PathMacros.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * 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. @@ -15,15 +15,15 @@ */ package com.intellij.openapi.application; +import com.intellij.openapi.components.ServiceManager; import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.Set; public abstract class PathMacros { - public static PathMacros getInstance() { - return ApplicationManager.getApplication().getComponent(PathMacros.class); + return ServiceManager.getService(PathMacros.class); } public abstract Set<String> getAllMacroNames(); @@ -33,9 +33,7 @@ public abstract class PathMacros { public abstract void setMacro(String name, String value); /** - * Obsolete macros that are to be removed gently from the project files. They can be read, but not written again. Not persisted. - * @param name - * @param value + * Obsolete macros that are to be removed gently from the project files. They can be read, but not written again. Not persisted */ public abstract void addLegacyMacro(@NotNull String name, @NotNull String value); diff --git a/platform/projectModel-api/src/com/intellij/openapi/components/LastStorageChooserForWrite.java b/platform/projectModel-api/src/com/intellij/openapi/components/LastStorageChooserForWrite.java new file mode 100644 index 000000000000..f9206dee03e3 --- /dev/null +++ b/platform/projectModel-api/src/com/intellij/openapi/components/LastStorageChooserForWrite.java @@ -0,0 +1,10 @@ +package com.intellij.openapi.components; + +public final class LastStorageChooserForWrite implements StateStorageChooser<Object> { + public static final LastStorageChooserForWrite INSTANCE = new LastStorageChooserForWrite(); + + @Override + public Storage[] selectStorages(Storage[] storages, Object component, StateStorageOperation operation) { + return operation == StateStorageOperation.WRITE ? new Storage[]{storages[storages.length - 1]} : storages; + } +}
\ No newline at end of file diff --git a/platform/projectModel-api/src/com/intellij/openapi/components/State.java b/platform/projectModel-api/src/com/intellij/openapi/components/State.java index ec6b97055a48..38af50e27196 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/components/State.java +++ b/platform/projectModel-api/src/com/intellij/openapi/components/State.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * 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. @@ -23,14 +23,15 @@ import java.lang.annotation.RetentionPolicy; public @interface State { String name(); + @Deprecated /** - * {@link RoamingType#GLOBAL} will be ignored, use only {@link RoamingType#DISABLED} or {@link RoamingType#PER_PLATFORM} + * @deprecated Use {@link Storage#roamingType()} */ RoamingType roamingType() default RoamingType.PER_USER; Storage[] storages(); - Class<? extends StateStorageChooser> storageChooser() default StorageAnnotationsDefaultValues.NullStateStorageChooser.class; + Class<? extends StateStorageChooser> storageChooser() default StateStorageChooser.class; boolean reloadable() default true; -}
\ No newline at end of file +} diff --git a/platform/projectModel-api/src/com/intellij/openapi/components/StateStorage.java b/platform/projectModel-api/src/com/intellij/openapi/components/StateStorage.java index 36112e5dc028..ef68ac1e3a7f 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/components/StateStorage.java +++ b/platform/projectModel-api/src/com/intellij/openapi/components/StateStorage.java @@ -19,11 +19,11 @@ package com.intellij.openapi.components; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileEvent; -import com.intellij.util.io.fs.IFile; import com.intellij.util.messages.Topic; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.util.Collection; import java.util.List; import java.util.Set; @@ -32,13 +32,16 @@ public interface StateStorage { Topic<Listener> STORAGE_TOPIC = new Topic<Listener>("STORAGE_LISTENER", Listener.class, Topic.BroadcastDirection.TO_PARENT); @Nullable - <T> T getState(final Object component, final String componentName, Class<T> stateClass, @Nullable T mergeInto) throws StateStorageException; - boolean hasState(final Object component, final String componentName, final Class<?> aClass, final boolean reloadData) throws StateStorageException; + <T> T getState(final Object component, @NotNull String componentName, Class<T> stateClass, @Nullable T mergeInto) throws StateStorageException; + + boolean hasState(final Object component, @NotNull String componentName, final Class<?> aClass, final boolean reloadData) throws StateStorageException; @NotNull ExternalizationSession startExternalization(); + @NotNull SaveSession startSave(@NotNull ExternalizationSession externalizationSession); + void finishSave(@NotNull SaveSession saveSession); void reload(@NotNull Set<String> changedComponents) throws StateStorageException; @@ -51,13 +54,13 @@ public interface StateStorage { void save() throws StateStorageException; @Nullable - Set<String> analyzeExternalChanges(@NotNull Set<Pair<VirtualFile,StateStorage>> changedFiles); + Set<String> analyzeExternalChanges(@NotNull Set<Pair<VirtualFile, StateStorage>> changedFiles); @NotNull - Collection<IFile> getStorageFilesToSave() throws StateStorageException; + Collection<File> getStorageFilesToSave() throws StateStorageException; @NotNull - List<IFile> getAllStorageFiles(); + List<File> getAllStorageFiles(); } interface Listener { diff --git a/platform/projectModel-api/src/com/intellij/openapi/components/Storage.java b/platform/projectModel-api/src/com/intellij/openapi/components/Storage.java index e10b97755d3a..f9ad4155b2c2 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/components/Storage.java +++ b/platform/projectModel-api/src/com/intellij/openapi/components/Storage.java @@ -28,6 +28,11 @@ public @interface Storage { @NonNls String file() default ""; StorageScheme scheme() default StorageScheme.DEFAULT; - Class<? extends StateStorage> storageClass() default StorageAnnotationsDefaultValues.NullStateStorage.class; - Class<? extends StateSplitter> stateSplitter() default StorageAnnotationsDefaultValues.NullStateSplitter.class; + /** + * You must not store components with different roaming types in one file ({@link #file()}). + */ + RoamingType roamingType() default RoamingType.PER_USER; + + Class<? extends StateStorage> storageClass() default StateStorage.class; + Class<? extends StateSplitter> stateSplitter() default StateSplitter.class; } diff --git a/platform/projectModel-api/src/com/intellij/openapi/components/StorageAnnotationsDefaultValues.java b/platform/projectModel-api/src/com/intellij/openapi/components/StorageAnnotationsDefaultValues.java deleted file mode 100644 index 5105105c4eb4..000000000000 --- a/platform/projectModel-api/src/com/intellij/openapi/components/StorageAnnotationsDefaultValues.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright 2000-2012 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.components; - -import com.intellij.openapi.util.Pair; -import org.jdom.Element; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.List; -import java.util.Set; - -public interface StorageAnnotationsDefaultValues { - class NullStateStorage implements StateStorage { - @Override - @Nullable - public <T> T getState(final Object component, final String componentName, Class<T> stateClass, @Nullable T mergeInto) - throws StateStorageException { - throw new UnsupportedOperationException("Method getState is not supported in " + getClass()); - } - - @Override - public boolean hasState(final Object component, final String componentName, final Class<?> aClass, final boolean reloadData) throws StateStorageException { - throw new UnsupportedOperationException("Method hasState not implemented in " + getClass()); - } - - public void save() throws StateStorageException { - throw new UnsupportedOperationException("Method save is not supported in " + getClass()); - } - - @Override - @NotNull - public ExternalizationSession startExternalization() { - throw new UnsupportedOperationException("Method startExternalization not implemented in " + getClass()); - } - - @Override - @NotNull - public SaveSession startSave(@NotNull ExternalizationSession externalizationSession) { - throw new UnsupportedOperationException("Method startSave not implemented in " + getClass()); - } - - @Override - public void finishSave(@NotNull SaveSession saveSession) { - throw new UnsupportedOperationException("Method finishSave not implemented in " + getClass()); - } - - @Override - public void reload(@NotNull final Set<String> changedComponents) throws StateStorageException { - throw new UnsupportedOperationException("Method reload not implemented in " + getClass()); - } - - } - - class NullStateStorageChooser implements StateStorageChooser { - @Override - public Storage[] selectStorages(Storage[] storages, Object component, final StateStorageOperation operation) { - throw new UnsupportedOperationException("Method selectStorages is not supported in " + getClass()); - } - } - - class NullStateSplitter implements StateSplitter { - @Override - public List<Pair<Element, String>> splitState(Element e) { - throw new UnsupportedOperationException("Method splitState not implemented in " + getClass()); - } - - @Override - public void mergeStatesInto(final Element target, final Element[] elements) { - throw new UnsupportedOperationException("Method mergeStatesInto not implemented in " + getClass()); - } - } -} diff --git a/platform/projectModel-api/src/com/intellij/openapi/components/StoragePathMacros.java b/platform/projectModel-api/src/com/intellij/openapi/components/StoragePathMacros.java index 374423225694..3a292dd7175c 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/components/StoragePathMacros.java +++ b/platform/projectModel-api/src/com/intellij/openapi/components/StoragePathMacros.java @@ -31,9 +31,14 @@ import org.jetbrains.annotations.NotNull; * @since 5/2/12 12:57 PM */ public class StoragePathMacros { + /** + * Points to the application-level settings root directory. + */ @NonNls @NotNull public static final String ROOT_CONFIG = "$ROOT_CONFIG$"; - /** Points to the application-level settings root directory. */ + /** + * Points to {@link #ROOT_CONFIG}/options by default. Should be used to store single files and {@link #ROOT_CONFIG} to store subdirectories with many files. + */ @NonNls @NotNull public static final String APP_CONFIG = "$APP_CONFIG$"; /** <code>'.ipr'</code> file path key. */ @@ -63,6 +68,7 @@ public class StoragePathMacros { * @throws IllegalArgumentException if given macro definition has unexpected format */ @NotNull + @Deprecated public static String getMacroName(@NotNull String macro) throws IllegalArgumentException { if (macro.length() < 3 || macro.charAt(0) != '$' || macro.charAt(macro.length() - 1) != '$') { throw new IllegalArgumentException("Malformed macro definition (" + macro + ")"); diff --git a/platform/projectModel-api/src/com/intellij/openapi/project/DefaultProjectTypeProvider.java b/platform/projectModel-api/src/com/intellij/openapi/project/DefaultProjectTypeEP.java index 81887eba0f98..3eb65af697c0 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/project/DefaultProjectTypeProvider.java +++ b/platform/projectModel-api/src/com/intellij/openapi/project/DefaultProjectTypeEP.java @@ -16,20 +16,21 @@ package com.intellij.openapi.project; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.util.xmlb.annotations.Attribute; import org.jetbrains.annotations.Nullable; /** * @author Dmitry Avdeev */ -public abstract class DefaultProjectTypeProvider { +public class DefaultProjectTypeEP { - private final static ExtensionPointName<DefaultProjectTypeProvider> EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.defaultProjectTypeProvider"); + private final static ExtensionPointName<DefaultProjectTypeEP> EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.defaultProjectTypeProvider"); + @Attribute("type") + public String type; @Nullable public static ProjectType getDefaultProjectType() { - DefaultProjectTypeProvider[] extensions = EXTENSION_POINT_NAME.getExtensions(); - return extensions.length > 0 ? extensions[0].getProjectType() : null; + DefaultProjectTypeEP[] extensions = EXTENSION_POINT_NAME.getExtensions(); + return extensions.length > 0 ? new ProjectType(extensions[0].type) : null; } - - protected abstract ProjectType getProjectType(); } diff --git a/platform/projectModel-api/src/com/intellij/openapi/project/ProjectTypeService.java b/platform/projectModel-api/src/com/intellij/openapi/project/ProjectTypeService.java index e43059390b19..6925a8c39c5e 100644 --- a/platform/projectModel-api/src/com/intellij/openapi/project/ProjectTypeService.java +++ b/platform/projectModel-api/src/com/intellij/openapi/project/ProjectTypeService.java @@ -26,8 +26,10 @@ import org.jetbrains.annotations.Nullable; @State( name = "ProjectType", storages = { - @Storage(file = StoragePathMacros.PROJECT_FILE), - @Storage(file = StoragePathMacros.PROJECT_CONFIG_DIR + "/misc.xml", scheme = StorageScheme.DIRECTORY_BASED) + @Storage( + id = "other", + file = StoragePathMacros.PROJECT_FILE + ) } ) public class ProjectTypeService implements PersistentStateComponent<ProjectType> { @@ -41,10 +43,14 @@ public class ProjectTypeService implements PersistentStateComponent<ProjectType> projectType = getInstance(project).myProjectType; if (projectType != null) return projectType; } - return DefaultProjectTypeProvider.getDefaultProjectType(); + return DefaultProjectTypeEP.getDefaultProjectType(); } - public static ProjectTypeService getInstance(@NotNull Project project) { + public static void setProjectType(@NotNull Project project, @Nullable ProjectType projectType) { + getInstance(project).loadState(projectType); + } + + private static ProjectTypeService getInstance(@NotNull Project project) { return ServiceManager.getService(project, ProjectTypeService.class); } |