use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable in project intellij-community by JetBrains.
the class GenerationUtil method writeSimpleVarDeclaration.
public static void writeSimpleVarDeclaration(GrVariableDeclaration variableDeclaration, StringBuilder builder, ExpressionContext expressionContext) {
GrVariable[] variables = variableDeclaration.getVariables();
//if (types.size() > 1) {
if (variables.length > 1 && variableDeclaration.getParent() instanceof GrControlStatement) {
expressionContext.setInsertCurlyBrackets();
}
for (GrVariable variable : variables) {
writeVariableSeparately(variable, builder, expressionContext);
builder.append(";\n");
}
builder.delete(builder.length() - 1, builder.length());
//builder.removeFromTheEnd(1);
/*return;
}
ModifierListGenerator.writeModifiers(builder, variableDeclaration.getModifierList());
PsiType type = getVarType(variables[0]);
writeType(builder, type, variableDeclaration);
builder.append(" ");
for (GrVariable variable : variables) {
writeVariableWithoutType(builder, expressionContext, variable);
builder.append(", ");
}
if (variables.length > 0) {
builder.delete(builder.length() - 2, builder.length());
}
builder.append(";");*/
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable in project intellij-community by JetBrains.
the class LocalVarAnalyzer method visitReferenceExpression.
@Override
public void visitReferenceExpression(@NotNull GrReferenceExpression ref) {
super.visitReferenceExpression(ref);
PsiElement resolved = ref.resolve();
if (!allVars.contains(resolved))
return;
GrVariable var = (GrVariable) resolved;
if (PsiUtil.isAccessedForWriting(ref)) {
rewritten.add(var);
}
if (allVars.get(var) < grade) {
touched.add((PsiVariable) resolved);
}
}
use of org.jetbrains.plugins.groovy.lang.psi.api.statements.GrVariable in project android by JetBrains.
the class GradleEditorModelParserFacade method fillContext.
/**
* Processes given PSI file and fills given context
* by {@link GradleEditorModelParseContext#getAssignments(Variable) corresponding assignments}.
*
* @param context context to fill
* @param psiFile psi file to parse
*/
private static void fillContext(@NotNull final GradleEditorModelParseContext context, @NotNull PsiFile psiFile) {
psiFile.acceptChildren(new GroovyPsiElementVisitor(new GroovyRecursiveElementVisitor() {
@Override
public void visitMethodCallExpression(GrMethodCallExpression methodCallExpression) {
Pair<String, TextRange> pair = GradleEditorValueExtractor.extractMethodName(methodCallExpression);
GrClosableBlock[] closureArguments = methodCallExpression.getClosureArguments();
if (pair == null || closureArguments.length > 1) {
super.visitMethodCallExpression(methodCallExpression);
return;
}
if (closureArguments.length == 0) {
if (methodCallExpression.getArgumentList().getAllArguments().length == 0) {
// This is a no-args method, so, we just register it for cases like 'mavenCentral()' or 'jcenter()'.
context.addCachedValue(NO_ARGS_METHOD_ASSIGNMENT_VALUE, TextRange.create(pair.second.getEndOffset(), methodCallExpression.getTextRange().getEndOffset()));
context.registerAssignmentFromCachedData(pair.first, pair.second, methodCallExpression);
}
return;
}
context.onMethodEnter(pair.getFirst());
try {
super.visitClosure(closureArguments[0]);
} finally {
context.onMethodExit();
}
}
@Override
public void visitApplicationStatement(GrApplicationStatement applicationStatement) {
Pair<String, TextRange> methodName = GradleEditorValueExtractor.extractMethodName(applicationStatement);
if (methodName == null) {
return;
}
GroovyPsiElement[] allArguments = applicationStatement.getArgumentList().getAllArguments();
if (allArguments.length == 1) {
context.resetCaches();
extractValueOrVariable(allArguments[0], context);
context.registerAssignmentFromCachedData(methodName.getFirst(), methodName.getSecond(), applicationStatement.getArgumentList());
}
}
@Override
public void visitAssignmentExpression(GrAssignmentExpression expression) {
// General idea is to try to extract variable from the given expression and, in case of success, try to extract rvalue and
// register corresponding assignment with them.
context.resetCaches();
extractValueOrVariable(expression.getLValue(), context);
Multimap<Variable, Location> vars = context.getCachedVariables();
if (vars.size() != 1) {
context.resetCaches();
return;
}
Map.Entry<Variable, Location> entry = vars.entries().iterator().next();
Variable lVariable = entry.getKey();
Location lVariableLocation = entry.getValue();
context.resetCaches();
GrExpression rValue = expression.getRValue();
if (rValue == null) {
return;
}
extractValueOrVariable(rValue, context);
if (context.getCachedValues().size() > 1) {
Value value = new Value("", new Location(context.getCurrentFile(), GradleEditorModelUtil.interestedRange(rValue)));
context.setCachedValues(Collections.singletonList(value));
}
context.registerAssignmentFromCachedData(lVariable, lVariableLocation, rValue);
context.resetCaches();
}
@Override
public void visitVariable(GrVariable variable) {
TextRange nameRange = null;
boolean lookForInitializer = false;
ParserDefinition parserDefinition = LanguageParserDefinitions.INSTANCE.findSingle(GroovyLanguage.INSTANCE);
for (PsiElement e = variable.getFirstChild(); e != null; e = e.getNextSibling()) {
ASTNode node = e.getNode();
if (node == null) {
continue;
}
if (!lookForInitializer) {
if (node.getElementType() == GroovyTokenTypes.mIDENT) {
nameRange = e.getTextRange();
} else if (node.getElementType() == GroovyTokenTypes.mASSIGN) {
if (nameRange == null) {
return;
}
lookForInitializer = true;
}
continue;
}
if (node.getElementType() == GroovyTokenTypes.mNLS || node.getElementType() == GroovyTokenTypes.mSEMI) {
break;
}
if (parserDefinition.getWhitespaceTokens().contains(node.getElementType())) {
continue;
}
extractValueOrVariable(e, context);
if (context.getCachedValues().size() > 1) {
Value value = new Value("", new Location(context.getCurrentFile(), GradleEditorModelUtil.interestedRange(e)));
context.setCachedValues(Collections.singletonList(value));
}
if (context.registerAssignmentFromCachedData(variable.getName(), nameRange, e)) {
return;
}
}
}
}));
}
Aggregations