Package org.jetbrains.plugins.clojure.psi.stubs.elements

Source Code of org.jetbrains.plugins.clojure.psi.stubs.elements.ClStubFileElementType

package org.jetbrains.plugins.clojure.psi.stubs.elements;

import com.intellij.psi.StubBuilder;
import com.intellij.psi.stubs.*;
import com.intellij.psi.tree.IStubFileElementType;
import com.intellij.util.io.StringRef;
import org.jetbrains.plugins.clojure.file.ClojureFileType;
import org.jetbrains.plugins.clojure.psi.stubs.ClojureFileStubBuilder;
import org.jetbrains.plugins.clojure.psi.stubs.api.ClFileStub;
import org.jetbrains.plugins.clojure.psi.stubs.impl.ClFileStubImpl;
import org.jetbrains.plugins.clojure.psi.stubs.index.ClojureClassNameIndex;
import org.jetbrains.plugins.clojure.psi.stubs.index.ClojureFullScriptNameIndex;

import java.io.IOException;

/**
* @author ilyas
*/
public class ClStubFileElementType extends IStubFileElementType<ClFileStub> {
  private static final int CACHES_VERSION = 14;

  public ClStubFileElementType() {
    super(ClojureFileType.CLOJURE_LANGUAGE);
  }

  public StubBuilder getBuilder() {
    return new ClojureFileStubBuilder();
  }

  @Override
  public int getStubVersion() {
    return super.getStubVersion() + CACHES_VERSION;
  }

  public String getExternalId() {
    return "clojure.FILE";
  }

  @Override
  public void indexStub(PsiFileStub stub, IndexSink sink) {
    super.indexStub(stub, sink);
  }

  @Override
  public void serialize(final ClFileStub stub, final StubOutputStream dataStream) throws IOException {
    dataStream.writeName(stub.getPackageName().toString());
    dataStream.writeName(stub.getClassName().toString());
    dataStream.writeBoolean(stub.isClassDefinition());
  }

  @Override
  public ClFileStub deserialize(final StubInputStream dataStream, final StubElement parentStub) throws IOException {
    StringRef packName = dataStream.readName();
    StringRef name = dataStream.readName();
    boolean isScript = dataStream.readBoolean();
    return new ClFileStubImpl(packName, name, isScript);
  }

  public void indexStub(ClFileStub stub, IndexSink sink) {
    String name = stub.getClassName().toString();
    if (stub.isClassDefinition() && name != null) {
      sink.occurrence(ClojureClassNameIndex.KEY, name);
      final String pName = stub.getPackageName().toString();
      final String fqn = pName == null || pName.length() == 0 ? name : pName + "." + name;
      sink.occurrence(ClojureFullScriptNameIndex.KEY, fqn.hashCode());
    }
  }

}
TOP

Related Classes of org.jetbrains.plugins.clojure.psi.stubs.elements.ClStubFileElementType

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.