From 3505b35057f48bd04940cbc3e7d6d48cad280067 Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Wed, 18 Feb 2015 20:04:58 -0800 Subject: [PATCH] Merge the empty modifier list with the access list --- smalidea/src/main/antlr3/smalideaParser.g | 7 +-- .../jf/smalidea/psi/SmaliElementTypes.java | 2 - .../psi/iface/SmaliModifierListOwner.java | 2 - .../jf/smalidea/psi/impl/SmaliAccessList.java | 61 ------------------- .../org/jf/smalidea/psi/impl/SmaliClass.java | 26 ++++---- .../psi/impl/SmaliClassStatement.java | 4 +- .../org/jf/smalidea/psi/impl/SmaliField.java | 4 -- .../org/jf/smalidea/psi/impl/SmaliMethod.java | 4 -- .../psi/impl/SmaliMethodParameter.java | 5 -- .../smalidea/psi/impl/SmaliModifierList.java | 55 ++++++----------- smalidea/testData/Empty.txt | 2 - smalidea/testData/InvalidClassDirective.txt | 4 +- smalidea/testData/InvalidClassDirective2.txt | 4 +- smalidea/testData/InvalidClassDirective3.txt | 4 +- smalidea/testData/InvalidField.txt | 6 +- smalidea/testData/InvalidMethod.txt | 8 +-- smalidea/testData/InvalidMethod2.txt | 12 +--- .../testData/ParamListInvalidParameter.txt | 8 +-- smalidea/testData/SuperClassInvalidSyntax.txt | 4 +- .../testData/SuperClassInvalidSyntax2.txt | 8 +-- 20 files changed, 48 insertions(+), 182 deletions(-) delete mode 100644 smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliAccessList.java diff --git a/smalidea/src/main/antlr3/smalideaParser.g b/smalidea/src/main/antlr3/smalideaParser.g index e363674d..f5162293 100644 --- a/smalidea/src/main/antlr3/smalideaParser.g +++ b/smalidea/src/main/antlr3/smalideaParser.g @@ -189,7 +189,6 @@ sync[boolean toEof] smali_file @init { - mark().done(SmaliElementTypes.MODIFIER_LIST); mark().done(SmaliElementTypes.EXTENDS_LIST); mark().done(SmaliElementTypes.IMPLEMENTS_LIST); } @@ -249,7 +248,7 @@ source_spec class_access_list @init { Marker marker = mark(); } : ACCESS_SPEC* - { marker.done(SmaliElementTypes.ACCESS_LIST); }; + { marker.done(SmaliElementTypes.MODIFIER_LIST); }; catch [RecognitionException re] { recover(input, re); reportError(marker, re, false); @@ -258,7 +257,7 @@ class_access_list access_list @init { Marker marker = mark(); } : ACCESS_SPEC* - { marker.done(SmaliElementTypes.ACCESS_LIST); }; + { marker.done(SmaliElementTypes.MODIFIER_LIST); }; catch [RecognitionException re] { recover(input, re); reportError(marker, re, false); @@ -271,7 +270,6 @@ add them to the $smali_file::classAnnotations list*/ field @init { Marker marker = mark(); - mark().done(SmaliElementTypes.MODIFIER_LIST); Marker annotationsMarker = null; boolean classAnnotations = true; } @@ -325,7 +323,6 @@ field_initializer method @init { Marker marker = mark(); - mark().done(SmaliElementTypes.MODIFIER_LIST); mark().done(SmaliElementTypes.THROWS_LIST); } : METHOD_DIRECTIVE access_list member_name method_prototype statements_and_directives diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java b/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java index fd3b1da7..bb4bd37a 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/SmaliElementTypes.java @@ -61,8 +61,6 @@ public class SmaliElementTypes { new SmaliCompositeElementType("REGISTERS_STATEMENT", SmaliRegistersStatement.FACTORY); public static final SmaliCompositeElementType REGISTER_REFERENCE = new SmaliCompositeElementType("REGISTER_REFERENCE", SmaliRegisterReference.FACTORY); - public static final SmaliCompositeElementType ACCESS_LIST = - new SmaliCompositeElementType("ACCESS_LIST", SmaliAccessList.FACTORY); public static final SmaliCompositeElementType MEMBER_NAME = new SmaliCompositeElementType("MEMBER_NAME", SmaliMemberName.FACTORY); public static final SmaliCompositeElementType LOCAL_NAME = diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/iface/SmaliModifierListOwner.java b/smalidea/src/main/java/org/jf/smalidea/psi/iface/SmaliModifierListOwner.java index ca30b105..839333b3 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/iface/SmaliModifierListOwner.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/iface/SmaliModifierListOwner.java @@ -35,11 +35,9 @@ import com.intellij.psi.PsiAnnotationOwner; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jf.smalidea.psi.impl.SmaliAccessList; import org.jf.smalidea.psi.impl.SmaliAnnotation; public interface SmaliModifierListOwner extends PsiAnnotationOwner { - @Nullable SmaliAccessList getAccessFlagsNode(); @NotNull @Override SmaliAnnotation[] getAnnotations(); @NotNull @Override SmaliAnnotation[] getApplicableAnnotations(); @Nullable @Override SmaliAnnotation findAnnotation(@NotNull @NonNls String qualifiedName); diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliAccessList.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliAccessList.java deleted file mode 100644 index c25cf67c..00000000 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliAccessList.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * Copyright 2014, Google Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Google Inc. nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.jf.smalidea.psi.impl; - -import com.intellij.lang.ASTNode; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import org.jf.smalidea.SmaliTokens; -import org.jf.smalidea.psi.SmaliCompositeElementFactory; -import org.jf.smalidea.psi.SmaliElementTypes; - -public class SmaliAccessList extends SmaliCompositeElement { - public static final SmaliCompositeElementFactory FACTORY = new SmaliCompositeElementFactory() { - @Override public SmaliCompositeElement createElement() { - return new SmaliAccessList(); - } - }; - - public SmaliAccessList() { - super(SmaliElementTypes.ACCESS_LIST); - } - - @Nullable - public ASTNode getAccessFlagNode(@NotNull String accessFlag) { - for (ASTNode node: findChildrenByType(SmaliTokens.ACCESS_SPEC)) { - if (node.getText().equals(accessFlag)) { - return node; - } - } - return null; - } -} diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java index 898e713f..84720f39 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClass.java @@ -99,28 +99,21 @@ public class SmaliClass extends SmaliStubBasedPsiElement impleme return name.substring(0, lastDot); } - @Nullable @Override public SmaliAccessList getAccessFlagsNode() { - SmaliClassStatement classStatement = findChildByClass(SmaliClassStatement.class); - if (classStatement == null) { - return null; - } - return classStatement.getAccessFlagsNode(); - } @Override public boolean hasTypeParameters() { // TODO: implement generics return false; } @Override public boolean isInterface() { - return getModifierList().hasModifierProperty("interface"); + return hasModifierProperty("interface"); } @Override public boolean isAnnotationType() { - return getModifierList().hasModifierProperty("annotation"); + return hasModifierProperty("annotation"); } @Override public boolean isEnum() { - return getModifierList().hasModifierProperty("enum"); + return hasModifierProperty("enum"); } @Nullable public SmaliSuperStatement getSuperStatement() { @@ -277,14 +270,17 @@ public class SmaliClass extends SmaliStubBasedPsiElement impleme return new PsiTypeParameter[0]; } - @NotNull @Override public SmaliModifierList getModifierList() { - SmaliModifierList modifierList = getStubOrPsiChild(SmaliElementTypes.MODIFIER_LIST); - assert modifierList != null; - return modifierList; + @Nullable @Override public SmaliModifierList getModifierList() { + SmaliClassStatement classStatement = getStubOrPsiChild(SmaliElementTypes.CLASS_STATEMENT); + if (classStatement == null) { + return null; + } + return classStatement.getModifierList(); } @Override public boolean hasModifierProperty(@ModifierConstant @NonNls @NotNull String name) { - return getModifierList().hasModifierProperty(name); + SmaliModifierList smaliModifierList = getModifierList(); + return smaliModifierList != null && smaliModifierList.hasModifierProperty(name); } @NotNull @Override public SmaliAnnotation[] getAnnotations() { diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClassStatement.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClassStatement.java index fcfbd908..73cdf8de 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClassStatement.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliClassStatement.java @@ -64,7 +64,7 @@ public class SmaliClassStatement extends SmaliStubBasedPsiElement impleme return smaliMemberName.getText(); } - @Nullable @Override public SmaliAccessList getAccessFlagsNode() { - return findChildByClass(SmaliAccessList.class); - } - @NotNull @Override public SmaliModifierList getModifierList() { SmaliModifierList modifierList = getStubOrPsiChild(SmaliElementTypes.MODIFIER_LIST); assert modifierList != null; diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java index 31c2c71e..ffde5bcf 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethod.java @@ -260,10 +260,6 @@ public class SmaliMethod extends SmaliStubBasedPsiElement return getModifierList().hasModifierProperty(name); } - @Nullable @Override public SmaliAccessList getAccessFlagsNode() { - return findChildByClass(SmaliAccessList.class); - } - @NotNull @Override public SmaliAnnotation[] getAnnotations() { return getStubOrPsiChildren(SmaliElementTypes.ANNOTATION, new SmaliAnnotation[0]); } diff --git a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodParameter.java b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodParameter.java index 3d387fcd..fcfcd91b 100644 --- a/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodParameter.java +++ b/smalidea/src/main/java/org/jf/smalidea/psi/impl/SmaliMethodParameter.java @@ -52,11 +52,6 @@ public class SmaliMethodParameter extends SmaliStubBasedPsiElement SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) diff --git a/smalidea/testData/InvalidClassDirective.txt b/smalidea/testData/InvalidClassDirective.txt index 347e586c..e9f89c0d 100644 --- a/smalidea/testData/InvalidClassDirective.txt +++ b/smalidea/testData/InvalidClassDirective.txt @@ -1,14 +1,12 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiErrorElement:mismatched input '' expecting CLASS_DESCRIPTOR \ No newline at end of file diff --git a/smalidea/testData/InvalidClassDirective2.txt b/smalidea/testData/InvalidClassDirective2.txt index a6e9116b..6f36abe8 100644 --- a/smalidea/testData/InvalidClassDirective2.txt +++ b/smalidea/testData/InvalidClassDirective2.txt @@ -1,7 +1,5 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) @@ -9,7 +7,7 @@ smali.FILE SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') PsiWhiteSpace('\n') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiErrorElement:extraneous input '.super' expecting CLASS_DESCRIPTOR PsiElement(SUPER_DIRECTIVE)('.super') diff --git a/smalidea/testData/InvalidClassDirective3.txt b/smalidea/testData/InvalidClassDirective3.txt index 0094ccaf..ed98ac64 100644 --- a/smalidea/testData/InvalidClassDirective3.txt +++ b/smalidea/testData/InvalidClassDirective3.txt @@ -1,7 +1,5 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) @@ -9,7 +7,7 @@ smali.FILE SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(ACCESS_SPEC)('public') PsiWhiteSpace(' ') PsiErrorElement:extraneous input '.class' expecting CLASS_DESCRIPTOR diff --git a/smalidea/testData/InvalidField.txt b/smalidea/testData/InvalidField.txt index dbcd5349..d65a0bda 100644 --- a/smalidea/testData/InvalidField.txt +++ b/smalidea/testData/InvalidField.txt @@ -1,16 +1,12 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) SmaliField(FIELD) - SmaliModifierList(MODIFIER_LIST) - PsiElement(FIELD_DIRECTIVE)('.field') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiErrorElement:no viable alternative at input '' \ No newline at end of file diff --git a/smalidea/testData/InvalidMethod.txt b/smalidea/testData/InvalidMethod.txt index 024a6869..42c69944 100644 --- a/smalidea/testData/InvalidMethod.txt +++ b/smalidea/testData/InvalidMethod.txt @@ -1,7 +1,5 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) @@ -9,7 +7,7 @@ smali.FILE SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(CLASS_TYPE) PsiElement(CLASS_DESCRIPTOR)('Ltest;') @@ -21,13 +19,11 @@ smali.FILE PsiElement(CLASS_DESCRIPTOR)('Ljava/lang/Object;') PsiWhiteSpace('\n\n') SmaliMethod(METHOD) - SmaliModifierList(MODIFIER_LIST) - SmaliThrowsList(THROWS_LIST) PsiElement(METHOD_DIRECTIVE)('.method') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiErrorElement:no viable alternative at input '.blah' PsiElement(BAD_CHARACTER)('.blah') diff --git a/smalidea/testData/InvalidMethod2.txt b/smalidea/testData/InvalidMethod2.txt index 03283a18..36c533fb 100644 --- a/smalidea/testData/InvalidMethod2.txt +++ b/smalidea/testData/InvalidMethod2.txt @@ -1,7 +1,5 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) @@ -9,7 +7,7 @@ smali.FILE SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(CLASS_TYPE) PsiElement(CLASS_DESCRIPTOR)('Ltest;') @@ -21,13 +19,11 @@ smali.FILE PsiElement(CLASS_DESCRIPTOR)('Ljava/lang/Object;') PsiWhiteSpace('\n\n') SmaliMethod(METHOD) - SmaliModifierList(MODIFIER_LIST) - SmaliThrowsList(THROWS_LIST) PsiElement(METHOD_DIRECTIVE)('.method') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(MEMBER_NAME) PsiElement(SIMPLE_NAME)('blah') @@ -40,12 +36,10 @@ smali.FILE PsiErrorElement:missing END_METHOD_DIRECTIVE at '.method' SmaliMethod(METHOD) - SmaliModifierList(MODIFIER_LIST) - SmaliThrowsList(THROWS_LIST) PsiElement(METHOD_DIRECTIVE)('.method') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiErrorElement:no viable alternative at input '' diff --git a/smalidea/testData/ParamListInvalidParameter.txt b/smalidea/testData/ParamListInvalidParameter.txt index f4449046..b7ee932b 100644 --- a/smalidea/testData/ParamListInvalidParameter.txt +++ b/smalidea/testData/ParamListInvalidParameter.txt @@ -1,7 +1,5 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) @@ -9,7 +7,7 @@ smali.FILE SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(CLASS_TYPE) PsiElement(CLASS_DESCRIPTOR)('Lblah;') @@ -21,13 +19,11 @@ smali.FILE PsiElement(CLASS_DESCRIPTOR)('Ljava/lang/Object;') PsiWhiteSpace('\n\n') SmaliMethod(METHOD) - SmaliModifierList(MODIFIER_LIST) - SmaliThrowsList(THROWS_LIST) PsiElement(METHOD_DIRECTIVE)('.method') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(MEMBER_NAME) PsiElement(SIMPLE_NAME)('blah') diff --git a/smalidea/testData/SuperClassInvalidSyntax.txt b/smalidea/testData/SuperClassInvalidSyntax.txt index 14f0f917..316041cd 100644 --- a/smalidea/testData/SuperClassInvalidSyntax.txt +++ b/smalidea/testData/SuperClassInvalidSyntax.txt @@ -1,7 +1,5 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) @@ -9,7 +7,7 @@ smali.FILE SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(CLASS_TYPE) PsiElement(CLASS_DESCRIPTOR)('Lblah;') diff --git a/smalidea/testData/SuperClassInvalidSyntax2.txt b/smalidea/testData/SuperClassInvalidSyntax2.txt index 471004cb..348fab47 100644 --- a/smalidea/testData/SuperClassInvalidSyntax2.txt +++ b/smalidea/testData/SuperClassInvalidSyntax2.txt @@ -1,7 +1,5 @@ smali.FILE SmaliClass(CLASS) - SmaliModifierList(MODIFIER_LIST) - SmaliExtendsList(EXTENDS_LIST) SmaliImplementsList(IMPLEMENTS_LIST) @@ -9,7 +7,7 @@ smali.FILE SmaliClassStatement(CLASS_STATEMENT) PsiElement(CLASS_DIRECTIVE)('.class') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(CLASS_TYPE) PsiElement(CLASS_DESCRIPTOR)('Lblah;') @@ -20,13 +18,11 @@ smali.FILE PsiWhiteSpace('\n\n') SmaliMethod(METHOD) - SmaliModifierList(MODIFIER_LIST) - SmaliThrowsList(THROWS_LIST) PsiElement(METHOD_DIRECTIVE)('.method') PsiWhiteSpace(' ') - PsiElement(ACCESS_LIST) + SmaliModifierList(MODIFIER_LIST) PsiElement(MEMBER_NAME) PsiElement(SIMPLE_NAME)('blah')