165eecc51b264f73d6470a529a139317de921f5ecBen Gruver/*
265eecc51b264f73d6470a529a139317de921f5ecBen Gruver * Copyright 2014, Google Inc.
365eecc51b264f73d6470a529a139317de921f5ecBen Gruver * All rights reserved.
465eecc51b264f73d6470a529a139317de921f5ecBen Gruver *
565eecc51b264f73d6470a529a139317de921f5ecBen Gruver * Redistribution and use in source and binary forms, with or without
665eecc51b264f73d6470a529a139317de921f5ecBen Gruver * modification, are permitted provided that the following conditions are
765eecc51b264f73d6470a529a139317de921f5ecBen Gruver * met:
865eecc51b264f73d6470a529a139317de921f5ecBen Gruver *
965eecc51b264f73d6470a529a139317de921f5ecBen Gruver *     * Redistributions of source code must retain the above copyright
1065eecc51b264f73d6470a529a139317de921f5ecBen Gruver * notice, this list of conditions and the following disclaimer.
1165eecc51b264f73d6470a529a139317de921f5ecBen Gruver *     * Redistributions in binary form must reproduce the above
1265eecc51b264f73d6470a529a139317de921f5ecBen Gruver * copyright notice, this list of conditions and the following disclaimer
1365eecc51b264f73d6470a529a139317de921f5ecBen Gruver * in the documentation and/or other materials provided with the
1465eecc51b264f73d6470a529a139317de921f5ecBen Gruver * distribution.
1565eecc51b264f73d6470a529a139317de921f5ecBen Gruver *     * Neither the name of Google Inc. nor the names of its
1665eecc51b264f73d6470a529a139317de921f5ecBen Gruver * contributors may be used to endorse or promote products derived from
1765eecc51b264f73d6470a529a139317de921f5ecBen Gruver * this software without specific prior written permission.
1865eecc51b264f73d6470a529a139317de921f5ecBen Gruver *
1965eecc51b264f73d6470a529a139317de921f5ecBen Gruver * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
2065eecc51b264f73d6470a529a139317de921f5ecBen Gruver * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
2165eecc51b264f73d6470a529a139317de921f5ecBen Gruver * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
2265eecc51b264f73d6470a529a139317de921f5ecBen Gruver * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
2365eecc51b264f73d6470a529a139317de921f5ecBen Gruver * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
2465eecc51b264f73d6470a529a139317de921f5ecBen Gruver * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
2565eecc51b264f73d6470a529a139317de921f5ecBen Gruver * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2665eecc51b264f73d6470a529a139317de921f5ecBen Gruver * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2765eecc51b264f73d6470a529a139317de921f5ecBen Gruver * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2865eecc51b264f73d6470a529a139317de921f5ecBen Gruver * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2965eecc51b264f73d6470a529a139317de921f5ecBen Gruver * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
3065eecc51b264f73d6470a529a139317de921f5ecBen Gruver */
3165eecc51b264f73d6470a529a139317de921f5ecBen Gruver
3265eecc51b264f73d6470a529a139317de921f5ecBen Gruverpackage org.jf.smalidea.psi.stub.element;
3365eecc51b264f73d6470a529a139317de921f5ecBen Gruver
3465eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport com.intellij.lang.ASTNode;
3565eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport com.intellij.psi.stubs.IndexSink;
3665eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport com.intellij.psi.stubs.StubElement;
3765eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport com.intellij.psi.stubs.StubInputStream;
3865eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport com.intellij.psi.stubs.StubOutputStream;
3965eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport org.jetbrains.annotations.NotNull;
4065eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport org.jf.smalidea.psi.impl.SmaliAnnotation;
4165eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport org.jf.smalidea.psi.stub.SmaliAnnotationStub;
4265eecc51b264f73d6470a529a139317de921f5ecBen Gruver
4365eecc51b264f73d6470a529a139317de921f5ecBen Gruverimport java.io.IOException;
4465eecc51b264f73d6470a529a139317de921f5ecBen Gruver
4565eecc51b264f73d6470a529a139317de921f5ecBen Gruverpublic class SmaliAnnotationElementType extends SmaliStubElementType<SmaliAnnotationStub, SmaliAnnotation> {
4665eecc51b264f73d6470a529a139317de921f5ecBen Gruver    public static final SmaliAnnotationElementType INSTANCE = new SmaliAnnotationElementType();
4765eecc51b264f73d6470a529a139317de921f5ecBen Gruver
4865eecc51b264f73d6470a529a139317de921f5ecBen Gruver    private SmaliAnnotationElementType() {
4965eecc51b264f73d6470a529a139317de921f5ecBen Gruver        super("ANNOTATION");
5065eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
5165eecc51b264f73d6470a529a139317de921f5ecBen Gruver
5265eecc51b264f73d6470a529a139317de921f5ecBen Gruver    @NotNull @Override public String getExternalId() {
5365eecc51b264f73d6470a529a139317de921f5ecBen Gruver        return "smali.annotation";
5465eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
5565eecc51b264f73d6470a529a139317de921f5ecBen Gruver
5665eecc51b264f73d6470a529a139317de921f5ecBen Gruver    @Override public SmaliAnnotation createPsi(@NotNull SmaliAnnotationStub stub) {
5765eecc51b264f73d6470a529a139317de921f5ecBen Gruver        return new SmaliAnnotation(stub);
5865eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
5965eecc51b264f73d6470a529a139317de921f5ecBen Gruver
6065eecc51b264f73d6470a529a139317de921f5ecBen Gruver    @Override public SmaliAnnotation createPsi(@NotNull ASTNode node) {
6165eecc51b264f73d6470a529a139317de921f5ecBen Gruver        return new SmaliAnnotation(node);
6265eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
6365eecc51b264f73d6470a529a139317de921f5ecBen Gruver
6465eecc51b264f73d6470a529a139317de921f5ecBen Gruver    @Override public SmaliAnnotationStub createStub(@NotNull SmaliAnnotation psi, StubElement parentStub) {
6582f031210ea1913abdb2a26b1f461826ee9980faBen Gruver        return new SmaliAnnotationStub(parentStub, psi.getSmaliName());
6665eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
6765eecc51b264f73d6470a529a139317de921f5ecBen Gruver
6865eecc51b264f73d6470a529a139317de921f5ecBen Gruver    @Override
6965eecc51b264f73d6470a529a139317de921f5ecBen Gruver    public void serialize(@NotNull SmaliAnnotationStub stub, @NotNull StubOutputStream dataStream) throws IOException {
7082f031210ea1913abdb2a26b1f461826ee9980faBen Gruver        dataStream.writeName(stub.getAnnotationSmaliTypeName());
7165eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
7265eecc51b264f73d6470a529a139317de921f5ecBen Gruver
7365eecc51b264f73d6470a529a139317de921f5ecBen Gruver    @NotNull @Override
7465eecc51b264f73d6470a529a139317de921f5ecBen Gruver    public SmaliAnnotationStub deserialize(@NotNull StubInputStream dataStream, StubElement parentStub) throws IOException {
751325537f8a71116a2002494bb815d364575ee2c8Ben Gruver        return new SmaliAnnotationStub(parentStub, deserializeNullableString(dataStream));
7665eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
7765eecc51b264f73d6470a529a139317de921f5ecBen Gruver
7865eecc51b264f73d6470a529a139317de921f5ecBen Gruver    @Override public void indexStub(@NotNull SmaliAnnotationStub stub, @NotNull IndexSink sink) {
7965eecc51b264f73d6470a529a139317de921f5ecBen Gruver    }
8065eecc51b264f73d6470a529a139317de921f5ecBen Gruver}
81