summaryrefslogtreecommitdiff
path: root/platform/projectModel-api
diff options
context:
space:
mode:
Diffstat (limited to 'platform/projectModel-api')
-rw-r--r--platform/projectModel-api/src/com/intellij/openapi/application/PathMacros.java10
-rw-r--r--platform/projectModel-api/src/com/intellij/openapi/components/LastStorageChooserForWrite.java10
-rw-r--r--platform/projectModel-api/src/com/intellij/openapi/components/State.java9
-rw-r--r--platform/projectModel-api/src/com/intellij/openapi/components/StateStorage.java15
-rw-r--r--platform/projectModel-api/src/com/intellij/openapi/components/Storage.java9
-rw-r--r--platform/projectModel-api/src/com/intellij/openapi/components/StorageAnnotationsDefaultValues.java87
-rw-r--r--platform/projectModel-api/src/com/intellij/openapi/components/StoragePathMacros.java8
-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.java14
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);
}