You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2016/12/17 10:28:42 UTC
[66/81] [abbrv] zest-java git commit: ZEST-195 ; Fix file names.
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/appliesTo/common/ZestAppliesToUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/appliesTo/common/ZestAppliesToUtil.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/appliesTo/common/ZestAppliesToUtil.java
deleted file mode 100644
index fd56b6b..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/appliesTo/common/ZestAppliesToUtil.java
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.appliesTo.common;
-
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.search.GlobalSearchScope;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Collections;
-import java.util.List;
-
-import static com.intellij.codeInsight.AnnotationUtil.findAnnotation;
-import static java.util.Collections.emptyList;
-import static org.apache.polygene.ide.plugin.idea.appliesTo.common.PolygeneAppliesToConstants.QUALIFIED_NAME_APPLIES_TO;
-import static org.apache.polygene.ide.plugin.idea.appliesTo.common.PolygeneAppliesToConstants.QUALIFIED_NAME_APPLIES_TO_FILTER;
-import static org.apache.polygene.ide.plugin.idea.common.psi.PsiAnnotationUtil.getAnnotationDefaultParameterValue;
-import static org.apache.polygene.ide.plugin.idea.common.psi.PsiAnnotationUtil.getClassReference;
-import static org.apache.polygene.ide.plugin.idea.common.psi.PsiClassUtil.getPSIClass;
-import static org.apache.polygene.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneAppliesToUtil
-{
- /**
- * @param searchContext Search context.
- * @return {@code AppliesToFilter} class given the search context. {@code null} if not found.
- * @since 0.1
- */
- @Nullable
- public static PsiClass getAppliesToFilterClass( @NotNull PsiElement searchContext )
- {
- Project project = searchContext.getProject();
- GlobalSearchScope searchScope = determineSearchScope( searchContext );
- return getAppliesToFilterClass( project, searchScope );
- }
-
- /**
- * @param project project.
- * @param scope search scope.
- * @return {@code AppliesToFilter} class given {@code project} and {@code scope} parameters.
- * Returns {@code null} if not found.
- * @since 0.1
- */
- @Nullable
- public static PsiClass getAppliesToFilterClass( @NotNull Project project,
- @Nullable GlobalSearchScope scope )
- {
- JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
- return scope == null ? null : psiFacade.findClass( QUALIFIED_NAME_APPLIES_TO_FILTER, scope );
- }
-
- /**
- * @param elementWithinJavaClass element within java class.
- * @return {@code @AppliesTo} annotation declaration of the class that contains the element.
- * Returns {@code null} if not found, or {@code element} is an invalid context.
- * @since 0.1
- */
- @Nullable
- public static PsiAnnotation getAppliesToAnnotation( @NotNull PsiElement elementWithinJavaClass )
- {
- PsiClass psiClass = getPSIClass( elementWithinJavaClass );
- return findAnnotation( psiClass, QUALIFIED_NAME_APPLIES_TO );
- }
-
- /**
- * @param annotation annotation to process.
- * @return {@code @AppliesTo} annotation value. Returns {@link Collections#emptyList()} if {@code annotation} is
- * {@code null} or annotation is not a {@code @AppliesTo} annotation.
- * @since 0.1
- */
- @NotNull
- public static List<PsiAnnotationMemberValue> getAppliesToAnnotationValue( @Nullable PsiAnnotation annotation )
- {
- if( annotation == null )
- {
- return emptyList();
- }
-
- String concernsQualifiedName = annotation.getQualifiedName();
- if( !QUALIFIED_NAME_APPLIES_TO.equals( concernsQualifiedName ) )
- {
- return emptyList();
- }
-
- return getAnnotationDefaultParameterValue( annotation );
- }
-
- /**
- * @param value annotation member value.
- * @return Applies to class reference given the {@code value} parameter. Returns {@code null} if it's not a
- * class reference.
- * @since 0.1
- */
- @Nullable
- public static PsiJavaCodeReferenceElement getAppliesToValueClassReference( @NotNull PsiAnnotationMemberValue value )
- {
- return getClassReference( value );
- }
-
- /**
- * Returns a {@code boolean} indicator whether the specified {@code psiClass} is implements
- * {@code AppliesToFilter} class.
- *
- * @param psiClass class to check.
- * @param appliesToFilterClass {@code AppliesToFilter} class.
- * @return {@code true} if {@code psiClass} implements {@code AppliesToFilter} class, {@code false} otherwise.
- * @since 0.1
- */
- public static boolean isAnAppliesToFilter( @NotNull PsiClass psiClass, @NotNull PsiClass appliesToFilterClass )
- {
- return !psiClass.isInterface() && psiClass.isInheritor( appliesToFilterClass, true );
- }
-
- private PolygeneAppliesToUtil()
- {
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/PolygeneCreateActionGroup.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/PolygeneCreateActionGroup.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/PolygeneCreateActionGroup.java
new file mode 100644
index 0000000..d53e0e1
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/PolygeneCreateActionGroup.java
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.common.actions;
+
+import com.intellij.ide.IdeView;
+import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.roots.ProjectFileIndex;
+import com.intellij.openapi.roots.ProjectRootManager;
+import com.intellij.psi.JavaDirectoryService;
+import com.intellij.psi.PsiDirectory;
+
+import static org.apache.polygene.ide.plugin.idea.common.resource.PolygeneResourceBundle.message;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneCreateActionGroup extends DefaultActionGroup
+{
+ public PolygeneCreateActionGroup()
+ {
+ super( message( "polygene.action.group.title" ), true );
+ getTemplatePresentation().setDescription( message( "polygene.action.group.description" ) );
+ }
+
+ public void update( AnActionEvent e )
+ {
+ Presentation presentation = e.getPresentation();
+ presentation.setVisible( shouldActionGroupVisible( e ) );
+ }
+
+ private boolean shouldActionGroupVisible( AnActionEvent e )
+ {
+ Module module = e.getData( LangDataKeys.MODULE );
+ if( module == null )
+ {
+ return false;
+ }
+
+ // TODO: Enable this once PolygeneFacet can be automatically added/removed
+// if( PolygeneFacet.getInstance( module ) == null )
+// {
+// return false;
+// }
+
+ // Are we on IDE View and under project source folder?
+ Project project = e.getData( PlatformDataKeys.PROJECT );
+ IdeView view = e.getData( LangDataKeys.IDE_VIEW );
+ if( view != null && project != null )
+ {
+ ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance( project ).getFileIndex();
+ PsiDirectory[] dirs = view.getDirectories();
+ for( PsiDirectory dir : dirs )
+ {
+ if( projectFileIndex.isInSourceContent( dir.getVirtualFile() ) && JavaDirectoryService.getInstance().getPackage( dir ) != null )
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/ZestCreateActionGroup.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/ZestCreateActionGroup.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/ZestCreateActionGroup.java
deleted file mode 100644
index d53e0e1..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/actions/ZestCreateActionGroup.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.common.actions;
-
-import com.intellij.ide.IdeView;
-import com.intellij.openapi.actionSystem.*;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectFileIndex;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.psi.JavaDirectoryService;
-import com.intellij.psi.PsiDirectory;
-
-import static org.apache.polygene.ide.plugin.idea.common.resource.PolygeneResourceBundle.message;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneCreateActionGroup extends DefaultActionGroup
-{
- public PolygeneCreateActionGroup()
- {
- super( message( "polygene.action.group.title" ), true );
- getTemplatePresentation().setDescription( message( "polygene.action.group.description" ) );
- }
-
- public void update( AnActionEvent e )
- {
- Presentation presentation = e.getPresentation();
- presentation.setVisible( shouldActionGroupVisible( e ) );
- }
-
- private boolean shouldActionGroupVisible( AnActionEvent e )
- {
- Module module = e.getData( LangDataKeys.MODULE );
- if( module == null )
- {
- return false;
- }
-
- // TODO: Enable this once PolygeneFacet can be automatically added/removed
-// if( PolygeneFacet.getInstance( module ) == null )
-// {
-// return false;
-// }
-
- // Are we on IDE View and under project source folder?
- Project project = e.getData( PlatformDataKeys.PROJECT );
- IdeView view = e.getData( LangDataKeys.IDE_VIEW );
- if( view != null && project != null )
- {
- ProjectFileIndex projectFileIndex = ProjectRootManager.getInstance( project ).getFileIndex();
- PsiDirectory[] dirs = view.getDirectories();
- for( PsiDirectory dir : dirs )
- {
- if( projectFileIndex.isInSourceContent( dir.getVirtualFile() ) && JavaDirectoryService.getInstance().getPackage( dir ) != null )
- {
- return true;
- }
- }
- }
-
- return false;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacet.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacet.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacet.java
new file mode 100644
index 0000000..7342707
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacet.java
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.common.facet;
+
+import com.intellij.facet.Facet;
+import com.intellij.facet.FacetManager;
+import com.intellij.facet.FacetType;
+import com.intellij.openapi.module.Module;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneFacet extends Facet<PolygeneFacetConfiguration>
+{
+ public PolygeneFacet( @NotNull FacetType facetType,
+ @NotNull Module module,
+ String name,
+ @NotNull PolygeneFacetConfiguration configuration,
+ Facet underlyingFacet
+ )
+ {
+ super( facetType, module, name, configuration, underlyingFacet );
+ }
+
+ @Nullable
+ public static PolygeneFacet getInstance( @NotNull Module module )
+ {
+ return FacetManager.getInstance( module ).getFacetByType( PolygeneFacetType.ID );
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetConfiguration.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetConfiguration.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetConfiguration.java
new file mode 100644
index 0000000..6a6f28e
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetConfiguration.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.common.facet;
+
+import com.intellij.facet.FacetConfiguration;
+import com.intellij.facet.ui.FacetEditorContext;
+import com.intellij.facet.ui.FacetEditorTab;
+import com.intellij.facet.ui.FacetValidatorsManager;
+import com.intellij.openapi.util.InvalidDataException;
+import com.intellij.openapi.util.WriteExternalException;
+import org.jdom.Element;
+import org.apache.polygene.ide.plugin.idea.common.facet.ui.PolygeneFacetEditorTab;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneFacetConfiguration
+ implements FacetConfiguration
+{
+ public FacetEditorTab[] createEditorTabs( FacetEditorContext editorContext,
+ FacetValidatorsManager validatorsManager )
+ {
+ return new FacetEditorTab[]{
+ new PolygeneFacetEditorTab( editorContext )
+ };
+ }
+
+ public final void readExternal( Element element )
+ throws InvalidDataException
+ {
+ // Do nothing
+ }
+
+ public final void writeExternal( Element element )
+ throws WriteExternalException
+ {
+ // Do nothing
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetType.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetType.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetType.java
new file mode 100644
index 0000000..b45de9f
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/PolygeneFacetType.java
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.common.facet;
+
+import com.intellij.facet.Facet;
+import com.intellij.facet.FacetType;
+import com.intellij.facet.FacetTypeId;
+import com.intellij.facet.autodetecting.FacetDetector;
+import com.intellij.facet.autodetecting.FacetDetectorRegistry;
+import com.intellij.openapi.fileTypes.StdFileTypes;
+import com.intellij.openapi.module.JavaModuleType;
+import com.intellij.openapi.module.Module;
+import com.intellij.openapi.module.ModuleType;
+import com.intellij.openapi.util.Condition;
+import com.intellij.openapi.vfs.VirtualFileFilter;
+import com.intellij.psi.JavaElementVisitor;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.PsiImportStatement;
+import com.intellij.psi.PsiReferenceExpression;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Collection;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneFacetType extends FacetType<PolygeneFacet, PolygeneFacetConfiguration>
+{
+ public static final FacetTypeId<PolygeneFacet> ID = new FacetTypeId<PolygeneFacet>();
+
+ public PolygeneFacetType()
+ {
+ super( ID, "PolygeneFacet", "Polygene Facet" );
+ }
+
+ public final PolygeneFacetConfiguration createDefaultConfiguration()
+ {
+ return new PolygeneFacetConfiguration();
+ }
+
+ public final PolygeneFacet createFacet( @NotNull Module module,
+ String name,
+ @NotNull PolygeneFacetConfiguration configuration,
+ @Nullable Facet underlyingFacet )
+ {
+ return new PolygeneFacet( this, module, name, configuration, underlyingFacet );
+ }
+
+ public final boolean isSuitableModuleType( ModuleType moduleType )
+ {
+ return moduleType instanceof JavaModuleType;
+ }
+
+ @Override
+ public final void registerDetectors( FacetDetectorRegistry<PolygeneFacetConfiguration> registry )
+ {
+ registry.registerOnTheFlyDetector(
+ StdFileTypes.JAVA, VirtualFileFilter.ALL, new HasPolygeneImportPackageCondition(),
+ new FacetDetector<PsiFile, PolygeneFacetConfiguration>( "PolygeneFacetDetector" )
+ {
+ @Override
+ public PolygeneFacetConfiguration detectFacet( PsiFile source,
+ Collection<PolygeneFacetConfiguration> existingConfigurations )
+ {
+ if( !existingConfigurations.isEmpty() )
+ {
+ return existingConfigurations.iterator().next();
+ }
+
+ return createDefaultConfiguration();
+ }
+ }
+ );
+ }
+
+ private static class HasPolygeneImportPackageCondition
+ implements Condition<PsiFile>
+ {
+ public final boolean value( PsiFile psiFile )
+ {
+ final boolean[] hasPolygeneImportPackage = new boolean[]{ false };
+
+ psiFile.accept( new JavaElementVisitor()
+ {
+ @Override
+ public final void visitImportStatement( PsiImportStatement statement )
+ {
+ String packageName = statement.getQualifiedName();
+ if( packageName != null && packageName.startsWith( "org.apache.polygene" ) )
+ {
+ hasPolygeneImportPackage[ 0 ] = true;
+ }
+ }
+
+ @Override
+ public void visitReferenceExpression( PsiReferenceExpression expression )
+ {
+ // Ignore
+ }
+ } );
+ return hasPolygeneImportPackage[ 0 ];
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacet.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacet.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacet.java
deleted file mode 100644
index 7342707..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacet.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.common.facet;
-
-import com.intellij.facet.Facet;
-import com.intellij.facet.FacetManager;
-import com.intellij.facet.FacetType;
-import com.intellij.openapi.module.Module;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneFacet extends Facet<PolygeneFacetConfiguration>
-{
- public PolygeneFacet( @NotNull FacetType facetType,
- @NotNull Module module,
- String name,
- @NotNull PolygeneFacetConfiguration configuration,
- Facet underlyingFacet
- )
- {
- super( facetType, module, name, configuration, underlyingFacet );
- }
-
- @Nullable
- public static PolygeneFacet getInstance( @NotNull Module module )
- {
- return FacetManager.getInstance( module ).getFacetByType( PolygeneFacetType.ID );
- }
-
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetConfiguration.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetConfiguration.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetConfiguration.java
deleted file mode 100644
index 6a6f28e..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetConfiguration.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.common.facet;
-
-import com.intellij.facet.FacetConfiguration;
-import com.intellij.facet.ui.FacetEditorContext;
-import com.intellij.facet.ui.FacetEditorTab;
-import com.intellij.facet.ui.FacetValidatorsManager;
-import com.intellij.openapi.util.InvalidDataException;
-import com.intellij.openapi.util.WriteExternalException;
-import org.jdom.Element;
-import org.apache.polygene.ide.plugin.idea.common.facet.ui.PolygeneFacetEditorTab;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneFacetConfiguration
- implements FacetConfiguration
-{
- public FacetEditorTab[] createEditorTabs( FacetEditorContext editorContext,
- FacetValidatorsManager validatorsManager )
- {
- return new FacetEditorTab[]{
- new PolygeneFacetEditorTab( editorContext )
- };
- }
-
- public final void readExternal( Element element )
- throws InvalidDataException
- {
- // Do nothing
- }
-
- public final void writeExternal( Element element )
- throws WriteExternalException
- {
- // Do nothing
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetType.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetType.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetType.java
deleted file mode 100644
index b45de9f..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ZestFacetType.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.common.facet;
-
-import com.intellij.facet.Facet;
-import com.intellij.facet.FacetType;
-import com.intellij.facet.FacetTypeId;
-import com.intellij.facet.autodetecting.FacetDetector;
-import com.intellij.facet.autodetecting.FacetDetectorRegistry;
-import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.module.JavaModuleType;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleType;
-import com.intellij.openapi.util.Condition;
-import com.intellij.openapi.vfs.VirtualFileFilter;
-import com.intellij.psi.JavaElementVisitor;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.PsiImportStatement;
-import com.intellij.psi.PsiReferenceExpression;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.Collection;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneFacetType extends FacetType<PolygeneFacet, PolygeneFacetConfiguration>
-{
- public static final FacetTypeId<PolygeneFacet> ID = new FacetTypeId<PolygeneFacet>();
-
- public PolygeneFacetType()
- {
- super( ID, "PolygeneFacet", "Polygene Facet" );
- }
-
- public final PolygeneFacetConfiguration createDefaultConfiguration()
- {
- return new PolygeneFacetConfiguration();
- }
-
- public final PolygeneFacet createFacet( @NotNull Module module,
- String name,
- @NotNull PolygeneFacetConfiguration configuration,
- @Nullable Facet underlyingFacet )
- {
- return new PolygeneFacet( this, module, name, configuration, underlyingFacet );
- }
-
- public final boolean isSuitableModuleType( ModuleType moduleType )
- {
- return moduleType instanceof JavaModuleType;
- }
-
- @Override
- public final void registerDetectors( FacetDetectorRegistry<PolygeneFacetConfiguration> registry )
- {
- registry.registerOnTheFlyDetector(
- StdFileTypes.JAVA, VirtualFileFilter.ALL, new HasPolygeneImportPackageCondition(),
- new FacetDetector<PsiFile, PolygeneFacetConfiguration>( "PolygeneFacetDetector" )
- {
- @Override
- public PolygeneFacetConfiguration detectFacet( PsiFile source,
- Collection<PolygeneFacetConfiguration> existingConfigurations )
- {
- if( !existingConfigurations.isEmpty() )
- {
- return existingConfigurations.iterator().next();
- }
-
- return createDefaultConfiguration();
- }
- }
- );
- }
-
- private static class HasPolygeneImportPackageCondition
- implements Condition<PsiFile>
- {
- public final boolean value( PsiFile psiFile )
- {
- final boolean[] hasPolygeneImportPackage = new boolean[]{ false };
-
- psiFile.accept( new JavaElementVisitor()
- {
- @Override
- public final void visitImportStatement( PsiImportStatement statement )
- {
- String packageName = statement.getQualifiedName();
- if( packageName != null && packageName.startsWith( "org.apache.polygene" ) )
- {
- hasPolygeneImportPackage[ 0 ] = true;
- }
- }
-
- @Override
- public void visitReferenceExpression( PsiReferenceExpression expression )
- {
- // Ignore
- }
- } );
- return hasPolygeneImportPackage[ 0 ];
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/PolygeneFacetEditorTab.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/PolygeneFacetEditorTab.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/PolygeneFacetEditorTab.java
new file mode 100644
index 0000000..dc4b121
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/PolygeneFacetEditorTab.java
@@ -0,0 +1,72 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.common.facet.ui;
+
+import com.intellij.facet.ui.FacetEditorContext;
+import com.intellij.facet.ui.FacetEditorTab;
+import com.intellij.openapi.options.ConfigurationException;
+import org.jetbrains.annotations.Nls;
+
+import javax.swing.*;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneFacetEditorTab extends FacetEditorTab
+{
+ private final FacetEditorContext editorContext;
+
+ public PolygeneFacetEditorTab( FacetEditorContext aContext )
+ {
+ editorContext = aContext;
+ }
+
+ @Nls
+ public final String getDisplayName()
+ {
+ return "Polygene";
+ }
+
+ public JComponent createComponent()
+ {
+ return new JPanel();
+ }
+
+ public final boolean isModified()
+ {
+ return false;
+ }
+
+ public final void apply()
+ throws ConfigurationException
+ {
+ // From UI to configuration
+ }
+
+ public final void reset()
+ {
+ // From Configuration to UI
+ }
+
+ public final void disposeUIResources()
+ {
+ // Do nothing for now
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/ZestFacetEditorTab.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/ZestFacetEditorTab.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/ZestFacetEditorTab.java
deleted file mode 100644
index dc4b121..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/facet/ui/ZestFacetEditorTab.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.common.facet.ui;
-
-import com.intellij.facet.ui.FacetEditorContext;
-import com.intellij.facet.ui.FacetEditorTab;
-import com.intellij.openapi.options.ConfigurationException;
-import org.jetbrains.annotations.Nls;
-
-import javax.swing.*;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneFacetEditorTab extends FacetEditorTab
-{
- private final FacetEditorContext editorContext;
-
- public PolygeneFacetEditorTab( FacetEditorContext aContext )
- {
- editorContext = aContext;
- }
-
- @Nls
- public final String getDisplayName()
- {
- return "Polygene";
- }
-
- public JComponent createComponent()
- {
- return new JPanel();
- }
-
- public final boolean isModified()
- {
- return false;
- }
-
- public final void apply()
- throws ConfigurationException
- {
- // From UI to configuration
- }
-
- public final void reset()
- {
- // From Configuration to UI
- }
-
- public final void disposeUIResources()
- {
- // Do nothing for now
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/PolygeneResourceBundle.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/PolygeneResourceBundle.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/PolygeneResourceBundle.java
new file mode 100644
index 0000000..c5f29b4
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/PolygeneResourceBundle.java
@@ -0,0 +1,68 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.common.resource;
+
+import com.intellij.CommonBundle;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.PropertyKey;
+
+import java.lang.ref.Reference;
+import java.lang.ref.SoftReference;
+import java.util.ResourceBundle;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneResourceBundle
+{
+
+ @NonNls
+ private static final String RESOURCE_BUNDLE_NAME = "org.apache.polygene.ide.plugin.idea.common.resource.PolygeneResourceBundle";
+
+ private static Reference<ResourceBundle> BUNDLE_REF;
+
+ private PolygeneResourceBundle()
+ {
+ }
+
+ public static String message( @PropertyKey( resourceBundle = RESOURCE_BUNDLE_NAME ) String key,
+ Object... params )
+ {
+ ResourceBundle resourceBundle = getBundle();
+ return CommonBundle.message( resourceBundle, key, params );
+ }
+
+ private static ResourceBundle getBundle()
+ {
+ ResourceBundle bundle = null;
+ if( BUNDLE_REF != null )
+ {
+ bundle = BUNDLE_REF.get();
+ }
+
+ if( bundle == null )
+ {
+ bundle = ResourceBundle.getBundle( PolygeneResourceBundle.class.getName() );
+ BUNDLE_REF = new SoftReference<ResourceBundle>( bundle );
+ }
+
+ return bundle;
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/ZestResourceBundle.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/ZestResourceBundle.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/ZestResourceBundle.java
deleted file mode 100644
index c5f29b4..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/common/resource/ZestResourceBundle.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.common.resource;
-
-import com.intellij.CommonBundle;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.PropertyKey;
-
-import java.lang.ref.Reference;
-import java.lang.ref.SoftReference;
-import java.util.ResourceBundle;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneResourceBundle
-{
-
- @NonNls
- private static final String RESOURCE_BUNDLE_NAME = "org.apache.polygene.ide.plugin.idea.common.resource.PolygeneResourceBundle";
-
- private static Reference<ResourceBundle> BUNDLE_REF;
-
- private PolygeneResourceBundle()
- {
- }
-
- public static String message( @PropertyKey( resourceBundle = RESOURCE_BUNDLE_NAME ) String key,
- Object... params )
- {
- ResourceBundle resourceBundle = getBundle();
- return CommonBundle.message( resourceBundle, key, params );
- }
-
- private static ResourceBundle getBundle()
- {
- ResourceBundle bundle = null;
- if( BUNDLE_REF != null )
- {
- bundle = BUNDLE_REF.get();
- }
-
- if( bundle == null )
- {
- bundle = ResourceBundle.getBundle( PolygeneResourceBundle.class.getName() );
- BUNDLE_REF = new SoftReference<ResourceBundle>( bundle );
- }
-
- return bundle;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernConstants.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernConstants.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernConstants.java
new file mode 100644
index 0000000..0bbe3a1
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernConstants.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.concerns.common;
+
+import org.jetbrains.annotations.NonNls;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneConcernConstants
+{
+ public static final String QUALIFIED_NAME_CONCERNS = "org.apache.polygene.api.concern.Concerns";
+
+ public static final String QUALIFIED_NAME_CONCERN_OF = "org.apache.polygene.api.concern.ConcernOf";
+ public static final String QUALIFIED_NAME_GENERIC_CONCERN = "org.apache.polygene.api.concern.GenericConcern";
+
+ @NonNls
+ public static final String TEMPLATE_GENERIC_CONCERN_OF = "GenericConcernOf.java";
+
+ private PolygeneConcernConstants()
+ {
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernUtil.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernUtil.java
new file mode 100644
index 0000000..4499143
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/PolygeneConcernUtil.java
@@ -0,0 +1,228 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.concerns.common;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.*;
+import com.intellij.psi.codeStyle.JavaCodeStyleManager;
+import com.intellij.psi.search.GlobalSearchScope;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+
+import static com.intellij.codeInsight.AnnotationUtil.findAnnotation;
+import static java.util.Collections.emptyList;
+import static org.apache.polygene.ide.plugin.idea.common.psi.PsiAnnotationUtil.getAnnotationDefaultParameterValue;
+import static org.apache.polygene.ide.plugin.idea.common.psi.PsiAnnotationUtil.getClassReference;
+import static org.apache.polygene.ide.plugin.idea.common.psi.PsiClassUtil.getPSIClass;
+import static org.apache.polygene.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
+import static org.apache.polygene.ide.plugin.idea.concerns.common.PolygeneConcernConstants.*;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneConcernUtil
+{
+
+
+ /**
+ * @param searchContext Search context.
+ * @return {@code GenericConcern} psi class if found, {@code null} otherwise.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiClass getGenericConcernClass( @NotNull PsiElement searchContext )
+ {
+ Project project = searchContext.getProject();
+ GlobalSearchScope searchScope = determineSearchScope( searchContext );
+ return getGenericConcernClass( project, searchScope );
+ }
+
+ /**
+ * @param project project.
+ * @param scope search scope.
+ * @return {@code GenericConcern} psi class if found, {@code null} otherwise.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiClass getGenericConcernClass( @NotNull Project project,
+ @Nullable GlobalSearchScope scope )
+ {
+ JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
+ return scope != null ? psiFacade.findClass( QUALIFIED_NAME_GENERIC_CONCERN, scope ) : null;
+ }
+
+ @Nullable
+ public static PsiClass getConcernOfClass( @NotNull PsiElement searchContext )
+ {
+ Project project = searchContext.getProject();
+ GlobalSearchScope searchScope = determineSearchScope( searchContext );
+ return getConcernOfClass( project, searchScope );
+ }
+
+ @Nullable
+ public static PsiClass getConcernOfClass( @NotNull Project project,
+ @Nullable GlobalSearchScope scope )
+ {
+ JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
+ return scope != null ? psiFacade.findClass( QUALIFIED_NAME_CONCERN_OF, scope ) : null;
+ }
+
+ @Nullable
+ public static PsiAnnotation getConcernsAnnotation( @NotNull PsiElement element )
+ {
+ PsiClass psiClass = getPSIClass( element );
+ return findAnnotation( psiClass, QUALIFIED_NAME_CONCERNS );
+ }
+
+ @NotNull
+ public static PsiAnnotation addOrReplaceConcernAnnotation( @NotNull PsiModifierListOwner modifierListOwner,
+ @NotNull PsiClass concernClassToAdd )
+ {
+ Project project = modifierListOwner.getProject();
+ JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
+ PsiElementFactory factory = psiFacade.getElementFactory();
+ PsiAnnotation existingConcernsAnnotation = findAnnotation( modifierListOwner, QUALIFIED_NAME_CONCERNS );
+
+ boolean isReplace = false;
+ PsiAnnotation newConcernsAnnotation;
+ if( existingConcernsAnnotation != null )
+ {
+ // Check duplicate
+ List<PsiAnnotationMemberValue> concernsValues = getConcernsAnnotationValue( existingConcernsAnnotation );
+ for( PsiAnnotationMemberValue concernValue : concernsValues )
+ {
+ PsiJavaCodeReferenceElement concernClassReference = getConcernClassReference( concernValue );
+ if( concernClassReference == null )
+ {
+ continue;
+ }
+
+ PsiElement concernClass = concernClassReference.resolve();
+ if( concernClassToAdd.equals( concernClass ) )
+ {
+ return existingConcernsAnnotation;
+ }
+ }
+
+ isReplace = true;
+ }
+
+ String concernAnnotationText = createConcernAnnotationText( existingConcernsAnnotation, concernClassToAdd );
+ newConcernsAnnotation =
+ factory.createAnnotationFromText( concernAnnotationText, modifierListOwner );
+
+ if( isReplace )
+ {
+ // Replace @Concerns instead
+ existingConcernsAnnotation.replace( newConcernsAnnotation );
+ }
+ else
+ {
+ // @Concerns doesn't exists, add it as first child
+ PsiModifierList modifierList = modifierListOwner.getModifierList();
+ modifierList.addBefore( newConcernsAnnotation, modifierList.getFirstChild() );
+ }
+
+ // Shorten all class references if possible
+ JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance( project );
+ codeStyleManager.shortenClassReferences( newConcernsAnnotation );
+
+ return newConcernsAnnotation;
+ }
+
+ @NotNull
+ private static String createConcernAnnotationText( @Nullable PsiAnnotation concernAnnotationBase,
+ @NotNull PsiClass concernClassToAdd )
+ {
+ StringBuilder annotationTextBuilder = new StringBuilder();
+ annotationTextBuilder.append( "@" ).append( QUALIFIED_NAME_CONCERNS ).append( "( {" );
+ List<PsiAnnotationMemberValue> concernsAnnotationValue = getConcernsAnnotationValue( concernAnnotationBase );
+ for( PsiAnnotationMemberValue concernValue : concernsAnnotationValue )
+ {
+ annotationTextBuilder.append( concernValue.getText() ).append( ", " );
+ }
+ annotationTextBuilder.append( concernClassToAdd.getQualifiedName() ).append( ".class" );
+ annotationTextBuilder.append( "} )" );
+ return annotationTextBuilder.toString();
+ }
+
+ @NotNull
+ public static List<PsiAnnotationMemberValue> getConcernsAnnotationValue( @Nullable PsiAnnotation concernsAnnotation )
+ {
+ if( concernsAnnotation == null )
+ {
+ return emptyList();
+ }
+
+ String concernsQualifiedName = concernsAnnotation.getQualifiedName();
+ if( !QUALIFIED_NAME_CONCERNS.equals( concernsQualifiedName ) )
+ {
+ return emptyList();
+ }
+
+ return getAnnotationDefaultParameterValue( concernsAnnotation );
+ }
+
+ @Nullable
+ public static PsiJavaCodeReferenceElement getConcernClassReference( @NotNull PsiAnnotationMemberValue value )
+ {
+ return getClassReference( value );
+ }
+
+ /**
+ * @param psiClass psi class to check.
+ * @return {@code true} if {@code psiClass} extends {@code ConcernOf}, {@code false} if {@code psiClass} does
+ * not extends {@code ConcernOf} or {@code ConcernOf} is not found.
+ * @since 0.1
+ */
+ public static boolean isAConcern( @NotNull PsiClass psiClass )
+ {
+ if( psiClass.isInterface() )
+ {
+ return false;
+ }
+
+ PsiClass concernOfClass = getConcernOfClass( psiClass );
+ return concernOfClass != null && psiClass.isInheritor( concernOfClass, true );
+ }
+
+ /**
+ * @param psiClass psi class to check.
+ * @return {@code true} if {@code psiClass} extends {@code GenericConcern}, {@code false} if {@code psiClass} does
+ * not extends {@code GenericConcern} or {@code GenericConcern} is not found.
+ * @since 0.1
+ */
+ public static boolean isAGenericConcern( @NotNull PsiClass psiClass )
+ {
+ if( psiClass.isInterface() )
+ {
+ return false;
+ }
+
+ PsiClass genericConcern = getGenericConcernClass( psiClass );
+ return genericConcern != null && psiClass.isInheritor( genericConcern, true );
+ }
+
+ private PolygeneConcernUtil()
+ {
+ }
+}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernConstants.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernConstants.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernConstants.java
deleted file mode 100644
index 0bbe3a1..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernConstants.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.concerns.common;
-
-import org.jetbrains.annotations.NonNls;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneConcernConstants
-{
- public static final String QUALIFIED_NAME_CONCERNS = "org.apache.polygene.api.concern.Concerns";
-
- public static final String QUALIFIED_NAME_CONCERN_OF = "org.apache.polygene.api.concern.ConcernOf";
- public static final String QUALIFIED_NAME_GENERIC_CONCERN = "org.apache.polygene.api.concern.GenericConcern";
-
- @NonNls
- public static final String TEMPLATE_GENERIC_CONCERN_OF = "GenericConcernOf.java";
-
- private PolygeneConcernConstants()
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernUtil.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernUtil.java
deleted file mode 100644
index 4499143..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/concerns/common/ZestConcernUtil.java
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.concerns.common;
-
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.JavaCodeStyleManager;
-import com.intellij.psi.search.GlobalSearchScope;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.List;
-
-import static com.intellij.codeInsight.AnnotationUtil.findAnnotation;
-import static java.util.Collections.emptyList;
-import static org.apache.polygene.ide.plugin.idea.common.psi.PsiAnnotationUtil.getAnnotationDefaultParameterValue;
-import static org.apache.polygene.ide.plugin.idea.common.psi.PsiAnnotationUtil.getClassReference;
-import static org.apache.polygene.ide.plugin.idea.common.psi.PsiClassUtil.getPSIClass;
-import static org.apache.polygene.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
-import static org.apache.polygene.ide.plugin.idea.concerns.common.PolygeneConcernConstants.*;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneConcernUtil
-{
-
-
- /**
- * @param searchContext Search context.
- * @return {@code GenericConcern} psi class if found, {@code null} otherwise.
- * @since 0.1
- */
- @Nullable
- public static PsiClass getGenericConcernClass( @NotNull PsiElement searchContext )
- {
- Project project = searchContext.getProject();
- GlobalSearchScope searchScope = determineSearchScope( searchContext );
- return getGenericConcernClass( project, searchScope );
- }
-
- /**
- * @param project project.
- * @param scope search scope.
- * @return {@code GenericConcern} psi class if found, {@code null} otherwise.
- * @since 0.1
- */
- @Nullable
- public static PsiClass getGenericConcernClass( @NotNull Project project,
- @Nullable GlobalSearchScope scope )
- {
- JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
- return scope != null ? psiFacade.findClass( QUALIFIED_NAME_GENERIC_CONCERN, scope ) : null;
- }
-
- @Nullable
- public static PsiClass getConcernOfClass( @NotNull PsiElement searchContext )
- {
- Project project = searchContext.getProject();
- GlobalSearchScope searchScope = determineSearchScope( searchContext );
- return getConcernOfClass( project, searchScope );
- }
-
- @Nullable
- public static PsiClass getConcernOfClass( @NotNull Project project,
- @Nullable GlobalSearchScope scope )
- {
- JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
- return scope != null ? psiFacade.findClass( QUALIFIED_NAME_CONCERN_OF, scope ) : null;
- }
-
- @Nullable
- public static PsiAnnotation getConcernsAnnotation( @NotNull PsiElement element )
- {
- PsiClass psiClass = getPSIClass( element );
- return findAnnotation( psiClass, QUALIFIED_NAME_CONCERNS );
- }
-
- @NotNull
- public static PsiAnnotation addOrReplaceConcernAnnotation( @NotNull PsiModifierListOwner modifierListOwner,
- @NotNull PsiClass concernClassToAdd )
- {
- Project project = modifierListOwner.getProject();
- JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
- PsiElementFactory factory = psiFacade.getElementFactory();
- PsiAnnotation existingConcernsAnnotation = findAnnotation( modifierListOwner, QUALIFIED_NAME_CONCERNS );
-
- boolean isReplace = false;
- PsiAnnotation newConcernsAnnotation;
- if( existingConcernsAnnotation != null )
- {
- // Check duplicate
- List<PsiAnnotationMemberValue> concernsValues = getConcernsAnnotationValue( existingConcernsAnnotation );
- for( PsiAnnotationMemberValue concernValue : concernsValues )
- {
- PsiJavaCodeReferenceElement concernClassReference = getConcernClassReference( concernValue );
- if( concernClassReference == null )
- {
- continue;
- }
-
- PsiElement concernClass = concernClassReference.resolve();
- if( concernClassToAdd.equals( concernClass ) )
- {
- return existingConcernsAnnotation;
- }
- }
-
- isReplace = true;
- }
-
- String concernAnnotationText = createConcernAnnotationText( existingConcernsAnnotation, concernClassToAdd );
- newConcernsAnnotation =
- factory.createAnnotationFromText( concernAnnotationText, modifierListOwner );
-
- if( isReplace )
- {
- // Replace @Concerns instead
- existingConcernsAnnotation.replace( newConcernsAnnotation );
- }
- else
- {
- // @Concerns doesn't exists, add it as first child
- PsiModifierList modifierList = modifierListOwner.getModifierList();
- modifierList.addBefore( newConcernsAnnotation, modifierList.getFirstChild() );
- }
-
- // Shorten all class references if possible
- JavaCodeStyleManager codeStyleManager = JavaCodeStyleManager.getInstance( project );
- codeStyleManager.shortenClassReferences( newConcernsAnnotation );
-
- return newConcernsAnnotation;
- }
-
- @NotNull
- private static String createConcernAnnotationText( @Nullable PsiAnnotation concernAnnotationBase,
- @NotNull PsiClass concernClassToAdd )
- {
- StringBuilder annotationTextBuilder = new StringBuilder();
- annotationTextBuilder.append( "@" ).append( QUALIFIED_NAME_CONCERNS ).append( "( {" );
- List<PsiAnnotationMemberValue> concernsAnnotationValue = getConcernsAnnotationValue( concernAnnotationBase );
- for( PsiAnnotationMemberValue concernValue : concernsAnnotationValue )
- {
- annotationTextBuilder.append( concernValue.getText() ).append( ", " );
- }
- annotationTextBuilder.append( concernClassToAdd.getQualifiedName() ).append( ".class" );
- annotationTextBuilder.append( "} )" );
- return annotationTextBuilder.toString();
- }
-
- @NotNull
- public static List<PsiAnnotationMemberValue> getConcernsAnnotationValue( @Nullable PsiAnnotation concernsAnnotation )
- {
- if( concernsAnnotation == null )
- {
- return emptyList();
- }
-
- String concernsQualifiedName = concernsAnnotation.getQualifiedName();
- if( !QUALIFIED_NAME_CONCERNS.equals( concernsQualifiedName ) )
- {
- return emptyList();
- }
-
- return getAnnotationDefaultParameterValue( concernsAnnotation );
- }
-
- @Nullable
- public static PsiJavaCodeReferenceElement getConcernClassReference( @NotNull PsiAnnotationMemberValue value )
- {
- return getClassReference( value );
- }
-
- /**
- * @param psiClass psi class to check.
- * @return {@code true} if {@code psiClass} extends {@code ConcernOf}, {@code false} if {@code psiClass} does
- * not extends {@code ConcernOf} or {@code ConcernOf} is not found.
- * @since 0.1
- */
- public static boolean isAConcern( @NotNull PsiClass psiClass )
- {
- if( psiClass.isInterface() )
- {
- return false;
- }
-
- PsiClass concernOfClass = getConcernOfClass( psiClass );
- return concernOfClass != null && psiClass.isInheritor( concernOfClass, true );
- }
-
- /**
- * @param psiClass psi class to check.
- * @return {@code true} if {@code psiClass} extends {@code GenericConcern}, {@code false} if {@code psiClass} does
- * not extends {@code GenericConcern} or {@code GenericConcern} is not found.
- * @since 0.1
- */
- public static boolean isAGenericConcern( @NotNull PsiClass psiClass )
- {
- if( psiClass.isInterface() )
- {
- return false;
- }
-
- PsiClass genericConcern = getGenericConcernClass( psiClass );
- return genericConcern != null && psiClass.isInheritor( genericConcern, true );
- }
-
- private PolygeneConcernUtil()
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationConstants.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationConstants.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationConstants.java
new file mode 100644
index 0000000..25c1267
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationConstants.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.injections.invocation.common;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneInvocationAnnotationConstants
+{
+ public static final String QUALIFIED_NAME_INVOCATION_ANNOTATION = "org.apache.polygene.api.injection.scope.Invocation";
+
+ private PolygeneInvocationAnnotationConstants()
+ {
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationUtil.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationUtil.java
new file mode 100644
index 0000000..334918d
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/PolygeneInvocationAnnotationUtil.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.injections.invocation.common;
+
+import com.intellij.psi.*;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import static com.intellij.codeInsight.AnnotationUtil.findAnnotation;
+import static com.intellij.psi.PsiModifier.STATIC;
+import static org.apache.polygene.ide.plugin.idea.common.psi.PsiClassUtil.getPSIClass;
+import static org.apache.polygene.ide.plugin.idea.injections.invocation.common.PolygeneInvocationAnnotationConstants.QUALIFIED_NAME_INVOCATION_ANNOTATION;
+import static org.apache.polygene.ide.plugin.idea.injections.invocation.common.PolygeneInvocationAnnotationUtil.InvocationAnnotationDeclarationValidationResult.*;
+import static org.apache.polygene.ide.plugin.idea.injections.structure.common.PolygeneStructureAnnotationUtil.isInjecteableByStructureAnnotation;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneInvocationAnnotationUtil
+{
+ /**
+ * Returns {@code @Invocation} annotation if exists.
+ *
+ * @param modifierListOwner modifier list owner to process.
+ * @return {@code @Invocation} annotation if exists, {@code null} otherwise.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiAnnotation getInvocationAnnotation( @NotNull PsiModifierListOwner modifierListOwner )
+ {
+ return findAnnotation( modifierListOwner, QUALIFIED_NAME_INVOCATION_ANNOTATION );
+ }
+
+ /**
+ * @param psiClass psi class to check.
+ * @return {@code true} if the specified psiClass is injectable by invocation annotation, {@code false} otherwise.
+ */
+ public static boolean isInjectableByInvocationAnnotation( @NotNull PsiClass psiClass )
+ {
+ if( psiClass.isAnnotationType() )
+ {
+ return true;
+ }
+
+ String classQualifiedName = psiClass.getQualifiedName();
+ return "java.lang.reflect.Method".equals( classQualifiedName ) ||
+ "java.lang.reflect.AnnotatedElement".equals( classQualifiedName );
+ }
+
+ /**
+ * Validates whether the variable has {@code @Invocation} annotation declared correctly.
+ *
+ * @param variable variable to check.
+ * @return Look at {@link InvocationAnnotationDeclarationValidationResult}.
+ * @since 0.1
+ */
+ @NotNull
+ public static InvocationAnnotationDeclarationValidationResult isValidInvocationAnnotationDeclaration(
+ @NotNull PsiVariable variable )
+ {
+ PsiAnnotation invocationAnnotation = getInvocationAnnotation( variable );
+ if( invocationAnnotation == null )
+ {
+ return invalidInvocationAnnotationNotDeclared;
+ }
+
+ PsiModifierList modifierList = variable.getModifierList();
+ if( modifierList != null )
+ {
+ if( modifierList.hasModifierProperty( STATIC ) )
+ {
+ return invalidDeclaredOnStaticVariable;
+ }
+ }
+
+ // TODO: Check whether variable is either an instance of java.lang.reflect.Method or
+ // java.lang.reflect.AnnotatedElement or Annotation
+ PsiTypeElement typeElement = variable.getTypeElement();
+ if( typeElement != null )
+ {
+ PsiClass psiClass = getPSIClass( typeElement );
+ if( psiClass != null )
+ {
+ if( !isInjectableByInvocationAnnotation( psiClass ) )
+ {
+ // Can't be type that is injected by @Structure
+ if( isInjecteableByStructureAnnotation( variable ) )
+ {
+ return invalidTypeIsInjectedViaStructureAnnotation;
+ }
+
+ return invalidType;
+ }
+ }
+ }
+
+ return valid;
+ }
+
+ public enum InvocationAnnotationDeclarationValidationResult
+ {
+ invalidInvocationAnnotationNotDeclared,
+ invalidDeclaredOnStaticVariable,
+ invalidTypeIsInjectedViaStructureAnnotation,
+ invalidType,
+ valid,
+ }
+
+ private PolygeneInvocationAnnotationUtil()
+ {
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationConstants.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationConstants.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationConstants.java
deleted file mode 100644
index 25c1267..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationConstants.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.injections.invocation.common;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneInvocationAnnotationConstants
-{
- public static final String QUALIFIED_NAME_INVOCATION_ANNOTATION = "org.apache.polygene.api.injection.scope.Invocation";
-
- private PolygeneInvocationAnnotationConstants()
- {
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationUtil.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationUtil.java
deleted file mode 100644
index 334918d..0000000
--- a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/invocation/common/ZestInvocationAnnotationUtil.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
-*/
-
-package org.apache.polygene.ide.plugin.idea.injections.invocation.common;
-
-import com.intellij.psi.*;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import static com.intellij.codeInsight.AnnotationUtil.findAnnotation;
-import static com.intellij.psi.PsiModifier.STATIC;
-import static org.apache.polygene.ide.plugin.idea.common.psi.PsiClassUtil.getPSIClass;
-import static org.apache.polygene.ide.plugin.idea.injections.invocation.common.PolygeneInvocationAnnotationConstants.QUALIFIED_NAME_INVOCATION_ANNOTATION;
-import static org.apache.polygene.ide.plugin.idea.injections.invocation.common.PolygeneInvocationAnnotationUtil.InvocationAnnotationDeclarationValidationResult.*;
-import static org.apache.polygene.ide.plugin.idea.injections.structure.common.PolygeneStructureAnnotationUtil.isInjecteableByStructureAnnotation;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PolygeneInvocationAnnotationUtil
-{
- /**
- * Returns {@code @Invocation} annotation if exists.
- *
- * @param modifierListOwner modifier list owner to process.
- * @return {@code @Invocation} annotation if exists, {@code null} otherwise.
- * @since 0.1
- */
- @Nullable
- public static PsiAnnotation getInvocationAnnotation( @NotNull PsiModifierListOwner modifierListOwner )
- {
- return findAnnotation( modifierListOwner, QUALIFIED_NAME_INVOCATION_ANNOTATION );
- }
-
- /**
- * @param psiClass psi class to check.
- * @return {@code true} if the specified psiClass is injectable by invocation annotation, {@code false} otherwise.
- */
- public static boolean isInjectableByInvocationAnnotation( @NotNull PsiClass psiClass )
- {
- if( psiClass.isAnnotationType() )
- {
- return true;
- }
-
- String classQualifiedName = psiClass.getQualifiedName();
- return "java.lang.reflect.Method".equals( classQualifiedName ) ||
- "java.lang.reflect.AnnotatedElement".equals( classQualifiedName );
- }
-
- /**
- * Validates whether the variable has {@code @Invocation} annotation declared correctly.
- *
- * @param variable variable to check.
- * @return Look at {@link InvocationAnnotationDeclarationValidationResult}.
- * @since 0.1
- */
- @NotNull
- public static InvocationAnnotationDeclarationValidationResult isValidInvocationAnnotationDeclaration(
- @NotNull PsiVariable variable )
- {
- PsiAnnotation invocationAnnotation = getInvocationAnnotation( variable );
- if( invocationAnnotation == null )
- {
- return invalidInvocationAnnotationNotDeclared;
- }
-
- PsiModifierList modifierList = variable.getModifierList();
- if( modifierList != null )
- {
- if( modifierList.hasModifierProperty( STATIC ) )
- {
- return invalidDeclaredOnStaticVariable;
- }
- }
-
- // TODO: Check whether variable is either an instance of java.lang.reflect.Method or
- // java.lang.reflect.AnnotatedElement or Annotation
- PsiTypeElement typeElement = variable.getTypeElement();
- if( typeElement != null )
- {
- PsiClass psiClass = getPSIClass( typeElement );
- if( psiClass != null )
- {
- if( !isInjectableByInvocationAnnotation( psiClass ) )
- {
- // Can't be type that is injected by @Structure
- if( isInjecteableByStructureAnnotation( variable ) )
- {
- return invalidTypeIsInjectedViaStructureAnnotation;
- }
-
- return invalidType;
- }
- }
- }
-
- return valid;
- }
-
- public enum InvocationAnnotationDeclarationValidationResult
- {
- invalidInvocationAnnotationNotDeclared,
- invalidDeclaredOnStaticVariable,
- invalidTypeIsInjectedViaStructureAnnotation,
- invalidType,
- valid,
- }
-
- private PolygeneInvocationAnnotationUtil()
- {
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/b45402f2/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/service/common/PolygeneServiceAnnotationConstants.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/service/common/PolygeneServiceAnnotationConstants.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/service/common/PolygeneServiceAnnotationConstants.java
new file mode 100644
index 0000000..5a95513
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/injections/service/common/PolygeneServiceAnnotationConstants.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+*/
+
+package org.apache.polygene.ide.plugin.idea.injections.service.common;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class PolygeneServiceAnnotationConstants
+{
+ public static final String QUALIFIED_NAME_SERVICE_ANNOTATION = "org.apache.polygene.api.injection.scope.Service";
+
+ private PolygeneServiceAnnotationConstants()
+ {
+ }
+}
\ No newline at end of file