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 2015/07/30 21:48:53 UTC
[54/80] zest-java git commit: Stage 2 of the namespace change. Bulk
of documentation fixed.
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/common/Qi4jSideEffectUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/common/Qi4jSideEffectUtil.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/common/Qi4jSideEffectUtil.java
new file mode 100644
index 0000000..1cd030b
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/common/Qi4jSideEffectUtil.java
@@ -0,0 +1,186 @@
+/* Copyright 2008 Edward Yakop.
+*
+* Licensed 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.zest.ide.plugin.idea.sideEffects.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.zest.ide.plugin.idea.common.psi.PsiAnnotationUtil.getAnnotationDefaultParameterValue;
+import static org.apache.zest.ide.plugin.idea.common.psi.PsiAnnotationUtil.getClassReference;
+import static org.apache.zest.ide.plugin.idea.common.psi.PsiClassUtil.getPSIClass;
+import static org.apache.zest.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
+import static org.apache.zest.ide.plugin.idea.sideEffects.common.Qi4jSideEffectConstants.*;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class Qi4jSideEffectUtil
+{
+ /**
+ * @param searchContext Search context.
+ * @return {@code GenericSideEffect} class given the search context. {@code null} if not found.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiClass getGenericSideEffectClass( @NotNull PsiElement searchContext )
+ {
+ Project project = searchContext.getProject();
+ GlobalSearchScope searchScope = determineSearchScope( searchContext );
+ return getGenericSideEffectClass( project, searchScope );
+ }
+
+ /**
+ * @param project project.
+ * @param scope search scope.
+ * @return {@code GenericSideEffect} class given {@code project} and {@code scope} parameters.
+ * Returns {@code null} if not found.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiClass getGenericSideEffectClass( @NotNull Project project,
+ @Nullable GlobalSearchScope scope )
+ {
+ JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
+ return scope == null ? null : psiFacade.findClass( QUALIFIED_NAME_GENERIC_SIDE_EFFECT, scope );
+ }
+
+ /**
+ * @param searchContext Search context.
+ * @return {@code SideEffectOf} class given the search context. {@code null} if not found.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiClass getSideEffectOfClass( @NotNull PsiElement searchContext )
+ {
+ Project project = searchContext.getProject();
+ GlobalSearchScope searchScope = determineSearchScope( searchContext );
+ return getSideEffectOfClass( project, searchScope );
+ }
+
+
+ /**
+ * @param project project.
+ * @param scope search scope.
+ * @return {@code SideEffectOf} class given {@code project} and {@code scope} parameters.
+ * Returns {@code null} if not found.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiClass getSideEffectOfClass( @NotNull Project project,
+ @Nullable GlobalSearchScope scope )
+ {
+ JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( project );
+ return scope == null ? null : psiFacade.findClass( QUALIFIED_NAME_SIDE_EFFECT_OF, scope );
+ }
+
+ /**
+ * @param elementWithinJavaClass element within java class.
+ * @return {@code @SideEffects} 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 getSideEffectsAnnotation( @NotNull PsiElement elementWithinJavaClass )
+ {
+ PsiClass psiClass = getPSIClass( elementWithinJavaClass );
+ return findAnnotation( psiClass, QUALIFIED_NAME_SIDE_EFFECTS );
+ }
+
+ /**
+ * @param annotation annotation to process.
+ * @return {@code @SideEffects} annotation value. Returns {@link Collections#emptyList()} if {@code annotation} is
+ * {@code null} or annotation is not a {@code @SideEffects} annotation.
+ * @since 0.1
+ */
+ @NotNull
+ public static List<PsiAnnotationMemberValue> getSideEffectsAnnotationValue( @Nullable PsiAnnotation annotation )
+ {
+ if( annotation == null )
+ {
+ return emptyList();
+ }
+
+ String concernsQualifiedName = annotation.getQualifiedName();
+ if( !QUALIFIED_NAME_SIDE_EFFECTS.equals( concernsQualifiedName ) )
+ {
+ return emptyList();
+ }
+
+ return getAnnotationDefaultParameterValue( annotation );
+ }
+
+ /**
+ * @param value annotation member value.
+ * @return Side effect class reference given the {@code value} parameter. Returns {@code null} if it's not a
+ * class reference.
+ * @since 0.1
+ */
+ @Nullable
+ public static PsiJavaCodeReferenceElement getSideEffectClassReference( @NotNull PsiAnnotationMemberValue value )
+ {
+ return getClassReference( value );
+ }
+
+ /**
+ * Returns a {@code boolean} indicator whether the specified {@code psiClass} is a side effect.
+ *
+ * @param psiClass class to check.
+ * @return {@code true} if {@code psiClass} is a side effect, {@code false} otherwise.
+ * @since 0.1
+ */
+ public static boolean isASideEffect( @NotNull PsiClass psiClass )
+ {
+ if( psiClass.isInterface() )
+ {
+ return false;
+ }
+
+ PsiClass sideEffectOfClass = getSideEffectOfClass( psiClass );
+ return sideEffectOfClass != null && psiClass.isInheritor( sideEffectOfClass, true );
+ }
+
+ /**
+ * @param psiClass psi class to check.
+ * @return {@code true} if {@code psiClass} inherits {@code GenericSideEffect} class, {@code false} if
+ * {@code psiClass} does
+ * not inherit {@code GenericSideEffect} or {@code GenericSideEffect} is not found.
+ * @since 0.1
+ */
+ public static boolean isAGenericSideEffect( @NotNull PsiClass psiClass )
+ {
+ if( psiClass.isInterface() )
+ {
+ return false;
+ }
+
+ PsiClass genericSideEffect = getGenericSideEffectClass( psiClass );
+ return genericSideEffect != null && psiClass.isInheritor( genericSideEffect, true );
+ }
+
+ private Qi4jSideEffectUtil()
+ {
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/inspections/SideEffectsAnnotationDeclaredCorrectlyInspection.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/inspections/SideEffectsAnnotationDeclaredCorrectlyInspection.java b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/inspections/SideEffectsAnnotationDeclaredCorrectlyInspection.java
new file mode 100644
index 0000000..3bb6a19
--- /dev/null
+++ b/tools/qidea/src/main/java/org/apache/zest/ide/plugin/idea/sideEffects/inspections/SideEffectsAnnotationDeclaredCorrectlyInspection.java
@@ -0,0 +1,175 @@
+/* Copyright 2008 Edward Yakop.
+*
+* Licensed 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.zest.ide.plugin.idea.sideEffects.inspections;
+
+import com.intellij.codeInspection.InspectionManager;
+import com.intellij.codeInspection.ProblemDescriptor;
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiAnnotation;
+import com.intellij.psi.PsiAnnotationMemberValue;
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiJavaCodeReferenceElement;
+import com.intellij.psi.search.GlobalSearchScope;
+import org.jetbrains.annotations.NotNull;
+import org.apache.zest.ide.plugin.idea.common.inspections.AbstractFix;
+import org.apache.zest.ide.plugin.idea.common.inspections.AbstractInspection;
+import org.apache.zest.ide.plugin.idea.common.resource.Qi4jResourceBundle;
+import org.apache.zest.ide.plugin.idea.sideEffects.common.Qi4jSideEffectUtil;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import static com.intellij.codeInspection.ProblemHighlightType.GENERIC_ERROR_OR_WARNING;
+import static org.apache.zest.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
+import static org.apache.zest.ide.plugin.idea.common.resource.Qi4jResourceBundle.message;
+import static org.apache.zest.ide.plugin.idea.sideEffects.common.Qi4jSideEffectUtil.*;
+
+/**
+ * @author edward.yakop@gmail.com
+ * @since 0.1
+ */
+public final class SideEffectsAnnotationDeclaredCorrectlyInspection extends AbstractInspection
+{
+ @NotNull
+ protected final String resourceBundlePrefixId()
+ {
+ return "side.effects.annotation.declared.correctly";
+ }
+
+ @NotNull
+ public final String getShortName()
+ {
+ return "SideEffectsAnnotationDeclaredCorrectlyInspection";
+ }
+
+ @Override
+ public final ProblemDescriptor[] checkClass( @NotNull PsiClass psiClass,
+ @NotNull InspectionManager manager,
+ boolean isOnTheFly )
+ {
+ // If class does not have @SideEffects, ignore
+ PsiAnnotation sideEffectsAnnotation = getSideEffectsAnnotation( psiClass );
+ if( sideEffectsAnnotation == null )
+ {
+ return null;
+ }
+
+ // If @SideEffects declared in class, suggest remove @SideEffects annotation
+ if( !psiClass.isInterface() )
+ {
+ String message = message( "side.effects.annotation.declared.correctly.error.annotation.declared.in.class" );
+ RemoveSideEffectsAnnotationFix fix = new RemoveSideEffectsAnnotationFix( sideEffectsAnnotation );
+ ProblemDescriptor problemDescriptor = manager.createProblemDescriptor( sideEffectsAnnotation, message, fix,
+ GENERIC_ERROR_OR_WARNING );
+ return new ProblemDescriptor[]{ problemDescriptor };
+ }
+
+ // If @SideEffects annotation is empty, ignore
+ List<PsiAnnotationMemberValue> sideEffectsAnnotationValue =
+ getSideEffectsAnnotationValue( sideEffectsAnnotation );
+ if( sideEffectsAnnotationValue.isEmpty() )
+ {
+ return null;
+ }
+
+ // If SideEffectOf is not resolved, ignore
+ Project project = psiClass.getProject();
+ GlobalSearchScope searchScope = determineSearchScope( psiClass );
+ PsiClass sideEffectOfClass = Qi4jSideEffectUtil.getGenericSideEffectClass( project, searchScope );
+ if( sideEffectOfClass == null )
+ {
+ return null;
+ }
+
+ List<ProblemDescriptor> problems = new LinkedList<ProblemDescriptor>();
+ for( PsiAnnotationMemberValue sideEffectClassReferenceWrapper : sideEffectsAnnotationValue )
+ {
+ PsiJavaCodeReferenceElement sideEffectClassReference =
+ getSideEffectClassReference( sideEffectClassReferenceWrapper );
+
+ // If it's not a class reference, ignore
+ if( sideEffectClassReference == null )
+ {
+ continue;
+ }
+
+ // If class reference can't be resolved, ignore
+ PsiClass sideEffectClass = (PsiClass) sideEffectClassReference.resolve();
+ if( sideEffectClass == null )
+ {
+ continue;
+ }
+
+ // If side effect class does not inherit SideEffectOf class, suggest remove that reference.
+ if( !sideEffectClass.isInheritor( sideEffectOfClass, true ) )
+ {
+ String message = Qi4jResourceBundle.message(
+ "side.effects.annotation.declared.correctly.error.side.effect.does.not.extend.side.effect.of",
+ sideEffectClass.getQualifiedName()
+ );
+
+ RemoveAnnotationValueFix fix = new RemoveAnnotationValueFix(
+ sideEffectClassReferenceWrapper, sideEffectClassReference
+ );
+ ProblemDescriptor problemDescriptor = manager.createProblemDescriptor(
+ sideEffectClassReferenceWrapper, message, fix, GENERIC_ERROR_OR_WARNING );
+ problems.add( problemDescriptor );
+ }
+ else
+ {
+ // TODO: Test whether it is a generic side effect
+ // TODO: Test whether it is a specific side effect
+ }
+ }
+
+ return problems.toArray( new ProblemDescriptor[problems.size()] );
+ }
+
+ private static class RemoveSideEffectsAnnotationFix extends AbstractFix
+ {
+ private final PsiAnnotation sideEffectsAnnotation;
+
+ private RemoveSideEffectsAnnotationFix( @NotNull PsiAnnotation sideEffectsAnnotation )
+ {
+ super( message( "side.effects.annotation.declared.correctly.fix.remove.annotation" ) );
+ this.sideEffectsAnnotation = sideEffectsAnnotation;
+ }
+
+ public final void applyFix( @NotNull Project project, @NotNull ProblemDescriptor descriptor )
+ {
+ sideEffectsAnnotation.delete();
+ }
+ }
+
+ private static class RemoveAnnotationValueFix extends AbstractFix
+ {
+ private final PsiAnnotationMemberValue annotationValueToRemove;
+
+ private RemoveAnnotationValueFix( @NotNull PsiAnnotationMemberValue annotationValueToRemove,
+ @NotNull PsiJavaCodeReferenceElement sideEffectClassReference )
+ {
+ super( message( "side.effects.annotation.declared.correctly.fix.remove.class.reference",
+ sideEffectClassReference.getQualifiedName() ) );
+ this.annotationValueToRemove = annotationValueToRemove;
+ }
+
+ public final void applyFix( @NotNull Project project, @NotNull ProblemDescriptor descriptor )
+ {
+ annotationValueToRemove.delete();
+ }
+ }
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/Qi4jApplicationComponent.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/Qi4jApplicationComponent.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/Qi4jApplicationComponent.java
deleted file mode 100644
index 8d1c37e..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/Qi4jApplicationComponent.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea;
-
-import com.intellij.codeInspection.InspectionToolProvider;
-import com.intellij.facet.FacetTypeRegistry;
-import com.intellij.ide.fileTemplates.FileTemplateDescriptor;
-import com.intellij.ide.fileTemplates.FileTemplateGroupDescriptor;
-import com.intellij.ide.fileTemplates.FileTemplateGroupDescriptorFactory;
-import com.intellij.openapi.components.ApplicationComponent;
-import com.intellij.openapi.fileTypes.FileTypeManager;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-import org.qi4j.ide.plugin.idea.appliesTo.inspections.AppliesToAnnotationDeclaredCorrectlyInspection;
-import org.qi4j.ide.plugin.idea.common.facet.Qi4jFacetType;
-import org.qi4j.ide.plugin.idea.concerns.inspections.ConcernsAnnotationDeclaredCorrectlyInspection;
-import org.qi4j.ide.plugin.idea.injections.invocation.inspections.InvocationAnnotationDeclaredCorrectlyInspection;
-import org.qi4j.ide.plugin.idea.injections.service.inspections.ServiceAnnotationDeclaredCorrectlyInspection;
-import org.qi4j.ide.plugin.idea.injections.structure.inspections.StructureAnnotationDeclaredCorrectlyInspection;
-import org.qi4j.ide.plugin.idea.mixins.inspections.MixinImplementsMixinType;
-import org.qi4j.ide.plugin.idea.mixins.inspections.MixinsAnnotationDeclaredOnMixinType;
-import org.qi4j.ide.plugin.idea.sideEffects.inspections.SideEffectsAnnotationDeclaredCorrectlyInspection;
-
-import javax.swing.*;
-
-import static org.qi4j.ide.plugin.idea.common.resource.Qi4jResourceBundle.message;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class Qi4jApplicationComponent
- implements ApplicationComponent, InspectionToolProvider, FileTemplateGroupDescriptorFactory
-{
- @NonNls
- private static String[] FILE_TEMPLATES = {
- "GenericConcernOf.java"
- };
-
- private final Qi4jFacetType qi4jFacetType;
-
- public Qi4jApplicationComponent()
- {
- qi4jFacetType = new Qi4jFacetType();
- }
-
- @NotNull
- public final String getComponentName()
- {
- return "Qi4jApplicationComponent";
- }
-
- public final void initComponent()
- {
- registerFacet();
- registerIntentions();
- }
-
- private void registerFacet()
- {
- FacetTypeRegistry facetTypeRegistry = FacetTypeRegistry.getInstance();
- facetTypeRegistry.registerFacetType( qi4jFacetType );
- }
-
- private void registerIntentions()
- {
-// IntentionManager intentionManager = IntentionManager.getInstance();
-// intentionManager.registerIntentionAndMetaData( new AddConcernOnType(), "intention.category.control.flow" );
- }
-
- public final void disposeComponent()
- {
- unregisterFacet();
- }
-
- private void unregisterFacet()
- {
- FacetTypeRegistry facetTypeRegistry = FacetTypeRegistry.getInstance();
- facetTypeRegistry.unregisterFacetType( qi4jFacetType );
- }
-
- public final Class[] getInspectionClasses()
- {
- return new Class[]{
- // Concerns
- ConcernsAnnotationDeclaredCorrectlyInspection.class,
- // Mixins
- MixinImplementsMixinType.class,
- MixinsAnnotationDeclaredOnMixinType.class,
- // Side effects
- SideEffectsAnnotationDeclaredCorrectlyInspection.class,
- // Injections
- InvocationAnnotationDeclaredCorrectlyInspection.class,
- ServiceAnnotationDeclaredCorrectlyInspection.class,
- StructureAnnotationDeclaredCorrectlyInspection.class,
- // AppliesTo
- AppliesToAnnotationDeclaredCorrectlyInspection.class
- };
- }
-
- public final FileTemplateGroupDescriptor getFileTemplatesDescriptor()
- {
- FileTemplateGroupDescriptor group = new FileTemplateGroupDescriptor(
- message( "qi4j.file.template.group.title" ), null
- );
-
- FileTypeManager fileTypeManager = FileTypeManager.getInstance();
- for( @NonNls String template : FILE_TEMPLATES )
- {
- Icon icon = fileTypeManager.getFileTypeByFileName( template ).getIcon();
- group.addTemplate( new FileTemplateDescriptor( template, icon ) );
- }
-
- return group;
- }
-
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToConstants.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToConstants.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToConstants.java
deleted file mode 100644
index 32949c5..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToConstants.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.appliesTo.common;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class Qi4jAppliesToConstants
-{
- public static final String QUALIFIED_NAME_APPLIES_TO = "org.qi4j.api.common.AppliesTo";
- public static final String QUALIFIED_NAME_APPLIES_TO_FILTER = "org.qi4j.api.common.AppliesToFilter";
-
- private Qi4jAppliesToConstants()
- {
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToUtil.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToUtil.java
deleted file mode 100644
index 3500c6f..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/common/Qi4jAppliesToUtil.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.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.qi4j.ide.plugin.idea.appliesTo.common.Qi4jAppliesToConstants.QUALIFIED_NAME_APPLIES_TO;
-import static org.qi4j.ide.plugin.idea.appliesTo.common.Qi4jAppliesToConstants.QUALIFIED_NAME_APPLIES_TO_FILTER;
-import static org.qi4j.ide.plugin.idea.common.psi.PsiAnnotationUtil.getAnnotationDefaultParameterValue;
-import static org.qi4j.ide.plugin.idea.common.psi.PsiAnnotationUtil.getClassReference;
-import static org.qi4j.ide.plugin.idea.common.psi.PsiClassUtil.getPSIClass;
-import static org.qi4j.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class Qi4jAppliesToUtil
-{
- /**
- * @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 Qi4jAppliesToUtil()
- {
- }
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/inspections/AppliesToAnnotationDeclaredCorrectlyInspection.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/inspections/AppliesToAnnotationDeclaredCorrectlyInspection.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/inspections/AppliesToAnnotationDeclaredCorrectlyInspection.java
deleted file mode 100644
index e778c68..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/appliesTo/inspections/AppliesToAnnotationDeclaredCorrectlyInspection.java
+++ /dev/null
@@ -1,292 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.appliesTo.inspections;
-
-import com.intellij.codeInspection.InspectionManager;
-import com.intellij.codeInspection.ProblemDescriptor;
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.*;
-import com.intellij.psi.search.GlobalSearchScope;
-import org.jetbrains.annotations.NotNull;
-import org.qi4j.ide.plugin.idea.common.inspections.AbstractFix;
-import org.qi4j.ide.plugin.idea.common.inspections.AbstractInspection;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import static com.intellij.codeInspection.ProblemHighlightType.GENERIC_ERROR_OR_WARNING;
-import static org.qi4j.ide.plugin.idea.appliesTo.common.Qi4jAppliesToUtil.*;
-import static org.qi4j.ide.plugin.idea.common.psi.PsiClassUtil.isImplementsInvocationHandler;
-import static org.qi4j.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
-import static org.qi4j.ide.plugin.idea.common.resource.Qi4jResourceBundle.message;
-import static org.qi4j.ide.plugin.idea.concerns.common.Qi4jConcernUtil.isAConcern;
-import static org.qi4j.ide.plugin.idea.concerns.common.Qi4jConcernUtil.isAGenericConcern;
-import static org.qi4j.ide.plugin.idea.sideEffects.common.Qi4jSideEffectUtil.isAGenericSideEffect;
-import static org.qi4j.ide.plugin.idea.sideEffects.common.Qi4jSideEffectUtil.isASideEffect;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class AppliesToAnnotationDeclaredCorrectlyInspection extends AbstractInspection
-{
- @NotNull
- protected final String resourceBundlePrefixId()
- {
- return "applies.to.annotation.declared.correctly";
- }
-
- @NotNull
- public final String getShortName()
- {
- return "AppliesToAnnotationDeclaredCorrectlyInspection";
- }
-
- @Override
- public final ProblemDescriptor[] checkClass( @NotNull PsiClass psiClass,
- @NotNull InspectionManager manager,
- boolean isOnTheFly )
- {
- PsiAnnotation appliesToAnnotation = getAppliesToAnnotation( psiClass );
- if( appliesToAnnotation == null )
- {
- // If class does not have @AppliesTo, ignore
- return null;
- }
-
- String classQualifiedName = psiClass.getQualifiedName();
- // @AppliesTo can only be declared on class
- if( psiClass.isInterface() )
- {
- // Suggest remove applies to
- String message = message(
- "applies.to.annotation.declared.correctly.error.annotation.must.be.declared.on.class"
- );
- ProblemDescriptor problemDescriptor = createRemoveAppliesToFilterProblemDescriptor(
- manager, message, appliesToAnnotation );
- return new ProblemDescriptor[]{ problemDescriptor };
- }
-
- // If @AppliesTo annotation is empty, ignore
- List<PsiAnnotationMemberValue> appliesToAnnotationValues = getAppliesToAnnotationValue( appliesToAnnotation );
- if( appliesToAnnotationValues.isEmpty() )
- {
- return null;
- }
-
- // If AppliesToFilter is not resolved, ignore
- Project project = psiClass.getProject();
- GlobalSearchScope searchScope = determineSearchScope( psiClass );
- PsiClass appliesToFilterClass = getAppliesToFilterClass( project, searchScope );
- if( appliesToFilterClass == null )
- {
- return null;
- }
-
- boolean classIsAConcern = isAConcern( psiClass );
- boolean classIsASideEffect = isASideEffect( psiClass );
- boolean classIsAGenericConcern = classIsAConcern && isAGenericConcern( psiClass );
- boolean classIsAGenericSideEffect = classIsASideEffect && isAGenericSideEffect( psiClass );
- boolean classIsAMixin = !classIsAConcern && !classIsASideEffect;
- boolean classIsAGenericMixin = classIsAMixin && isImplementsInvocationHandler( psiClass );
-
- List<ProblemDescriptor> problems = new LinkedList<ProblemDescriptor>();
- for( PsiAnnotationMemberValue appliesToAnnotationValue : appliesToAnnotationValues )
- {
- PsiJavaCodeReferenceElement appliesToValueClassReference =
- getAppliesToValueClassReference( appliesToAnnotationValue );
-
- // If it's not a class reference, ignore
- if( appliesToValueClassReference == null )
- {
- continue;
- }
-
- // If class reference can't be resolved, ignore
- PsiClass appliesToValueClass = (PsiClass) appliesToValueClassReference.resolve();
- if( appliesToValueClass == null )
- {
- continue;
- }
-
- String appliesToValueQualifiedName = appliesToValueClass.getQualifiedName();
- boolean appliesToValueIsAnAnnotation = appliesToValueClass.isAnnotationType();
- boolean appliesToValueIsImplementingAppliesToFilter =
- appliesToValueClass.isInheritor( appliesToFilterClass, true );
-
- String message = null;
- if( appliesToValueIsAnAnnotation && classIsAMixin )
- {
- // If Class is a mixin and appliesToValueClass is an annotation
- message = message(
- "applies.to.annotation.declared.correctly.error.value.is.invalid.for.mixin",
- appliesToValueQualifiedName
- );
- }
- else if( appliesToValueIsAnAnnotation || appliesToValueIsImplementingAppliesToFilter )
- {
- if( classIsAConcern && !classIsAGenericConcern )
- {
- // If psiClass is a concern but not generic concern
- message = message(
- "applies.to.annotation.declared.correctly.error.value.requires.class.to.extends.GenericConcern",
- appliesToValueQualifiedName, classQualifiedName
- );
- }
- else if( classIsASideEffect && !classIsAGenericSideEffect )
- {
- // If psiClass a side effect but not a generic side effect
- message = message(
- "applies.to.annotation.declared.correctly.error.value.requires.class.to.extends.GenericSideEffect",
- appliesToValueQualifiedName, classQualifiedName
- );
- }
- else if( appliesToValueIsImplementingAppliesToFilter && !classIsAGenericMixin )
- {
- message = message(
- "applies.to.annotation.declared.correctly.error.value.requires.class.to.implements.InvocationHandler",
- appliesToValueQualifiedName, classQualifiedName
- );
- }
- }
- else if( appliesToValueClass.isInterface() )
- {
- if( !psiClass.isInheritor( appliesToValueClass, true ) &&
- !( classIsAGenericConcern || classIsAGenericSideEffect ) )
- {
- // If psiClass does not implement that interface and it's not a generic concern or generic side effect
- if( classIsAConcern )
- {
- message = message(
- "applies.to.annotation.declared.correctly.error.value.requires.class.to.implement.interface.or.extends.GenericConcern",
- appliesToValueQualifiedName, classQualifiedName );
- }
- else if( classIsASideEffect )
- {
- message = message(
- "applies.to.annotation.declared.correctly.error.value.requires.class.to.implement.interface.or.extends.GenericSideEffect",
- appliesToValueQualifiedName, classQualifiedName );
- }
- else
- {
- message = message(
- "applies.to.annotation.declared.correctly.error.value.requires.class.to.implement.value.interface.or.implements.InvocationHandler",
- appliesToValueQualifiedName, classQualifiedName );
- }
- }
- }
- else
- {
- if( classIsAMixin )
- {
- message = message(
- "applies.to.annotation.declared.correctly.error.value.is.invalid.for.mixin",
- appliesToValueQualifiedName
- );
- }
- else
- {
- message = message(
- "applies.to.annotation.declared.correctly.error.annotation.value.is.invalid.for.non.mixin",
- appliesToValueQualifiedName
- );
- }
- }
-
- if( message != null )
- {
- ProblemDescriptor problemDescriptor = manager.createProblemDescriptor(
- appliesToAnnotationValue,
- message,
- new RemoveAnnotationValueFix( appliesToAnnotationValue, appliesToValueClassReference ),
- GENERIC_ERROR_OR_WARNING );
- problems.add( problemDescriptor );
- }
- }
-
- return problems.toArray( new ProblemDescriptor[problems.size()] );
- }
-
- @NotNull
- private ProblemDescriptor createRemoveAppliesToFilterProblemDescriptor( @NotNull InspectionManager manager,
- @NotNull String problemMessage,
- @NotNull PsiAnnotation appliesToAnnotation )
- {
- RemoveAppliesToFilterAnnotationFix fix = new RemoveAppliesToFilterAnnotationFix( appliesToAnnotation );
- return manager.createProblemDescriptor( appliesToAnnotation, problemMessage, fix, GENERIC_ERROR_OR_WARNING );
- }
-
- private static class RemoveAppliesToFilterAnnotationFix extends AbstractFix
- {
- private final PsiAnnotation appliesToFilterAnnotation;
-
- private RemoveAppliesToFilterAnnotationFix( @NotNull PsiAnnotation appliesToFilterAnnotation )
- {
- super( message( "applies.to.annotation.declared.correctly.fix.remove.annotation" ) );
- this.appliesToFilterAnnotation = appliesToFilterAnnotation;
- }
-
- public final void applyFix( @NotNull Project project, @NotNull ProblemDescriptor descriptor )
- {
- appliesToFilterAnnotation.delete();
- }
- }
-
- private static class RemoveAnnotationValueFix extends AbstractFix
- {
- private final PsiAnnotationMemberValue annotationValueToRemove;
-
- private RemoveAnnotationValueFix( @NotNull PsiAnnotationMemberValue annotationValueToRemove,
- @NotNull PsiJavaCodeReferenceElement appliesToValueClassReference )
- {
- super( message( "applies.to.annotation.declared.correctly.fix.remove.class.reference",
- appliesToValueClassReference.getQualifiedName() ) );
- this.annotationValueToRemove = annotationValueToRemove;
- }
-
- public final void applyFix( @NotNull Project project, @NotNull ProblemDescriptor descriptor )
- {
- annotationValueToRemove.delete();
- }
- }
-
- private static class ClassImplementInterfaceFix extends AbstractFix
- {
- private final PsiClass psiClass;
- private final PsiClass interfaceToImplement;
-
- private ClassImplementInterfaceFix( @NotNull PsiClass psiClass,
- @NotNull PsiClass interfaceToImplement )
- {
- super( message( "applies.to.annotation.declared.correctly.fix.remove.class.reference",
- interfaceToImplement.getQualifiedName() ) );
- this.psiClass = psiClass;
- this.interfaceToImplement = interfaceToImplement;
- }
-
- public final void applyFix( @NotNull Project project, @NotNull ProblemDescriptor descriptor )
- {
- PsiReferenceList implementList = psiClass.getImplementsList();
- if( implementList != null )
- {
-
- implementList.add( interfaceToImplement );
- }
- }
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/AbstractCreateElementActionBase.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/AbstractCreateElementActionBase.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/AbstractCreateElementActionBase.java
deleted file mode 100644
index 874fee9..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/AbstractCreateElementActionBase.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.common.actions;
-
-import com.intellij.CommonBundle;
-import com.intellij.ide.actions.CreateElementActionBase;
-import com.intellij.ide.fileTemplates.FileTemplate;
-import com.intellij.ide.fileTemplates.FileTemplateManager;
-import com.intellij.ide.fileTemplates.JavaTemplateUtil;
-import com.intellij.openapi.fileTypes.StdFileTypes;
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.module.ModuleUtil;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.Messages;
-import com.intellij.psi.*;
-import com.intellij.psi.codeStyle.CodeStyleManager;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-
-import java.util.Properties;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public abstract class AbstractCreateElementActionBase extends CreateElementActionBase
-{
- @NonNls
- private static final String NAME_TEMPLATE_PROPERTY = "NAME";
-
- protected AbstractCreateElementActionBase( String text, String description )
- {
- super( text, description, null );
- }
-
- @NotNull
- protected final PsiElement[] invokeDialog( Project project, PsiDirectory directory )
- {
- Module module = ModuleUtil.findModuleForFile( directory.getVirtualFile(), project );
- if( module == null )
- {
- return PsiElement.EMPTY_ARRAY;
- }
-
- MyInputValidator validator = doInvokeDialog( project, directory );
- return validator.getCreatedElements();
- }
-
- protected MyInputValidator doInvokeDialog( Project project, PsiDirectory directory )
- {
- MyInputValidator validator = new MyInputValidator( project, directory );
- Messages.showInputDialog( project, getDialogPrompt(), getDialogTitle(), Messages.getQuestionIcon(), "", validator );
- return validator;
- }
-
- /**
- * @return Dialog prompt.
- */
- protected abstract String getDialogPrompt();
-
- /**
- * @return Dialog title.
- */
- protected abstract String getDialogTitle();
-
- protected String getErrorTitle()
- {
- return CommonBundle.getErrorTitle();
- }
-
- protected final void checkBeforeCreate( String newName, PsiDirectory directory )
- throws IncorrectOperationException
- {
- JavaDirectoryService javaDirectoryService = JavaDirectoryService.getInstance();
- javaDirectoryService.checkCreateClass( directory, newName );
- }
-
- protected static PsiClass createClassFromTemplate( @NotNull PsiDirectory directory,
- @NotNull String className,
- @NotNull String templateName,
- @NonNls String... parameters )
- throws IncorrectOperationException
- {
- String classFileName = className + "." + StdFileTypes.JAVA.getDefaultExtension();
- PsiFile file = createFromTemplateInternal( directory, className, classFileName, templateName, parameters );
- return ( (PsiJavaFile) file ).getClasses()[ 0 ];
- }
-
- protected static PsiFile createFromTemplateInternal( @NotNull PsiDirectory directory,
- @NotNull String name,
- @NotNull String fileName,
- @NotNull String templateName,
- @NonNls String... parameters )
- throws IncorrectOperationException
- {
- // Load template
- FileTemplateManager fileTemplateManager = FileTemplateManager.getInstance();
- FileTemplate template = fileTemplateManager.getJ2eeTemplate( templateName );
-
- // Process template properties
- Properties properties = new Properties( fileTemplateManager.getDefaultProperties() );
- JavaTemplateUtil.setPackageNameAttribute( properties, directory );
- properties.setProperty( NAME_TEMPLATE_PROPERTY, name );
-
- // Add parameters
- for( int i = 0; i < parameters.length; i += 2 )
- {
- properties.setProperty( parameters[ i ], parameters[ i + 1 ] );
- }
-
- // Create text from template with specified properties
- String text;
- try
- {
- text = template.getText( properties );
- }
- catch( Exception e )
- {
- String message = "Unable to load template for " +
- fileTemplateManager.internalTemplateToSubject( templateName );
- throw new RuntimeException( message, e );
- }
-
- // Serialized text to file
- PsiManager psiManager = PsiManager.getInstance( directory.getProject() );
- PsiFileFactory fileFactory = PsiFileFactory.getInstance( directory.getProject() );
- PsiFile file = fileFactory.createFileFromText( fileName, text );
-
- // Reformat the file according to project/default style
- CodeStyleManager codeStyleManager = CodeStyleManager.getInstance( psiManager );
- codeStyleManager.reformat( file );
-
- // Add newly created file to directory
- return (PsiFile) directory.add( file );
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/Qi4jCreateActionGroup.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/Qi4jCreateActionGroup.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/Qi4jCreateActionGroup.java
deleted file mode 100644
index 3b141a3..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/actions/Qi4jCreateActionGroup.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.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.qi4j.ide.plugin.idea.common.resource.Qi4jResourceBundle.message;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class Qi4jCreateActionGroup extends DefaultActionGroup
-{
- public Qi4jCreateActionGroup()
- {
- super( message( "qi4j.action.group.title" ), true );
- getTemplatePresentation().setDescription( message( "qi4j.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 Qi4jFacet can be automatically added/removed
-// if( Qi4jFacet.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/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacet.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacet.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacet.java
deleted file mode 100644
index d03dcb0..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacet.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.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 Qi4jFacet extends Facet<Qi4jFacetConfiguration>
-{
- public Qi4jFacet( @NotNull FacetType facetType,
- @NotNull Module module,
- String name,
- @NotNull Qi4jFacetConfiguration configuration,
- Facet underlyingFacet )
- {
- super( facetType, module, name, configuration, underlyingFacet );
- }
-
- @Nullable
- public static Qi4jFacet getInstance( @NotNull Module module )
- {
- return FacetManager.getInstance( module ).getFacetByType( Qi4jFacetType.ID );
- }
-
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetConfiguration.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetConfiguration.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetConfiguration.java
deleted file mode 100644
index d3172c7..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetConfiguration.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.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.qi4j.ide.plugin.idea.common.facet.ui.Qi4jFacetEditorTab;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class Qi4jFacetConfiguration
- implements FacetConfiguration
-{
- public FacetEditorTab[] createEditorTabs( FacetEditorContext editorContext,
- FacetValidatorsManager validatorsManager )
- {
- return new FacetEditorTab[]{
- new Qi4jFacetEditorTab( 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/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java
deleted file mode 100644
index a90ecec..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/Qi4jFacetType.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.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 Qi4jFacetType extends FacetType<Qi4jFacet, Qi4jFacetConfiguration>
-{
- public static final FacetTypeId<Qi4jFacet> ID = new FacetTypeId<Qi4jFacet>();
-
- public Qi4jFacetType()
- {
- super( ID, "Qi4jFacet", "Zest Facet" );
- }
-
- public final Qi4jFacetConfiguration createDefaultConfiguration()
- {
- return new Qi4jFacetConfiguration();
- }
-
- public final Qi4jFacet createFacet( @NotNull Module module,
- String name,
- @NotNull Qi4jFacetConfiguration configuration,
- @Nullable Facet underlyingFacet )
- {
- return new Qi4jFacet( this, module, name, configuration, underlyingFacet );
- }
-
- public final boolean isSuitableModuleType( ModuleType moduleType )
- {
- return moduleType instanceof JavaModuleType;
- }
-
- @Override
- public final void registerDetectors( FacetDetectorRegistry<Qi4jFacetConfiguration> registry )
- {
- registry.registerOnTheFlyDetector(
- StdFileTypes.JAVA, VirtualFileFilter.ALL, new HasQi4jImportPackageCondition(),
- new FacetDetector<PsiFile, Qi4jFacetConfiguration>( "Qi4jFacetDetector" )
- {
- @Override
- public Qi4jFacetConfiguration detectFacet( PsiFile source,
- Collection<Qi4jFacetConfiguration> existingConfigurations )
- {
- if( !existingConfigurations.isEmpty() )
- {
- return existingConfigurations.iterator().next();
- }
-
- return createDefaultConfiguration();
- }
- }
- );
- }
-
- private static class HasQi4jImportPackageCondition
- implements Condition<PsiFile>
- {
- public final boolean value( PsiFile psiFile )
- {
- final boolean[] hasQi4jImportPackage = new boolean[]{ false };
-
- psiFile.accept( new JavaElementVisitor()
- {
- @Override
- public final void visitImportStatement( PsiImportStatement statement )
- {
- String packageName = statement.getQualifiedName();
- if( packageName != null && packageName.startsWith( "org.qi4j" ) )
- {
- hasQi4jImportPackage[ 0 ] = true;
- }
- }
-
- @Override
- public void visitReferenceExpression( PsiReferenceExpression expression )
- {
- // Ignore
- }
- } );
- return hasQi4jImportPackage[ 0 ];
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java
deleted file mode 100644
index de96adf..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/facet/ui/Qi4jFacetEditorTab.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.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 Qi4jFacetEditorTab extends FacetEditorTab
-{
- private final FacetEditorContext editorContext;
-
- public Qi4jFacetEditorTab( FacetEditorContext aContext )
- {
- editorContext = aContext;
- }
-
- @Nls
- public final String getDisplayName()
- {
- return "Zest";
- }
-
- 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/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractFix.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractFix.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractFix.java
deleted file mode 100644
index 879cca1..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractFix.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.common.inspections;
-
-import com.intellij.codeInspection.LocalQuickFix;
-import org.jetbrains.annotations.NotNull;
-
-import static org.qi4j.ide.plugin.idea.common.resource.Qi4jResourceBundle.message;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public abstract class AbstractFix
- implements LocalQuickFix
-{
- private String fixName;
-
- protected AbstractFix( @NotNull String name )
- {
- fixName = name;
- }
-
- @NotNull
- public final String getName()
- {
- return fixName;
- }
-
- @NotNull
- public final String getFamilyName()
- {
- return message( "qi4j.quick.fixes.family.name" );
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractInspection.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractInspection.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractInspection.java
deleted file mode 100644
index c268ce1..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/inspections/AbstractInspection.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.common.inspections;
-
-import com.intellij.codeHighlighting.HighlightDisplayLevel;
-import com.intellij.codeInspection.BaseJavaLocalInspectionTool;
-import org.jetbrains.annotations.Nls;
-import org.jetbrains.annotations.NotNull;
-import org.qi4j.ide.plugin.idea.common.resource.Qi4jResourceBundle;
-
-import static com.intellij.codeHighlighting.HighlightDisplayLevel.ERROR;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public abstract class AbstractInspection extends BaseJavaLocalInspectionTool
-{
- private static final String QI4J_IDEA_INSPECTIONS_NAME = "qi4j.inspections.name";
-
- @Nls @NotNull public String getGroupDisplayName()
- {
- return Qi4jResourceBundle.message( QI4J_IDEA_INSPECTIONS_NAME );
- }
-
- @NotNull
- protected abstract String resourceBundlePrefixId();
-
- @Nls @NotNull
- public final String getDisplayName()
- {
- return Qi4jResourceBundle.message( resourceBundlePrefixId() + ".name.display" );
- }
-
- @NotNull @Override
- public HighlightDisplayLevel getDefaultLevel()
- {
- return ERROR;
- }
-
- @Override
- public boolean isEnabledByDefault()
- {
- return true;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/intentions/AbstractIntention.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/intentions/AbstractIntention.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/intentions/AbstractIntention.java
deleted file mode 100644
index c66bc9f..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/intentions/AbstractIntention.java
+++ /dev/null
@@ -1,130 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.common.intentions;
-
-import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
-import com.intellij.openapi.editor.CaretModel;
-import com.intellij.openapi.editor.Editor;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.vfs.ReadonlyStatusHandler;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.util.IncorrectOperationException;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import static org.qi4j.ide.plugin.idea.common.resource.Qi4jResourceBundle.message;
-
-/**
- * This class is based from {@code com.siyeh.ipp.base.Intention}
- *
- * @author edward.yakop@gmail.com
- */
-public abstract class AbstractIntention extends PsiElementBaseIntentionAction
-{
- protected abstract boolean isIntentionValidFor( PsiElement element );
-
- protected abstract String resourceBundlePrefixId();
-
- /**
- * Implement this method to process intention.
- *
- * @param project The project in which the availability is checked.
- * @param editor The editor in which the intention will be invoked.
- * @param element The element under caret.
- */
- protected abstract void processIntention( @NotNull Project project,
- @NotNull Editor editor,
- @NotNull PsiElement element );
-
- public void invoke( @NotNull Project project, Editor editor, PsiFile file )
- throws IncorrectOperationException
- {
- if( isFileReadOnly( project, file ) )
- {
- return;
- }
-
- final PsiElement element = findMatchingElement( file, editor );
- if( element == null )
- {
- return;
- }
-
- processIntention( project, editor, element );
- }
-
- protected static boolean isFileReadOnly( @NotNull Project project, @NotNull PsiFile file )
- {
- VirtualFile virtualFile = file.getVirtualFile();
- ReadonlyStatusHandler readonlyStatusHandler = ReadonlyStatusHandler.getInstance( project );
- ReadonlyStatusHandler.OperationStatus operationStatus =
- readonlyStatusHandler.ensureFilesWritable( virtualFile );
- return operationStatus.hasReadonlyFiles();
- }
-
- @Nullable
- private PsiElement findMatchingElement( @NotNull PsiFile file, @NotNull Editor editor )
- {
- CaretModel caretModel = editor.getCaretModel();
- int position = caretModel.getOffset();
- PsiElement element = file.findElementAt( position );
- return findMatchingElement( element );
- }
-
- @Nullable
- private PsiElement findMatchingElement( @Nullable PsiElement element )
- {
- while( element != null )
- {
- if( isIntentionValidFor( element ) )
- {
- return element;
- }
- else
- {
- element = element.getParent();
- if( element instanceof PsiFile )
- {
- break;
- }
- }
- }
-
- return null;
- }
-
- @Override
- public boolean isAvailable( @NotNull Project project, Editor editor, @Nullable PsiElement element )
- {
- return isIntentionValidFor( element );
- }
-
- @NotNull
- public final String getFamilyName()
- {
- return message( resourceBundlePrefixId() + ".family.name" );
- }
-
- @NotNull
- @Override
- public final String getText()
- {
- return message( resourceBundlePrefixId() + ".name" );
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiAnnotationUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiAnnotationUtil.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiAnnotationUtil.java
deleted file mode 100644
index c8006f2..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiAnnotationUtil.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.common.psi;
-
-import com.intellij.psi.*;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import static java.util.Collections.emptyList;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public class PsiAnnotationUtil
-{
- @NotNull
- public static List<PsiAnnotationMemberValue> getAnnotationDefaultParameterValue( @Nullable PsiAnnotation annotation )
- {
- if( annotation == null )
- {
- return emptyList();
- }
-
- List<PsiAnnotationMemberValue> defaultParameterValues = new LinkedList<PsiAnnotationMemberValue>();
-
- PsiAnnotationParameterList list = annotation.getParameterList();
- PsiNameValuePair[] attributes = list.getAttributes();
- for( PsiNameValuePair valuePair : attributes )
- {
- String parameterName = valuePair.getName();
- if( parameterName == null || PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME.equals( parameterName ) )
- {
- PsiAnnotationMemberValue value = valuePair.getValue();
- if( value == null )
- {
- continue;
- }
-
- if( value instanceof PsiArrayInitializerMemberValue )
- {
- // If It's an array
- PsiArrayInitializerMemberValue valueWrapper = (PsiArrayInitializerMemberValue) value;
- PsiAnnotationMemberValue[] values = valueWrapper.getInitializers();
- for( PsiAnnotationMemberValue psiAnnotationMemberValue : values )
- {
- if( psiAnnotationMemberValue != null )
- {
- defaultParameterValues.add( psiAnnotationMemberValue );
- }
- }
- }
- else
- {
- // If there's only one value
- defaultParameterValues.add( value );
- }
-
- break;
- }
- }
-
- return defaultParameterValues;
- }
-
- @Nullable
- public static PsiJavaCodeReferenceElement getClassReference( @NotNull PsiAnnotationMemberValue value )
- {
- if( value instanceof PsiClassObjectAccessExpression )
- {
- PsiClassObjectAccessExpression objectAccessExpression = (PsiClassObjectAccessExpression) value;
- PsiTypeElement typeElement = objectAccessExpression.getOperand();
- return typeElement.getInnermostComponentReferenceElement();
- }
-
- return null;
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiClassUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiClassUtil.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiClassUtil.java
deleted file mode 100644
index 685954a..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/PsiClassUtil.java
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.common.psi;
-
-import com.intellij.psi.*;
-import com.intellij.psi.search.GlobalSearchScope;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.lang.reflect.InvocationHandler;
-import java.util.HashSet;
-import java.util.Set;
-
-import static org.qi4j.ide.plugin.idea.common.psi.search.GlobalSearchScopeUtil.determineSearchScope;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public final class PsiClassUtil
-{
- @Nullable
- public static PsiClass getPSIClass( @NotNull PsiElement element )
- {
- if( element instanceof PsiClass )
- {
- return (PsiClass) element;
- }
-
- if( element instanceof PsiTypeElement )
- {
- PsiTypeElement psiTypeElement = (PsiTypeElement) element;
- PsiJavaCodeReferenceElement componentRef = psiTypeElement.getInnermostComponentReferenceElement();
- if( componentRef == null )
- {
- return null;
- }
-
- return (PsiClass) componentRef.resolve();
- }
-
- PsiElement context = element.getContext();
- if( context instanceof PsiClass )
- {
- return (PsiClass) context;
- }
-
- return null;
- }
-
- @NotNull
- public static Set<PsiClass> getExtends( @NotNull PsiClass psiClass )
- {
- HashSet<PsiClass> extendsClasses = new HashSet<PsiClass>();
- PsiClassType[] extendsClassTypes = psiClass.getExtendsListTypes();
- for( PsiClassType extendClassType : extendsClassTypes )
- {
- PsiClass extendClass = extendClassType.resolve();
- if( extendClass != null )
- {
- extendsClasses.add( extendClass );
- }
- }
-
- return extendsClasses;
- }
-
- /**
- * Returns all extends of the specified {@code psiClass}.
- *
- * @param psiClass class to process.
- * @return all extends of the specified {@code psiClass}.
- * @since 0.1
- */
- @NotNull
- public static Set<PsiClass> getExtendsDeep( @NotNull PsiClass psiClass )
- {
- HashSet<PsiClass> extendsClasses = new HashSet<PsiClass>();
- PsiClassType[] extendsClassTypes = psiClass.getExtendsListTypes();
- for( PsiClassType extendClassType : extendsClassTypes )
- {
- PsiClass extendClass = extendClassType.resolve();
- if( extendClass != null )
- {
- extendsClasses.add( extendClass );
- extendsClasses.addAll( getExtendsDeep( extendClass ) );
- }
- }
-
- return extendsClasses;
- }
-
- /**
- * @param psiClass Psi class to check.
- * @return {@code true} if psi class implements {@code InvocationHandler}, {@code false} otherwise.
- * @see InvocationHandler
- */
- public static boolean isImplementsInvocationHandler( @NotNull PsiClass psiClass )
- {
- if( psiClass.isInterface() )
- {
- return false;
- }
-
- GlobalSearchScope searchScope = determineSearchScope( psiClass );
- assert searchScope != null;
-
- JavaPsiFacade psiFacade = JavaPsiFacade.getInstance( psiClass.getProject() );
- PsiClass invocationHandler = psiFacade.findClass( "java.lang.reflect.InvocationHandler", searchScope );
- assert invocationHandler != null;
-
- return psiClass.isInheritor( invocationHandler, true );
- }
-
- private PsiClassUtil()
- {
- }
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/search/GlobalSearchScopeUtil.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/search/GlobalSearchScopeUtil.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/search/GlobalSearchScopeUtil.java
deleted file mode 100644
index f0437e2..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/psi/search/GlobalSearchScopeUtil.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.ide.plugin.idea.common.psi.search;
-
-import com.intellij.openapi.module.Module;
-import com.intellij.openapi.project.Project;
-import com.intellij.openapi.roots.ProjectRootManager;
-import com.intellij.openapi.vfs.VirtualFile;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.search.GlobalSearchScope;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import static com.intellij.openapi.module.ModuleUtil.findModuleForPsiElement;
-import static org.qi4j.ide.plugin.idea.common.vfs.VirtualFileUtil.getVirtualFile;
-
-/**
- * @author edward.yakop@gmail.com
- * @since 0.1
- */
-public class GlobalSearchScopeUtil
-{
- /**
- * Determine search scope given a psi element.
- *
- * @param psiElement context.
- * @return Search scope given psi class.
- * @since 0.1
- */
- @Nullable
- public static GlobalSearchScope determineSearchScope( @NotNull PsiElement psiElement )
- {
- VirtualFile classVirtualFile = getVirtualFile( psiElement );
- if( classVirtualFile == null )
- {
- return null;
- }
-
- Module module = findModuleForPsiElement( psiElement );
- if( module == null )
- {
- return null;
- }
-
- Project project = psiElement.getProject();
- ProjectRootManager projectRootManager = ProjectRootManager.getInstance( project );
- boolean includeTestClasses = projectRootManager.getFileIndex().isInTestSourceContent( classVirtualFile );
- return module.getModuleWithDependenciesAndLibrariesScope( includeTestClasses );
- }
-
-}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/fc41bb18/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.java
----------------------------------------------------------------------
diff --git a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.java b/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.java
deleted file mode 100644
index 6827b23..0000000
--- a/tools/qidea/src/main/java/org/qi4j/ide/plugin/idea/common/resource/Qi4jResourceBundle.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/* Copyright 2008 Edward Yakop.
-*
-* Licensed 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.qi4j.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 Qi4jResourceBundle
-{
-
- @NonNls
- private static final String RESOURCE_BUNDLE_NAME = "org.qi4j.ide.plugin.idea.common.resource.Qi4jResourceBundle";
-
- private static Reference<ResourceBundle> BUNDLE_REF;
-
- private Qi4jResourceBundle()
- {
- }
-
- 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( Qi4jResourceBundle.class.getName() );
- BUNDLE_REF = new SoftReference<ResourceBundle>( bundle );
- }
-
- return bundle;
- }
-}