├── settings.gradle ├── img └── screenshot.PNG ├── .gitignore ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── src └── main │ ├── java │ └── com │ │ └── justint │ │ └── usdidea │ │ ├── lang │ │ ├── psi │ │ │ ├── USDNamedElement.java │ │ │ ├── USDBreadcrumbItem.java │ │ │ ├── USDElementType.java │ │ │ ├── USDTokenType.java │ │ │ ├── impl │ │ │ │ ├── USDNamedElementImpl.java │ │ │ │ └── USDReferenceReferenceProvider.java │ │ │ ├── USDFile.java │ │ │ └── USDReferenceReference.java │ │ ├── USDLanguage.java │ │ ├── lexer │ │ │ ├── USDLexerAdapter.java │ │ │ ├── USDHighlighterLexerAdapter.java │ │ │ ├── _USDLexer.flex │ │ │ ├── USDLexer.flex │ │ │ └── USDHighlighterLexer.flex │ │ ├── USDReferenceContributor.java │ │ ├── USDStructureViewFactory.java │ │ ├── USDStructureViewModel.java │ │ ├── parser │ │ │ └── USDParserDefinition.java │ │ └── USDStructureViewElement.java │ │ ├── util │ │ ├── USDIcons.java │ │ ├── USDPsiTreeUtil.java │ │ ├── USDInstallFinder.java │ │ └── binscripts │ │ │ ├── USDBinScript.java │ │ │ └── USDResolve.java │ │ ├── codeinsight │ │ ├── highlighting │ │ │ ├── USDHighlighterColors.java │ │ │ ├── USDSyntaxHighlighterFactory.java │ │ │ ├── USDBraceMatcher.java │ │ │ ├── USDSyntaxHighlighter.java │ │ │ └── USDColorSettingsPage.java │ │ ├── USDDescriptionProvider.java │ │ ├── USDBreadcrumbsProvider.java │ │ ├── USDDocumentationProvider.java │ │ └── folding │ │ │ └── USDFoldingBuilder.java │ │ ├── file │ │ └── USDFileType.java │ │ ├── settings │ │ ├── USDSettingsConfigurable.java │ │ ├── USDSettingsState.java │ │ └── USDSettingsComponent.java │ │ └── inspections │ │ └── UsdresolvePathInspection.java │ ├── gen │ └── com │ │ └── justint │ │ └── usdidea │ │ └── lang │ │ └── psi │ │ ├── usdBoolean.java │ │ ├── usdIdentifier.java │ │ ├── usdRoleDataType.java │ │ ├── usdBasicDataType.java │ │ ├── usdCompositionArc.java │ │ ├── usdListEditAction.java │ │ ├── usdSpecialMetadataKey.java │ │ ├── usdArray.java │ │ ├── usdDictValue.java │ │ ├── usdPrimName.java │ │ ├── usdVector.java │ │ ├── usdDict.java │ │ ├── usdFrameNumber.java │ │ ├── usdMetadataValue.java │ │ ├── usdAttributeValue.java │ │ ├── usdTypename.java │ │ ├── usdMetadataComment.java │ │ ├── usdNamespacedIdentifier.java │ │ ├── usdArrayAttributeType.java │ │ ├── usdSpecifier.java │ │ ├── usdInterpolatedArray.java │ │ ├── usdBody.java │ │ ├── usdTimeSample.java │ │ ├── usdVariantSetItemBody.java │ │ ├── usdMetadata.java │ │ ├── usdRelationshipProperty.java │ │ ├── usdSingleAttributeType.java │ │ ├── usdAttributeName.java │ │ ├── usdAttributeType.java │ │ ├── usdVariantSetBody.java │ │ ├── usdDictKey.java │ │ ├── usdMetadataKey.java │ │ ├── usdVariantSetKey.java │ │ ├── usdReferenceItem.java │ │ ├── usdAttributeProperty.java │ │ ├── usdDictItem.java │ │ ├── usdMetadatum.java │ │ ├── usdPrimSpec.java │ │ ├── usdItem.java │ │ ├── usdPropertySpec.java │ │ ├── impl │ │ ├── usdBooleanImpl.java │ │ ├── usdIdentifierImpl.java │ │ ├── usdRoleDataTypeImpl.java │ │ ├── usdBasicDataTypeImpl.java │ │ ├── usdCompositionArcImpl.java │ │ ├── usdListEditActionImpl.java │ │ ├── usdSpecialMetadataKeyImpl.java │ │ ├── usdPrimNameImpl.java │ │ ├── usdDictValueImpl.java │ │ ├── usdFrameNumberImpl.java │ │ ├── usdArrayImpl.java │ │ ├── usdDictImpl.java │ │ ├── usdTypenameImpl.java │ │ ├── usdVectorImpl.java │ │ ├── usdMetadataValueImpl.java │ │ ├── usdAttributeValueImpl.java │ │ ├── usdMetadataCommentImpl.java │ │ ├── usdArrayAttributeTypeImpl.java │ │ ├── usdNamespacedIdentifierImpl.java │ │ ├── usdSpecifierImpl.java │ │ ├── usdInterpolatedArrayImpl.java │ │ ├── usdBodyImpl.java │ │ ├── usdRelationshipPropertyImpl.java │ │ ├── usdTimeSampleImpl.java │ │ ├── usdSingleAttributeTypeImpl.java │ │ ├── usdVariantSetItemBodyImpl.java │ │ ├── usdAttributeTypeImpl.java │ │ ├── usdMetadataImpl.java │ │ ├── usdAttributeNameImpl.java │ │ ├── usdVariantSetBodyImpl.java │ │ ├── usdDictKeyImpl.java │ │ ├── usdMetadataKeyImpl.java │ │ ├── usdVariantSetKeyImpl.java │ │ ├── usdReferenceItemImpl.java │ │ ├── usdAttributePropertyImpl.java │ │ ├── usdDictItemImpl.java │ │ ├── usdMetadatumImpl.java │ │ ├── usdPrimSpecImpl.java │ │ ├── usdPropertySpecImpl.java │ │ └── usdItemImpl.java │ │ └── usdVisitor.java │ └── resources │ ├── inspectionDescriptions │ └── usdresolvePathInspection.html │ ├── com │ └── justint │ │ └── usdidea │ │ └── icons │ │ └── usd-file.svg │ └── META-INF │ ├── change-notes.html │ └── plugin.xml ├── LICENSE ├── README.md ├── gradlew.bat ├── gradlew └── .github └── workflows └── build.yml /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'usd-idea' 2 | -------------------------------------------------------------------------------- /img/screenshot.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/justint/usd-idea/HEAD/img/screenshot.PNG -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | out/ 3 | build/ 4 | .gradle/ 5 | jflex/ 6 | .DS_Store 7 | Thumbs.db 8 | *~ -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | pluginVerifierIdeVersions = 2019.2.4, 2020.2.4, 2020.3.2, 2021.1.3, 2021.2 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/justint/usd-idea/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-bin.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/USDNamedElement.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi; 2 | 3 | import com.intellij.psi.PsiNameIdentifierOwner; 4 | 5 | public interface USDNamedElement extends PsiNameIdentifierOwner { 6 | 7 | String getDescriptionName(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/USDBreadcrumbItem.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi; 2 | 3 | import com.intellij.psi.PsiElement; 4 | import org.jetbrains.annotations.NotNull; 5 | 6 | public interface USDBreadcrumbItem extends PsiElement { 7 | 8 | @NotNull 9 | String getName(); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/util/USDIcons.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.util; 2 | 3 | import com.intellij.openapi.util.IconLoader; 4 | 5 | import javax.swing.*; 6 | 7 | public class USDIcons { 8 | public static final Icon FILE = IconLoader.getIcon("/com/justint/usdidea/icons/usd-file.svg", USDIcons.class); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdBoolean.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdBoolean extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/USDLanguage.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang; 2 | 3 | import com.intellij.lang.Language; 4 | 5 | public class USDLanguage extends Language { 6 | 7 | public static final USDLanguage INSTANCE = new USDLanguage(); 8 | 9 | private USDLanguage() { 10 | super("USD"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdIdentifier.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdIdentifier extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdRoleDataType.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdRoleDataType extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/lexer/USDLexerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.lexer; 2 | 3 | import com.intellij.lexer.FlexAdapter; 4 | 5 | import java.io.Reader; 6 | 7 | 8 | public class USDLexerAdapter extends FlexAdapter { 9 | public USDLexerAdapter() { 10 | super(new USDLexer((Reader) null)); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdBasicDataType.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdBasicDataType extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdCompositionArc.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdCompositionArc extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdListEditAction.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdListEditAction extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdSpecialMetadataKey.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdSpecialMetadataKey extends PsiElement { 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/lexer/USDHighlighterLexerAdapter.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.lexer; 2 | 3 | import com.intellij.lexer.FlexAdapter; 4 | 5 | import java.io.Reader; 6 | 7 | public class USDHighlighterLexerAdapter extends FlexAdapter { 8 | public USDHighlighterLexerAdapter() { 9 | super(new USDHighlighterLexer((Reader) null)); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdArray.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdArray extends PsiElement { 9 | 10 | @NotNull 11 | List getItemList(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdDictValue.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdDictValue extends PsiElement { 9 | 10 | @NotNull 11 | usdItem getItem(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdPrimName.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdPrimName extends PsiElement { 9 | 10 | @NotNull 11 | PsiElement getString(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdVector.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdVector extends PsiElement { 9 | 10 | @NotNull 11 | List getItemList(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdDict.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdDict extends PsiElement { 9 | 10 | @NotNull 11 | List getDictItemList(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdFrameNumber.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdFrameNumber extends PsiElement { 9 | 10 | @NotNull 11 | PsiElement getNumber(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdMetadataValue.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdMetadataValue extends PsiElement { 9 | 10 | @NotNull 11 | usdItem getItem(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdAttributeValue.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdAttributeValue extends PsiElement { 9 | 10 | @NotNull 11 | usdItem getItem(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdTypename.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdTypename extends PsiElement { 9 | 10 | @NotNull 11 | usdIdentifier getIdentifier(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdMetadataComment.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdMetadataComment extends PsiElement { 9 | 10 | @NotNull 11 | PsiElement getString(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdNamespacedIdentifier.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdNamespacedIdentifier extends PsiElement { 9 | 10 | @NotNull 11 | List getIdentifierList(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdArrayAttributeType.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdArrayAttributeType extends PsiElement { 9 | 10 | @NotNull 11 | usdSingleAttributeType getSingleAttributeType(); 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/resources/inspectionDescriptions/usdresolvePathInspection.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Reports potentially unresolvable asset references if the usdresolve bin script path hasn't been configured or is misconfigured. 4 | usdresolve is used for resolving custom URI asset reference paths (wrapped by the @ symbols). 5 | 6 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdSpecifier.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdSpecifier extends PsiElement { 9 | 10 | @NotNull 11 | usdPrimName getPrimName(); 12 | 13 | @Nullable 14 | usdTypename getTypename(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdInterpolatedArray.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdInterpolatedArray extends PsiElement { 9 | 10 | @NotNull 11 | usdArray getArray(); 12 | 13 | @Nullable 14 | PsiElement getString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdBody.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdBody extends PsiElement { 9 | 10 | @NotNull 11 | List getPrimSpecList(); 12 | 13 | @NotNull 14 | List getPropertySpecList(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdTimeSample.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdTimeSample extends PsiElement { 9 | 10 | @NotNull 11 | List getFrameNumberList(); 12 | 13 | @NotNull 14 | List getItemList(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdVariantSetItemBody.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdVariantSetItemBody extends PsiElement { 9 | 10 | @Nullable 11 | usdMetadata getMetadata(); 12 | 13 | @NotNull 14 | List getPrimSpecList(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdMetadata.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdMetadata extends PsiElement { 9 | 10 | @NotNull 11 | List getMetadataCommentList(); 12 | 13 | @NotNull 14 | List getMetadatumList(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdRelationshipProperty.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdRelationshipProperty extends PsiElement { 9 | 10 | @Nullable 11 | usdVariantSetBody getVariantSetBody(); 12 | 13 | @Nullable 14 | PsiElement getString(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/USDElementType.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | import com.justint.usdidea.lang.USDLanguage; 5 | import org.jetbrains.annotations.NonNls; 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | public class USDElementType extends IElementType { 9 | public USDElementType(@NotNull @NonNls String debugName) { 10 | super(debugName, USDLanguage.INSTANCE); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdSingleAttributeType.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdSingleAttributeType extends PsiElement { 9 | 10 | @Nullable 11 | usdBasicDataType getBasicDataType(); 12 | 13 | @Nullable 14 | usdRoleDataType getRoleDataType(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdAttributeName.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdAttributeName extends PsiElement { 9 | 10 | @NotNull 11 | List getIdentifierList(); 12 | 13 | @Nullable 14 | usdNamespacedIdentifier getNamespacedIdentifier(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdAttributeType.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdAttributeType extends PsiElement { 9 | 10 | @Nullable 11 | usdArrayAttributeType getArrayAttributeType(); 12 | 13 | @Nullable 14 | usdSingleAttributeType getSingleAttributeType(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdVariantSetBody.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdVariantSetBody extends PsiElement { 9 | 10 | @NotNull 11 | List getVariantSetItemBodyList(); 12 | 13 | @NotNull 14 | List getVariantSetKeyList(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdDictKey.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdDictKey extends PsiElement { 9 | 10 | @NotNull 11 | usdAttributeType getAttributeType(); 12 | 13 | @Nullable 14 | usdIdentifier getIdentifier(); 15 | 16 | @Nullable 17 | PsiElement getString(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdMetadataKey.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdMetadataKey extends PsiElement { 9 | 10 | @Nullable 11 | usdCompositionArc getCompositionArc(); 12 | 13 | @Nullable 14 | usdIdentifier getIdentifier(); 15 | 16 | @Nullable 17 | usdSpecialMetadataKey getSpecialMetadataKey(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdVariantSetKey.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.navigation.ItemPresentation; 8 | 9 | public interface usdVariantSetKey extends PsiElement { 10 | 11 | @NotNull 12 | PsiElement getString(); 13 | 14 | usdVariantSetItemBody getBody(); 15 | 16 | String getName(); 17 | 18 | ItemPresentation getPresentation(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/USDTokenType.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi; 2 | 3 | import com.intellij.psi.tree.IElementType; 4 | import com.justint.usdidea.lang.USDLanguage; 5 | import org.jetbrains.annotations.NonNls; 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | public class USDTokenType extends IElementType { 9 | public USDTokenType(@NotNull @NonNls String debugName) { 10 | super(debugName, USDLanguage.INSTANCE); 11 | } 12 | 13 | @Override 14 | public String toString() { 15 | return "USDTokenType." + super.toString(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/highlighting/USDHighlighterColors.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight.highlighting; 2 | 3 | import com.intellij.openapi.editor.colors.TextAttributesKey; 4 | 5 | import static com.intellij.openapi.editor.colors.CodeInsightColors.HYPERLINK_ATTRIBUTES; 6 | 7 | public class USDHighlighterColors { 8 | public static final TextAttributesKey ASSETREFERENCE_KEY = TextAttributesKey.createTextAttributesKey("ASSETREFERENCE", HYPERLINK_ATTRIBUTES); 9 | public static final TextAttributesKey PATHREFERENCE_KEY = TextAttributesKey.createTextAttributesKey("PATHREFERENCE", HYPERLINK_ATTRIBUTES); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdReferenceItem.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdReferenceItem extends USDNamedElement { 9 | 10 | @Nullable 11 | PsiElement getAssetReference(); 12 | 13 | @Nullable 14 | PsiElement getPathReference(); 15 | 16 | String getName(); 17 | 18 | PsiElement setName(String newName); 19 | 20 | PsiElement getNameIdentifier(); 21 | 22 | @NotNull 23 | String getDescriptionName(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdAttributeProperty.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdAttributeProperty extends PsiElement { 9 | 10 | @Nullable 11 | usdAttributeName getAttributeName(); 12 | 13 | @Nullable 14 | usdAttributeType getAttributeType(); 15 | 16 | @Nullable 17 | usdAttributeValue getAttributeValue(); 18 | 19 | @Nullable 20 | usdCompositionArc getCompositionArc(); 21 | 22 | @Nullable 23 | usdListEditAction getListEditAction(); 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/highlighting/USDSyntaxHighlighterFactory.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight.highlighting; 2 | 3 | import com.intellij.openapi.fileTypes.SyntaxHighlighter; 4 | import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.openapi.vfs.VirtualFile; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | public class USDSyntaxHighlighterFactory extends SyntaxHighlighterFactory { 10 | 11 | @NotNull 12 | @Override 13 | public SyntaxHighlighter getSyntaxHighlighter(Project project, VirtualFile virtualFile) { 14 | return new USDSyntaxHighlighter(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdDictItem.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.navigation.ItemPresentation; 8 | 9 | public interface usdDictItem extends USDBreadcrumbItem { 10 | 11 | @NotNull 12 | usdDictKey getDictKey(); 13 | 14 | @NotNull 15 | usdDictValue getDictValue(); 16 | 17 | @NotNull 18 | String getName(); 19 | 20 | @NotNull 21 | usdAttributeType getType(); 22 | 23 | boolean isDictionary(); 24 | 25 | @NotNull 26 | ItemPresentation getPresentation(); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/impl/USDNamedElementImpl.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi.impl; 2 | 3 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 4 | import com.intellij.lang.ASTNode; 5 | import com.intellij.psi.PsiReference; 6 | import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry; 7 | import org.jetbrains.annotations.NotNull; 8 | 9 | public abstract class USDNamedElementImpl extends ASTWrapperPsiElement { 10 | public USDNamedElementImpl(@NotNull ASTNode node) { 11 | super(node); 12 | } 13 | 14 | @Override 15 | public PsiReference[] getReferences() { 16 | return ReferenceProvidersRegistry.getReferencesFromProviders(this); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdMetadatum.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.navigation.ItemPresentation; 8 | 9 | public interface usdMetadatum extends PsiElement { 10 | 11 | @Nullable 12 | usdListEditAction getListEditAction(); 13 | 14 | @NotNull 15 | usdMetadataKey getMetadataKey(); 16 | 17 | @Nullable 18 | usdMetadataValue getMetadataValue(); 19 | 20 | @NotNull 21 | String getName(); 22 | 23 | boolean isDictionary(); 24 | 25 | @NotNull 26 | ItemPresentation getPresentation(); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/USDReferenceContributor.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang; 2 | 3 | import com.intellij.patterns.PlatformPatterns; 4 | import com.intellij.psi.PsiReferenceContributor; 5 | import com.intellij.psi.PsiReferenceRegistrar; 6 | import com.justint.usdidea.lang.psi.impl.USDReferenceReferenceProvider; 7 | import com.justint.usdidea.lang.psi.usdReferenceItem; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | public class USDReferenceContributor extends PsiReferenceContributor { 11 | @Override 12 | public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) { 13 | registrar.registerReferenceProvider(PlatformPatterns.psiElement(usdReferenceItem.class), USDReferenceReferenceProvider.INSTANCE); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdPrimSpec.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.navigation.ItemPresentation; 8 | 9 | public interface usdPrimSpec extends USDBreadcrumbItem { 10 | 11 | @Nullable 12 | usdBody getBody(); 13 | 14 | @Nullable 15 | usdMetadata getMetadata(); 16 | 17 | @NotNull 18 | usdSpecifier getSpecifier(); 19 | 20 | @NotNull 21 | String getPrimName(); 22 | 23 | @Nullable 24 | String getPrimType(); 25 | 26 | @NotNull 27 | String getPrimPath(); 28 | 29 | @NotNull 30 | String getName(); 31 | 32 | @NotNull 33 | ItemPresentation getPresentation(); 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdItem.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public interface usdItem extends PsiElement { 9 | 10 | @Nullable 11 | usdArray getArray(); 12 | 13 | @Nullable 14 | usdBoolean getBoolean(); 15 | 16 | @Nullable 17 | usdDict getDict(); 18 | 19 | @Nullable 20 | usdInterpolatedArray getInterpolatedArray(); 21 | 22 | @Nullable 23 | usdReferenceItem getReferenceItem(); 24 | 25 | @Nullable 26 | usdTimeSample getTimeSample(); 27 | 28 | @Nullable 29 | usdVector getVector(); 30 | 31 | @Nullable 32 | PsiElement getFloatnumber(); 33 | 34 | @Nullable 35 | PsiElement getNumber(); 36 | 37 | @Nullable 38 | PsiElement getString(); 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/USDFile.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi; 2 | 3 | import com.intellij.extapi.psi.PsiFileBase; 4 | import com.intellij.openapi.fileTypes.FileType; 5 | import com.intellij.psi.FileViewProvider; 6 | import com.justint.usdidea.file.USDFileType; 7 | import com.justint.usdidea.lang.USDLanguage; 8 | import org.jetbrains.annotations.NotNull; 9 | 10 | import javax.swing.*; 11 | 12 | public class USDFile extends PsiFileBase { 13 | public USDFile(@NotNull FileViewProvider viewProvider) { 14 | super(viewProvider, USDLanguage.INSTANCE); 15 | } 16 | 17 | @NotNull 18 | @Override 19 | public FileType getFileType() { 20 | return USDFileType.INSTANCE; 21 | } 22 | 23 | @Override 24 | public String toString() { 25 | return "Universal Scene Description"; 26 | } 27 | 28 | @Override 29 | public Icon getIcon(int flags) { 30 | return super.getIcon(flags); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdPropertySpec.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.navigation.ItemPresentation; 8 | import com.intellij.psi.tree.IElementType; 9 | 10 | public interface usdPropertySpec extends PsiElement { 11 | 12 | @Nullable 13 | usdAttributeProperty getAttributeProperty(); 14 | 15 | @Nullable 16 | usdMetadata getMetadata(); 17 | 18 | @Nullable 19 | usdRelationshipProperty getRelationshipProperty(); 20 | 21 | @NotNull 22 | String getPropertyName(); 23 | 24 | @Nullable 25 | IElementType getPropertyType(); 26 | 27 | //WARNING: getPropertyValueType(...) is skipped 28 | //matching getPropertyValueType(usdPropertySpec, ...) 29 | //methods are not found in USDPsiImplUtil 30 | 31 | @NotNull 32 | String getName(); 33 | 34 | @NotNull 35 | ItemPresentation getPresentation(); 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdBooleanImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdBooleanImpl extends ASTWrapperPsiElement implements usdBoolean { 15 | 16 | public usdBooleanImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitBoolean(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/USDStructureViewFactory.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang; 2 | 3 | import com.intellij.ide.structureView.StructureViewBuilder; 4 | import com.intellij.ide.structureView.StructureViewModel; 5 | import com.intellij.ide.structureView.TreeBasedStructureViewBuilder; 6 | import com.intellij.lang.PsiStructureViewFactory; 7 | import com.intellij.openapi.editor.Editor; 8 | import com.intellij.psi.PsiFile; 9 | import org.jetbrains.annotations.NotNull; 10 | import org.jetbrains.annotations.Nullable; 11 | 12 | public class USDStructureViewFactory implements PsiStructureViewFactory { 13 | 14 | @Nullable 15 | @Override 16 | public StructureViewBuilder getStructureViewBuilder(@NotNull PsiFile psiFile) { 17 | return new TreeBasedStructureViewBuilder() { 18 | @NotNull 19 | @Override 20 | public StructureViewModel createStructureViewModel(@Nullable Editor editor) { 21 | return new USDStructureViewModel(psiFile); 22 | } 23 | }; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdIdentifierImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdIdentifierImpl extends ASTWrapperPsiElement implements usdIdentifier { 15 | 16 | public usdIdentifierImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitIdentifier(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdRoleDataTypeImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdRoleDataTypeImpl extends ASTWrapperPsiElement implements usdRoleDataType { 15 | 16 | public usdRoleDataTypeImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitRoleDataType(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdBasicDataTypeImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdBasicDataTypeImpl extends ASTWrapperPsiElement implements usdBasicDataType { 15 | 16 | public usdBasicDataTypeImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitBasicDataType(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdCompositionArcImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdCompositionArcImpl extends ASTWrapperPsiElement implements usdCompositionArc { 15 | 16 | public usdCompositionArcImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitCompositionArc(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdListEditActionImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdListEditActionImpl extends ASTWrapperPsiElement implements usdListEditAction { 15 | 16 | public usdListEditActionImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitListEditAction(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdSpecialMetadataKeyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdSpecialMetadataKeyImpl extends ASTWrapperPsiElement implements usdSpecialMetadataKey { 15 | 16 | public usdSpecialMetadataKeyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitSpecialMetadataKey(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/file/USDFileType.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.file; 2 | 3 | import com.intellij.openapi.fileTypes.LanguageFileType; 4 | import com.justint.usdidea.util.USDIcons; 5 | import com.justint.usdidea.lang.USDLanguage; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.jetbrains.annotations.Nullable; 8 | 9 | import javax.swing.*; 10 | 11 | public class USDFileType extends LanguageFileType { 12 | public static final USDFileType INSTANCE = new USDFileType(); 13 | 14 | private USDFileType() { 15 | super(USDLanguage.INSTANCE); 16 | } 17 | 18 | @NotNull 19 | @Override 20 | public String getName() { 21 | return "USD"; 22 | } 23 | 24 | @NotNull 25 | @Override 26 | public String getDescription() { 27 | return "Universal Scene Description File"; 28 | } 29 | 30 | @NotNull 31 | @Override 32 | public String getDefaultExtension() { 33 | return "usda"; 34 | } 35 | 36 | @Nullable 37 | @Override 38 | public Icon getIcon() { 39 | return USDIcons.FILE; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Justin Tennant 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdPrimNameImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdPrimNameImpl extends ASTWrapperPsiElement implements usdPrimName { 15 | 16 | public usdPrimNameImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitPrimName(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public PsiElement getString() { 32 | return findNotNullChildByType(STRING); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdDictValueImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdDictValueImpl extends ASTWrapperPsiElement implements usdDictValue { 15 | 16 | public usdDictValueImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitDictValue(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdItem getItem() { 32 | return findNotNullChildByClass(usdItem.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdFrameNumberImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdFrameNumberImpl extends ASTWrapperPsiElement implements usdFrameNumber { 15 | 16 | public usdFrameNumberImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitFrameNumber(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public PsiElement getNumber() { 32 | return findNotNullChildByType(NUMBER); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdArrayImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdArrayImpl extends ASTWrapperPsiElement implements usdArray { 15 | 16 | public usdArrayImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitArray(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getItemList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdItem.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdDictImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdDictImpl extends ASTWrapperPsiElement implements usdDict { 15 | 16 | public usdDictImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitDict(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getDictItemList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdDictItem.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdTypenameImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdTypenameImpl extends ASTWrapperPsiElement implements usdTypename { 15 | 16 | public usdTypenameImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitTypename(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdIdentifier getIdentifier() { 32 | return findNotNullChildByClass(usdIdentifier.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdVectorImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdVectorImpl extends ASTWrapperPsiElement implements usdVector { 15 | 16 | public usdVectorImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitVector(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getItemList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdItem.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdMetadataValueImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdMetadataValueImpl extends ASTWrapperPsiElement implements usdMetadataValue { 15 | 16 | public usdMetadataValueImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitMetadataValue(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdItem getItem() { 32 | return findNotNullChildByClass(usdItem.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdAttributeValueImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdAttributeValueImpl extends ASTWrapperPsiElement implements usdAttributeValue { 15 | 16 | public usdAttributeValueImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitAttributeValue(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdItem getItem() { 32 | return findNotNullChildByClass(usdItem.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdMetadataCommentImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdMetadataCommentImpl extends ASTWrapperPsiElement implements usdMetadataComment { 15 | 16 | public usdMetadataCommentImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitMetadataComment(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public PsiElement getString() { 32 | return findNotNullChildByType(STRING); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/util/USDPsiTreeUtil.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.util; 2 | 3 | import com.intellij.psi.PsiElement; 4 | import com.intellij.psi.util.PsiTreeUtil; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | import java.util.ArrayList; 8 | import java.util.Collections; 9 | import java.util.List; 10 | 11 | public class USDPsiTreeUtil { 12 | /** 13 | * Finds all parents of a given PsiElement with the same type. 14 | * @param element PsiElement to search parents for 15 | * @return List of PsiElement parents of {@param element} in hierarchical order (top->bottom) 16 | */ 17 | @NotNull 18 | @SuppressWarnings("unchecked") 19 | public static List findAllParentsOfSameType(PsiElement element) { 20 | if (element == null) return Collections.emptyList(); 21 | 22 | List parents = new ArrayList<>(); 23 | T currentElement = (T) PsiTreeUtil.getParentOfType(element, element.getClass()); 24 | while (currentElement != null) { 25 | parents.add(0, currentElement); 26 | currentElement = (T) PsiTreeUtil.getParentOfType(currentElement, currentElement.getClass()); 27 | } 28 | return parents; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/highlighting/USDBraceMatcher.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight.highlighting; 2 | 3 | import com.intellij.lang.BracePair; 4 | import com.intellij.lang.PairedBraceMatcher; 5 | import com.intellij.psi.PsiFile; 6 | import com.intellij.psi.tree.IElementType; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | 12 | public class USDBraceMatcher implements PairedBraceMatcher { 13 | 14 | private static final BracePair[] PAIRS = new BracePair[] { 15 | new BracePair(LEFTBRACE, RIGHTBRACE, true), 16 | new BracePair(LEFTPARENS, RIGHTPARENS, true), 17 | new BracePair(LEFTBRACKET, RIGHTBRACKET, false) 18 | }; 19 | 20 | @NotNull 21 | @Override 22 | public BracePair[] getPairs() { 23 | return PAIRS; 24 | } 25 | 26 | @Override 27 | public boolean isPairedBracesAllowedBeforeType(@NotNull IElementType lBraceType, @Nullable IElementType contextType) { 28 | return true; 29 | } 30 | 31 | @Override 32 | public int getCodeConstructStart(PsiFile file, int openingBraceOffset) { 33 | return openingBraceOffset; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdArrayAttributeTypeImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdArrayAttributeTypeImpl extends ASTWrapperPsiElement implements usdArrayAttributeType { 15 | 16 | public usdArrayAttributeTypeImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitArrayAttributeType(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdSingleAttributeType getSingleAttributeType() { 32 | return findNotNullChildByClass(usdSingleAttributeType.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdNamespacedIdentifierImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdNamespacedIdentifierImpl extends ASTWrapperPsiElement implements usdNamespacedIdentifier { 15 | 16 | public usdNamespacedIdentifierImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitNamespacedIdentifier(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getIdentifierList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdIdentifier.class); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdSpecifierImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdSpecifierImpl extends ASTWrapperPsiElement implements usdSpecifier { 15 | 16 | public usdSpecifierImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitSpecifier(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdPrimName getPrimName() { 32 | return findNotNullChildByClass(usdPrimName.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdTypename getTypename() { 38 | return findChildByClass(usdTypename.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdInterpolatedArrayImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdInterpolatedArrayImpl extends ASTWrapperPsiElement implements usdInterpolatedArray { 15 | 16 | public usdInterpolatedArrayImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitInterpolatedArray(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdArray getArray() { 32 | return findNotNullChildByClass(usdArray.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public PsiElement getString() { 38 | return findChildByType(STRING); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/USDDescriptionProvider.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight; 2 | 3 | import com.intellij.psi.ElementDescriptionLocation; 4 | import com.intellij.psi.ElementDescriptionProvider; 5 | import com.intellij.psi.PsiElement; 6 | import com.intellij.usageView.UsageViewShortNameLocation; 7 | import com.intellij.usageView.UsageViewTypeLocation; 8 | import com.justint.usdidea.lang.psi.USDNamedElement; 9 | import com.justint.usdidea.lang.psi.usdReferenceItem; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.jetbrains.annotations.Nullable; 12 | 13 | public class USDDescriptionProvider implements ElementDescriptionProvider { 14 | 15 | @Nullable 16 | @Override 17 | public String getElementDescription(@NotNull PsiElement psiElement, @NotNull ElementDescriptionLocation elementDescriptionLocation) { 18 | if (elementDescriptionLocation instanceof UsageViewTypeLocation) { 19 | if (psiElement instanceof USDNamedElement) { 20 | return ((USDNamedElement) psiElement).getDescriptionName(); 21 | } 22 | } 23 | else if (elementDescriptionLocation instanceof UsageViewShortNameLocation) { 24 | if (psiElement instanceof usdReferenceItem) { 25 | return psiElement.getText(); 26 | } 27 | } 28 | return null; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdBodyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdBodyImpl extends ASTWrapperPsiElement implements usdBody { 15 | 16 | public usdBodyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitBody(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getPrimSpecList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdPrimSpec.class); 33 | } 34 | 35 | @Override 36 | @NotNull 37 | public List getPropertySpecList() { 38 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdPropertySpec.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdRelationshipPropertyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdRelationshipPropertyImpl extends ASTWrapperPsiElement implements usdRelationshipProperty { 15 | 16 | public usdRelationshipPropertyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitRelationshipProperty(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @Nullable 31 | public usdVariantSetBody getVariantSetBody() { 32 | return findChildByClass(usdVariantSetBody.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public PsiElement getString() { 38 | return findChildByType(STRING); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdTimeSampleImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdTimeSampleImpl extends ASTWrapperPsiElement implements usdTimeSample { 15 | 16 | public usdTimeSampleImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitTimeSample(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getFrameNumberList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdFrameNumber.class); 33 | } 34 | 35 | @Override 36 | @NotNull 37 | public List getItemList() { 38 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdItem.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdSingleAttributeTypeImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdSingleAttributeTypeImpl extends ASTWrapperPsiElement implements usdSingleAttributeType { 15 | 16 | public usdSingleAttributeTypeImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitSingleAttributeType(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @Nullable 31 | public usdBasicDataType getBasicDataType() { 32 | return findChildByClass(usdBasicDataType.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdRoleDataType getRoleDataType() { 38 | return findChildByClass(usdRoleDataType.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdVariantSetItemBodyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdVariantSetItemBodyImpl extends ASTWrapperPsiElement implements usdVariantSetItemBody { 15 | 16 | public usdVariantSetItemBodyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitVariantSetItemBody(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @Nullable 31 | public usdMetadata getMetadata() { 32 | return findChildByClass(usdMetadata.class); 33 | } 34 | 35 | @Override 36 | @NotNull 37 | public List getPrimSpecList() { 38 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdPrimSpec.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdAttributeTypeImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdAttributeTypeImpl extends ASTWrapperPsiElement implements usdAttributeType { 15 | 16 | public usdAttributeTypeImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitAttributeType(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @Nullable 31 | public usdArrayAttributeType getArrayAttributeType() { 32 | return findChildByClass(usdArrayAttributeType.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdSingleAttributeType getSingleAttributeType() { 38 | return findChildByClass(usdSingleAttributeType.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdMetadataImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdMetadataImpl extends ASTWrapperPsiElement implements usdMetadata { 15 | 16 | public usdMetadataImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitMetadata(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getMetadataCommentList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdMetadataComment.class); 33 | } 34 | 35 | @Override 36 | @NotNull 37 | public List getMetadatumList() { 38 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdMetadatum.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdAttributeNameImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdAttributeNameImpl extends ASTWrapperPsiElement implements usdAttributeName { 15 | 16 | public usdAttributeNameImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitAttributeName(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getIdentifierList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdIdentifier.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdNamespacedIdentifier getNamespacedIdentifier() { 38 | return findChildByClass(usdNamespacedIdentifier.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdVariantSetBodyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdVariantSetBodyImpl extends ASTWrapperPsiElement implements usdVariantSetBody { 15 | 16 | public usdVariantSetBodyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitVariantSetBody(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public List getVariantSetItemBodyList() { 32 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdVariantSetItemBody.class); 33 | } 34 | 35 | @Override 36 | @NotNull 37 | public List getVariantSetKeyList() { 38 | return PsiTreeUtil.getChildrenOfTypeAsList(this, usdVariantSetKey.class); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdDictKeyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdDictKeyImpl extends ASTWrapperPsiElement implements usdDictKey { 15 | 16 | public usdDictKeyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitDictKey(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @NotNull 31 | public usdAttributeType getAttributeType() { 32 | return findNotNullChildByClass(usdAttributeType.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdIdentifier getIdentifier() { 38 | return findChildByClass(usdIdentifier.class); 39 | } 40 | 41 | @Override 42 | @Nullable 43 | public PsiElement getString() { 44 | return findChildByType(STRING); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/resources/com/justint/usdidea/icons/usd-file.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 10 | 11 | 12 | 13 | 14 | 15 | 17 | 20 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdMetadataKeyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdMetadataKeyImpl extends ASTWrapperPsiElement implements usdMetadataKey { 15 | 16 | public usdMetadataKeyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitMetadataKey(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @Nullable 31 | public usdCompositionArc getCompositionArc() { 32 | return findChildByClass(usdCompositionArc.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdIdentifier getIdentifier() { 38 | return findChildByClass(usdIdentifier.class); 39 | } 40 | 41 | @Override 42 | @Nullable 43 | public usdSpecialMetadataKey getSpecialMetadataKey() { 44 | return findChildByClass(usdSpecialMetadataKey.class); 45 | } 46 | 47 | } 48 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/util/USDInstallFinder.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.util; 2 | 3 | import com.intellij.execution.ExecutionException; 4 | import com.intellij.execution.configurations.GeneralCommandLine; 5 | import org.apache.commons.lang.SystemUtils; 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | import java.io.*; 9 | 10 | 11 | public class USDInstallFinder { 12 | public String findUsdresolveInstallPath() { 13 | return findInstallPath("usdresolve"); 14 | } 15 | 16 | @NotNull 17 | private String findInstallPath(String binscript) { 18 | GeneralCommandLine cmd; 19 | 20 | if (SystemUtils.IS_OS_WINDOWS || SystemUtils.IS_OS_MAC) { 21 | cmd = new GeneralCommandLine("where", binscript); 22 | } 23 | else { 24 | cmd = new GeneralCommandLine("which", binscript); 25 | } 26 | 27 | final Process process; 28 | try { 29 | process = cmd.createProcess(); 30 | try (BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()))) { 31 | String output = in.readLine(); 32 | 33 | // Ignore any invalid/empty output 34 | if (!output.contains(File.separator)) { 35 | return ""; 36 | } 37 | else { 38 | return output.trim(); 39 | } 40 | } 41 | } catch (ExecutionException | IOException e) { 42 | return ""; 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/USDBreadcrumbsProvider.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight; 2 | 3 | import com.intellij.lang.Language; 4 | import com.intellij.psi.PsiElement; 5 | import com.intellij.ui.breadcrumbs.BreadcrumbsProvider; 6 | import com.justint.usdidea.lang.USDLanguage; 7 | import com.justint.usdidea.lang.psi.USDBreadcrumbItem; 8 | import com.justint.usdidea.lang.psi.USDFile; 9 | import com.justint.usdidea.lang.psi.usdPrimSpec; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.jetbrains.annotations.Nullable; 12 | 13 | import javax.swing.*; 14 | import java.util.ArrayList; 15 | 16 | public class USDBreadcrumbsProvider implements BreadcrumbsProvider { 17 | 18 | @Override 19 | public Language[] getLanguages() { 20 | return new Language[]{USDLanguage.INSTANCE}; 21 | } 22 | 23 | @Override 24 | public boolean acceptElement(@NotNull PsiElement psiElement) { 25 | return (psiElement instanceof USDBreadcrumbItem); 26 | } 27 | 28 | @NotNull 29 | @Override 30 | public String getElementInfo(@NotNull PsiElement psiElement) { 31 | return ((USDBreadcrumbItem)psiElement).getName(); 32 | } 33 | 34 | // TODO: implement these 35 | // @Nullable 36 | // @Override 37 | // public Icon getElementIcon(@NotNull PsiElement element) { 38 | // return null; 39 | // } 40 | // 41 | @Nullable 42 | @Override 43 | public String getElementTooltip(@NotNull PsiElement element) { 44 | return String.join(" ", USDDocumentationProvider.getUSDPsiElementDocStringArray(element)); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/settings/USDSettingsConfigurable.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.settings; 2 | 3 | import com.intellij.openapi.options.Configurable; 4 | import org.jetbrains.annotations.Nls; 5 | import org.jetbrains.annotations.Nullable; 6 | 7 | import javax.swing.*; 8 | 9 | public class USDSettingsConfigurable implements Configurable { 10 | 11 | private USDSettingsComponent usdSettingsComponent; 12 | 13 | @Nls(capitalization = Nls.Capitalization.Title) 14 | @Override 15 | public String getDisplayName() { 16 | return "USD"; 17 | } 18 | 19 | @Nullable 20 | @Override 21 | public JComponent createComponent() { 22 | usdSettingsComponent = new USDSettingsComponent(); 23 | return usdSettingsComponent.getPanel(); 24 | } 25 | 26 | @Override 27 | public boolean isModified() { 28 | USDSettingsState settings = USDSettingsState.getInstance(); 29 | return !usdSettingsComponent.getUsdresolvePathText().equals(settings.usdresolveInstallPath); 30 | } 31 | 32 | @Override 33 | public void apply() { 34 | USDSettingsState settings = USDSettingsState.getInstance(); 35 | settings.usdresolveInstallPath = usdSettingsComponent.getUsdresolvePathText(); 36 | } 37 | 38 | @Override 39 | public void reset() { 40 | USDSettingsState settings = USDSettingsState.getInstance(); 41 | usdSettingsComponent.setUsdresolvePathText(settings.usdresolveInstallPath); 42 | } 43 | 44 | @Override 45 | public void disposeUIResources() { 46 | usdSettingsComponent = null; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdVariantSetKeyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | import com.intellij.navigation.ItemPresentation; 14 | 15 | public class usdVariantSetKeyImpl extends ASTWrapperPsiElement implements usdVariantSetKey { 16 | 17 | public usdVariantSetKeyImpl(@NotNull ASTNode node) { 18 | super(node); 19 | } 20 | 21 | public void accept(@NotNull usdVisitor visitor) { 22 | visitor.visitVariantSetKey(this); 23 | } 24 | 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public PsiElement getString() { 33 | return findNotNullChildByType(STRING); 34 | } 35 | 36 | @Override 37 | public usdVariantSetItemBody getBody() { 38 | return USDPsiImplUtil.getBody(this); 39 | } 40 | 41 | @Override 42 | public String getName() { 43 | return USDPsiImplUtil.getName(this); 44 | } 45 | 46 | @Override 47 | public ItemPresentation getPresentation() { 48 | return USDPsiImplUtil.getPresentation(this); 49 | } 50 | 51 | } 52 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/settings/USDSettingsState.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.settings; 2 | 3 | import com.intellij.openapi.components.PersistentStateComponent; 4 | import com.intellij.openapi.components.ServiceManager; 5 | import com.intellij.openapi.components.State; 6 | import com.intellij.openapi.components.Storage; 7 | import com.intellij.util.xmlb.XmlSerializerUtil; 8 | import org.jetbrains.annotations.NotNull; 9 | import org.jetbrains.annotations.Nullable; 10 | 11 | import java.io.File; 12 | 13 | @State( 14 | name = "com.justint.usdidea.settings.USDSettingsState", 15 | storages = {@Storage("USD.xml")} 16 | ) 17 | public class USDSettingsState implements PersistentStateComponent { 18 | 19 | public String usdresolveInstallPath = ""; 20 | 21 | public static USDSettingsState getInstance() { 22 | return ServiceManager.getService(USDSettingsState.class); 23 | } 24 | 25 | @Nullable 26 | @Override 27 | public USDSettingsState getState() { 28 | return this; 29 | } 30 | 31 | @Override 32 | public void loadState(@NotNull USDSettingsState usdSettingsState) { 33 | XmlSerializerUtil.copyBean(usdSettingsState, this); 34 | } 35 | 36 | public boolean isUsdresolvePathValid() { 37 | if (usdresolveInstallPath.equals("")) return false; 38 | 39 | File usdresolveFile = new File(usdresolveInstallPath); 40 | return (usdresolveFile.exists() && usdresolveFile.isFile() && usdresolveFile.canExecute()); 41 | } 42 | 43 | public boolean isUSDToolPathsValid(){ 44 | return isUsdresolvePathValid(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/util/binscripts/USDBinScript.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.util.binscripts; 2 | 3 | import com.intellij.openapi.project.Project; 4 | import com.intellij.openapi.roots.ProjectRootManager; 5 | import com.intellij.util.PlatformUtils; 6 | import com.justint.usdidea.settings.USDSettingsState; 7 | import org.apache.commons.lang.SystemUtils; 8 | 9 | import java.nio.file.Path; 10 | 11 | public abstract class USDBinScript { 12 | 13 | public abstract String getBinScriptName(); 14 | 15 | public abstract Path getBinScriptPath(); 16 | 17 | public String[] getPythonBinScriptCmds(Project project) { 18 | if (SystemUtils.IS_OS_WINDOWS) { 19 | // For windows, we need to prepend the bin script path with the path to python.exe 20 | // (ie: treat python.exe as the executable and our USD bin script as its first argument) 21 | String pythonPath; 22 | if (PlatformUtils.isPyCharm()) { 23 | try { 24 | // Try to use the current Python SDK path 25 | pythonPath = ProjectRootManager.getInstance(project).getProjectSdk().getHomePath(); 26 | } catch (NullPointerException e) { 27 | pythonPath = "python"; 28 | } 29 | } 30 | else { 31 | pythonPath = "python"; 32 | } 33 | return new String[]{pythonPath, getBinScriptPath().toString()}; 34 | } 35 | return new String[]{getBinScriptPath().toString()}; 36 | } 37 | 38 | public boolean isUSDInstallValid() { 39 | return USDSettingsState.getInstance().isUsdresolvePathValid(); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdReferenceItemImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.justint.usdidea.lang.psi.*; 12 | 13 | public class usdReferenceItemImpl extends USDNamedElementImpl implements usdReferenceItem { 14 | 15 | public usdReferenceItemImpl(@NotNull ASTNode node) { 16 | super(node); 17 | } 18 | 19 | public void accept(@NotNull usdVisitor visitor) { 20 | visitor.visitReferenceItem(this); 21 | } 22 | 23 | public void accept(@NotNull PsiElementVisitor visitor) { 24 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 25 | else super.accept(visitor); 26 | } 27 | 28 | @Override 29 | @Nullable 30 | public PsiElement getAssetReference() { 31 | return findChildByType(ASSETREFERENCE); 32 | } 33 | 34 | @Override 35 | @Nullable 36 | public PsiElement getPathReference() { 37 | return findChildByType(PATHREFERENCE); 38 | } 39 | 40 | @Override 41 | public String getName() { 42 | return USDPsiImplUtil.getName(this); 43 | } 44 | 45 | @Override 46 | public PsiElement setName(String newName) { 47 | return USDPsiImplUtil.setName(this, newName); 48 | } 49 | 50 | @Override 51 | public PsiElement getNameIdentifier() { 52 | return USDPsiImplUtil.getNameIdentifier(this); 53 | } 54 | 55 | @Override 56 | @NotNull 57 | public String getDescriptionName() { 58 | return USDPsiImplUtil.getDescriptionName(this); 59 | } 60 | 61 | } 62 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdAttributePropertyImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdAttributePropertyImpl extends ASTWrapperPsiElement implements usdAttributeProperty { 15 | 16 | public usdAttributePropertyImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitAttributeProperty(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @Nullable 31 | public usdAttributeName getAttributeName() { 32 | return findChildByClass(usdAttributeName.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdAttributeType getAttributeType() { 38 | return findChildByClass(usdAttributeType.class); 39 | } 40 | 41 | @Override 42 | @Nullable 43 | public usdAttributeValue getAttributeValue() { 44 | return findChildByClass(usdAttributeValue.class); 45 | } 46 | 47 | @Override 48 | @Nullable 49 | public usdCompositionArc getCompositionArc() { 50 | return findChildByClass(usdCompositionArc.class); 51 | } 52 | 53 | @Override 54 | @Nullable 55 | public usdListEditAction getListEditAction() { 56 | return findChildByClass(usdListEditAction.class); 57 | } 58 | 59 | } 60 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdDictItemImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | import com.intellij.navigation.ItemPresentation; 14 | 15 | public class usdDictItemImpl extends ASTWrapperPsiElement implements usdDictItem { 16 | 17 | public usdDictItemImpl(@NotNull ASTNode node) { 18 | super(node); 19 | } 20 | 21 | public void accept(@NotNull usdVisitor visitor) { 22 | visitor.visitDictItem(this); 23 | } 24 | 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @NotNull 32 | public usdDictKey getDictKey() { 33 | return findNotNullChildByClass(usdDictKey.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public usdDictValue getDictValue() { 39 | return findNotNullChildByClass(usdDictValue.class); 40 | } 41 | 42 | @Override 43 | @NotNull 44 | public String getName() { 45 | return USDPsiImplUtil.getName(this); 46 | } 47 | 48 | @Override 49 | @NotNull 50 | public usdAttributeType getType() { 51 | return USDPsiImplUtil.getType(this); 52 | } 53 | 54 | @Override 55 | public boolean isDictionary() { 56 | return USDPsiImplUtil.isDictionary(this); 57 | } 58 | 59 | @Override 60 | @NotNull 61 | public ItemPresentation getPresentation() { 62 | return USDPsiImplUtil.getPresentation(this); 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdMetadatumImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | import com.intellij.navigation.ItemPresentation; 14 | 15 | public class usdMetadatumImpl extends ASTWrapperPsiElement implements usdMetadatum { 16 | 17 | public usdMetadatumImpl(@NotNull ASTNode node) { 18 | super(node); 19 | } 20 | 21 | public void accept(@NotNull usdVisitor visitor) { 22 | visitor.visitMetadatum(this); 23 | } 24 | 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @Nullable 32 | public usdListEditAction getListEditAction() { 33 | return findChildByClass(usdListEditAction.class); 34 | } 35 | 36 | @Override 37 | @NotNull 38 | public usdMetadataKey getMetadataKey() { 39 | return findNotNullChildByClass(usdMetadataKey.class); 40 | } 41 | 42 | @Override 43 | @Nullable 44 | public usdMetadataValue getMetadataValue() { 45 | return findChildByClass(usdMetadataValue.class); 46 | } 47 | 48 | @Override 49 | @NotNull 50 | public String getName() { 51 | return USDPsiImplUtil.getName(this); 52 | } 53 | 54 | @Override 55 | public boolean isDictionary() { 56 | return USDPsiImplUtil.isDictionary(this); 57 | } 58 | 59 | @Override 60 | @NotNull 61 | public ItemPresentation getPresentation() { 62 | return USDPsiImplUtil.getPresentation(this); 63 | } 64 | 65 | } 66 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/USDDocumentationProvider.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight; 2 | 3 | import com.intellij.lang.documentation.DocumentationProvider; 4 | import com.intellij.psi.PsiElement; 5 | import com.justint.usdidea.lang.psi.USDFile; 6 | import com.justint.usdidea.lang.psi.usdPrimSpec; 7 | import org.jetbrains.annotations.Nullable; 8 | 9 | import java.util.ArrayList; 10 | 11 | public class USDDocumentationProvider implements DocumentationProvider { 12 | 13 | public static ArrayList getUSDPsiElementDocStringArray(PsiElement element) { 14 | ArrayList result = new ArrayList<>(); 15 | 16 | // Handle layer files 17 | if (element instanceof USDFile) { 18 | USDFile usdFile = (USDFile) element; 19 | result.add("layer file"); 20 | result.add(codedString(usdFile.getVirtualFile().getPath())); 21 | } 22 | else if (element instanceof usdPrimSpec) { 23 | result.add("prim"); 24 | 25 | usdPrimSpec primSpec = (usdPrimSpec)element; 26 | String primType = primSpec.getPrimType(); 27 | if (primType != null) result.add(primType); 28 | 29 | result.add(codedString(primSpec.getPrimPath())); 30 | } 31 | 32 | return result; 33 | } 34 | 35 | @Nullable 36 | @Override 37 | public String getQuickNavigateInfo(PsiElement element, PsiElement originalElement) { 38 | ArrayList result = new ArrayList<>(getUSDPsiElementDocStringArray(element)); 39 | 40 | if (element instanceof usdPrimSpec) { 41 | // Include element layer path, if from another layer file 42 | if (element.getContainingFile() != originalElement.getContainingFile()) { 43 | result.add("\nin layer file " + element.getContainingFile().getVirtualFile().getPath()); 44 | } 45 | } 46 | 47 | return String.join(" ", result); 48 | } 49 | 50 | private static String codedString(String input) { 51 | return String.format("%s", input); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/main/resources/META-INF/change-notes.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Version 0.4.2: 5 |
    6 |

    Enhancements

    7 |
      8 |
    • 9 | New build for 2021.3+ versions of IDEA IDEs. (#21 Big thanks to Jan Honsbrok for the update!) 10 |
    • 11 |
    12 |
13 | Version 0.4.1: 14 |
    15 |

    Enhancements

    16 |
      17 |
    • 18 | Add tooltips to breadcrumbs 19 |
    • 20 |
    • 21 | New build for 2021.1 and 2021.2 versions of IDEA IDEs 22 |
    • 23 |
    24 |
25 | Version 0.4: 26 |
    27 |

    Enhancements

    28 |
      29 |
    • 30 | Add hyperlinking for references (#13) 31 | 32 |
        33 |
      • 34 | Asset/prim reference path links are now clickable! Ctrl+Click reference paths to navigate to the source asset file and/or prim. 35 |
      • 36 |
      • 37 | Custom URI asset paths can also be resolved using usdresolve. 38 |
      • 39 |
      • 40 | New USD settings panel available in editor settings (Languages & Frameworks > USD) to allow configuring of usdresolve path. 41 |
      • 42 |
      43 | 44 |
    • 45 |
    • 46 | Add support for class prims, variants, and variantSets in structure view (#12) 47 |
    • 48 |
    • 49 | Updated the structure view presentations on most objects to make for a cleaner & more readable view 50 |
    • 51 |
    • 52 | New build for newer 2020.3.* version of IDEA IDEs 53 |
    • 54 |
    55 |

    This plugin has reached +1k downloads! A big thanks to every supporter, including you!

    56 |
57 | 58 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdPrimSpecImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | import com.intellij.navigation.ItemPresentation; 14 | 15 | public class usdPrimSpecImpl extends ASTWrapperPsiElement implements usdPrimSpec { 16 | 17 | public usdPrimSpecImpl(@NotNull ASTNode node) { 18 | super(node); 19 | } 20 | 21 | public void accept(@NotNull usdVisitor visitor) { 22 | visitor.visitPrimSpec(this); 23 | } 24 | 25 | public void accept(@NotNull PsiElementVisitor visitor) { 26 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 27 | else super.accept(visitor); 28 | } 29 | 30 | @Override 31 | @Nullable 32 | public usdBody getBody() { 33 | return findChildByClass(usdBody.class); 34 | } 35 | 36 | @Override 37 | @Nullable 38 | public usdMetadata getMetadata() { 39 | return findChildByClass(usdMetadata.class); 40 | } 41 | 42 | @Override 43 | @NotNull 44 | public usdSpecifier getSpecifier() { 45 | return findNotNullChildByClass(usdSpecifier.class); 46 | } 47 | 48 | @Override 49 | @NotNull 50 | public String getPrimName() { 51 | return USDPsiImplUtil.getPrimName(this); 52 | } 53 | 54 | @Override 55 | @Nullable 56 | public String getPrimType() { 57 | return USDPsiImplUtil.getPrimType(this); 58 | } 59 | 60 | @Override 61 | @NotNull 62 | public String getPrimPath() { 63 | return USDPsiImplUtil.getPrimPath(this); 64 | } 65 | 66 | @Override 67 | @NotNull 68 | public String getName() { 69 | return USDPsiImplUtil.getName(this); 70 | } 71 | 72 | @Override 73 | @NotNull 74 | public ItemPresentation getPresentation() { 75 | return USDPsiImplUtil.getPresentation(this); 76 | } 77 | 78 | } 79 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdPropertySpecImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | import com.intellij.navigation.ItemPresentation; 14 | import com.intellij.psi.tree.IElementType; 15 | 16 | public class usdPropertySpecImpl extends ASTWrapperPsiElement implements usdPropertySpec { 17 | 18 | public usdPropertySpecImpl(@NotNull ASTNode node) { 19 | super(node); 20 | } 21 | 22 | public void accept(@NotNull usdVisitor visitor) { 23 | visitor.visitPropertySpec(this); 24 | } 25 | 26 | public void accept(@NotNull PsiElementVisitor visitor) { 27 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 28 | else super.accept(visitor); 29 | } 30 | 31 | @Override 32 | @Nullable 33 | public usdAttributeProperty getAttributeProperty() { 34 | return findChildByClass(usdAttributeProperty.class); 35 | } 36 | 37 | @Override 38 | @Nullable 39 | public usdMetadata getMetadata() { 40 | return findChildByClass(usdMetadata.class); 41 | } 42 | 43 | @Override 44 | @Nullable 45 | public usdRelationshipProperty getRelationshipProperty() { 46 | return findChildByClass(usdRelationshipProperty.class); 47 | } 48 | 49 | @Override 50 | @NotNull 51 | public String getPropertyName() { 52 | return USDPsiImplUtil.getPropertyName(this); 53 | } 54 | 55 | @Override 56 | @Nullable 57 | public IElementType getPropertyType() { 58 | return USDPsiImplUtil.getPropertyType(this); 59 | } 60 | 61 | @Override 62 | @NotNull 63 | public String getName() { 64 | return USDPsiImplUtil.getName(this); 65 | } 66 | 67 | @Override 68 | @NotNull 69 | public ItemPresentation getPresentation() { 70 | return USDPsiImplUtil.getPresentation(this); 71 | } 72 | 73 | } 74 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/impl/USDReferenceReferenceProvider.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi.impl; 2 | 3 | import com.intellij.openapi.util.TextRange; 4 | import com.intellij.openapi.util.UserDataCache; 5 | import com.intellij.psi.*; 6 | 7 | import com.intellij.psi.util.CachedValue; 8 | import com.intellij.psi.util.CachedValueProvider; 9 | import com.intellij.psi.util.CachedValuesManager; 10 | import com.intellij.util.ProcessingContext; 11 | import com.intellij.util.SmartList; 12 | import com.justint.usdidea.lang.psi.USDReferenceReference; 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | import java.util.List; 16 | import java.util.regex.Matcher; 17 | import java.util.regex.Pattern; 18 | 19 | public class USDReferenceReferenceProvider extends PsiReferenceProvider { 20 | public static final USDReferenceReferenceProvider INSTANCE = new USDReferenceReferenceProvider(); 21 | 22 | private static final Pattern referencePattern = Pattern.compile("((@.*@)|(@.*@)?(<.*>))"); 23 | 24 | 25 | private static final UserDataCache, PsiElement, Object> ourRefsCache = new UserDataCache<>("CACHED_USD_REFERENCE_REFS") { 26 | @Override 27 | protected CachedValue compute(PsiElement psiElement, Object o) { 28 | return CachedValuesManager.getManager(psiElement.getProject()).createCachedValue(() -> { 29 | List refs = null; 30 | String text = psiElement.getText(); 31 | Matcher matcher = referencePattern.matcher(text); 32 | 33 | if (matcher.matches()) { 34 | refs = new SmartList<>(); 35 | TextRange textRange = new TextRange(0, text.length()); 36 | refs.add(new USDReferenceReference(psiElement, textRange)); 37 | } 38 | 39 | PsiReference[] references = refs != null ? refs.toArray(PsiReference.EMPTY_ARRAY) : PsiReference.EMPTY_ARRAY; 40 | return new CachedValueProvider.Result<>(references, psiElement); 41 | }); 42 | } 43 | }; 44 | 45 | @NotNull 46 | @Override 47 | public PsiReference[] getReferencesByElement(@NotNull PsiElement element, @NotNull ProcessingContext context) { 48 | return ourRefsCache.get(element,null).getValue(); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/impl/usdItemImpl.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi.impl; 3 | 4 | import java.util.List; 5 | import org.jetbrains.annotations.*; 6 | import com.intellij.lang.ASTNode; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiElementVisitor; 9 | import com.intellij.psi.util.PsiTreeUtil; 10 | import static com.justint.usdidea.lang.psi.USDTypes.*; 11 | import com.intellij.extapi.psi.ASTWrapperPsiElement; 12 | import com.justint.usdidea.lang.psi.*; 13 | 14 | public class usdItemImpl extends ASTWrapperPsiElement implements usdItem { 15 | 16 | public usdItemImpl(@NotNull ASTNode node) { 17 | super(node); 18 | } 19 | 20 | public void accept(@NotNull usdVisitor visitor) { 21 | visitor.visitItem(this); 22 | } 23 | 24 | public void accept(@NotNull PsiElementVisitor visitor) { 25 | if (visitor instanceof usdVisitor) accept((usdVisitor)visitor); 26 | else super.accept(visitor); 27 | } 28 | 29 | @Override 30 | @Nullable 31 | public usdArray getArray() { 32 | return findChildByClass(usdArray.class); 33 | } 34 | 35 | @Override 36 | @Nullable 37 | public usdBoolean getBoolean() { 38 | return findChildByClass(usdBoolean.class); 39 | } 40 | 41 | @Override 42 | @Nullable 43 | public usdDict getDict() { 44 | return findChildByClass(usdDict.class); 45 | } 46 | 47 | @Override 48 | @Nullable 49 | public usdInterpolatedArray getInterpolatedArray() { 50 | return findChildByClass(usdInterpolatedArray.class); 51 | } 52 | 53 | @Override 54 | @Nullable 55 | public usdReferenceItem getReferenceItem() { 56 | return findChildByClass(usdReferenceItem.class); 57 | } 58 | 59 | @Override 60 | @Nullable 61 | public usdTimeSample getTimeSample() { 62 | return findChildByClass(usdTimeSample.class); 63 | } 64 | 65 | @Override 66 | @Nullable 67 | public usdVector getVector() { 68 | return findChildByClass(usdVector.class); 69 | } 70 | 71 | @Override 72 | @Nullable 73 | public PsiElement getFloatnumber() { 74 | return findChildByType(FLOATNUMBER); 75 | } 76 | 77 | @Override 78 | @Nullable 79 | public PsiElement getNumber() { 80 | return findChildByType(NUMBER); 81 | } 82 | 83 | @Override 84 | @Nullable 85 | public PsiElement getString() { 86 | return findChildByType(STRING); 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build](https://github.com/justint/usd-idea/actions/workflows/build.yml/badge.svg)](https://github.com/justint/usd-idea/actions/workflows/build.yml) 2 | [![JetBrains IntelliJ Plugins](https://img.shields.io/jetbrains/plugin/v/12407-usd.svg?style=popout)](https://plugins.jetbrains.com/plugin/12407-usd) 3 | [![JetBrains IntelliJ plugins](https://img.shields.io/jetbrains/plugin/d/12407-usd.svg?style=popout)](https://plugins.jetbrains.com/plugin/12407-usd) 4 | 5 | 6 | 7 | # usd-idea 8 | 9 | A plugin for JetBrains IDEs (PyCharm, IntelliJ, etc) that provides support for [Universal Scene Description (USD)](https://github.com/PixarAnimationStudios/USD), a framework for interchange of 3D computer graphics data, developed by Pixar Animation Studios. 10 | 11 | ## Features 12 | 13 | - `.usd`/`.usda` filetype syntax highlighting & validation 14 | - Asset/prim reference navigation (with `usdresolve`) 15 | - Brace matching/folding 16 | - Structure view 17 | 18 | ## Installing 19 | 20 | - Within the IDE: 21 | 22 | Preferences > Plugins > Marketplace > Search for "USD" > Install 23 | 24 | - Manually: 25 | 26 | Download the [latest release](latest-release) and install it manually using Preferences > Plugins > Install Plugin from Disk... 27 | 28 | `usdresolve` path can be configured in Settings > Languages & Frameworks > USD. 29 | 30 | ## Building 31 | 32 | 1. [Install IntelliJ IDEA](https://www.jetbrains.com/idea/download); install **Gradle** and **Plugin Devkit** plugins (installed by default) 33 | 2. Open this project 34 | 3. Build the project: Build > Build Project 35 | 4. Launch the plug-in: Gradle > usd-idea > Tasks > intellij > runIde 36 | 37 | This will launch the plugin in the IntelliJ IDEA version specified in the [build.gradle](https://github.com/justint/usd-idea/blob/master/build.gradle). 38 | 39 | If you wish to launch it in a different non-IDEA JetBrains IDE (ie. PyCharm, CLion), you can specify an alternativeIdePath to your editor's path. See the [grade-intellij-plugin](https://github.com/JetBrains/gradle-intellij-plugin/) documentation for more details. 40 | 41 | For more details on building IntelliJ Platform plugins, see JetBrains's documentation: [IntelliJ Platform SDK DevGuide - Quick Start Guide](https://www.jetbrains.org/intellij/sdk/docs/basics/basics.html) 42 | 43 | ## License 44 | 45 | MIT license 46 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/folding/USDFoldingBuilder.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight.folding; 2 | 3 | import com.intellij.lang.ASTNode; 4 | import com.intellij.lang.folding.FoldingBuilder; 5 | import com.intellij.lang.folding.FoldingDescriptor; 6 | import com.intellij.lang.folding.NamedFoldingDescriptor; 7 | import com.intellij.openapi.editor.Document; 8 | import com.intellij.psi.tree.IElementType; 9 | import com.justint.usdidea.lang.psi.USDTypes; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.jetbrains.annotations.Nullable; 12 | 13 | import java.util.ArrayList; 14 | import java.util.Arrays; 15 | import java.util.List; 16 | 17 | public class USDFoldingBuilder implements FoldingBuilder { 18 | 19 | private static final IElementType[] BRACKET_TYPES = new IElementType[] { 20 | USDTypes.BODY, 21 | USDTypes.DICT, 22 | USDTypes.TIME_SAMPLE 23 | }; 24 | 25 | @NotNull 26 | @Override 27 | public FoldingDescriptor[] buildFoldRegions(@NotNull ASTNode astNode, @NotNull Document document) { 28 | List descriptors = new ArrayList<>(); 29 | collectRegionsRecursively(astNode, document, descriptors); 30 | return descriptors.toArray(FoldingDescriptor.EMPTY); 31 | } 32 | 33 | private void collectRegionsRecursively(@NotNull final ASTNode astNode, 34 | @NotNull final Document document, 35 | @NotNull List descriptors) { 36 | final IElementType elementType = astNode.getElementType(); 37 | 38 | if (elementType == USDTypes.METADATA) { 39 | descriptors.add(new FoldingDescriptor( 40 | astNode, 41 | astNode.getTextRange(), 42 | null, 43 | "(...)" 44 | )); 45 | } else if (Arrays.asList(BRACKET_TYPES).contains(elementType)) { 46 | descriptors.add(new FoldingDescriptor( 47 | astNode, 48 | astNode.getTextRange(), 49 | null, 50 | "{...}")); 51 | } 52 | 53 | for (ASTNode child : astNode.getChildren(null)) { 54 | collectRegionsRecursively(child, document, descriptors); 55 | } 56 | } 57 | 58 | @Nullable 59 | @Override 60 | public String getPlaceholderText(@NotNull ASTNode astNode) { 61 | return "..."; 62 | } 63 | 64 | @Override 65 | public boolean isCollapsedByDefault(@NotNull ASTNode astNode) { 66 | return false; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/USDStructureViewModel.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang; 2 | 3 | import com.intellij.ide.structureView.StructureViewModel; 4 | import com.intellij.ide.structureView.StructureViewModelBase; 5 | import com.intellij.ide.structureView.StructureViewTreeElement; 6 | import com.intellij.ide.util.treeView.smartTree.*; 7 | import com.intellij.psi.PsiFile; 8 | import com.intellij.util.PlatformIcons; 9 | import com.justint.usdidea.lang.psi.USDFile; 10 | import org.jetbrains.annotations.NotNull; 11 | 12 | public class USDStructureViewModel extends StructureViewModelBase 13 | implements StructureViewModel.ElementInfoProvider { 14 | 15 | Filter PropertyFilter = new Filter() { 16 | @Override 17 | public boolean isVisible(TreeElement treeElement) { 18 | return treeElement.getPresentation().getIcon(true) != PlatformIcons.PROPERTY_ICON; 19 | } 20 | 21 | @Override 22 | public boolean isReverted() { 23 | return true; 24 | } 25 | 26 | @NotNull 27 | @Override 28 | public ActionPresentation getPresentation() { 29 | return new ActionPresentationData("Show Properties", "Show Properties", PlatformIcons.PROPERTY_ICON); 30 | } 31 | 32 | @NotNull 33 | @Override 34 | public String getName() { 35 | return "USD_PROPERTY_FILTER"; 36 | } 37 | }; 38 | 39 | Filter MetadataFilter = new Filter() { 40 | @Override 41 | public boolean isVisible(TreeElement treeElement) { 42 | return treeElement.getPresentation().getIcon(true) != PlatformIcons.METHOD_ICON; 43 | } 44 | 45 | @Override 46 | public boolean isReverted() { 47 | return true; 48 | } 49 | 50 | @NotNull 51 | @Override 52 | public ActionPresentation getPresentation() { 53 | return new ActionPresentationData("Show Metadata", "Show Metadata", PlatformIcons.METHOD_ICON); 54 | } 55 | 56 | @NotNull 57 | @Override 58 | public String getName() { 59 | return "USD_METADATA_FILTER"; 60 | } 61 | }; 62 | 63 | public USDStructureViewModel(PsiFile psiFile) { 64 | super(psiFile, new USDStructureViewElement(psiFile)); 65 | } 66 | 67 | @NotNull 68 | public Sorter[] getSorters() { 69 | return new Sorter[]{Sorter.ALPHA_SORTER}; 70 | } 71 | 72 | @NotNull 73 | @Override 74 | public Filter[] getFilters() { 75 | return new Filter[]{PropertyFilter, MetadataFilter}; 76 | } 77 | 78 | @Override 79 | public boolean isAlwaysShowsPlus(StructureViewTreeElement structureViewTreeElement) { 80 | return false; 81 | } 82 | 83 | @Override 84 | public boolean isAlwaysLeaf(StructureViewTreeElement structureViewTreeElement) { 85 | return structureViewTreeElement instanceof USDFile; 86 | } 87 | 88 | } -------------------------------------------------------------------------------- /src/main/resources/META-INF/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | com.justint.usd-idea 3 | USD 4 | Justin Tennant 5 | 6 | Universal Scene Description (USD) support for JetBrains products. 8 |

9 | Features: 10 |
    11 |
  • Syntax highlighting
  • 12 |
  • Asset/prim reference navigation
  • 13 |
  • Parser
  • 14 |
  • Brace matching & block folding
  • 15 |
  • Structure/outline views
  • 16 |
17 | ]]>
18 | 19 | com.intellij.modules.lang 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 |
-------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto execute 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto execute 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :execute 68 | @rem Setup the command line 69 | 70 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 71 | 72 | 73 | @rem Execute Gradle 74 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* 75 | 76 | :end 77 | @rem End local scope for the variables with windows NT shell 78 | if "%ERRORLEVEL%"=="0" goto mainEnd 79 | 80 | :fail 81 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 82 | rem the _cmd.exe /c_ return code! 83 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 84 | exit /b 1 85 | 86 | :mainEnd 87 | if "%OS%"=="Windows_NT" endlocal 88 | 89 | :omega 90 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/inspections/UsdresolvePathInspection.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.inspections; 2 | 3 | import com.intellij.codeInspection.*; 4 | import com.intellij.openapi.options.ShowSettingsUtil; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.psi.PsiElement; 7 | import com.intellij.psi.PsiElementVisitor; 8 | import com.justint.usdidea.lang.psi.usdReferenceItem; 9 | import com.justint.usdidea.settings.USDSettingsConfigurable; 10 | import com.justint.usdidea.settings.USDSettingsState; 11 | import org.jetbrains.annotations.NotNull; 12 | 13 | import java.io.File; 14 | 15 | public class UsdresolvePathInspection extends LocalInspectionTool { 16 | 17 | @NotNull 18 | @Override 19 | public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session) { 20 | // Don't bother the user if they've already configured usdresolve 21 | if (USDSettingsState.getInstance().isUsdresolvePathValid()) return PsiElementVisitor.EMPTY_VISITOR; 22 | else return new PsiElementVisitor() { 23 | 24 | @Override 25 | public void visitElement(@NotNull PsiElement element) { 26 | if (element instanceof usdReferenceItem) { 27 | usdReferenceItem referenceItem = (usdReferenceItem)element; 28 | PsiElement assetReference = referenceItem.getAssetReference(); 29 | if (assetReference != null) { 30 | String assetPathString = assetReference.getText().split("@")[1]; 31 | File assetFile = new File(assetPathString); 32 | if (!isFileRelative(assetPathString) && !assetFile.exists()) { 33 | String description = "Cannot resolve asset reference '" + assetReference.getText() + "' without configuration of usdresolve install path"; 34 | holder.registerProblem( 35 | element, 36 | description, 37 | ProblemHighlightType.WARNING, 38 | new OpenUSDSettingsQuickFix()); 39 | } 40 | } 41 | } 42 | } 43 | }; 44 | } 45 | 46 | private boolean isFileRelative(@NotNull String assetPathString) { 47 | return assetPathString.contains("./") || assetPathString.contains("../"); 48 | } 49 | 50 | 51 | private static class OpenUSDSettingsQuickFix implements LocalQuickFix { 52 | @NotNull 53 | @Override 54 | public String getFamilyName() { 55 | return "Configure usdresolve path"; 56 | } 57 | 58 | @Override 59 | public boolean startInWriteAction() { 60 | return false; 61 | } 62 | 63 | @Override 64 | public void applyFix(@NotNull Project project, @NotNull ProblemDescriptor problemDescriptor) { 65 | showUSDSettingsDialog(project); 66 | } 67 | 68 | public static void showUSDSettingsDialog(@NotNull Project project) { 69 | ShowSettingsUtil.getInstance().showSettingsDialog(project, USDSettingsConfigurable.class); 70 | } 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/util/binscripts/USDResolve.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.util.binscripts; 2 | 3 | import com.intellij.execution.ExecutionException; 4 | import com.intellij.execution.configurations.GeneralCommandLine; 5 | import com.intellij.openapi.project.Project; 6 | import com.justint.usdidea.settings.USDSettingsState; 7 | import org.bouncycastle.util.Arrays; 8 | 9 | import java.io.IOException; 10 | import java.io.InputStream; 11 | import java.nio.charset.StandardCharsets; 12 | import java.nio.file.Path; 13 | import java.nio.file.Paths; 14 | 15 | public class USDResolve extends USDBinScript { 16 | 17 | public static final String BINSCRIPT_NAME = "usdresolve"; 18 | 19 | private String referencePath; 20 | private String contextPath; 21 | private final Project project; 22 | 23 | /** 24 | * A wrapper around the usdresolve bin script. 25 | * 26 | * @param referencePath the layer path to resolve (usually wrapped by the @ symbol) 27 | * @param contextPath the working directory to execute usdresolve from (usually the reference path's source file directory) 28 | */ 29 | public USDResolve(String referencePath, String contextPath, Project project) { 30 | this.referencePath = referencePath; 31 | this.contextPath = contextPath; 32 | this.project = project; 33 | } 34 | 35 | @Override 36 | public String getBinScriptName() { 37 | return BINSCRIPT_NAME; 38 | } 39 | 40 | @Override 41 | public Path getBinScriptPath() { 42 | return Paths.get(USDSettingsState.getInstance().usdresolveInstallPath); 43 | } 44 | 45 | /** 46 | * Returns a resolved path to a USD layer file from the provided reference path. 47 | * 48 | * @return the resolved USD layer file path 49 | * @throws ExecutionException 50 | */ 51 | public String resolvePath() throws ExecutionException, InterruptedException { 52 | if (!isUSDInstallValid()) { 53 | throw new ExecutionException("Invalid USD install path"); 54 | } 55 | String[] usdresolveCmdArray = Arrays.append(getPythonBinScriptCmds(project), referencePath); 56 | GeneralCommandLine cmd = new GeneralCommandLine(usdresolveCmdArray); 57 | cmd.setWorkDirectory(contextPath); 58 | Process process = cmd.createProcess(); 59 | process.waitFor(); 60 | if (process.exitValue() != 0){ 61 | throw new ExecutionException(String.valueOf(process.exitValue())); 62 | } 63 | InputStream inputStream = process.getInputStream(); 64 | try { 65 | return new String(inputStream.readAllBytes(), StandardCharsets.US_ASCII).trim(); 66 | } catch (IOException e) { 67 | // Hopefully usdresolve will always give us clean output... 68 | throw new ExecutionException(String.valueOf(process.exitValue())); 69 | } 70 | } 71 | 72 | public String getReferencePath() { 73 | return referencePath; 74 | } 75 | 76 | public void setReferencePath(String referencePath) { 77 | this.referencePath = referencePath; 78 | } 79 | 80 | public String getContextPath() { 81 | return contextPath; 82 | } 83 | 84 | public void setContextPath(String contextPath) { 85 | this.contextPath = contextPath; 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/psi/USDReferenceReference.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.psi; 2 | 3 | import com.intellij.execution.ExecutionException; 4 | import com.intellij.openapi.util.TextRange; 5 | import com.intellij.openapi.vfs.VirtualFile; 6 | import com.intellij.openapi.vfs.VirtualFileManager; 7 | import com.intellij.psi.PsiElement; 8 | import com.intellij.psi.PsiFile; 9 | import com.intellij.psi.PsiManager; 10 | import com.intellij.psi.PsiReferenceBase; 11 | import com.justint.usdidea.lang.psi.impl.USDPsiImplUtil; 12 | import com.justint.usdidea.util.binscripts.USDResolve; 13 | import org.jetbrains.annotations.NotNull; 14 | import org.jetbrains.annotations.Nullable; 15 | 16 | import java.io.File; 17 | import java.nio.file.InvalidPathException; 18 | import java.nio.file.Paths; 19 | 20 | public class USDReferenceReference extends PsiReferenceBase { 21 | public USDReferenceReference(@NotNull PsiElement element, TextRange rangeInElement) { 22 | super(element, rangeInElement); 23 | } 24 | 25 | @Nullable 26 | private PsiFile getResolvedReferenceAssetFile(String referenceLayerPath, File sourceElementFile) { 27 | USDResolve resolver = new USDResolve(referenceLayerPath, sourceElementFile.getParent(), myElement.getProject()); 28 | boolean resolverIsValid = resolver.isUSDInstallValid(); 29 | 30 | String targetLayerPath = null; 31 | 32 | // Attempt to resolve this path as a literal filesystem path first 33 | try { 34 | File targetLayerFile = new File(Paths.get(sourceElementFile.getParent(), referenceLayerPath).toString()); 35 | targetLayerPath = targetLayerFile.getAbsolutePath(); 36 | } 37 | catch (InvalidPathException e) { 38 | // It may be a custom URL path; we'll try the resolver next if possible 39 | } 40 | if (resolverIsValid) { 41 | try { 42 | // Attempt to derive this path from `usdresolve`, if possible 43 | targetLayerPath = resolver.resolvePath(); 44 | } catch (ExecutionException | InterruptedException e) { 45 | // Resolver failed/was interrupted 46 | return null; 47 | } 48 | } 49 | 50 | if (targetLayerPath == null) return null; 51 | 52 | VirtualFile layerVf = VirtualFileManager.getInstance().findFileByUrl("file://" + targetLayerPath); 53 | if (layerVf == null) return null; 54 | 55 | return PsiManager.getInstance(myElement.getProject()).findFile(layerVf); 56 | } 57 | 58 | @Nullable 59 | @Override 60 | public PsiElement resolve() { 61 | PsiFile resolvedAssetFile = myElement.getContainingFile(); 62 | String referencePath = myElement.getText(); 63 | 64 | boolean hasAssetPath = false; 65 | boolean hasPrimPath = false; 66 | 67 | if (referencePath.contains("@")) { 68 | hasAssetPath = true; 69 | } 70 | if (referencePath.contains("<")) { 71 | hasPrimPath = true; 72 | } 73 | 74 | if (!hasAssetPath && !hasPrimPath) { 75 | return null; 76 | } 77 | if (hasAssetPath) { 78 | String assetPath = referencePath.split("@")[1]; 79 | 80 | String sourceElementFilePath = myElement.getContainingFile().getVirtualFile().getPath(); 81 | File sourceElementFile = new File(sourceElementFilePath); 82 | 83 | resolvedAssetFile = getResolvedReferenceAssetFile(assetPath, sourceElementFile); 84 | if (resolvedAssetFile == null) return null; 85 | } 86 | if (hasPrimPath) { 87 | if (resolvedAssetFile instanceof USDFile) { 88 | String primPath = referencePath.split("<")[1].replace(">", ""); 89 | PsiElement foundPrim = USDPsiImplUtil.findPrimInLayerFromPath((USDFile)resolvedAssetFile, primPath); 90 | if (foundPrim != null) return foundPrim; 91 | else return null; 92 | } 93 | else { 94 | // We have a prim path pointing into a non-USD layer asset file... strange, we'll just return no result 95 | return null; 96 | } 97 | } 98 | else { 99 | return resolvedAssetFile; 100 | } 101 | } 102 | } 103 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/settings/USDSettingsComponent.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.settings; 2 | 3 | import com.intellij.openapi.fileChooser.FileChooserDescriptor; 4 | import com.intellij.openapi.ui.DialogPanel; 5 | import com.intellij.openapi.ui.TextBrowseFolderListener; 6 | import com.intellij.openapi.ui.TextFieldWithBrowseButton; 7 | import com.intellij.ui.JBColor; 8 | import com.intellij.ui.components.JBLabel; 9 | import com.intellij.util.ui.FormBuilder; 10 | import com.intellij.util.ui.UI; 11 | import com.justint.usdidea.util.USDInstallFinder; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | import javax.swing.*; 15 | import java.awt.*; 16 | import java.awt.event.MouseAdapter; 17 | import java.awt.event.MouseEvent; 18 | 19 | public class USDSettingsComponent { 20 | private final JPanel mainPanel; 21 | private final TextFieldWithBrowseButton usdresolvePathText; 22 | 23 | private final USDInstallFinder installFinder; 24 | 25 | public USDSettingsComponent() { 26 | installFinder = new USDInstallFinder(); 27 | 28 | usdresolvePathText = new TextFieldWithBrowseButton(); 29 | usdresolvePathText.addBrowseFolderListener(new TextBrowseFolderListener( 30 | new FileChooserDescriptor( 31 | true, 32 | false, 33 | false, 34 | false, 35 | false, 36 | false 37 | ) 38 | )); 39 | usdresolvePathText.setToolTipText("Path to usdresolve script. Usually resides in USD install bin directory."); 40 | 41 | DialogPanel buttonPanel = new DialogPanel(new FlowLayout(FlowLayout.LEFT)); 42 | 43 | JButton usdToolsFindButton = new JButton("Autodetect Tool Paths"); 44 | 45 | JPanel buttonHelpTextPanel = UI.PanelFactory.panel(usdToolsFindButton) 46 | .withComment("Searches for USD tool paths in PATH environment variable").resizeY(true).createPanel(); 47 | 48 | JBLabel usdToolsFindButtonErrorLabel = new JBLabel(); 49 | usdToolsFindButtonErrorLabel.setText("Failed to detect usdresolve path automatically."); 50 | usdToolsFindButtonErrorLabel.setForeground(getErrorForeground()); 51 | usdToolsFindButtonErrorLabel.setVisible(false); 52 | 53 | usdToolsFindButton.addMouseListener(new MouseAdapter() { 54 | @Override 55 | public void mouseClicked(MouseEvent e) { 56 | super.mouseClicked(e); 57 | String usdresolveInstallPath = installFinder.findUsdresolveInstallPath(); 58 | if (usdresolveInstallPath.equals("")) { 59 | usdToolsFindButtonErrorLabel.setVisible(true); 60 | } 61 | else { 62 | usdresolvePathText.setText(usdresolveInstallPath); 63 | usdToolsFindButtonErrorLabel.setVisible(false); 64 | } 65 | } 66 | }); 67 | usdToolsFindButton.setMaximumSize(usdToolsFindButton.getPreferredSize()); 68 | 69 | buttonPanel.add(usdToolsFindButton); 70 | buttonPanel.add(buttonHelpTextPanel); 71 | 72 | 73 | mainPanel = FormBuilder.createFormBuilder() 74 | .addLabeledComponent(new JBLabel("usdresolve path:"), usdresolvePathText) 75 | .addComponent(buttonPanel) 76 | .addComponent(usdToolsFindButtonErrorLabel) 77 | .addComponentFillVertically(new JPanel(), 0) 78 | .getPanel(); 79 | } 80 | 81 | private Color getErrorForeground() { 82 | // Stolen from com.intellij.util.ui.UIUtil, for backwards compatibility 83 | return JBColor.namedColor("Label.errorForeground", new JBColor(new Color(0xC7222D), JBColor.RED)); 84 | } 85 | 86 | public JPanel getPanel() { 87 | return mainPanel; 88 | } 89 | 90 | public JComponent getPreferredFocusedComponent() { 91 | return usdresolvePathText; 92 | } 93 | 94 | @NotNull 95 | public String getUsdresolvePathText() { 96 | return usdresolvePathText.getText(); 97 | } 98 | 99 | public void setUsdresolvePathText(@NotNull String newText) { 100 | usdresolvePathText.setText(newText); 101 | } 102 | 103 | } 104 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/highlighting/USDSyntaxHighlighter.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight.highlighting; 2 | 3 | import com.intellij.lexer.Lexer; 4 | import com.intellij.openapi.editor.*; 5 | import com.intellij.openapi.editor.colors.TextAttributesKey; 6 | import com.intellij.openapi.fileTypes.SyntaxHighlighterBase; 7 | import com.intellij.psi.tree.IElementType; 8 | import com.intellij.util.containers.ContainerUtil; 9 | import com.justint.usdidea.lang.lexer.USDHighlighterLexerAdapter; 10 | import com.justint.usdidea.lang.parser.USDParserDefinition; 11 | import org.jetbrains.annotations.NotNull; 12 | 13 | import java.util.HashMap; 14 | import java.util.Map; 15 | 16 | import static com.intellij.openapi.editor.colors.TextAttributesKey.createTextAttributesKey; 17 | 18 | 19 | public class USDSyntaxHighlighter extends SyntaxHighlighterBase { 20 | 21 | // TextAttributesKey instances 22 | public static final TextAttributesKey USDDECLARATION = 23 | createTextAttributesKey("USDDECLARATION", DefaultLanguageHighlighterColors.CONSTANT); 24 | public static final TextAttributesKey BRACKET = 25 | createTextAttributesKey("BRACKET", DefaultLanguageHighlighterColors.BRACKETS); 26 | public static final TextAttributesKey KEYWORD = 27 | createTextAttributesKey("KEYWORD", DefaultLanguageHighlighterColors.KEYWORD); 28 | public static final TextAttributesKey STRING = 29 | createTextAttributesKey("STRING", DefaultLanguageHighlighterColors.STRING); 30 | public static final TextAttributesKey NUMBER = 31 | createTextAttributesKey("NUMBER", DefaultLanguageHighlighterColors.NUMBER); 32 | public static final TextAttributesKey LINE_COMMENT = 33 | createTextAttributesKey("LINE_COMMENT", DefaultLanguageHighlighterColors.LINE_COMMENT); 34 | public static final TextAttributesKey BLOCK_COMMENT = 35 | createTextAttributesKey("BLOCK_COMMENT", DefaultLanguageHighlighterColors.BLOCK_COMMENT); 36 | public static final TextAttributesKey IDENTIFIER = 37 | createTextAttributesKey("USD.IDENTIFIER", DefaultLanguageHighlighterColors.IDENTIFIER); 38 | public static final TextAttributesKey PRIM_NAME = 39 | createTextAttributesKey("PRIM_NAME", DefaultLanguageHighlighterColors.FUNCTION_DECLARATION); 40 | public static final TextAttributesKey ASSET_REFERENCE = 41 | createTextAttributesKey("ASSET_REFERENCE", USDHighlighterColors.ASSETREFERENCE_KEY); 42 | public static final TextAttributesKey PATH_REFERENCE = 43 | createTextAttributesKey("PATH_REFERENCE", USDHighlighterColors.PATHREFERENCE_KEY); 44 | public static final TextAttributesKey TYPE = 45 | createTextAttributesKey("TYPE", DefaultLanguageHighlighterColors.INSTANCE_FIELD); 46 | 47 | private static final Map ATTRIBUTES = new HashMap<>(); 48 | 49 | static { 50 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.USDDECLARATION, DefaultLanguageHighlighterColors.CONSTANT); 51 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.BRACKETS, DefaultLanguageHighlighterColors.BRACKETS); 52 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.KEYWORDS, DefaultLanguageHighlighterColors.KEYWORD); 53 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.STRINGS, DefaultLanguageHighlighterColors.STRING); 54 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.NUMBERS, DefaultLanguageHighlighterColors.NUMBER); 55 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.LINE_COMMENTS, DefaultLanguageHighlighterColors.LINE_COMMENT); 56 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.BLOCK_COMMENTS, DefaultLanguageHighlighterColors.BLOCK_COMMENT); 57 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.IDENTIFIERS, DefaultLanguageHighlighterColors.IDENTIFIER); 58 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.PRIM_NAMES, DefaultLanguageHighlighterColors.FUNCTION_DECLARATION); 59 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.ASSETREFERENCES, USDHighlighterColors.ASSETREFERENCE_KEY); 60 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.PATHREFERENCES, USDHighlighterColors.PATHREFERENCE_KEY); 61 | SyntaxHighlighterBase.fillMap(ATTRIBUTES, USDParserDefinition.TYPES, DefaultLanguageHighlighterColors.INSTANCE_FIELD); 62 | } 63 | 64 | @NotNull 65 | @Override 66 | public Lexer getHighlightingLexer() { 67 | return new USDHighlighterLexerAdapter(); 68 | } 69 | 70 | @NotNull 71 | @Override 72 | public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { 73 | return pack(ATTRIBUTES.get(tokenType)); 74 | } 75 | 76 | } 77 | -------------------------------------------------------------------------------- /src/main/gen/com/justint/usdidea/lang/psi/usdVisitor.java: -------------------------------------------------------------------------------- 1 | // This is a generated file. Not intended for manual editing. 2 | package com.justint.usdidea.lang.psi; 3 | 4 | import org.jetbrains.annotations.*; 5 | import com.intellij.psi.PsiElementVisitor; 6 | import com.intellij.psi.PsiElement; 7 | 8 | public class usdVisitor extends PsiElementVisitor { 9 | 10 | public void visitArray(@NotNull usdArray o) { 11 | visitPsiElement(o); 12 | } 13 | 14 | public void visitArrayAttributeType(@NotNull usdArrayAttributeType o) { 15 | visitPsiElement(o); 16 | } 17 | 18 | public void visitAttributeName(@NotNull usdAttributeName o) { 19 | visitPsiElement(o); 20 | } 21 | 22 | public void visitAttributeProperty(@NotNull usdAttributeProperty o) { 23 | visitPsiElement(o); 24 | } 25 | 26 | public void visitAttributeType(@NotNull usdAttributeType o) { 27 | visitPsiElement(o); 28 | } 29 | 30 | public void visitAttributeValue(@NotNull usdAttributeValue o) { 31 | visitPsiElement(o); 32 | } 33 | 34 | public void visitBasicDataType(@NotNull usdBasicDataType o) { 35 | visitPsiElement(o); 36 | } 37 | 38 | public void visitBody(@NotNull usdBody o) { 39 | visitPsiElement(o); 40 | } 41 | 42 | public void visitBoolean(@NotNull usdBoolean o) { 43 | visitPsiElement(o); 44 | } 45 | 46 | public void visitCompositionArc(@NotNull usdCompositionArc o) { 47 | visitPsiElement(o); 48 | } 49 | 50 | public void visitDict(@NotNull usdDict o) { 51 | visitPsiElement(o); 52 | } 53 | 54 | public void visitDictItem(@NotNull usdDictItem o) { 55 | visitUSDBreadcrumbItem(o); 56 | } 57 | 58 | public void visitDictKey(@NotNull usdDictKey o) { 59 | visitPsiElement(o); 60 | } 61 | 62 | public void visitDictValue(@NotNull usdDictValue o) { 63 | visitPsiElement(o); 64 | } 65 | 66 | public void visitFrameNumber(@NotNull usdFrameNumber o) { 67 | visitPsiElement(o); 68 | } 69 | 70 | public void visitIdentifier(@NotNull usdIdentifier o) { 71 | visitPsiElement(o); 72 | } 73 | 74 | public void visitInterpolatedArray(@NotNull usdInterpolatedArray o) { 75 | visitPsiElement(o); 76 | } 77 | 78 | public void visitItem(@NotNull usdItem o) { 79 | visitPsiElement(o); 80 | } 81 | 82 | public void visitListEditAction(@NotNull usdListEditAction o) { 83 | visitPsiElement(o); 84 | } 85 | 86 | public void visitMetadata(@NotNull usdMetadata o) { 87 | visitPsiElement(o); 88 | } 89 | 90 | public void visitMetadataComment(@NotNull usdMetadataComment o) { 91 | visitPsiElement(o); 92 | } 93 | 94 | public void visitMetadataKey(@NotNull usdMetadataKey o) { 95 | visitPsiElement(o); 96 | } 97 | 98 | public void visitMetadataValue(@NotNull usdMetadataValue o) { 99 | visitPsiElement(o); 100 | } 101 | 102 | public void visitMetadatum(@NotNull usdMetadatum o) { 103 | visitPsiElement(o); 104 | } 105 | 106 | public void visitNamespacedIdentifier(@NotNull usdNamespacedIdentifier o) { 107 | visitPsiElement(o); 108 | } 109 | 110 | public void visitPrimName(@NotNull usdPrimName o) { 111 | visitPsiElement(o); 112 | } 113 | 114 | public void visitPrimSpec(@NotNull usdPrimSpec o) { 115 | visitUSDBreadcrumbItem(o); 116 | } 117 | 118 | public void visitPropertySpec(@NotNull usdPropertySpec o) { 119 | visitPsiElement(o); 120 | } 121 | 122 | public void visitReferenceItem(@NotNull usdReferenceItem o) { 123 | visitUSDNamedElement(o); 124 | } 125 | 126 | public void visitRelationshipProperty(@NotNull usdRelationshipProperty o) { 127 | visitPsiElement(o); 128 | } 129 | 130 | public void visitRoleDataType(@NotNull usdRoleDataType o) { 131 | visitPsiElement(o); 132 | } 133 | 134 | public void visitSingleAttributeType(@NotNull usdSingleAttributeType o) { 135 | visitPsiElement(o); 136 | } 137 | 138 | public void visitSpecialMetadataKey(@NotNull usdSpecialMetadataKey o) { 139 | visitPsiElement(o); 140 | } 141 | 142 | public void visitSpecifier(@NotNull usdSpecifier o) { 143 | visitPsiElement(o); 144 | } 145 | 146 | public void visitTimeSample(@NotNull usdTimeSample o) { 147 | visitPsiElement(o); 148 | } 149 | 150 | public void visitTypename(@NotNull usdTypename o) { 151 | visitPsiElement(o); 152 | } 153 | 154 | public void visitVariantSetBody(@NotNull usdVariantSetBody o) { 155 | visitPsiElement(o); 156 | } 157 | 158 | public void visitVariantSetItemBody(@NotNull usdVariantSetItemBody o) { 159 | visitPsiElement(o); 160 | } 161 | 162 | public void visitVariantSetKey(@NotNull usdVariantSetKey o) { 163 | visitPsiElement(o); 164 | } 165 | 166 | public void visitVector(@NotNull usdVector o) { 167 | visitPsiElement(o); 168 | } 169 | 170 | public void visitUSDBreadcrumbItem(@NotNull USDBreadcrumbItem o) { 171 | visitElement(o); 172 | } 173 | 174 | public void visitUSDNamedElement(@NotNull USDNamedElement o) { 175 | visitElement(o); 176 | } 177 | 178 | public void visitPsiElement(@NotNull PsiElement o) { 179 | visitElement(o); 180 | } 181 | 182 | } 183 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | # GitHub Actions Workflow created for testing and preparing the plugin release in following steps: 2 | # - validate Gradle Wrapper, 3 | # - run test and verifyPlugin tasks, 4 | # - run buildPlugin task and prepare artifact for the further tests, 5 | # - run IntelliJ Plugin Verifier 6 | # 7 | # Workflow is triggered on push and pull_request events. 8 | # 9 | # Docs: 10 | # - GitHub Actions: https://help.github.com/en/actions 11 | # - IntelliJ Plugin Verifier GitHub Action: https://github.com/ChrisCarini/intellij-platform-plugin-verifier-action 12 | # 13 | ## 14 | 15 | name: Build 16 | on: [push, pull_request] 17 | jobs: 18 | 19 | # Run Gradle Wrapper Validation Action to verify the wrapper's checksum 20 | gradleValidation: 21 | name: Gradle Wrapper 22 | runs-on: ubuntu-latest 23 | steps: 24 | 25 | # Check out current repository 26 | - name: Fetch Sources 27 | uses: actions/checkout@v2 28 | 29 | # Validate wrapper 30 | - name: Gradle Wrapper Validation 31 | uses: gradle/wrapper-validation-action@v1.0.3 32 | 33 | # Run verifyPlugin and test Gradle tasks 34 | test: 35 | name: Test 36 | needs: gradleValidation 37 | runs-on: ubuntu-latest 38 | steps: 39 | 40 | # Setup Java 1.8 environment for the next steps 41 | - name: Setup Java 42 | uses: actions/setup-java@v1 43 | with: 44 | java-version: 11 45 | 46 | # Check out current repository 47 | - name: Fetch Sources 48 | uses: actions/checkout@v2 49 | 50 | # Cache Gradle dependencies 51 | - name: Setup Gradle Dependencies Cache 52 | uses: actions/cache@v2 53 | with: 54 | path: ~/.gradle/caches 55 | key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', 'gradle.properties') }} 56 | 57 | # Cache Gradle Wrapper 58 | - name: Setup Gradle Wrapper Cache 59 | uses: actions/cache@v2 60 | with: 61 | path: ~/.gradle/wrapper 62 | key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} 63 | 64 | # Run detekt, ktlint and tests 65 | - name: Run Linters and Test 66 | run: ./gradlew check 67 | 68 | # Run verifyPlugin Gradle task 69 | - name: Verify Plugin 70 | run: ./gradlew verifyPlugin 71 | 72 | # Build plugin with buildPlugin Gradle task and provide the artifact for the next workflow jobs 73 | # Requires test job to be passed 74 | build: 75 | name: Build 76 | needs: test 77 | runs-on: ubuntu-latest 78 | outputs: 79 | name: ${{ steps.properties.outputs.name }} 80 | version: ${{ steps.properties.outputs.version }} 81 | artifact: ${{ steps.properties.outputs.artifact }} 82 | steps: 83 | 84 | # Setup Java 1.8 environment for the next steps 85 | - name: Setup Java 86 | uses: actions/setup-java@v1 87 | with: 88 | java-version: 11 89 | 90 | # Check out current repository 91 | - name: Fetch Sources 92 | uses: actions/checkout@v2 93 | 94 | # Cache Gradle Dependencies 95 | - name: Setup Gradle Dependencies Cache 96 | uses: actions/cache@v2 97 | with: 98 | path: ~/.gradle/caches 99 | key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', 'gradle.properties') }} 100 | 101 | # Cache Gradle Wrapper 102 | - name: Setup Gradle Wrapper Cache 103 | uses: actions/cache@v2 104 | with: 105 | path: ~/.gradle/wrapper 106 | key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} 107 | 108 | # Set environment variables 109 | - name: Export Properties 110 | id: properties 111 | shell: bash 112 | run: | 113 | PROPERTIES="$(./gradlew properties --console=plain -q)" 114 | VERSION="$(echo "$PROPERTIES" | grep "^version:" | cut -f2- -d ' ')" 115 | NAME="$(echo "$PROPERTIES" | grep "^name:" | cut -f2- -d ' ')" 116 | ARTIFACT="${NAME}-${VERSION}.zip" 117 | 118 | echo "::set-output name=version::$VERSION" 119 | echo "::set-output name=name::$NAME" 120 | echo "::set-output name=artifact::$ARTIFACT" 121 | 122 | # Build artifact using buildPlugin Gradle task 123 | - name: Build Plugin 124 | run: ./gradlew buildPlugin 125 | 126 | # Upload plugin artifact to make it available in the next jobs 127 | - name: Upload artifact 128 | uses: actions/upload-artifact@v1 129 | with: 130 | name: plugin-artifact 131 | path: ./build/distributions/${{ steps.properties.outputs.artifact }} 132 | 133 | # Verify built plugin using IntelliJ Plugin Verifier tool 134 | # Requires build job to be passed 135 | verify: 136 | name: Verify 137 | needs: build 138 | runs-on: ubuntu-latest 139 | steps: 140 | 141 | # Setup Java 1.8 environment for the next steps 142 | - name: Setup Java 143 | uses: actions/setup-java@v1 144 | with: 145 | java-version: 11 146 | 147 | # Check out current repository 148 | - name: Fetch Sources 149 | uses: actions/checkout@v2 150 | 151 | # Cache Gradle Dependencies 152 | - name: Setup Gradle Dependencies Cache 153 | uses: actions/cache@v2 154 | with: 155 | path: ~/.gradle/caches 156 | key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', 'gradle.properties') }} 157 | 158 | # Cache Gradle Wrapper 159 | - name: Setup Gradle Wrapper Cache 160 | uses: actions/cache@v2 161 | with: 162 | path: ~/.gradle/wrapper 163 | key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('**/gradle/wrapper/gradle-wrapper.properties') }} 164 | 165 | # Set environment variables 166 | - name: Export Properties 167 | id: properties 168 | shell: bash 169 | run: | 170 | PROPERTIES="$(./gradlew properties --console=plain -q)" 171 | IDE_VERSIONS="$(echo "$PROPERTIES" | grep "^pluginVerifierIdeVersions:" | base64)" 172 | 173 | echo "::set-output name=ideVersions::$IDE_VERSIONS" 174 | echo "::set-output name=pluginVerifierHomeDir::~/.pluginVerifier" 175 | 176 | # Cache Plugin Verifier IDEs 177 | - name: Setup Plugin Verifier IDEs Cache 178 | uses: actions/cache@v2 179 | with: 180 | path: ${{ steps.properties.outputs.pluginVerifierHomeDir }}/ides 181 | key: ${{ runner.os }}-plugin-verifier-${{ steps.properties.outputs.ideVersions }} 182 | 183 | # Run IntelliJ Plugin Verifier action using GitHub Action 184 | - name: Verify Plugin 185 | run: ./gradlew runPluginVerifier -Pplugin.verifier.home.dir=${{ steps.properties.outputs.pluginVerifierHomeDir }} -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/parser/USDParserDefinition.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.parser; 2 | 3 | import com.intellij.lang.*; 4 | import com.intellij.lexer.Lexer; 5 | import com.intellij.openapi.project.Project; 6 | import com.intellij.psi.*; 7 | import com.intellij.psi.tree.IFileElementType; 8 | import com.intellij.psi.tree.TokenSet; 9 | import com.justint.usdidea.lang.USDLanguage; 10 | import com.justint.usdidea.lang.lexer.USDLexerAdapter; 11 | import com.justint.usdidea.lang.psi.*; 12 | import org.jetbrains.annotations.NotNull; 13 | 14 | public class USDParserDefinition implements ParserDefinition { 15 | public static final TokenSet USDDECLARATION = TokenSet.create(USDTypes.USDDECLARATION); 16 | 17 | public static final TokenSet ASSETREFERENCES = TokenSet.create(USDTypes.ASSETREFERENCE); 18 | 19 | public static final TokenSet PATHREFERENCES = TokenSet.create(USDTypes.PATHREFERENCE); 20 | 21 | public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE); 22 | 23 | public static final TokenSet LINE_COMMENTS = TokenSet.create(USDTypes.COMMENT); 24 | 25 | public static final TokenSet BLOCK_COMMENTS = TokenSet.create(USDTypes.BLOCKCOMMENT); 26 | 27 | public static final TokenSet STRINGS = TokenSet.create(USDTypes.STRING); 28 | 29 | public static final TokenSet NUMBERS = TokenSet.create( 30 | USDTypes.NUMBER, 31 | USDTypes.FLOATNUMBER 32 | ); 33 | 34 | public static final TokenSet BRACKETS = TokenSet.create( 35 | USDTypes.LEFTBRACE, USDTypes.RIGHTBRACE, 36 | USDTypes.LEFTBRACKET, USDTypes.RIGHTBRACKET, 37 | USDTypes.LEFTPARENS, USDTypes.RIGHTPARENS 38 | ); 39 | 40 | public static final TokenSet IDENTIFIERS = TokenSet.create(USDTypes.IDENTIFIER); 41 | 42 | public static final TokenSet PRIM_NAMES = TokenSet.create(USDTypes.PRIM_NAME); 43 | 44 | public static final TokenSet KEYWORDS = TokenSet.create( 45 | USDTypes.ADD, 46 | USDTypes.APPEND, 47 | USDTypes.ATTRIBUTES, 48 | USDTypes.CLASS, 49 | USDTypes.CONFIG, 50 | USDTypes.CONNECT, 51 | USDTypes.CUSTOM, 52 | USDTypes.CUSTOMDATA, 53 | USDTypes.DEFAULT, 54 | USDTypes.DEF, 55 | USDTypes.DELETE, 56 | USDTypes.DICTIONARY, 57 | USDTypes.DISPLAYUNIT, 58 | USDTypes.DOC, 59 | USDTypes.FALSE, 60 | USDTypes.INHERITS, 61 | USDTypes.KIND, 62 | USDTypes.MAPPER, 63 | USDTypes.NAMECHILDREN, 64 | USDTypes.NONE, 65 | USDTypes.OFFSET, 66 | USDTypes.OVER, 67 | USDTypes.PAYLOAD, 68 | USDTypes.PERMISSION, 69 | USDTypes.PREFIXSUBSTITUTIONS, 70 | USDTypes.PREPEND, 71 | USDTypes.PROPERTIES, 72 | USDTypes.REFERENCES, 73 | USDTypes.RELOCATES, 74 | USDTypes.REL, 75 | USDTypes.REORDER, 76 | USDTypes.ROOTPRIMS, 77 | USDTypes.SPECIALIZES, 78 | USDTypes.SUBLAYERS, 79 | USDTypes.SUFFIXSUBSTITUTIONS, 80 | USDTypes.SYMMETRYARGUMENTS, 81 | USDTypes.SYMMETRYFUNCTION, 82 | USDTypes.UNIFORM, 83 | USDTypes.VARIANTS, 84 | USDTypes.VARIANTSET, 85 | USDTypes.VARIANTSETS, 86 | USDTypes.VARYING, 87 | USDTypes.TRUE 88 | ); 89 | 90 | public static final TokenSet TYPES = TokenSet.create( 91 | USDTypes.BOOLTYPE, 92 | USDTypes.UCHARTYPE, 93 | USDTypes.INTTYPE, 94 | USDTypes.UINTTYPE, 95 | USDTypes.UINT64TYPE, 96 | USDTypes.HALFTYPE, 97 | USDTypes.FLOATTYPE, 98 | USDTypes.DOUBLETYPE, 99 | USDTypes.STRINGTYPE, 100 | USDTypes.TOKENTYPE, 101 | USDTypes.ASSETTYPE, 102 | USDTypes.MATRIX2DTYPE, 103 | USDTypes.MATRIX3DTYPE, 104 | USDTypes.MATRIX4DTYPE, 105 | USDTypes.QUATDTYPE, 106 | USDTypes.QUATFTYPE, 107 | USDTypes.QUATHTYPE, 108 | USDTypes.DOUBLE2TYPE, 109 | USDTypes.FLOAT2TYPE, 110 | USDTypes.HALF2TYPE, 111 | USDTypes.INT2TYPE, 112 | USDTypes.DOUBLE3TYPE, 113 | USDTypes.FLOAT3TYPE, 114 | USDTypes.HALF3TYPE, 115 | USDTypes.INT3TYPE, 116 | USDTypes.DOUBLE4TYPE, 117 | USDTypes.FLOAT4TYPE, 118 | USDTypes.HALF4TYPE, 119 | USDTypes.INT4TYPE, 120 | USDTypes.POINT3DTYPE, 121 | USDTypes.POINT3FTYPE, 122 | USDTypes.POINT3HTYPE, 123 | USDTypes.NORMAL3DTYPE, 124 | USDTypes.NORMAL3FTYPE, 125 | USDTypes.NORMAL3HTYPE, 126 | USDTypes.VECTOR3DTYPE, 127 | USDTypes.VECTOR3FTYPE, 128 | USDTypes.VECTOR3HTYPE, 129 | USDTypes.COLOR3DTYPE, 130 | USDTypes.COLOR3FTYPE, 131 | USDTypes.COLOR3HTYPE, 132 | USDTypes.COLOR4DTYPE, 133 | USDTypes.COLOR4FTYPE, 134 | USDTypes.COLOR4HTYPE, 135 | USDTypes.FRAME4DTYPE, 136 | USDTypes.TEXCOORD2HTYPE, 137 | USDTypes.TEXCOORD2DTYPE, 138 | USDTypes.TEXCOORD2FTYPE, 139 | USDTypes.TEXCOORD3HTYPE, 140 | USDTypes.TEXCOORD3DTYPE, 141 | USDTypes.TEXCOORD3FTYPE, 142 | USDTypes.TRANSFORMTYPE, 143 | USDTypes.POINTINDEXTYPE, 144 | USDTypes.EDGEINDEXTYPE, 145 | USDTypes.FACEINDEXTYPE 146 | ); 147 | 148 | public static final IFileElementType FILE = new IFileElementType(USDLanguage.INSTANCE); 149 | 150 | @NotNull 151 | @Override 152 | public Lexer createLexer(Project project) { 153 | return new USDLexerAdapter(); 154 | } 155 | 156 | @NotNull 157 | public TokenSet getWhitespaceTokens() { 158 | return WHITE_SPACES; 159 | } 160 | 161 | @NotNull 162 | public TokenSet getCommentTokens() { 163 | return LINE_COMMENTS; 164 | } 165 | 166 | @NotNull 167 | public TokenSet getStringLiteralElements() { 168 | return TokenSet.EMPTY; 169 | } 170 | 171 | @NotNull 172 | public PsiParser createParser(final Project project) { 173 | return new USDParser(); 174 | } 175 | 176 | @Override 177 | public IFileElementType getFileNodeType() { 178 | return FILE; 179 | } 180 | 181 | public PsiFile createFile(FileViewProvider viewProvider) { 182 | return new USDFile(viewProvider); 183 | } 184 | 185 | public SpaceRequirements spaceExistenceTypeBetweenTokens(ASTNode left, ASTNode right) { 186 | return SpaceRequirements.MAY; 187 | } 188 | 189 | @NotNull 190 | public PsiElement createElement(ASTNode node) { 191 | return USDTypes.Factory.createElement(node); 192 | } 193 | 194 | } 195 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/codeinsight/highlighting/USDColorSettingsPage.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.codeinsight.highlighting; 2 | 3 | import com.intellij.openapi.editor.colors.TextAttributesKey; 4 | import com.intellij.openapi.fileTypes.SyntaxHighlighter; 5 | import com.intellij.openapi.options.colors.AttributesDescriptor; 6 | import com.intellij.openapi.options.colors.ColorDescriptor; 7 | import com.intellij.openapi.options.colors.ColorSettingsPage; 8 | import com.justint.usdidea.util.USDIcons; 9 | import org.jetbrains.annotations.NotNull; 10 | import org.jetbrains.annotations.Nullable; 11 | 12 | import javax.swing.*; 13 | import java.util.Map; 14 | 15 | public class USDColorSettingsPage implements ColorSettingsPage { 16 | private static final AttributesDescriptor[] DESCRIPTORS = new AttributesDescriptor[] { 17 | new AttributesDescriptor("USD Declaration", USDSyntaxHighlighter.USDDECLARATION), 18 | new AttributesDescriptor("Bracket", USDSyntaxHighlighter.BRACKET), 19 | new AttributesDescriptor("Keyword", USDSyntaxHighlighter.KEYWORD), 20 | new AttributesDescriptor("String", USDSyntaxHighlighter.STRING), 21 | new AttributesDescriptor("Number", USDSyntaxHighlighter.NUMBER), 22 | new AttributesDescriptor("Line Comment", USDSyntaxHighlighter.LINE_COMMENT), 23 | new AttributesDescriptor("Block Comment", USDSyntaxHighlighter.BLOCK_COMMENT), 24 | new AttributesDescriptor("Identifier", USDSyntaxHighlighter.IDENTIFIER), 25 | new AttributesDescriptor("Prim Name", USDSyntaxHighlighter.PRIM_NAME), 26 | new AttributesDescriptor("Asset Reference", USDSyntaxHighlighter.ASSET_REFERENCE), 27 | new AttributesDescriptor("Path Reference", USDSyntaxHighlighter.PATH_REFERENCE), 28 | new AttributesDescriptor("Type", USDSyntaxHighlighter.TYPE) 29 | }; 30 | 31 | @Nullable 32 | @Override 33 | public Icon getIcon() { 34 | return USDIcons.FILE; 35 | } 36 | 37 | @NotNull 38 | @Override 39 | public SyntaxHighlighter getHighlighter() { 40 | return new USDSyntaxHighlighter(); 41 | } 42 | 43 | @NotNull 44 | @Override 45 | public String getDemoText() { 46 | // TODO: replace with custom demo text 47 | return "#usda 1.0\n" + 48 | "\n" + 49 | "(\n" + 50 | " upAxis = \"Y\"\n" + 51 | " doc = \"\"\"This layer represents the various geometric forms that curves\n" + 52 | " may be used to represent.\"\"\"\n" + 53 | ")\n" + 54 | "\n" + 55 | "\n" + 56 | "def Xform \"Linear\" {\n" + 57 | " uniform token[] xformOpOrder = [\"xformOp:translate\"]\n" + 58 | " float3 xformOp:translate = (0, 9, 0)\n" + 59 | " def Scope \"Tubes\"{\n" + 60 | " def BasisCurves \"ConstantWidth\" (){\n" + 61 | " uniform token[] xformOpOrder = [\"xformOp:translate\"]\n" + 62 | " float3 xformOp:translate = (3, 0, 0)\n" + 63 | "\n" + 64 | " uniform token type = \"linear\"\n" + 65 | " int[] curveVertexCounts = [7]\n" + 66 | " point3f[] points = [(0, 0, 0), (1, 1, 0), (1, 2, 0), (0, 3, 0), (-1, 4, 0), (-1, 5, 0), (0, 6, 0)]\n" + 67 | " float[] widths = [.5] (interpolation = \"constant\")\n" + 68 | " color3f[] primvars:displayColor = [(1, 0, 0)]\n" + 69 | " }\n" + 70 | " def BasisCurves \"VaryingWidth\" (){\n" + 71 | " uniform token[] xformOpOrder = [\"xformOp:translate\"]\n" + 72 | " float3 xformOp:translate = (6, 0, 0)\n" + 73 | "\n" + 74 | " uniform token type = \"linear\"\n" + 75 | " int[] curveVertexCounts = [7]\n" + 76 | " point3f[] points = [(0, 0, 0), (1, 1, 0), (1, 2, 0), (0, 3, 0), (-1, 4, 0), (-1, 5, 0), (0, 6, 0)]\n" + 77 | " float[] widths = [0, .5, .5, .8, .5, .5, 0] (interpolation = \"varying\")\n" + 78 | " color3f[] primvars:displayColor = [(0, 0, 1)]\n" + 79 | " }\n" + 80 | " }\n" + 81 | " def Scope \"Ribbons\"{\n" + 82 | " def BasisCurves \"VaryingWidth\" (){\n" + 83 | " uniform token[] xformOpOrder = [\"xformOp:translate\"]\n" + 84 | " float3 xformOp:translate = (12, 0, 0)\n" + 85 | "\n" + 86 | " uniform token type = \"linear\"\n" + 87 | " int[] curveVertexCounts = [7]\n" + 88 | " point3f[] points = [(0, 0, 0), (1, 1, 0), (1, 2, 0), (0, 3, 0), (-1, 4, 0), (-1, 5, 0), (0, 6, 0)]\n" + 89 | " float[] widths = [0, .5, .5, .8, .5, .5, 0] (interpolation = \"varying\")\n" + 90 | " normal3f[] normals = [(1, 0, 0), (.98, 0, .44), (.98, 0, .44), (.707, 0, .707), (.98, 0, .44), (.98, 0, .44), (1, 0, 0)] (interpolation = \"varying\")\n" + 91 | " color3f[] primvars:displayColor = [(0, 1, 0)]\n" + 92 | " }\n" + 93 | " def BasisCurves \"ConstantWidth\" (){\n" + 94 | " uniform token[] xformOpOrder = [\"xformOp:translate\"]\n" + 95 | " float3 xformOp:translate = (15, 0, 0)\n" + 96 | "\n" + 97 | " uniform token type = \"linear\"\n" + 98 | " int[] curveVertexCounts = [7]\n" + 99 | " point3f[] points = [(0, 0, 0), (1, 1, 0), (1, 2, 0), (0, 3, 0), (-1, 4, 0), (-1, 5, 0), (0, 6, 0)]\n" + 100 | " float[] widths = [.5] (interpolation = \"constant\")\n" + 101 | " normal3f[] normals = [(1, 0, 0), (.98, 0, .44), (.98, 0, .44), (.707, 0, .707), (.98, 0, .44), (.98, 0, .44), (1, 0, 0)] (interpolation = \"varying\")\n" + 102 | " color3f[] primvars:displayColor = [(1, 1, 1)]\n" + 103 | " }\n" + 104 | " }\n" + 105 | "}"; 106 | } 107 | 108 | @Nullable 109 | @Override 110 | public Map getAdditionalHighlightingTagToDescriptorMap() { 111 | return null; 112 | } 113 | 114 | @NotNull 115 | @Override 116 | public AttributesDescriptor[] getAttributeDescriptors() { 117 | return DESCRIPTORS; 118 | } 119 | 120 | @NotNull 121 | @Override 122 | public ColorDescriptor[] getColorDescriptors() { 123 | return ColorDescriptor.EMPTY_ARRAY; 124 | } 125 | 126 | @NotNull 127 | @Override 128 | public String getDisplayName() { 129 | return "USD"; 130 | } 131 | } 132 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/lexer/_USDLexer.flex: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.lexer; 2 | 3 | import com.intellij.lexer.FlexLexer; 4 | import com.intellij.psi.tree.IElementType; 5 | 6 | import static com.intellij.psi.TokenType.BAD_CHARACTER; 7 | import static com.intellij.psi.TokenType.WHITE_SPACE; 8 | import static com.justint.usdidea.lang.psi.USDTypes.*; 9 | 10 | %% 11 | 12 | %{ 13 | public _USDLexer() { 14 | this((java.io.Reader)null); 15 | } 16 | %} 17 | 18 | %public 19 | %class _USDLexer 20 | %implements FlexLexer 21 | %function advance 22 | %type IElementType 23 | %unicode 24 | 25 | EOL=\R 26 | WHITE_SPACE=\s+ 27 | 28 | USDDECLARATION=#[^\r\n]* 29 | STRING=\"\"\"[^(\"\"\")]*\"\"\"|\"[^\"]*\"|'[^']*' 30 | NUMBER=(\+|\-)?[:digit:]+ 31 | FLOATNUMBER=(\+|\-)?[:digit:]+(\.[:digit:]+)?([eE][+\-][:digit:]+)? 32 | ALPHA=[a-zA-Z_0-9]+ 33 | COMMENT="//".* 34 | BLOCKCOMMENT="/"\*([^\*]|(\*+[^\*/]))*(\*+"/")? 35 | ASSETREFERENCE=@([^@]+)?@|@@@(([^@]|@{1,2}[^@]|\\@@@)+)?(@{0,2})@@@ 36 | PATHREFERENCE=\<[^\<\>\r\n]*\> 37 | 38 | %% 39 | { 40 | {WHITE_SPACE} { return WHITE_SPACE; } 41 | 42 | "add" { return ADD; } 43 | "append" { return APPEND; } 44 | "assetInfo" { return ASSETINFO; } 45 | "attributes" { return ATTRIBUTES; } 46 | "class" { return CLASS; } 47 | "config" { return CONFIG; } 48 | "connect" { return CONNECT; } 49 | "custom" { return CUSTOM; } 50 | "customData" { return CUSTOMDATA; } 51 | "default" { return DEFAULT; } 52 | "def" { return DEF; } 53 | "delete" { return DELETE; } 54 | "dictionary" { return DICTIONARY; } 55 | "displayUnit" { return DISPLAYUNIT; } 56 | "doc" { return DOC; } 57 | "inherits" { return INHERITS; } 58 | "kind" { return KIND; } 59 | "mapper" { return MAPPER; } 60 | "nameChildren" { return NAMECHILDREN; } 61 | "None" { return NONE; } 62 | "offset" { return OFFSET; } 63 | "over" { return OVER; } 64 | "payload" { return PAYLOAD; } 65 | "permission" { return PERMISSION; } 66 | "prefixSubstitutions" { return PREFIXSUBSTITUTIONS; } 67 | "prepend" { return PREPEND; } 68 | "properties" { return PROPERTIES; } 69 | "references" { return REFERENCES; } 70 | "relocates" { return RELOCATES; } 71 | "rel" { return REL; } 72 | "reorder" { return REORDER; } 73 | "rootPrims" { return ROOTPRIMS; } 74 | "subLayers" { return SUBLAYERS; } 75 | "suffixSubstitutions" { return SUFFIXSUBSTITUTIONS; } 76 | "specializes" { return SPECIALIZES; } 77 | "symmetryArguments" { return SYMMETRYARGUMENTS; } 78 | "symmetryFunction" { return SYMMETRYFUNCTION; } 79 | "uniform" { return UNIFORM; } 80 | "variantSet" { return VARIANTSET; } 81 | "variantSets" { return VARIANTSETS; } 82 | "variants" { return VARIANTS; } 83 | "varying" { return VARYING; } 84 | "interpolation" { return INTERPOLATION; } 85 | "." { return PERIOD; } 86 | "," { return COMMA; } 87 | ":" { return COLON; } 88 | "=" { return EQUALS; } 89 | "[" { return LEFTBRACKET; } 90 | "]" { return RIGHTBRACKET; } 91 | "(" { return LEFTPARENS; } 92 | ")" { return RIGHTPARENS; } 93 | "{" { return LEFTBRACE; } 94 | "}" { return RIGHTBRACE; } 95 | "true" { return TRUE; } 96 | "false" { return FALSE; } 97 | "bool" { return BOOLTYPE; } 98 | "uchar" { return UCHARTYPE; } 99 | "int" { return INTTYPE; } 100 | "uint" { return UINTTYPE; } 101 | "int64" { return INT64TYPE; } 102 | "uint64" { return UINT64TYPE; } 103 | "half" { return HALFTYPE; } 104 | "float" { return FLOATTYPE; } 105 | "double" { return DOUBLETYPE; } 106 | "string" { return STRINGTYPE; } 107 | "token" { return TOKENTYPE; } 108 | "asset" { return ASSETTYPE; } 109 | "matrix2d" { return MATRIX2DTYPE; } 110 | "matrix3d" { return MATRIX3DTYPE; } 111 | "matrix4d" { return MATRIX4DTYPE; } 112 | "quatd" { return QUATDTYPE; } 113 | "quatf" { return QUATFTYPE; } 114 | "quath" { return QUATHTYPE; } 115 | "double2" { return DOUBLE2TYPE; } 116 | "float2" { return FLOAT2TYPE; } 117 | "half2" { return HALF2TYPE; } 118 | "int2" { return INT2TYPE; } 119 | "double3" { return DOUBLE3TYPE; } 120 | "float3" { return FLOAT3TYPE; } 121 | "half3" { return HALF3TYPE; } 122 | "int3" { return INT3TYPE; } 123 | "double4" { return DOUBLE4TYPE; } 124 | "float4" { return FLOAT4TYPE; } 125 | "half4" { return HALF4TYPE; } 126 | "int4" { return INT4TYPE; } 127 | "point3d" { return POINT3DTYPE; } 128 | "point3f" { return POINT3FTYPE; } 129 | "point3h" { return POINT3HTYPE; } 130 | "normal3d" { return NORMAL3DTYPE; } 131 | "normal3f" { return NORMAL3FTYPE; } 132 | "normal3h" { return NORMAL3HTYPE; } 133 | "vector3d" { return VECTOR3DTYPE; } 134 | "vector3f" { return VECTOR3FTYPE; } 135 | "vector3h" { return VECTOR3HTYPE; } 136 | "color3d" { return COLOR3DTYPE; } 137 | "color3f" { return COLOR3FTYPE; } 138 | "color3h" { return COLOR3HTYPE; } 139 | "color4d" { return COLOR4DTYPE; } 140 | "color4f" { return COLOR4FTYPE; } 141 | "color4h" { return COLOR4HTYPE; } 142 | "frame4d" { return FRAME4DTYPE; } 143 | "texCoord2h" { return TEXCOORD2HTYPE; } 144 | "texCoord2d" { return TEXCOORD2DTYPE; } 145 | "texCoord2f" { return TEXCOORD2FTYPE; } 146 | "texCoord3h" { return TEXCOORD3HTYPE; } 147 | "texCoord3d" { return TEXCOORD3DTYPE; } 148 | "texCoord3f" { return TEXCOORD3FTYPE; } 149 | "Transform" { return TRANSFORMTYPE; } 150 | "PointIndex" { return POINTINDEXTYPE; } 151 | "EdgeIndex" { return EDGEINDEXTYPE; } 152 | "FaceIndex" { return FACEINDEXTYPE; } 153 | 154 | {USDDECLARATION} { return USDDECLARATION; } 155 | {STRING} { return STRING; } 156 | {NUMBER} { return NUMBER; } 157 | {FLOATNUMBER} { return FLOATNUMBER; } 158 | {ALPHA} { return ALPHA; } 159 | {COMMENT} { return COMMENT; } 160 | {BLOCKCOMMENT} { return BLOCKCOMMENT; } 161 | {ASSETREFERENCE} { return ASSETREFERENCE; } 162 | {PATHREFERENCE} { return PATHREFERENCE; } 163 | 164 | } 165 | 166 | [^] { return BAD_CHARACTER; } 167 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/lexer/USDLexer.flex: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.lexer; 2 | 3 | import com.intellij.lexer.FlexLexer; 4 | import com.intellij.psi.tree.IElementType; 5 | 6 | import static com.intellij.psi.TokenType.BAD_CHARACTER; 7 | import static com.intellij.psi.TokenType.WHITE_SPACE; 8 | import static com.justint.usdidea.lang.psi.USDTypes.*; 9 | 10 | %% 11 | 12 | %{ 13 | public USDLexer() { 14 | this((java.io.Reader)null); 15 | } 16 | %} 17 | 18 | %public 19 | %class USDLexer 20 | %implements FlexLexer 21 | %function advance 22 | %type IElementType 23 | %unicode 24 | 25 | EOL=\r|\n|\r\n 26 | WHITE_SPACE=\s+ 27 | 28 | STRING=\"\"\"[^\"]*\"\"\"|\"[^\"]*\"|'[^']*' 29 | NUMBER=(\+|\-)?[:digit:]+ 30 | FLOATNUMBER=(\+|\-)?[:digit:]+(\.[:digit:]+)?([eE][+\-][:digit:]+)? 31 | ALPHA=[a-zA-Z_0-9]+ 32 | COMMENT="//"[^\r\n]* 33 | BLOCKCOMMENT="/"\*([^\*]|(\*+[^\*/]))*(\*+"/")? 34 | 35 | USDDECLARATION=#[^\r\n]* 36 | 37 | IDENTIFIER=[:alpha:](:alpha:|:number:)* 38 | NAMESPACED_IDENTIFIER={IDENTIFIER}(\:{IDENTIFIER}*)+ 39 | 40 | ASSETREFERENCE=@([^@]+)?@|@@@(([^@]|@{1,2}[^@]|\\@@@)+)?(@{0,2})@@@ 41 | PATHREFERENCE=\<[^\<\>\r\n]*\> 42 | 43 | %% 44 | 45 | 46 | { 47 | {EOL}|{WHITE_SPACE} { return WHITE_SPACE; } 48 | 49 | "add" { return ADD; } 50 | "append" { return APPEND; } 51 | "assetInfo" { return ASSETINFO; } 52 | "attributes" { return ATTRIBUTES; } 53 | "class" { return CLASS; } 54 | "config" { return CONFIG; } 55 | "connect" { return CONNECT; } 56 | "custom" { return CUSTOM; } 57 | "customData" { return CUSTOMDATA; } 58 | "default" { return DEFAULT; } 59 | "def" { return DEF; } 60 | "delete" { return DELETE; } 61 | "dictionary" { return DICTIONARY; } 62 | "displayUnit" { return DISPLAYUNIT; } 63 | "doc" { return DOC; } 64 | "inherits" { return INHERITS; } 65 | "kind" { return KIND; } 66 | "mapper" { return MAPPER; } 67 | "nameChildren" { return NAMECHILDREN; } 68 | "None" { return NONE; } 69 | "offset" { return OFFSET; } 70 | "over" { return OVER; } 71 | "payload" { return PAYLOAD; } 72 | "permission" { return PERMISSION; } 73 | "prefixSubstitutions" { return PREFIXSUBSTITUTIONS; } 74 | "prepend" { return PREPEND; } 75 | "properties" { return PROPERTIES; } 76 | "references" { return REFERENCES; } 77 | "relocates" { return RELOCATES; } 78 | "rel" { return REL; } 79 | "reorder" { return REORDER; } 80 | "rootPrims" { return ROOTPRIMS; } 81 | "subLayers" { return SUBLAYERS; } 82 | "suffixSubstitutions" { return SUFFIXSUBSTITUTIONS; } 83 | "specializes" { return SPECIALIZES; } 84 | "symmetryArguments" { return SYMMETRYARGUMENTS; } 85 | "symmetryFunction" { return SYMMETRYFUNCTION; } 86 | "uniform" { return UNIFORM; } 87 | "variantSet" { return VARIANTSET; } 88 | "variantSets" { return VARIANTSETS; } 89 | "variants" { return VARIANTS; } 90 | "varying" { return VARYING; } 91 | "interpolation" { return INTERPOLATION; } 92 | "." { return PERIOD; } 93 | "," { return COMMA; } 94 | ":" { return COLON; } 95 | "=" { return EQUALS; } 96 | "[" { return LEFTBRACKET; } 97 | "]" { return RIGHTBRACKET; } 98 | "(" { return LEFTPARENS; } 99 | ")" { return RIGHTPARENS; } 100 | "{" { return LEFTBRACE; } 101 | "}" { return RIGHTBRACE; } 102 | "true" { return TRUE; } 103 | "false" { return FALSE; } 104 | "bool" { return BOOLTYPE; } 105 | "uchar" { return UCHARTYPE; } 106 | "int" { return INTTYPE; } 107 | "uint" { return UINTTYPE; } 108 | "int64" { return INT64TYPE; } 109 | "uint64" { return UINT64TYPE; } 110 | "half" { return HALFTYPE; } 111 | "float" { return FLOATTYPE; } 112 | "double" { return DOUBLETYPE; } 113 | "string" { return STRINGTYPE; } 114 | "token" { return TOKENTYPE; } 115 | "asset" { return ASSETTYPE; } 116 | "matrix2d" { return MATRIX2DTYPE; } 117 | "matrix3d" { return MATRIX3DTYPE; } 118 | "matrix4d" { return MATRIX4DTYPE; } 119 | "quatd" { return QUATDTYPE; } 120 | "quatf" { return QUATFTYPE; } 121 | "quath" { return QUATHTYPE; } 122 | "double2" { return DOUBLE2TYPE; } 123 | "float2" { return FLOAT2TYPE; } 124 | "half2" { return HALF2TYPE; } 125 | "int2" { return INT2TYPE; } 126 | "double3" { return DOUBLE3TYPE; } 127 | "float3" { return FLOAT3TYPE; } 128 | "half3" { return HALF3TYPE; } 129 | "int3" { return INT3TYPE; } 130 | "double4" { return DOUBLE4TYPE; } 131 | "float4" { return FLOAT4TYPE; } 132 | "half4" { return HALF4TYPE; } 133 | "int4" { return INT4TYPE; } 134 | "point3d" { return POINT3DTYPE; } 135 | "point3f" { return POINT3FTYPE; } 136 | "point3h" { return POINT3HTYPE; } 137 | "normal3d" { return NORMAL3DTYPE; } 138 | "normal3f" { return NORMAL3FTYPE; } 139 | "normal3h" { return NORMAL3HTYPE; } 140 | "vector3d" { return VECTOR3DTYPE; } 141 | "vector3f" { return VECTOR3FTYPE; } 142 | "vector3h" { return VECTOR3HTYPE; } 143 | "color3d" { return COLOR3DTYPE; } 144 | "color3f" { return COLOR3FTYPE; } 145 | "color3h" { return COLOR3HTYPE; } 146 | "color4d" { return COLOR4DTYPE; } 147 | "color4f" { return COLOR4FTYPE; } 148 | "color4h" { return COLOR4HTYPE; } 149 | "frame4d" { return FRAME4DTYPE; } 150 | "texCoord2h" { return TEXCOORD2HTYPE; } 151 | "texCoord2d" { return TEXCOORD2DTYPE; } 152 | "texCoord2f" { return TEXCOORD2FTYPE; } 153 | "texCoord3h" { return TEXCOORD3HTYPE; } 154 | "texCoord3d" { return TEXCOORD3DTYPE; } 155 | "texCoord3f" { return TEXCOORD3FTYPE; } 156 | "Transform" { return TRANSFORMTYPE; } 157 | "PointIndex" { return POINTINDEXTYPE; } 158 | "EdgeIndex" { return EDGEINDEXTYPE; } 159 | "FaceIndex" { return FACEINDEXTYPE; } 160 | 161 | {USDDECLARATION} { return USDDECLARATION; } 162 | 163 | {IDENTIFIER} { return IDENTIFIER; } 164 | {NAMESPACED_IDENTIFIER} { return NAMESPACED_IDENTIFIER; } 165 | 166 | {STRING} { return STRING; } 167 | 168 | "-inf"|{NUMBER} { return NUMBER; } 169 | {FLOATNUMBER} { return FLOATNUMBER; } 170 | 171 | {ALPHA} { return ALPHA; } 172 | {COMMENT} { return COMMENT; } 173 | {BLOCKCOMMENT} { return BLOCKCOMMENT; } 174 | {ASSETREFERENCE} { return ASSETREFERENCE; } 175 | {PATHREFERENCE} { return PATHREFERENCE; } 176 | 177 | } 178 | 179 | [^] { return BAD_CHARACTER; } 180 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/USDStructureViewElement.java: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang; 2 | 3 | import com.intellij.ide.projectView.PresentationData; 4 | import com.intellij.ide.structureView.StructureViewTreeElement; 5 | import com.intellij.ide.util.treeView.smartTree.SortableTreeElement; 6 | import com.intellij.ide.util.treeView.smartTree.TreeElement; 7 | import com.intellij.navigation.ItemPresentation; 8 | import com.intellij.psi.NavigatablePsiElement; 9 | import com.intellij.psi.PsiElement; 10 | import com.intellij.psi.util.PsiTreeUtil; 11 | import com.justint.usdidea.lang.psi.*; 12 | import com.justint.usdidea.lang.psi.impl.*; 13 | import org.jetbrains.annotations.NotNull; 14 | 15 | import java.util.*; 16 | import java.util.function.Function; 17 | 18 | public class USDStructureViewElement implements StructureViewTreeElement, SortableTreeElement { 19 | private final NavigatablePsiElement myElement; 20 | 21 | private final Map, Function> psiElementMethodMap = Map.of( 22 | USDFile.class, this::getUSDFileChildren, 23 | usdPrimSpecImpl.class, this::getPrimSpecChildren, 24 | usdMetadatumImpl.class, this::getMetadatumChildren, 25 | usdDictItemImpl.class, this::getDictItemChildren, 26 | usdPropertySpecImpl.class, this::getPropertySpecChildren, 27 | usdRelationshipPropertyImpl.class, this::getRelationshipPropertyChildren, 28 | usdVariantSetKeyImpl.class, this::getVariantSetKeyChildren 29 | ); 30 | 31 | 32 | public USDStructureViewElement(NavigatablePsiElement element) { 33 | this.myElement = element; 34 | } 35 | 36 | @Override 37 | public Object getValue() { 38 | return myElement; 39 | } 40 | 41 | @NotNull 42 | @Override 43 | public String getAlphaSortKey() { 44 | String name = myElement.getName(); 45 | return name != null ? name : ""; 46 | } 47 | 48 | @NotNull 49 | @Override 50 | public ItemPresentation getPresentation() { 51 | ItemPresentation presentation = myElement.getPresentation(); 52 | return presentation != null ? presentation : new PresentationData(); 53 | } 54 | 55 | @NotNull 56 | private TreeElement[] getUSDFileChildren(NavigatablePsiElement element) { 57 | List treeElements = new ArrayList<>(); 58 | // Find any metadata first 59 | usdMetadata metadata = PsiTreeUtil.getChildOfType(element, usdMetadata.class); 60 | if (metadata != null) { 61 | for (usdMetadatum metadatum : metadata.getMetadatumList()) { 62 | treeElements.add(new USDStructureViewElement((usdMetadatumImpl) metadatum)); 63 | } 64 | } 65 | 66 | // Find all prim specs, include them 67 | List prims = PsiTreeUtil.getChildrenOfTypeAsList(element, usdPrimSpec.class); 68 | for (usdPrimSpec prim : prims) { 69 | treeElements.add(new USDStructureViewElement((usdPrimSpecImpl) prim)); 70 | } 71 | return treeElements.toArray(new TreeElement[0]); 72 | } 73 | 74 | @NotNull 75 | private TreeElement[] getPrimSpecChildren(NavigatablePsiElement element) { 76 | List treeElements = new ArrayList<>(); 77 | // Find metadata children first 78 | usdMetadata metadata = ((usdPrimSpec)element).getMetadata(); 79 | if (metadata != null) { 80 | for (usdMetadatum metadatum : metadata.getMetadatumList()) { 81 | treeElements.add(new USDStructureViewElement((usdMetadatumImpl) metadatum)); 82 | } 83 | } 84 | 85 | // Grab prim body children next 86 | usdBody body = ((usdPrimSpec)element).getBody(); 87 | if (body != null) { 88 | for (PsiElement child : body.getChildren()) { 89 | if (child instanceof usdPrimSpec) { 90 | treeElements.add(new USDStructureViewElement((usdPrimSpecImpl) child)); 91 | } else if (child instanceof usdPropertySpec) { 92 | treeElements.add(new USDStructureViewElement((usdPropertySpecImpl) child)); 93 | } 94 | } 95 | } 96 | return treeElements.toArray(new TreeElement[0]); 97 | } 98 | 99 | @NotNull 100 | private TreeElement[] getMetadatumChildren(NavigatablePsiElement element) { 101 | List treeElements = new ArrayList<>(); 102 | 103 | usdMetadataValue metadataValue = ((usdMetadatum)element).getMetadataValue(); 104 | if (metadataValue != null) { 105 | if (metadataValue.getItem().getDict() != null) { 106 | usdDict dictionary = metadataValue.getItem().getDict(); 107 | for (usdDictItem dictItem : dictionary.getDictItemList()) { 108 | treeElements.add(new USDStructureViewElement((usdDictItemImpl) dictItem)); 109 | } 110 | } 111 | } 112 | return treeElements.toArray(new TreeElement[0]); 113 | } 114 | 115 | @NotNull 116 | private TreeElement[] getDictItemChildren(NavigatablePsiElement element) { 117 | // The item may have children dictionaries 118 | if (((usdDictItem) element).isDictionary()) { 119 | List treeElements = new ArrayList<>(); 120 | usdDict childDictionary = ((usdDictItem) element).getDictValue().getItem().getDict(); 121 | assert childDictionary != null; 122 | for (usdDictItem dictItem : childDictionary.getDictItemList()) { 123 | treeElements.add(new USDStructureViewElement((usdDictItemImpl) dictItem)); 124 | } 125 | return treeElements.toArray(new TreeElement[0]); 126 | } else return EMPTY_ARRAY; 127 | } 128 | 129 | @NotNull 130 | private TreeElement[] getPropertySpecChildren(NavigatablePsiElement element) { 131 | usdRelationshipProperty relationshipProperty = PsiTreeUtil.findChildOfType(element, usdRelationshipProperty.class); 132 | if (relationshipProperty != null) { 133 | return getRelationshipPropertyChildren((NavigatablePsiElement) relationshipProperty); 134 | } else return EMPTY_ARRAY; 135 | } 136 | 137 | @NotNull 138 | private TreeElement[] getRelationshipPropertyChildren(NavigatablePsiElement element) { 139 | usdVariantSetBody variantSetBody = ((usdRelationshipProperty) element).getVariantSetBody(); 140 | if (variantSetBody != null) { 141 | List treeElements = new ArrayList<>(); 142 | for (usdVariantSetKey variantSetKey : variantSetBody.getVariantSetKeyList()) { 143 | treeElements.add(new USDStructureViewElement((usdVariantSetKeyImpl) variantSetKey)); 144 | } 145 | return treeElements.toArray(new TreeElement[0]); 146 | } else return EMPTY_ARRAY; 147 | } 148 | 149 | @NotNull 150 | private TreeElement[] getVariantSetKeyChildren(NavigatablePsiElement element) { 151 | usdVariantSetItemBody body = ((usdVariantSetKey)element).getBody(); 152 | 153 | // Treat the body of the variant as a new file, and grab all its children as so: 154 | return getUSDFileChildren((NavigatablePsiElement) body); 155 | } 156 | 157 | @NotNull 158 | @Override 159 | public TreeElement[] getChildren() { 160 | Class elementType = myElement.getClass(); 161 | if (psiElementMethodMap.containsKey(elementType)) { 162 | return psiElementMethodMap.get(elementType).apply(myElement); 163 | } 164 | else return EMPTY_ARRAY; 165 | // Debug info: 166 | // else { 167 | // System.out.println(myElement.getName() + " -- type: " + myElement.getClass()); 168 | // for (PsiElement child : myElement.getChildren()) { 169 | // System.out.println("\t" + child.getText() + " -- type: " + child.getClass()); 170 | // } 171 | // } 172 | } 173 | 174 | @Override 175 | public void navigate(boolean requestFocus) { 176 | myElement.navigate(requestFocus); 177 | } 178 | 179 | @Override 180 | public boolean canNavigate() { 181 | return myElement.canNavigate(); 182 | } 183 | 184 | @Override 185 | public boolean canNavigateToSource() { 186 | return myElement.canNavigateToSource(); 187 | } 188 | } 189 | -------------------------------------------------------------------------------- /src/main/java/com/justint/usdidea/lang/lexer/USDHighlighterLexer.flex: -------------------------------------------------------------------------------- 1 | package com.justint.usdidea.lang.lexer; 2 | 3 | import com.intellij.lexer.FlexLexer; 4 | import com.intellij.psi.tree.IElementType; 5 | 6 | import static com.intellij.psi.TokenType.BAD_CHARACTER; 7 | import static com.intellij.psi.TokenType.WHITE_SPACE; 8 | import static com.justint.usdidea.lang.psi.USDTypes.*; 9 | 10 | %% 11 | 12 | %{ 13 | public USDHighlighterLexer() { 14 | this((java.io.Reader)null); 15 | } 16 | %} 17 | 18 | %public 19 | %class USDHighlighterLexer 20 | %implements FlexLexer 21 | %function advance 22 | %type IElementType 23 | %unicode 24 | 25 | EOL=\r|\n|\r\n 26 | WHITE_SPACE=\s+ 27 | 28 | STRING=\"\"\"[^\"]*\"\"\"|\"[^\"]*\"|'[^']*' 29 | NUMBER=(\+|\-)?[:digit:]+ 30 | FLOATNUMBER=(\+|\-)?[:digit:]+(\.[:digit:]+)?([eE][+\-][:digit:]+)? 31 | ALPHA=[a-zA-Z_0-9]+ 32 | COMMENT="//"[^\r\n]* 33 | BLOCKCOMMENT="/"\*([^\*]|(\*+[^\*/]))*(\*+"/")? 34 | 35 | USDDECLARATION=#[^\r\n]* 36 | 37 | IDENTIFIER=[:alpha:](:alpha:|:number:)* 38 | NAMESPACED_IDENTIFIER={IDENTIFIER}(\:{IDENTIFIER}*)+ 39 | 40 | ASSETREFERENCE=@([^@]+)?@|@@@(([^@]|@{1,2}[^@]|\\@@@)+)?(@{0,2})@@@ 41 | PATHREFERENCE=\<[^\<\>\r\n]*\> 42 | 43 | %state SPECIFIER, METADATA 44 | 45 | %% 46 | 47 | // TODO: Implement multi-line comments 48 | 49 | { 50 | "def" { yybegin(SPECIFIER); 51 | return DEF; } 52 | "over" { yybegin(SPECIFIER); 53 | return OVER; } 54 | "class" { yybegin(SPECIFIER); 55 | return CLASS; } 56 | "{" { return LEFTBRACE; } 57 | ")" { return RIGHTPARENS; } 58 | "}" { return RIGHTBRACE; } 59 | } 60 | 61 | { 62 | "(" { yybegin(METADATA); 63 | return LEFTPARENS; } 64 | } 65 | 66 | { 67 | {STRING} { return STRING; } 68 | } 69 | 70 | { 71 | {EOL}|{WHITE_SPACE} { return WHITE_SPACE; } 72 | "add" { return ADD; } 73 | "append" { return APPEND; } 74 | "assetInfo" { return ASSETINFO; } 75 | "attributes" { return ATTRIBUTES; } 76 | "config" { return CONFIG; } 77 | "connect" { return CONNECT; } 78 | "custom" { return CUSTOM; } 79 | "customData" { return CUSTOMDATA; } 80 | "default" { return DEFAULT; } 81 | "delete" { return DELETE; } 82 | "dictionary" { return DICTIONARY; } 83 | "displayUnit" { return DISPLAYUNIT; } 84 | "doc" { return DOC; } 85 | "inherits" { return INHERITS; } 86 | "kind" { return KIND; } 87 | "mapper" { return MAPPER; } 88 | "nameChildren" { return NAMECHILDREN; } 89 | "None" { return NONE; } 90 | "offset" { return OFFSET; } 91 | "payload" { return PAYLOAD; } 92 | "permission" { return PERMISSION; } 93 | "prefixSubstitutions" { return PREFIXSUBSTITUTIONS; } 94 | "prepend" { return PREPEND; } 95 | "properties" { return PROPERTIES; } 96 | "references" { return REFERENCES; } 97 | "relocates" { return RELOCATES; } 98 | "rel" { return REL; } 99 | "reorder" { return REORDER; } 100 | "rootPrims" { return ROOTPRIMS; } 101 | "subLayers" { return SUBLAYERS; } 102 | "suffixSubstitutions" { return SUFFIXSUBSTITUTIONS; } 103 | "specializes" { return SPECIALIZES; } 104 | "symmetryArguments" { return SYMMETRYARGUMENTS; } 105 | "symmetryFunction" { return SYMMETRYFUNCTION; } 106 | "uniform" { return UNIFORM; } 107 | "variantSet" { return VARIANTSET; } 108 | "variantSets" { return VARIANTSETS; } 109 | "variants" { return VARIANTS; } 110 | "varying" { return VARYING; } 111 | "interpolation" { return INTERPOLATION; } 112 | "." { return PERIOD; } 113 | "," { return COMMA; } 114 | ":" { return COLON; } 115 | "=" { return EQUALS; } 116 | "[" { return LEFTBRACKET; } 117 | "]" { return RIGHTBRACKET; } 118 | "true" { return TRUE; } 119 | "false" { return FALSE; } 120 | "bool" { return BOOLTYPE; } 121 | "uchar" { return UCHARTYPE; } 122 | "int" { return INTTYPE; } 123 | "uint" { return UINTTYPE; } 124 | "int64" { return INT64TYPE; } 125 | "uint64" { return UINT64TYPE; } 126 | "half" { return HALFTYPE; } 127 | "float" { return FLOATTYPE; } 128 | "double" { return DOUBLETYPE; } 129 | "string" { return STRINGTYPE; } 130 | "token" { return TOKENTYPE; } 131 | "asset" { return ASSETTYPE; } 132 | "matrix2d" { return MATRIX2DTYPE; } 133 | "matrix3d" { return MATRIX3DTYPE; } 134 | "matrix4d" { return MATRIX4DTYPE; } 135 | "quatd" { return QUATDTYPE; } 136 | "quatf" { return QUATFTYPE; } 137 | "quath" { return QUATHTYPE; } 138 | "double2" { return DOUBLE2TYPE; } 139 | "float2" { return FLOAT2TYPE; } 140 | "half2" { return HALF2TYPE; } 141 | "int2" { return INT2TYPE; } 142 | "double3" { return DOUBLE3TYPE; } 143 | "float3" { return FLOAT3TYPE; } 144 | "half3" { return HALF3TYPE; } 145 | "int3" { return INT3TYPE; } 146 | "double4" { return DOUBLE4TYPE; } 147 | "float4" { return FLOAT4TYPE; } 148 | "half4" { return HALF4TYPE; } 149 | "int4" { return INT4TYPE; } 150 | "point3d" { return POINT3DTYPE; } 151 | "point3f" { return POINT3FTYPE; } 152 | "point3h" { return POINT3HTYPE; } 153 | "normal3d" { return NORMAL3DTYPE; } 154 | "normal3f" { return NORMAL3FTYPE; } 155 | "normal3h" { return NORMAL3HTYPE; } 156 | "vector3d" { return VECTOR3DTYPE; } 157 | "vector3f" { return VECTOR3FTYPE; } 158 | "vector3h" { return VECTOR3HTYPE; } 159 | "color3d" { return COLOR3DTYPE; } 160 | "color3f" { return COLOR3FTYPE; } 161 | "color3h" { return COLOR3HTYPE; } 162 | "color4d" { return COLOR4DTYPE; } 163 | "color4f" { return COLOR4FTYPE; } 164 | "color4h" { return COLOR4HTYPE; } 165 | "frame4d" { return FRAME4DTYPE; } 166 | "texCoord2h" { return TEXCOORD2HTYPE; } 167 | "texCoord2d" { return TEXCOORD2DTYPE; } 168 | "texCoord2f" { return TEXCOORD2FTYPE; } 169 | "texCoord3h" { return TEXCOORD3HTYPE; } 170 | "texCoord3d" { return TEXCOORD3DTYPE; } 171 | "texCoord3f" { return TEXCOORD3FTYPE; } 172 | "Transform" { return TRANSFORMTYPE; } 173 | "PointIndex" { return POINTINDEXTYPE; } 174 | "EdgeIndex" { return EDGEINDEXTYPE; } 175 | "FaceIndex" { return FACEINDEXTYPE; } 176 | 177 | "-inf"|{NUMBER} { return NUMBER; } 178 | {FLOATNUMBER} { return FLOATNUMBER; } 179 | 180 | {ALPHA} { return ALPHA; } 181 | {COMMENT} { return COMMENT; } 182 | {BLOCKCOMMENT} { return BLOCKCOMMENT; } 183 | {ASSETREFERENCE} { return ASSETREFERENCE; } 184 | {PATHREFERENCE} { return PATHREFERENCE; } 185 | } 186 | 187 | { 188 | {IDENTIFIER} { return TYPENAME; } 189 | {STRING} { return PRIM_NAME; } 190 | "{" { yybegin(YYINITIAL); 191 | return LEFTBRACE; } 192 | } 193 | 194 | { 195 | {IDENTIFIER}|{ALPHA} { return METADATA_KEY; } 196 | ")" { yybegin(YYINITIAL); 197 | return RIGHTPARENS; } 198 | } 199 | 200 | { 201 | {USDDECLARATION} { return USDDECLARATION; } 202 | 203 | {IDENTIFIER} { return IDENTIFIER; } 204 | {NAMESPACED_IDENTIFIER} { return NAMESPACED_IDENTIFIER; } 205 | } 206 | 207 | [^] { return BAD_CHARACTER; } 208 | --------------------------------------------------------------------------------