blob: 52278cf5264d33c0264a341194d263a39b768469 [file] [log] [blame]
/*
* Copyright (c) 2013, the Dart project authors.
*
* Licensed under the Eclipse Public License v1.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.eclipse.org/legal/epl-v10.html
*
* 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.google.dart.engine.index;
import com.google.dart.engine.AnalysisEngine;
import com.google.dart.engine.internal.index.IndexImpl;
import com.google.dart.engine.internal.index.MemoryIndexStoreImpl;
import com.google.dart.engine.internal.index.file.CachingNodeManager;
import com.google.dart.engine.internal.index.file.ContextCodec;
import com.google.dart.engine.internal.index.file.ElementCodec;
import com.google.dart.engine.internal.index.file.FileManager;
import com.google.dart.engine.internal.index.file.FileNodeManager;
import com.google.dart.engine.internal.index.file.NodeManager;
import com.google.dart.engine.internal.index.file.RelationshipCodec;
import com.google.dart.engine.internal.index.file.SeparateFileManager;
import com.google.dart.engine.internal.index.file.SplitIndexStoreImpl;
import com.google.dart.engine.internal.index.file.StringCodec;
import com.google.dart.engine.internal.index.operation.OperationProcessor;
import com.google.dart.engine.internal.index.operation.OperationQueue;
import com.google.dart.engine.utilities.translation.DartOmit;
import java.io.File;
/**
* Factory for {@link Index} and {@link IndexStore}.
*
* @coverage dart.engine.index
*/
@DartOmit
public class IndexFactory {
/**
* Returns an instance of {@link IndexStore} that stores data on disk in the given directory.
*/
public static IndexStore newFileIndexStore(File directory) {
StringCodec stringCodec = new StringCodec();
ContextCodec contextCodec = new ContextCodec();
ElementCodec elementCodec = new ElementCodec(stringCodec);
RelationshipCodec relationshipCodec = new RelationshipCodec(stringCodec);
FileManager fileManager = new SeparateFileManager(directory);
NodeManager nodeManager = new FileNodeManager(
fileManager,
AnalysisEngine.getInstance().getLogger(),
stringCodec,
contextCodec,
elementCodec,
relationshipCodec);
nodeManager = new CachingNodeManager(nodeManager);
return newSplitIndexStore(nodeManager);
}
/**
* @return the new instance of {@link Index} which uses given {@link IndexStore}.
*/
public static Index newIndex(IndexStore store) {
OperationQueue queue = new OperationQueue();
OperationProcessor processor = new OperationProcessor(queue);
return new IndexImpl(store, queue, processor);
}
/**
* @return the new instance of {@link MemoryIndexStore}.
*/
public static MemoryIndexStore newMemoryIndexStore() {
return new MemoryIndexStoreImpl();
}
/**
* Returns an instance of {@link IndexStore} that stores data in the given {@link NodeManager}.
*/
public static IndexStore newSplitIndexStore(NodeManager nodeManager) {
return new SplitIndexStoreImpl(nodeManager);
}
}