001 /*
002 * Copyright 2010-2013 JetBrains s.r.o.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016
017 package org.jetbrains.jet.lang.psi.stubs.impl;
018
019 import com.intellij.psi.stubs.IStubElementType;
020 import com.intellij.psi.stubs.StubBase;
021 import com.intellij.psi.stubs.StubElement;
022 import com.intellij.util.io.StringRef;
023 import org.jetbrains.annotations.Nullable;
024 import org.jetbrains.jet.lang.psi.JetProperty;
025 import org.jetbrains.jet.lang.psi.stubs.PsiJetPropertyStub;
026 import org.jetbrains.jet.lang.resolve.name.FqName;
027
028 public class PsiJetPropertyStubImpl extends StubBase<JetProperty> implements PsiJetPropertyStub {
029 private final StringRef name;
030 private final boolean isVar;
031 private final boolean isTopLevel;
032 private final FqName topFQName;
033 private final StringRef typeText;
034 private final StringRef inferenceBodyText;
035
036 public PsiJetPropertyStubImpl(IStubElementType elementType, StubElement parent, StringRef name,
037 boolean isVar, boolean isTopLevel, @Nullable FqName topFQName, StringRef typeText, StringRef inferenceBodyText) {
038 super(parent, elementType);
039
040 if (isTopLevel && topFQName == null) {
041 throw new IllegalArgumentException("topFQName shouldn't be null for top level properties");
042 }
043
044 this.name = name;
045 this.isVar = isVar;
046 this.isTopLevel = isTopLevel;
047 this.topFQName = topFQName;
048 this.typeText = typeText;
049 this.inferenceBodyText = inferenceBodyText;
050 }
051
052 public PsiJetPropertyStubImpl(IStubElementType elementType, StubElement parent, String name,
053 boolean isVal, boolean isTopLevel, @Nullable FqName topFQName,
054 String typeText, String inferenceBodyText
055 ) {
056 this(elementType, parent, StringRef.fromString(name),
057 isVal, isTopLevel, topFQName, StringRef.fromString(typeText), StringRef.fromString(inferenceBodyText));
058 }
059
060 @Override
061 public boolean isVar() {
062 return isVar;
063 }
064
065 @Override
066 public boolean isTopLevel() {
067 return isTopLevel;
068 }
069
070 @Nullable
071 @Override
072 public FqName getTopFQName() {
073 return topFQName;
074 }
075
076 @Override
077 public String getTypeText() {
078 return StringRef.toString(typeText);
079 }
080
081 @Override
082 public String getInferenceBodyText() {
083 return StringRef.toString(inferenceBodyText);
084 }
085
086 @Override
087 public String getName() {
088 return StringRef.toString(name);
089 }
090
091 @Override
092 public String toString() {
093 StringBuilder builder = new StringBuilder();
094
095 builder.append("PsiJetPropertyStubImpl[");
096
097 builder.append(isVar() ? "var " : "val ");
098
099 if (isTopLevel()) {
100 assert topFQName != null;
101 builder.append("top ").append("topFQName=").append(topFQName.toString()).append(" ");
102 }
103
104 builder.append("name=").append(getName());
105 builder.append(" typeText=").append(getTypeText());
106 builder.append(" bodyText=").append(getInferenceBodyText());
107
108 builder.append("]");
109
110 return builder.toString();
111 }
112 }