@NotNull public File[] getLibraries() { return getJavaToolsBasePath() != null ? getJarsFromDirectory(getJavaToolsBasePath().resolve(Paths.get("lib", "shared")).toFile()) : new File[0]; }
@Override public void patchParameters( @NotNull JavaParameters parameters, String originalOutputDir, @NotNull GwtFacet gwtFacet) { final ParametersList programParameters = parameters.getProgramParametersList(); programParameters.add("-server"); programParameters.add("com.google.appengine.tools.development.gwt.AppEngineLauncher"); final CloudSdkService sdkService = CloudSdkService.getInstance(); CloudSdkJavaInternals sdkInternals = CloudSdkJavaInternals.getInstance(); sdkInternals.patchJavaParametersForDevServer(parameters.getVMParametersList()); // actually these jars are added by AppEngine dev server automatically. But they need to be // added to classpath before gwt-dev.jar, because otherwise wrong jsp compiler version will be // used (see IDEA-63068) if (sdkInternals.getLibraries() != null) { for (File jar : ArrayUtil.mergeArrays(sdkInternals.getLibraries(), sdkInternals.getJspLibraries())) { parameters.getClassPath().addFirst(FileUtil.toSystemIndependentName(jar.getAbsolutePath())); } } if (sdkInternals.getToolsApiJarFile() != null) { parameters.getClassPath().add(sdkInternals.getToolsApiJarFile()); } } }
private void addAppEngineSupport(Module module) { CloudSdkService sdkService = mock(CloudSdkService.class); CloudSdkJavaInternals mockSdkInternals = mock(CloudSdkJavaInternals.class); when(mockSdkInternals.getWebSchemeFile()).thenReturn(getWebSchemeFile()); CloudSdkJavaInternals.setInstance(mockSdkInternals); MutablePicoContainer applicationContainer = (MutablePicoContainer) ApplicationManager.getApplication().getPicoContainer(); applicationContainer.unregisterComponent(CloudSdkService.class.getName()); applicationContainer.registerComponentInstance(CloudSdkService.class.getName(), sdkService); FacetManager.getInstance(module) .addFacet(AppEngineStandardFacet.getFacetType(), "AppEngine", null); }
AppEngineStandardFacet facet = AppEngineStandardFacet.getAppEngineFacetByModule(module); if (facet != null) { final File file = CloudSdkJavaInternals.getInstance().getWebSchemeFile(); if (file == null) { return null;
private void setupAppEngine(AppEngineStandardLibraryPanel libraryPanel, Library library) { CloudSdkService sdkService = mock(CloudSdkService.class); CloudSdkServiceManager sdkServiceManager = mock(CloudSdkServiceManager.class); when(sdkServiceManager.getCloudSdkService()).thenReturn(sdkService); CloudSdkJavaInternals mockSdkInternals = mock(CloudSdkJavaInternals.class); when(mockSdkInternals.getLibraries()).thenReturn(new File[] {}); CloudSdkJavaInternals.setInstance(mockSdkInternals); MavenRepositoryLibraryDownloader libraryDownloader = mock(MavenRepositoryLibraryDownloader.class); when(libraryDownloader.downloadLibrary( any(Module.class), any(AppEngineStandardMavenLibrary.class))) .thenReturn(library); MutablePicoContainer applicationContainer = (MutablePicoContainer) ApplicationManager.getApplication().getPicoContainer(); applicationContainer.unregisterComponent(CloudSdkService.class.getName()); applicationContainer.registerComponentInstance(CloudSdkService.class.getName(), sdkService); applicationContainer.unregisterComponent(MavenRepositoryLibraryDownloader.class.getName()); applicationContainer.registerComponentInstance( MavenRepositoryLibraryDownloader.class.getName(), libraryDownloader); FrameworkSupportInModuleConfigurable configurable = selectFramework(AppEngineStandardFrameworkType.ID); if (libraryPanel != null && configurable instanceof AppEngineSupportConfigurable) { ((AppEngineSupportConfigurable) configurable).setAppEngineStandardLibraryPanel(libraryPanel); } }
file.accept( new JavaRecursiveElementWalkingVisitor() { CloudSdkJavaInternals sdkInternals = CloudSdkJavaInternals.getInstance();
@Nullable // TODO(eshaul) used only by AppEngineGwtServer - can be removed if GWT support is removed public File getToolsApiJarFile() { return getJavaToolsBasePath() != null ? getJavaToolsBasePath().resolve(LIB_APPENGINE_TOOLS_API_JAR).toFile() : null; }
@Override public void visitNewExpression(PsiNewExpression expression) { final PsiJavaCodeReferenceElement classReference = expression.getClassReference(); if (classReference != null) { final PsiElement resolved = classReference.resolve(); if (resolved instanceof PsiClass) { final String qualifiedName = ((PsiClass) resolved).getQualifiedName(); if (qualifiedName != null && sdkInternals.isMethodInBlacklist(qualifiedName, "new")) { final String message = "App Engine application should not create new instances of '" + qualifiedName + "' class"; problems.add( manager.createProblemDescriptor( classReference, message, isOnTheFly, LocalQuickFix.EMPTY_ARRAY, ProblemHighlightType.GENERIC_ERROR_OR_WARNING)); } } } super.visitNewExpression(expression); }
if (entry instanceof JdkOrderEntry) { final String className = ClassUtil.getJVMClassName((PsiClass) resolved); if (className != null && !sdkInternals.isClassInWhiteList(className)) { problems.add( manager.createProblemDescriptor(
@Nullable public File getWebSchemeFile() { return getJavaToolsBasePath() != null ? getJavaToolsBasePath().resolve(Paths.get("docs", "appengine-web.xsd")).toFile() : null; }
@Override public void visitMethodCallExpression(PsiMethodCallExpression expression) { final PsiReferenceExpression methodExpression = expression.getMethodExpression(); final PsiElement element = methodExpression.resolve(); if (element instanceof PsiMethod) { final PsiMethod method = (PsiMethod) element; final PsiClass psiClass = method.getContainingClass(); if (psiClass != null) { final String qualifiedName = psiClass.getQualifiedName(); final String methodName = method.getName(); if (qualifiedName != null && sdkInternals.isMethodInBlacklist(qualifiedName, methodName)) { final String message = "AppEngine application should not call '" + StringUtil.getShortName(qualifiedName) + "" + methodName + "' method"; problems.add( manager.createProblemDescriptor( methodExpression, message, isOnTheFly, LocalQuickFix.EMPTY_ARRAY, ProblemHighlightType.GENERIC_ERROR_OR_WARNING)); } } } super.visitMethodCallExpression(expression); }
@NotNull public File[] getJspLibraries() { return getJavaToolsBasePath() != null ? getJarsFromDirectory( getJavaToolsBasePath().resolve(Paths.get("lib", "shared", "jsp")).toFile()) : new File[0]; }
public void patchJavaParametersForDevServer(@NotNull ParametersList vmParameters) { if (getJavaToolsBasePath() != null) { File agentPath = getJavaToolsBasePath().resolve(Paths.get("lib", "agent", "appengine-agent.jar")).toFile(); if (agentPath.exists()) { vmParameters.add("-javaagent:" + agentPath.getAbsolutePath()); } File patchPath = getJavaToolsBasePath() .resolve(Paths.get("lib", "override", "appengine-dev-jdk-overrides.jar")) .toFile(); if (patchPath.exists()) { vmParameters.add("-Xbootclasspath/p:" + patchPath.getAbsolutePath()); } } }