Reimplementing deltas as persistent (jps/incremental).

This commit is contained in:
Dmitry Boulytchev
2011-12-24 14:37:37 +04:00
parent 5d6b6df464
commit c3d0f767b3
12 changed files with 329 additions and 88 deletions
+2 -2
View File
@@ -87,10 +87,10 @@
<module fileurl="file://$PROJECT_DIR$/platform/smRunner/smRunner.iml" filepath="$PROJECT_DIR$/platform/smRunner/smRunner.iml" group="platform" />
<module fileurl="file://$PROJECT_DIR$/plugins/cvs/smartcvs-src/smartcvs-src.iml" filepath="$PROJECT_DIR$/plugins/cvs/smartcvs-src/smartcvs-src.iml" group="plugins/VCS/cvs" />
<module fileurl="file://$PROJECT_DIR$/plugins/spellchecker/spellchecker.iml" filepath="$PROJECT_DIR$/plugins/spellchecker/spellchecker.iml" group="plugins" />
<module fileurl="file://$PROJECT_DIR$/plugins/svn4ideaOld/svn4ideaOld.iml" filepath="$PROJECT_DIR$/plugins/svn4ideaOld/svn4ideaOld.iml" group="plugins/VCS" />
<module fileurl="file://$PROJECT_DIR$/plugins/svn4ideaOld/svn4idea-testsOld.iml" filepath="$PROJECT_DIR$/plugins/svn4ideaOld/svn4idea-testsOld.iml" group="plugins/VCS" />
<module fileurl="file://$PROJECT_DIR$/plugins/svn4idea/svn4idea.iml" filepath="$PROJECT_DIR$/plugins/svn4idea/svn4idea.iml" group="plugins/VCS" />
<module fileurl="file://$PROJECT_DIR$/plugins/svn4idea/svn4idea-tests.iml" filepath="$PROJECT_DIR$/plugins/svn4idea/svn4idea-tests.iml" group="plugins/VCS" />
<module fileurl="file://$PROJECT_DIR$/plugins/svn4ideaOld/svn4idea-testsOld.iml" filepath="$PROJECT_DIR$/plugins/svn4ideaOld/svn4idea-testsOld.iml" group="plugins/VCS" />
<module fileurl="file://$PROJECT_DIR$/plugins/svn4ideaOld/svn4ideaOld.iml" filepath="$PROJECT_DIR$/plugins/svn4ideaOld/svn4ideaOld.iml" group="plugins/VCS" />
<module fileurl="file://$PROJECT_DIR$/plugins/tasks/tasks-api/tasks-api.iml" filepath="$PROJECT_DIR$/plugins/tasks/tasks-api/tasks-api.iml" group="plugins/tasks" />
<module fileurl="file://$PROJECT_DIR$/plugins/tasks/tasks-core/tasks-core.iml" filepath="$PROJECT_DIR$/plugins/tasks/tasks-core/tasks-core.iml" group="plugins/tasks" />
<module fileurl="file://$PROJECT_DIR$/plugins/tasks/tasks-java/tasks-java.iml" filepath="$PROJECT_DIR$/plugins/tasks/tasks-java/tasks-java.iml" group="plugins/tasks" />
@@ -88,7 +88,7 @@ class DependencyContext {
}
}
private S(final int i) {
/*private*/ S(final int i) {
index = i;
}
@@ -34,5 +34,5 @@ interface Maplet<K, V> {
void remove(final Object key);
void close();
Collection<K> keyCollection();
Set<Map.Entry<K, V>> entrySet();
Collection<Map.Entry<K, V>> entrySet();
}
@@ -27,6 +27,8 @@ public class Mappings {
private final static String mySourceToUsagesName = "sourceToUsages.tab";
private final static String myClassToSourceName = "classToSource.tab";
private final boolean myIsTansient;
private final File myRootDir;
private DependencyContext myContext;
private MultiMaplet<DependencyContext.S, DependencyContext.S> myClassToSubclasses;
@@ -59,9 +61,15 @@ public class Mappings {
}
};
private Mappings(final DependencyContext context) {
myRootDir = null;
myContext = context;
private Mappings(final Mappings base) throws IOException {
myIsTansient = true;
myRootDir = new File(FileUtil.toSystemIndependentName(base.myRootDir.getAbsolutePath()) + File.separatorChar + "delta");
myContext = base.myContext;
myRootDir.mkdirs();
//createImplementation(myRootDir, myIsTansient);
myClassToSubclasses = new TransientMultiMaplet<DependencyContext.S, DependencyContext.S>(ourStringSetConstructor);
mySourceFileToClasses = new TransientMultiMaplet<DependencyContext.S, ClassRepr>(ourClassSetConstructor);
@@ -72,12 +80,15 @@ public class Mappings {
}
public Mappings(final File rootDir) throws IOException {
myIsTansient = false;
myRootDir = rootDir;
createPersistentImplementation(rootDir);
createImplementation(rootDir, myIsTansient);
}
private void createPersistentImplementation(File rootDir) throws IOException {
myContext = new DependencyContext(rootDir);
private void createImplementation(final File rootDir, final boolean isTransient) throws IOException {
if (! isTransient) {
myContext = new DependencyContext(rootDir);
}
myClassToSubclasses =
new PersistentMultiMaplet<DependencyContext.S, DependencyContext.S>(DependencyContext.getTableFile(rootDir, myClassToSubclassesName),
@@ -110,7 +121,12 @@ public class Mappings {
}
public Mappings createDelta() {
return new Mappings(myContext);
try {
return new Mappings(this);
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
public void clearMemoryCaches() {
@@ -149,7 +165,7 @@ public class Mappings {
if (myRootDir != null) {
close();
FileUtil.delete(myRootDir);
createPersistentImplementation(myRootDir);
createImplementation(myRootDir, false);
}
}
@@ -555,7 +571,8 @@ public class Mappings {
dependents.addAll(deps);
}
affectedUsages.add(rootUsage instanceof UsageRepr.MetaMethodUsage ? method.createMetaUsage(myContext, p) : method.createUsage(myContext, p));
affectedUsages
.add(rootUsage instanceof UsageRepr.MetaMethodUsage ? method.createMetaUsage(myContext, p) : method.createUsage(myContext, p));
}
}
@@ -811,22 +828,6 @@ public class Mappings {
else {
final Collection<DependencyContext.S> propagated = u.propagateMethodAccess(m.name, it.name);
u.affectMethodUsages(m, propagated, m.createMetaUsage(myContext, it.name), affectedUsages, dependants);
/*
final UsageRepr.Usage usage = it.createUsage();
affectedUsages.add(usage);
if ((m.access & Opcodes.ACC_PUBLIC) > 0) {
}
else if (isPackageLocal(m.access)) {
usageConstraints.put(usage, u.new PackageConstraint(it.getPackageName()));
}
else if ((m.access & Opcodes.ACC_PROTECTED) > 0) {
usageConstraints.put(usage, u.new InheritanceConstraint(it.name));
}
*/
}
}
@@ -838,7 +839,9 @@ public class Mappings {
final Collection<MethodRepr> lessSpecific = it.findMethods(u.lessSpecific(m));
for (MethodRepr mm : lessSpecific) {
u.affectMethodUsages(mm, propagated, mm.createUsage(myContext, it.name), affectedUsages, dependants);
if (!mm.equals(m)) {
u.affectMethodUsages(mm, propagated, mm.createUsage(myContext, it.name), affectedUsages, dependants);
}
}
for (Pair<MethodRepr, ClassRepr> p : affectedMethods) {
@@ -1295,6 +1298,10 @@ public class Mappings {
}
}
//final Set<ClassRepr> cl = (Set<ClassRepr>) delta.mySourceFileToClasses.get(new DependencyContext.S(352));
//System.out.println("There: " + (cl == null ? "wow..." : cl.size()));
myClassToSubclasses.putAll(delta.myClassToSubclasses);
mySourceFileToClasses.putAll(delta.mySourceFileToClasses);
mySourceFileToUsages.putAll(delta.mySourceFileToUsages);
@@ -1398,15 +1405,22 @@ public class Mappings {
}
public void close() {
if (myRootDir != null) {
// only close if you own the context
myContext.close();
}
myClassToSubclasses.close();
myClassToClassDependency.close();
mySourceFileToClasses.close();
mySourceFileToAnnotationUsages.close();
mySourceFileToUsages.close();
myClassToSourceFile.close();
if (!myIsTansient) {
// only close if you own the context
//final Set<ClassRepr> classes = (Set<ClassRepr>)mySourceFileToClasses.get(new DependencyContext.S(352));
//System.out.println("Here: " + (classes == null ? "wow..." : classes.size()));
myContext.close();
}
else {
FileUtil.delete(myRootDir);
}
}
}
@@ -154,16 +154,6 @@ class MethodRepr extends ProtoMember {
};
}
/*
static Predicate equal(final MethodRepr me){
return new Predicate() {
@Override
public boolean satisfy(MethodRepr that) {
return me.equals(that);
}
};
}
*/
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -37,5 +37,5 @@ interface MultiMaplet<K, V> {
void removeAll(final K key, final Collection<V> value);
void close();
Collection<K> keyCollection();
Set<Map.Entry<K, Collection<V>>> entrySet();
Collection<Map.Entry<K, Collection<V>>> entrySet();
}
@@ -22,8 +22,8 @@ import com.intellij.util.io.PersistentHashMap;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
/**
* Created by IntelliJ IDEA.
@@ -33,11 +33,11 @@ import java.util.Set;
* To change this template use File | Settings | File Templates.
*/
public class PersistentMaplet<K, V> implements Maplet<K, V> {
private final PersistentHashMap<K, V> map;
private final PersistentHashMap<K, V> myMap;
public PersistentMaplet(final File file, final KeyDescriptor<K> k, final DataExternalizer<V> v) {
try {
map = new PersistentHashMap<K, V>(file, k, v);
myMap = new PersistentHashMap<K, V>(file, k, v);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -47,7 +47,7 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
@Override
public boolean containsKey(final Object key) {
try {
return map.containsMapping((K)key);
return myMap.containsMapping((K)key);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -57,7 +57,7 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
@Override
public V get(final Object key) {
try {
return map.get((K)key);
return myMap.get((K)key);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -67,7 +67,7 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
@Override
public void put(final K key, final V value) {
try {
map.put(key, value);
myMap.put(key, value);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -78,7 +78,7 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
public void putAll(final Maplet<K, V> m) {
try {
for (Map.Entry<K, V> e : m.entrySet()) {
map.put(e.getKey(), e.getValue());
myMap.put(e.getKey(), e.getValue());
}
}
catch (IOException e) {
@@ -89,7 +89,7 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
@Override
public void remove(final Object key) {
try {
map.remove((K)key);
myMap.remove((K)key);
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -99,7 +99,7 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
@Override
public void close() {
try {
map.close();
myMap.close();
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -109,7 +109,7 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
@Override
public Collection<K> keyCollection() {
try {
return map.getAllKeysWithExistingMapping();
return myMap.getAllKeysWithExistingMapping();
}
catch (IOException e) {
throw new RuntimeException(e);
@@ -117,8 +117,37 @@ public class PersistentMaplet<K, V> implements Maplet<K, V> {
}
@Override
public Set<Map.Entry<K, V>> entrySet() {
assert (false);
return null;
public Collection<Map.Entry<K, V>> entrySet() {
final Collection<Map.Entry<K, V>> result = new LinkedList<Map.Entry<K, V>>();
try {
for (final K key : myMap.getAllKeysWithExistingMapping()) {
final V value = myMap.get(key);
final Map.Entry<K, V> entry = new Map.Entry<K, V>() {
@Override
public K getKey() {
return key;
}
@Override
public V getValue() {
return value;
}
@Override
public V setValue(V value) {
return null;
}
};
result.add(entry);
}
return result;
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
}
@@ -22,8 +22,8 @@ import com.intellij.util.io.PersistentHashMap;
import java.io.*;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;
/**
* Created by IntelliJ IDEA.
@@ -41,9 +41,8 @@ class PersistentMultiMaplet<K, V> implements MultiMaplet<K, V> {
final DataExternalizer<V> valueExternalizer,
final TransientMultiMaplet.CollectionConstructor<V> collectionFactory) throws IOException {
myValueExternalizer = valueExternalizer;
myMap = new PersistentHashMap<K, Collection<V>>(
file, keyExternalizer, new CollectionDataExternalizer<V>(valueExternalizer, collectionFactory)
);
myMap = new PersistentHashMap<K, Collection<V>>(file, keyExternalizer,
new CollectionDataExternalizer<V>(valueExternalizer, collectionFactory));
}
@@ -142,22 +141,16 @@ class PersistentMultiMaplet<K, V> implements MultiMaplet<K, V> {
@Override
public void putAll(MultiMaplet<K, V> m) {
try {
for (Map.Entry<K, Collection<V>> entry : m.entrySet()) {
myMap.put(entry.getKey(), entry.getValue());
}
}
catch (IOException e) {
throw new RuntimeException(e);
for (Map.Entry<K, Collection<V>> entry : m.entrySet()) {
put(entry.getKey(), entry.getValue());
}
}
public Collection<K> keyCollection() {
try {
return myMap.getAllKeysWithExistingMapping();
}
catch (IOException e){
catch (IOException e) {
throw new RuntimeException(e);
}
}
@@ -173,16 +166,46 @@ class PersistentMultiMaplet<K, V> implements MultiMaplet<K, V> {
}
@Override
public Set<Map.Entry<K, Collection<V>>> entrySet() {
assert(false);
return null;
public Collection<Map.Entry<K, Collection<V>>> entrySet() {
final Collection<Map.Entry<K, Collection<V>>> result = new LinkedList<Map.Entry<K, Collection<V>>>();
try {
for (final K key : myMap.getAllKeysWithExistingMapping()) {
final Collection<V> value = myMap.get(key);
final Map.Entry<K, Collection<V>> entry = new Map.Entry<K, Collection<V>>() {
@Override
public K getKey() {
return key;
}
@Override
public Collection<V> getValue() {
return value;
}
@Override
public Collection<V> setValue(Collection<V> value) {
return null;
}
};
result.add(entry);
}
return result;
}
catch (IOException e) {
throw new RuntimeException(e);
}
}
private static class CollectionDataExternalizer<V> implements DataExternalizer<Collection<V>> {
private final DataExternalizer<V> myElementExternalizer;
private final TransientMultiMaplet.CollectionConstructor<V> myCollectionFactory;
public CollectionDataExternalizer(DataExternalizer<V> elementExternalizer, TransientMultiMaplet.CollectionConstructor<V> collectionFactory) {
public CollectionDataExternalizer(DataExternalizer<V> elementExternalizer,
TransientMultiMaplet.CollectionConstructor<V> collectionFactory) {
myElementExternalizer = elementExternalizer;
myCollectionFactory = collectionFactory;
}
@@ -69,7 +69,7 @@ public class TransientMaplet<K, V> implements Maplet<K, V>{
}
@Override
public Set<Map.Entry<K, V>> entrySet() {
public Collection<Map.Entry<K, V>> entrySet() {
return map.entrySet();
}
}
@@ -1169,6 +1169,7 @@ public class ProjectWrapper {
}
dependencyMapping.integrate(delta, files, removed);
delta.close();
if (!incremental) {
affectedFiles.addAll(sources);
@@ -1186,6 +1187,7 @@ public class ProjectWrapper {
return iterativeCompile(chunk, sources, null, null, flags);
}
else {
delta.close();
return BuildStatus.FAILURE;
}
}
@@ -1262,6 +1264,8 @@ public class ProjectWrapper {
}
catch (Exception e) {
e.printStackTrace();
delta.close();
return BuildStatus.FAILURE;
}
@@ -1280,6 +1284,7 @@ public class ProjectWrapper {
}
dependencyMapping.integrate(delta, files, removedSources);
delta.close();
for (Module m : chunkModules) {
Reporter.reportBuildSuccess(m, flags.tests());
@@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EntryPointsManager">
<entry_points version="2.0" />
</component>
<component name="JavadocGenerationManager">
<option name="OUTPUT_DIRECTORY" />
<option name="OPTION_SCOPE" value="protected" />
@@ -21,6 +24,9 @@
<option name="LAST_EDITED_MODULE_NAME" />
<option name="LAST_EDITED_TAB_NAME" />
</component>
<component name="ProjectResources">
<default-html-doctype>http://www.w3.org/1999/xhtml</default-html-doctype>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="IDEA jdk" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
@@ -13,7 +13,6 @@
<component name="ChangesViewManager" flattened_view="true" show_ignored="false" />
<component name="CreatePatchCommitExecutor">
<option name="PATCH_PATH" value="" />
<option name="REVERSE_PATCH" value="false" />
</component>
<component name="DaemonCodeAnalyzer">
<disable_hints />
@@ -57,9 +56,80 @@
<component name="FavoritesManager">
<favorites_list name="changeToCovariantMethodInBase3" />
</component>
<component name="FileEditorManager">
<leaf>
<file leaf-file-name="BaseImplementation.java" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/src/maketest/BaseImplementation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="16" selection-start="69" selection-end="69" vertical-scroll-proportion="0.07462686">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Mediator.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/maketest/Mediator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="0" selection-start="19" selection-end="19" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="J.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/maketest/J.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="17" selection-start="36" selection-end="36" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="I.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/maketest/I.java">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="0" selection-start="40" selection-end="40" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="IImpl.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/src/maketest/IImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="13" selection-start="32" selection-end="32" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
</leaf>
</component>
<component name="FindManager">
<FindUsagesManager>
<setting name="OPEN_NEW_TAB" value="false" />
</FindUsagesManager>
</component>
<component name="Git.Settings">
<option name="CHECKOUT_INCLUDE_TAGS" value="false" />
<option name="UPDATE_CHANGES_POLICY" value="STASH" />
<option name="LINE_SEPARATORS_CONVERSION" value="ASK" />
</component>
<component name="IdeDocumentHistory">
<option name="changedFiles">
<list>
<option value="$PROJECT_DIR$/src/maketest/BaseImplementation.java" />
</list>
</option>
</component>
<component name="MavenRunner">
<option name="jreName" value="#JAVA_INTERNAL" />
</component>
<component name="ProjectFrameBounds">
<option name="y" value="25" />
<option name="width" value="1282" />
<option name="height" value="755" />
</component>
<component name="ProjectLevelVcsManager" settingsEditedManually="false">
<OptionsSetting value="true" id="Add" />
<OptionsSetting value="true" id="Remove" />
@@ -86,8 +156,8 @@
<sortByType />
</navigator>
<panes>
<pane id="Scope" />
<pane id="PackagesPane" />
<pane id="Scope" />
<pane id="ProjectPane">
<subPane>
<PATH>
@@ -96,6 +166,34 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="changeToCovariantMethodInBase3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="changeToCovariantMethodInBase3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="changeToCovariantMethodInBase3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="changeToCovariantMethodInBase3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="maketest" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
<pane id="Favorites" />
@@ -104,9 +202,13 @@
<component name="PropertiesComponent">
<property name="GoToFile.includeJavaFiles" value="false" />
<property name="GoToClass.toSaveIncludeLibraries" value="false" />
<property name="options.splitter.main.proportions" value="0.3" />
<property name="options.lastSelected" value="project.propCompiler" />
<property name="MemberChooser.sorted" value="false" />
<property name="MemberChooser.showClasses" value="true" />
<property name="GoToClass.includeLibraries" value="false" />
<property name="options.searchVisible" value="true" />
<property name="options.splitter.details.proportions" value="0.2" />
<property name="MemberChooser.copyJavadoc" value="false" />
</component>
<component name="RunManager">
@@ -206,39 +308,64 @@
<option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
<option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
<option name="FORCE_UPDATE" value="false" />
<configuration useDefault="true">$USER_HOME$/.subversion_IDEA</configuration>
<myIsUseDefaultProxy>false</myIsUseDefaultProxy>
</component>
<component name="SvnConfiguration17" maxAnnotateRevisions="500">
<option name="USER" value="" />
<option name="PASSWORD" value="" />
<option name="mySSHConnectionTimeout" value="30000" />
<option name="mySSHReadTimeout" value="30000" />
<option name="LAST_MERGED_REVISION" />
<option name="MERGE_DRY_RUN" value="false" />
<option name="MERGE_DIFF_USE_ANCESTRY" value="true" />
<option name="UPDATE_LOCK_ON_DEMAND" value="false" />
<option name="IGNORE_SPACES_IN_MERGE" value="false" />
<option name="DETECT_NESTED_COPIES" value="true" />
<option name="CHECK_NESTED_FOR_QUICK_MERGE" value="false" />
<option name="IGNORE_SPACES_IN_ANNOTATE" value="true" />
<option name="SHOW_MERGE_SOURCES_IN_ANNOTATE" value="true" />
<option name="FORCE_UPDATE" value="false" />
<configuration useDefault="false">$USER_HOME$/.subversion_IDEA</configuration>
<myIsUseDefaultProxy>false</myIsUseDefaultProxy>
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="507bba26-9482-4442-ba06-b9c729030559" name="Default" comment="" />
<created>1317044130792</created>
<updated>1317044130792</updated>
</task>
<servers />
</component>
<component name="ToolWindowManager">
<frame x="0" y="25" width="1280" height="974" extended-state="0" />
<editor active="false" />
<frame x="0" y="25" width="1282" height="755" extended-state="0" />
<editor active="true" />
<layout>
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
<window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="true" content_ui="tabs" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="true" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.2495935" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="-1" side_tool="false" content_ui="tabs" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.37824675" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
</layout>
</component>
<component name="VcsContentAnnotationSettings">
<option name="myLimit" value="2678400000" />
</component>
<component name="VcsManagerConfiguration">
<option name="OFFER_MOVE_TO_ANOTHER_CHANGELIST_ON_PARTIAL_COMMIT" value="true" />
<option name="CHECK_CODE_SMELLS_BEFORE_PROJECT_COMMIT" value="true" />
@@ -263,6 +390,12 @@
<option name="SHOW_ONLY_CHANGED_IN_SELECTION_DIFF" value="true" />
<option name="CHECK_COMMIT_MESSAGE_SPELLING" value="true" />
<option name="DEFAULT_PATCH_EXTENSION" value="patch" />
<option name="SHORT_DIFF_HORISONTALLY" value="true" />
<option name="SHORT_DIFF_EXTRA_LINES" value="2" />
<option name="SOFT_WRAPS_IN_SHORT_DIFF" value="true" />
<option name="INCLUDE_TEXT_INTO_PATCH" value="false" />
<option name="INCLUDE_TEXT_INTO_SHELF" value="false" />
<option name="CREATE_PATCH_EXPAND_DETAILS_DEFAULT" value="true" />
<option name="FORCE_NON_EMPTY_COMMENT" value="false" />
<option name="LAST_COMMIT_MESSAGE" />
<option name="MAKE_NEW_CHANGELIST_ACTIVE" value="true" />
@@ -281,5 +414,46 @@
<component name="XDebuggerManager">
<breakpoint-manager />
</component>
<component name="antWorkspaceConfiguration">
<option name="IS_AUTOSCROLL_TO_SOURCE" value="false" />
<option name="FILTER_TARGETS" value="false" />
</component>
<component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/src/maketest/IImpl.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="13" selection-start="32" selection-end="32" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/maketest/Mediator.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="0" selection-start="19" selection-end="19" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/maketest/J.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="17" selection-start="36" selection-end="36" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/maketest/I.java">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="0" selection-start="40" selection-end="40" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/src/maketest/BaseImplementation.java">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="16" selection-start="69" selection-end="69" vertical-scroll-proportion="0.07462686">
<folding />
</state>
</provider>
</entry>
</component>
</project>