From 7fd06463c67c7cd1429654c54e203d7221381e0c Mon Sep 17 00:00:00 2001 From: Ievgen Degtiarenko Date: Tue, 29 Sep 2015 20:49:12 -0400 Subject: [PATCH] Reserved variables --- .../concordion/ConcordionVariableUsage.java | 7 +++++++ testData/reference/ReservedVariable.html | 10 ++++++++++ testData/reference/ReservedVariable.java | 11 +++++++++++ .../reference/ReferenceResolverTest.java | 15 +++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 testData/reference/ReservedVariable.html create mode 100644 testData/reference/ReservedVariable.java diff --git a/src/com/gman/idea/plugin/concordion/ConcordionVariableUsage.java b/src/com/gman/idea/plugin/concordion/ConcordionVariableUsage.java index ceaf025..e805e88 100644 --- a/src/com/gman/idea/plugin/concordion/ConcordionVariableUsage.java +++ b/src/com/gman/idea/plugin/concordion/ConcordionVariableUsage.java @@ -21,6 +21,7 @@ public class ConcordionVariableUsage { private static final Set COMMANDS_THAT_CAN_SET_VARIABLE = setOf("set", "execute", "verifyRows", "verify-rows"); + private static final Set RESERVED_VARIABLES = setOf("TEXT", "HREF", "LEVEL"); @Nullable private XmlAttribute attribute; @Nullable private XmlAttributeValue attributeValue; @@ -95,6 +96,9 @@ public boolean isDeclaration() { if (attribute == null) { return false; } + if (variable != null && RESERVED_VARIABLES.contains(variable.getName())) { + return true; + } if (!COMMANDS_THAT_CAN_SET_VARIABLE.contains(attribute.getLocalName())) { return false; } @@ -118,6 +122,9 @@ public PsiType determineType() { if (variable == null || variableParent == null) { return null; } + if (RESERVED_VARIABLES.contains(variable.getName())) { + return PsiType.NULL; + } if (variableParent instanceof ConcordionSetExpression) { ConcordionOgnlExpressionStart expr = findChildOfType(variableParent, ConcordionOgnlExpressionStart.class); return expr != null ? typeOfExpression(expr) : null; diff --git a/testData/reference/ReservedVariable.html b/testData/reference/ReservedVariable.html new file mode 100644 index 0000000..84fa47c --- /dev/null +++ b/testData/reference/ReservedVariable.html @@ -0,0 +1,10 @@ + + + Test spec + + + +execute + + + \ No newline at end of file diff --git a/testData/reference/ReservedVariable.java b/testData/reference/ReservedVariable.java new file mode 100644 index 0000000..1a57f03 --- /dev/null +++ b/testData/reference/ReservedVariable.java @@ -0,0 +1,11 @@ +package com.test; + +import org.concordion.integration.junit4.ConcordionRunner; +import org.junit.runner.RunWith; + +@RunWith(ConcordionRunner.class) +public class ReservedVariable { + + public void consumeString(String s) { + } +} diff --git a/tests/com/gman/idea/plugin/concordion/reference/ReferenceResolverTest.java b/tests/com/gman/idea/plugin/concordion/reference/ReferenceResolverTest.java index 08d42d6..52901af 100644 --- a/tests/com/gman/idea/plugin/concordion/reference/ReferenceResolverTest.java +++ b/tests/com/gman/idea/plugin/concordion/reference/ReferenceResolverTest.java @@ -207,6 +207,21 @@ public void testShouldResolveVariableFromVerifyRowsCommand() { assertThat(declaration).isNotEqualTo(variable); } + public void testShouldResolveReservedVariable() { + + copyJavaRunnerToConcordionProject("ReservedVariable.java"); + VirtualFile htmlSpec = copyHtmlSpecToConcordionProject("ReservedVariable.html"); + + myFixture.configureFromExistingVirtualFile(htmlSpec); + + ConcordionVariable variable = elementUnderCaret(); + ConcordionVariable declaration = resolveReferences(variable); + + assertThat(declaration).isNotNull(); + assertThat(declaration.getName()).isEqualTo("TEXT"); + assertThat(declaration).isEqualTo(variable); + } + private T elementUnderCaret() { return (T) myFixture.getFile().findElementAt(myFixture.getCaretOffset() - 1).getParent(); }