001 /* 002 * Copyright 2010-2015 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.kotlin.psi; 018 019 import com.intellij.extapi.psi.ASTWrapperPsiElement; 020 import com.intellij.lang.ASTNode; 021 import com.intellij.lang.Language; 022 import com.intellij.psi.PsiElementVisitor; 023 import com.intellij.psi.PsiFile; 024 import com.intellij.psi.PsiReference; 025 import com.intellij.psi.PsiReferenceService; 026 import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry; 027 import org.jetbrains.annotations.NotNull; 028 import org.jetbrains.kotlin.idea.JetLanguage; 029 030 public class JetElementImpl extends ASTWrapperPsiElement implements JetElement { 031 public JetElementImpl(@NotNull ASTNode node) { 032 super(node); 033 } 034 035 @NotNull 036 @Override 037 public Language getLanguage() { 038 return JetLanguage.INSTANCE; 039 } 040 041 @Override 042 public String toString() { 043 return getNode().getElementType().toString(); 044 } 045 046 @Override 047 public final void accept(@NotNull PsiElementVisitor visitor) { 048 if (visitor instanceof JetVisitor) { 049 accept((JetVisitor) visitor, null); 050 } 051 else { 052 visitor.visitElement(this); 053 } 054 } 055 056 @NotNull 057 @Override 058 public JetFile getContainingJetFile() { 059 PsiFile file = getContainingFile(); 060 assert file instanceof JetFile : "JetElement not inside JetFile: " + file + " " + file.getText(); 061 return (JetFile) file; 062 } 063 064 @Override 065 public <D> void acceptChildren(@NotNull JetVisitor<Void, D> visitor, D data) { 066 JetPsiUtil.visitChildren(this, visitor, data); 067 } 068 069 @Override 070 public <R, D> R accept(@NotNull JetVisitor<R, D> visitor, D data) { 071 return visitor.visitJetElement(this, data); 072 } 073 074 @Override 075 public PsiReference getReference() { 076 PsiReference[] references = getReferences(); 077 if (references.length == 1) return references[0]; 078 else return null; 079 } 080 081 @NotNull 082 @Override 083 public PsiReference[] getReferences() { 084 return ReferenceProvidersRegistry.getReferencesFromProviders(this, PsiReferenceService.Hints.NO_HINTS); 085 } 086 }