blob: 4a468c4fe26a53424e46455048f62e7abdb588ba [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
*
* 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.android.tools.lint.psi;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiExpression;
import com.intellij.psi.PsiIdentifier;
import com.intellij.psi.PsiModifier;
import com.intellij.psi.PsiModifierList;
import com.intellij.psi.PsiParameter;
import com.intellij.psi.PsiType;
import com.intellij.psi.PsiTypeElement;
import org.eclipse.jdt.internal.compiler.lookup.ReferenceBinding;
import org.eclipse.jdt.internal.compiler.lookup.TypeBinding;
public class EcjPsiBinaryParameter extends EcjPsiBinaryElement implements PsiParameter,
PsiModifierList {
private boolean mVarArgs;
private final int mIndex;
private final EcjPsiBinaryMethod mMethod;
public EcjPsiBinaryParameter(@NonNull EcjPsiManager manager,
@Nullable TypeBinding binding, @NonNull EcjPsiBinaryMethod method,
int index) {
super(manager, binding);
mMethod = method;
mIndex = index;
}
@SuppressWarnings("SameParameterValue")
void setVarArgs(boolean varArgs) {
mVarArgs = varArgs;
}
@NonNull
EcjPsiBinaryMethod getOwnerMethod() {
return mMethod;
}
public int getIndex() {
return mIndex;
}
@Override
public boolean isVarArgs() {
return mVarArgs;
}
@NonNull
@Override
public PsiType getType() {
PsiType type = mManager.findType((TypeBinding) mBinding);
assert type != null;
return type;
}
@Nullable
@Override
public PsiTypeElement getTypeElement() {
return null;
}
@Nullable
@Override
public PsiExpression getInitializer() {
return null;
}
@Override
public boolean hasInitializer() {
return false;
}
@Nullable
@Override
public Object computeConstantValue() {
return null;
}
@Nullable
@Override
public PsiIdentifier getNameIdentifier() {
return null;
}
@Nullable
@Override
public String getName() {
return null;
}
// Modifier list inlined here
@NonNull
@Override
public PsiModifierList getModifierList() {
return this;
}
@Override
public boolean hasModifierProperty(@NonNull @PsiModifier.ModifierConstant String s) {
return hasExplicitModifier(s);
}
@Override
public boolean hasExplicitModifier(@NonNull @PsiModifier.ModifierConstant String s) {
return mBinding instanceof ReferenceBinding
&& EcjPsiModifierList .hasModifier(((ReferenceBinding) mBinding).modifiers, s);
}
@NonNull
@Override
public PsiAnnotation[] getAnnotations() {
// TODO: Merge in modifiers from external sources and here
//return new PsiAnnotation[0];
throw new UnimplementedLintPsiApiException();
}
@NonNull
@Override
public PsiAnnotation[] getApplicableAnnotations() {
return getAnnotations();
}
@Nullable
@Override
public PsiAnnotation findAnnotation(@NonNull String s) {
for (PsiAnnotation annotation : getAnnotations()) {
String qualifiedName = annotation.getQualifiedName();
if (s.equals(qualifiedName)) {
return annotation;
}
}
return null;
}
}