/* * Copyright 2015 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file 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 com.amazonaws.eclipse.lambda.project.listener; import org.eclipse.jdt.core.IClassFile; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaElementDelta; import org.eclipse.jdt.core.IJavaModel; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; /** * An acceptor that invokes the given visitor by traversing the incoming * IJavaElementDelta and all its affected children */ class JavaElementDeltaAcceptor { public static void accept(IJavaElementDelta delta, Visitor visitor) { if (visitor.visit(delta.getElement())) { accept(delta.getAffectedChildren(), visitor); } } private static void accept(IJavaElementDelta[] deltas, Visitor visitor) { for (IJavaElementDelta delta : deltas) { accept(delta, visitor); } } public static abstract class Visitor { private boolean visit(IJavaElement element) { switch (element.getElementType()) { case IJavaElement.JAVA_MODEL: { return visit((IJavaModel) element); } case IJavaElement.JAVA_PROJECT: { return visit((IJavaProject) element); } case IJavaElement.PACKAGE_FRAGMENT: { return visit((IPackageFragment) element); } case IJavaElement.PACKAGE_FRAGMENT_ROOT: { return visit((IPackageFragmentRoot) element); } case IJavaElement.COMPILATION_UNIT: { return visit((ICompilationUnit) element); } case IJavaElement.CLASS_FILE: { return visit((IClassFile) element); } default: return true; } } protected boolean visit(IJavaModel model) { return true; } protected boolean visit(IJavaProject project) { return true; } protected boolean visit(IPackageFragment fragment) { return true; } protected boolean visit(IPackageFragmentRoot fragmentRoot) { return true; } protected boolean visit(ICompilationUnit unit) { return true; } protected boolean visit(IClassFile clazz) { return true; } } }