/* * Copyright 2013 Guidewire Software, Inc. */ package gw.compiler.ij.processors; import gw.lang.parser.statements.IUsesStatement; import gw.lang.reflect.INamespaceType; import gw.lang.reflect.IType; import gw.lang.reflect.TypeSystem; public class UsesStatementsDependencyCollector { public static void collect(IUsesStatement usesStatement, DependencySink sink) { final String typeName = usesStatement.getTypeName(); if (typeName.endsWith("*")) { processMultipleImport(typeName, sink); } else { processSingleImport(typeName, sink); } } private static void processMultipleImport(String typeName, DependencySink sink) { sink.addNamespace(typeName.substring(0, typeName.lastIndexOf('.'))); } private static void processSingleImport(String typeName, DependencySink sink) { final IType type = TypeSystem.getByFullNameIfValid(typeName); if (type != null && !(type instanceof INamespaceType)) { sink.addType(type); processPackageSegment(typeName, sink); } } private static void processPackageSegment(String packageStatement, DependencySink sink) { int i = packageStatement.lastIndexOf('.'); while (i >= 0) { packageStatement = packageStatement.substring(0, i); IType type = TypeSystem.getByFullNameIfValid(packageStatement); if (type != null && !(type instanceof INamespaceType)) { sink.addType(type); } i = packageStatement.lastIndexOf('.'); } } }